[cig-commits] commit:

Mercurial hg at geodynamics.org
Mon Nov 24 11:58:08 PST 2008


changeset:   2:5667007f4799
user:        SteveQuenette
date:        Wed Oct 10 07:21:38 2007 +0000
files:       Geometry/makefile Geometry/src/BlockGeometry.c Geometry/src/BlockGeometry.h Geometry/src/BlockGeometry.meta Geometry/src/ComplexMath.c Geometry/src/ComplexMath.h Geometry/src/ComplexVectorMath.c Geometry/src/ComplexVectorMath.h Geometry/src/Delaunay.c Geometry/src/Delaunay.h Geometry/src/Delaunay.meta Geometry/src/Dimension.c Geometry/src/Dimension.h Geometry/src/Edge.c Geometry/src/Edge.h Geometry/src/Finalise.c Geometry/src/Finalise.h Geometry/src/FullTensorMath.c Geometry/src/FullTensorMath.h Geometry/src/Geometry.h Geometry/src/GeometryClass.c Geometry/src/GeometryClass.h Geometry/src/GeometryClass.meta Geometry/src/Hex.c Geometry/src/Hex.h Geometry/src/IJK26Topology.c Geometry/src/IJK26Topology.h Geometry/src/IJK26Topology.meta Geometry/src/IJK6Topology.c Geometry/src/IJK6Topology.h Geometry/src/IJK6Topology.meta Geometry/src/IJKTopology.c Geometry/src/IJKTopology.h Geometry/src/IJKTopology.meta Geometry/src/Init.c Geometry/src/Init.h Geometry/src/IrregGeometry.c Geometry/src/IrregGeometry.h Geometry/src/IrregGeometry.meta Geometry/src/IrregTopology.c Geometry/src/IrregTopology.h Geometry/src/IrregTopology.meta Geometry/src/Line.c Geometry/src/Line.h Geometry/src/ParallelDelaunay.c Geometry/src/ParallelDelaunay.h Geometry/src/ParallelDelaunay.meta Geometry/src/Plane.c Geometry/src/Plane.h Geometry/src/QuadEdge.c Geometry/src/QuadEdge.h Geometry/src/RMatrix.c Geometry/src/RMatrix.h Geometry/src/RefinedRegionsGeometry.c Geometry/src/RefinedRegionsGeometry.h Geometry/src/RefinedRegionsGeometry.meta Geometry/src/ShellGeometry.c Geometry/src/ShellGeometry.h Geometry/src/ShellGeometry.meta Geometry/src/Simplex.c Geometry/src/Simplex.h Geometry/src/Simplex.meta Geometry/src/TensorMath.c Geometry/src/TensorMath.h Geometry/src/TensorMultMath.c Geometry/src/TensorMultMath.h Geometry/src/Topology.c Geometry/src/Topology.h Geometry/src/Topology.meta Geometry/src/TrigMath.c Geometry/src/TrigMath.h Geometry/src/VectorMath.c Geometry/src/VectorMath.h Geometry/src/isinf.h Geometry/src/makefile Geometry/src/stg_lapack.h Geometry/src/types.h Geometry/src/units.h Geometry/tests/Makefile.def Geometry/tests/data/points.xml Geometry/tests/makefile Geometry/tests/small.txt Geometry/tests/testBlockGeometry.0of1.expected Geometry/tests/testBlockGeometry.0of1.sh Geometry/tests/testBlockGeometry.c Geometry/tests/testComplexMath.0of1.expected Geometry/tests/testComplexMath.0of1.sh Geometry/tests/testComplexMath.c Geometry/tests/testComplexVectorMath.0of1.expected Geometry/tests/testComplexVectorMath.0of1.sh Geometry/tests/testComplexVectorMath.c Geometry/tests/testDelaunay.0of1.expected Geometry/tests/testDelaunay.0of1.sh Geometry/tests/testDelaunay.c Geometry/tests/testDimensionMacros.0of1.expected Geometry/tests/testDimensionMacros.0of1.sh Geometry/tests/testDimensionMacros.c Geometry/tests/testEdge.0of1.expected Geometry/tests/testEdge.0of1.sh Geometry/tests/testEdge.c Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected Geometry/tests/testFullTensorMath.0of1.expected Geometry/tests/testFullTensorMath.0of1.sh Geometry/tests/testFullTensorMath.c Geometry/tests/testIJK26Topology.0of1.expected Geometry/tests/testIJK26Topology.0of1.sh Geometry/tests/testIJK26Topology.c Geometry/tests/testIJK6Topology.0of1.expected Geometry/tests/testIJK6Topology.0of1.sh Geometry/tests/testIJK6Topology.c Geometry/tests/testIrregGeometry.0of1.expected Geometry/tests/testIrregGeometry.0of1.sh Geometry/tests/testIrregGeometry.c Geometry/tests/testLine.0of1.expected Geometry/tests/testLine.0of1.sh Geometry/tests/testLine.c Geometry/tests/testParallelDelaunay.0of1.expected Geometry/tests/testParallelDelaunay.0of1.sh Geometry/tests/testParallelDelaunay.0of2.expected Geometry/tests/testParallelDelaunay.0of2.sh Geometry/tests/testParallelDelaunay.c Geometry/tests/testPlane.0of1.expected Geometry/tests/testPlane.0of1.sh Geometry/tests/testPlane.c Geometry/tests/testRMatrix.c Geometry/tests/testRefinedRegionsGeometry.0of1.expected Geometry/tests/testRefinedRegionsGeometry.0of1.sh Geometry/tests/testRefinedRegionsGeometry.c Geometry/tests/testShellGeometry.0of1.expected Geometry/tests/testShellGeometry.0of1.sh Geometry/tests/testShellGeometry.c Geometry/tests/testTensorMath.0of1.expected Geometry/tests/testTensorMath.0of1.sh Geometry/tests/testTensorMath.c Geometry/tests/testTensorMultMath.0of1.expected Geometry/tests/testTensorMultMath.0of1.sh Geometry/tests/testTensorMultMath.c Geometry/tests/testTrigMath.0of1.expected Geometry/tests/testTrigMath.0of1.sh Geometry/tests/testTrigMath.c Geometry/tests/testVectorMath.0of1.expected Geometry/tests/testVectorMath.0of1.sh Geometry/tests/testVectorMath.c Makefile.system Makefile.vmake Mesh/Python/Mesh.py Mesh/Python/__init__.py Mesh/Python/makefile Mesh/makefile Mesh/src/CartesianGenerator.c Mesh/src/CartesianGenerator.h Mesh/src/CartesianGenerator.meta Mesh/src/CommTopology.c Mesh/src/CommTopology.h Mesh/src/CommTopology.meta Mesh/src/CompressionAdaptor.c Mesh/src/CompressionAdaptor.h Mesh/src/CompressionAdaptor.meta Mesh/src/Decomp.c Mesh/src/Decomp.def Mesh/src/Decomp.h Mesh/src/Decomp.meta Mesh/src/DecompTransfer.c Mesh/src/DecompTransfer.h Mesh/src/DecompTransfer.meta Mesh/src/Decomp_Sync.c Mesh/src/Decomp_Sync.h Mesh/src/Decomp_Sync.meta Mesh/src/Decomp_Sync_Array.c Mesh/src/Decomp_Sync_Array.h Mesh/src/Decomp_Sync_Claim.c Mesh/src/Decomp_Sync_Claim.h Mesh/src/Decomp_Sync_Claim.meta Mesh/src/Decomp_Sync_Negotiate.c Mesh/src/Decomp_Sync_Negotiate.h Mesh/src/Decomp_Sync_Negotiate.meta Mesh/src/Decomposer.c Mesh/src/Decomposer.h Mesh/src/DictionaryGenerator.c Mesh/src/DictionaryGenerator.h Mesh/src/DictionaryGenerator.meta Mesh/src/Finalise.c Mesh/src/Finalise.h Mesh/src/Grid.c Mesh/src/Grid.h Mesh/src/Grid.meta Mesh/src/HMesh.c Mesh/src/HMesh.h Mesh/src/HMesh.meta Mesh/src/IGraph.c Mesh/src/IGraph.def Mesh/src/IGraph.h Mesh/src/IGraph.meta Mesh/src/Init.c Mesh/src/Init.h Mesh/src/Mesh.h Mesh/src/MeshAdaptor.c Mesh/src/MeshAdaptor.h Mesh/src/MeshAdaptor.meta Mesh/src/MeshClass.c Mesh/src/MeshClass.h Mesh/src/MeshClass.meta Mesh/src/MeshGenerator.c Mesh/src/MeshGenerator.h Mesh/src/MeshGenerator.meta Mesh/src/MeshTopology.c Mesh/src/MeshTopology.def Mesh/src/MeshTopology.h Mesh/src/MeshTopology.meta Mesh/src/MeshVariable.c Mesh/src/MeshVariable.h Mesh/src/MeshVariable.meta Mesh/src/Mesh_Algorithms.c Mesh/src/Mesh_Algorithms.h Mesh/src/Mesh_Algorithms.meta Mesh/src/Mesh_CentroidAlgorithms.c Mesh/src/Mesh_CentroidAlgorithms.h Mesh/src/Mesh_CentroidAlgorithms.meta Mesh/src/Mesh_CentroidType.c Mesh/src/Mesh_CentroidType.h Mesh/src/Mesh_ElementType.c Mesh/src/Mesh_ElementType.h Mesh/src/Mesh_ElementType.meta Mesh/src/Mesh_HexAlgorithms.c Mesh/src/Mesh_HexAlgorithms.h Mesh/src/Mesh_HexAlgorithms.meta Mesh/src/Mesh_HexType.c Mesh/src/Mesh_HexType.h Mesh/src/Mesh_RegularAlgorithms.c Mesh/src/Mesh_RegularAlgorithms.h Mesh/src/Mesh_RegularAlgorithms.meta Mesh/src/SurfaceAdaptor.c Mesh/src/SurfaceAdaptor.h Mesh/src/SurfaceAdaptor.meta Mesh/src/Sync.c Mesh/src/Sync.def Mesh/src/Sync.h Mesh/src/makefile Mesh/src/shortcuts.h Mesh/src/types.h Mesh/tests/data/trisurf.xml Mesh/tests/makefile Mesh/tests/testCartesianGenerator.0of1.expected Mesh/tests/testCartesianGenerator.0of1.sh Mesh/tests/testCartesianGenerator.0of2.expected Mesh/tests/testCartesianGenerator.0of2.sh Mesh/tests/testCartesianGenerator.0of3.expected Mesh/tests/testCartesianGenerator.0of3.sh Mesh/tests/testCartesianGenerator.0of4.expected Mesh/tests/testCartesianGenerator.0of4.sh Mesh/tests/testCartesianGenerator.c Mesh/tests/testDecomp.0of1.expected Mesh/tests/testDecomp.0of1.sh Mesh/tests/testDecomp.0of2.expected Mesh/tests/testDecomp.0of2.sh Mesh/tests/testDecomp.0of3.expected Mesh/tests/testDecomp.0of3.sh Mesh/tests/testDecomp.0of4.expected Mesh/tests/testDecomp.0of4.sh Mesh/tests/testDecomp.c Mesh/tests/testDecompTransfer.c.tmp Mesh/tests/testMesh.0of1.expected Mesh/tests/testMesh.0of1.sh Mesh/tests/testMesh.0of2.expected Mesh/tests/testMesh.0of2.sh Mesh/tests/testMesh.0of3.expected Mesh/tests/testMesh.0of3.sh Mesh/tests/testMesh.0of4.expected Mesh/tests/testMesh.0of4.sh Mesh/tests/testMesh.c Mesh/tests/testMesh.c.tmp Mesh/tests/testMeshTopology.c Mesh/tests/testMesh_RegularAlgorithms.c.tmp Python/Bindings/Makefile.def Python/Bindings/Mesh/Makefile.def Python/Bindings/Mesh/bindings.c Python/Bindings/Mesh/bindings.h Python/Bindings/Mesh/init.c Python/Bindings/Mesh/makefile Python/Bindings/Mesh/misc.c Python/Bindings/Mesh/misc.h Python/Bindings/__init__.py Python/Bindings/makefile Python/Makefile.def Python/__init__.py Python/makefile Shape/makefile Shape/src/BelowCosinePlane.c Shape/src/BelowCosinePlane.h Shape/src/BelowCosinePlane.meta Shape/src/BelowPlane.c Shape/src/BelowPlane.h Shape/src/BelowPlane.meta Shape/src/Box.c Shape/src/Box.h Shape/src/Box.meta Shape/src/ConvexHull.c Shape/src/ConvexHull.h Shape/src/ConvexHull.meta Shape/src/Cylinder.c Shape/src/Cylinder.h Shape/src/Cylinder.meta Shape/src/Everywhere.c Shape/src/Everywhere.h Shape/src/Everywhere.meta Shape/src/Finalise.c Shape/src/Finalise.h Shape/src/Init.c Shape/src/Init.h Shape/src/Intersection.c Shape/src/Intersection.h Shape/src/Intersection.meta Shape/src/PolygonShape.c Shape/src/PolygonShape.h Shape/src/PolygonShape.meta Shape/src/PythonShape.c Shape/src/PythonShape.h Shape/src/PythonShape.meta Shape/src/Shape.h Shape/src/ShapeClass.c Shape/src/ShapeClass.h Shape/src/ShapeClass.meta Shape/src/Sphere.c Shape/src/Sphere.h Shape/src/Sphere.meta Shape/src/Superellipsoid.c Shape/src/Superellipsoid.h Shape/src/Superellipsoid.meta Shape/src/Union.c Shape/src/Union.h Shape/src/Union.meta Shape/src/makefile Shape/src/types.h Shape/tests/Viewport.xml Shape/tests/expected/testBox2D.0of1.output.dat.expected Shape/tests/expected/testBox3D.0of1.output.dat.expected Shape/tests/expected/testConvexHull2D.0of1.output.dat.expected Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected Shape/tests/expected/testCylinder.0of1.output.dat.expected Shape/tests/expected/testIntersection2D.0of1.output.dat.expected Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected Shape/tests/expected/testIntersection3D.0of1.output.dat.expected Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected Shape/tests/expected/testPolygonShape3D.0of1.output.dat.expected Shape/tests/expected/testPython2D.0of1.output.dat.expected Shape/tests/expected/testPython3D.0of1.output.dat.expected Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected Shape/tests/expected/testSphere2D.0of1.output.dat.expected Shape/tests/expected/testSphere3D.0of1.output.dat.expected Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected Shape/tests/expected/testUnion2D.0of1.output.dat.expected Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected Shape/tests/expected/testUnion3D.0of1.output.dat.expected Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected Shape/tests/makefile Shape/tests/output/window.mpeg Shape/tests/testBox.xml Shape/tests/testBox2D.0of1.sh Shape/tests/testBox3D.0of1.sh Shape/tests/testConvexHull.xml Shape/tests/testConvexHull2D.0of1.sh Shape/tests/testConvexHull3D.0of1.sh Shape/tests/testConvexHull3D.xml Shape/tests/testCylinder.0of1.sh Shape/tests/testCylinder.xml Shape/tests/testIntersection.xml Shape/tests/testIntersection2D.0of1.sh Shape/tests/testIntersection2DDoubleNot.0of1.sh Shape/tests/testIntersection2DSingleNot.0of1.sh Shape/tests/testIntersection3D.0of1.sh Shape/tests/testIntersection3DDoubleNot.0of1.sh Shape/tests/testIntersection3DSingleNot.0of1.sh Shape/tests/testIntersectionDoubleNot.xml Shape/tests/testIntersectionSingleNot.xml Shape/tests/testPolygonShape.xml Shape/tests/testPolygonShape2D.0of1.sh Shape/tests/testPolygonShape3D.0of1.sh Shape/tests/testPython2D.0of1.sh Shape/tests/testPython2D.xml Shape/tests/testPython3D.0of1.sh Shape/tests/testPython3D.xml Shape/tests/testShape.c Shape/tests/testShape.xml Shape/tests/testSphere-invert.xml Shape/tests/testSphere.xml Shape/tests/testSphere2D-invert.0of1.sh Shape/tests/testSphere2D.0of1.sh Shape/tests/testSphere3D.0of1.sh Shape/tests/testSuperellipsoid.xml Shape/tests/testSuperellipsoid2D.0of1.sh Shape/tests/testSuperellipsoid3D.0of1.sh Shape/tests/testUnion.xml Shape/tests/testUnion2D.0of1.sh Shape/tests/testUnion2DSingleNot.0of1.sh Shape/tests/testUnion3D.0of1.sh Shape/tests/testUnion3DSingleNot.0of1.sh Shape/tests/testUnionSingleNot.xml StGermainDiscretisationImportVersion Swarm/makefile Swarm/src/CellLayout.c Swarm/src/CellLayout.h Swarm/src/CellLayout.meta Swarm/src/ElementCellLayout.c Swarm/src/ElementCellLayout.h Swarm/src/ElementCellLayout.meta Swarm/src/FileParticleLayout.c Swarm/src/FileParticleLayout.h Swarm/src/FileParticleLayout.meta Swarm/src/Finalise.c Swarm/src/Finalise.h Swarm/src/GaussBorderParticleLayout.c Swarm/src/GaussBorderParticleLayout.h Swarm/src/GaussBorderParticleLayout.meta Swarm/src/GaussParticleLayout.c Swarm/src/GaussParticleLayout.h Swarm/src/GaussParticleLayout.meta Swarm/src/GlobalParticleLayout.c Swarm/src/GlobalParticleLayout.h Swarm/src/GlobalParticleLayout.meta Swarm/src/Init.c Swarm/src/Init.h Swarm/src/IntegrationPoint.c Swarm/src/IntegrationPoint.h Swarm/src/LineParticleLayout.c Swarm/src/LineParticleLayout.h Swarm/src/LineParticleLayout.meta Swarm/src/ManualParticleLayout.c Swarm/src/ManualParticleLayout.h Swarm/src/ManualParticleLayout.meta Swarm/src/MeshParticleLayout.c Swarm/src/MeshParticleLayout.h Swarm/src/MeshParticleLayout.meta Swarm/src/OperatorSwarmVariable.c Swarm/src/OperatorSwarmVariable.h Swarm/src/OperatorSwarmVariable.meta Swarm/src/ParticleCommHandler.c Swarm/src/ParticleCommHandler.h Swarm/src/ParticleCommHandler.meta Swarm/src/ParticleLayout.c Swarm/src/ParticleLayout.h Swarm/src/ParticleLayout.meta Swarm/src/ParticleMovementHandler.c Swarm/src/ParticleMovementHandler.h Swarm/src/ParticleMovementHandler.meta Swarm/src/ParticleShadowSync.c Swarm/src/ParticleShadowSync.h Swarm/src/ParticleShadowSync.meta Swarm/src/PerCellParticleLayout.c Swarm/src/PerCellParticleLayout.h Swarm/src/PerCellParticleLayout.meta Swarm/src/PlaneParticleLayout.c Swarm/src/PlaneParticleLayout.h Swarm/src/PlaneParticleLayout.meta Swarm/src/Random.c Swarm/src/Random.h Swarm/src/RandomParticleLayout.c Swarm/src/RandomParticleLayout.h Swarm/src/RandomParticleLayout.meta Swarm/src/ShadowInfo.h Swarm/src/SingleCellLayout.c Swarm/src/SingleCellLayout.h Swarm/src/SingleCellLayout.meta Swarm/src/SpaceFillerParticleLayout.c Swarm/src/SpaceFillerParticleLayout.h Swarm/src/SpaceFillerParticleLayout.meta Swarm/src/StandardParticle.c Swarm/src/StandardParticle.h Swarm/src/Swarm.h Swarm/src/SwarmClass.c Swarm/src/SwarmClass.h Swarm/src/SwarmClass.meta Swarm/src/SwarmDump.c Swarm/src/SwarmDump.h Swarm/src/SwarmDump.meta Swarm/src/SwarmOutput.c Swarm/src/SwarmOutput.h Swarm/src/SwarmOutput.meta Swarm/src/SwarmShapeVC.c Swarm/src/SwarmShapeVC.h Swarm/src/SwarmShapeVC.meta Swarm/src/SwarmVariable.c Swarm/src/SwarmVariable.h Swarm/src/SwarmVariable.meta Swarm/src/SwarmVariable_Register.c Swarm/src/SwarmVariable_Register.h Swarm/src/Swarm_Register.c Swarm/src/Swarm_Register.h Swarm/src/TriGaussParticleLayout.c Swarm/src/TriGaussParticleLayout.h Swarm/src/TriGaussParticleLayout.meta Swarm/src/TriSingleCellLayout.c Swarm/src/TriSingleCellLayout.h Swarm/src/TriSingleCellLayout.meta Swarm/src/UnionParticleLayout.c Swarm/src/UnionParticleLayout.h Swarm/src/UnionParticleLayout.meta Swarm/src/WithinShapeParticleLayout.c Swarm/src/WithinShapeParticleLayout.h Swarm/src/WithinShapeParticleLayout.meta Swarm/src/makefile Swarm/src/shortcuts.h Swarm/src/types.h Swarm/tests/Bouncer/Bouncer.c Swarm/tests/Bouncer/makefile Swarm/tests/Makefile.def Swarm/tests/SingleAttractor/SingleAttractor.c Swarm/tests/SingleAttractor/makefile Swarm/tests/Spinner/Spinner.c Swarm/tests/Spinner/makefile Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c Swarm/tests/VaryingCornerAttractors/makefile Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected Swarm/tests/makefile Swarm/tests/output/input-2007.10.10-16.02.14.xml Swarm/tests/output/input-2007.10.10-16.02.16.xml Swarm/tests/output/input-2007.10.10-16.02.17.xml Swarm/tests/output/input-2007.10.10-16.02.19.xml Swarm/tests/output/input-2007.10.10-16.02.20.xml Swarm/tests/output/input-2007.10.10-16.02.21.xml Swarm/tests/output/input-2007.10.10-17.13.09.xml Swarm/tests/output/input-2007.10.10-17.13.11.xml Swarm/tests/output/input-2007.10.10-17.13.13.xml Swarm/tests/output/input-2007.10.10-17.13.14.xml Swarm/tests/output/input-2007.10.10-17.13.15.xml Swarm/tests/output/input-2007.10.10-17.13.16.xml Swarm/tests/output/input-2007.10.10-17.14.10.xml Swarm/tests/output/input-2007.10.10-17.14.13.xml Swarm/tests/output/input-2007.10.10-17.14.14.xml Swarm/tests/output/input-2007.10.10-17.14.16.xml Swarm/tests/output/input-2007.10.10-17.14.17.xml Swarm/tests/output/input-2007.10.10-17.14.18.xml Swarm/tests/output/input.xml Swarm/tests/output/swarmOutput.00000.dat Swarm/tests/output/swarmOutput.00001.dat Swarm/tests/output/swarmOutput.00002.dat Swarm/tests/output/swarmOutput.00003.dat Swarm/tests/output/swarmOutput.00004.dat Swarm/tests/output/testSwarm.00000.dat Swarm/tests/testElementCellLayout0.0of1.expected Swarm/tests/testElementCellLayout0.0of1.sh Swarm/tests/testElementCellLayout0.0of2.expected Swarm/tests/testElementCellLayout0.0of2.sh Swarm/tests/testElementCellLayout0.1of2.expected Swarm/tests/testElementCellLayout0.1of2.sh Swarm/tests/testElementCellLayout0.c Swarm/tests/testGaussLayout.0of1.expected Swarm/tests/testGaussLayout.0of1.sh Swarm/tests/testGaussLayout.c Swarm/tests/testGaussLayoutSingleCell.0of1.expected Swarm/tests/testGaussLayoutSingleCell.0of1.sh Swarm/tests/testGaussLayoutSingleCell.c Swarm/tests/testLineParticleLayout.0of1.sh Swarm/tests/testLineParticleLayout.xml Swarm/tests/testManualParticleLayout.0of1.expected Swarm/tests/testManualParticleLayout.0of1.sh Swarm/tests/testManualParticleLayout.0of2.expected Swarm/tests/testManualParticleLayout.0of2.sh Swarm/tests/testManualParticleLayout.1of2.expected Swarm/tests/testManualParticleLayout.1of2.sh Swarm/tests/testManualParticleLayout.c Swarm/tests/testParticleCoords.c Swarm/tests/testParticleCoords.xml Swarm/tests/testSingleCellLayout0.0of1.expected Swarm/tests/testSingleCellLayout0.0of1.sh Swarm/tests/testSingleCellLayout0.c Swarm/tests/testSpaceFillerParticleLayout.0of1.sh Swarm/tests/testSpaceFillerParticleLayout.0of2.sh Swarm/tests/testSpaceFillerParticleLayout.1of2.sh Swarm/tests/testSpaceFillerParticleLayout.c Swarm/tests/testSwarm.0of1.expected Swarm/tests/testSwarm.0of1.sh Swarm/tests/testSwarm.0of2.diffs Swarm/tests/testSwarm.0of2.expected Swarm/tests/testSwarm.0of2.sh Swarm/tests/testSwarm.1of2.diffs Swarm/tests/testSwarm.1of2.expected Swarm/tests/testSwarm.1of2.sh Swarm/tests/testSwarm.c Swarm/tests/testSwarmDumpAndLoad.0of1.expected Swarm/tests/testSwarmDumpAndLoad.0of1.sh Swarm/tests/testSwarmDumpAndLoad.0of2.expected Swarm/tests/testSwarmDumpAndLoad.0of2.sh Swarm/tests/testSwarmDumpAndLoad.1of2.expected Swarm/tests/testSwarmDumpAndLoad.1of2.sh Swarm/tests/testSwarmDumpAndLoad.c Swarm/tests/testSwarmOutput.0of1.sh Swarm/tests/testSwarmOutput.0of2.sh Swarm/tests/testSwarmOutput.c Swarm/tests/testSwarmOutput.xml Swarm/tests/testSwarmParticleAdvection.c Swarm/tests/testSwarmParticleAdvectionBouncer.xml Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml Swarm/tests/testSwarmParticleAdvectionSpinner.xml Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml Swarm/tests/testSwarmParticleShadowSync.0of2.expected Swarm/tests/testSwarmParticleShadowSync.0of2.sh Swarm/tests/testSwarmParticleShadowSync.0of3.expected Swarm/tests/testSwarmParticleShadowSync.0of3.sh Swarm/tests/testSwarmParticleShadowSync.c Swarm/tests/testSwarmParticleShadowSync.xml Swarm/tests/testWithinShapeParticleLayout.0of1.expected Swarm/tests/testWithinShapeParticleLayout.0of1.sh Swarm/tests/testWithinShapeParticleLayout.0of2.expected Swarm/tests/testWithinShapeParticleLayout.0of2.sh Swarm/tests/testWithinShapeParticleLayout.1of2.expected Swarm/tests/testWithinShapeParticleLayout.1of2.sh Swarm/tests/testWithinShapeParticleLayout.c Utils/makefile Utils/src/AllElementsVC.c Utils/src/AllElementsVC.h Utils/src/AllElementsVC.meta Utils/src/AllNodesVC.c Utils/src/AllNodesVC.h Utils/src/AllNodesVC.meta Utils/src/CellRemesher.c Utils/src/CellRemesher.h Utils/src/CellRemesher.meta Utils/src/CornerVC.c Utils/src/CornerVC.h Utils/src/CornerVC.meta Utils/src/DiscretisationContext.meta Utils/src/DofLayout.c Utils/src/DofLayout.h Utils/src/DofLayout.meta Utils/src/DomainContext.c Utils/src/DomainContext.h Utils/src/EmbeddedSurface.c Utils/src/EmbeddedSurface.h Utils/src/FieldVariable.c Utils/src/FieldVariable.h Utils/src/FieldVariable.meta Utils/src/FieldVariable_Register.c Utils/src/FieldVariable_Register.h Utils/src/Finalise.c Utils/src/Finalise.h Utils/src/FrictionVC.c Utils/src/FrictionVC.h Utils/src/FrictionVC.meta Utils/src/Init.c Utils/src/Init.h Utils/src/InnerWallVC.c Utils/src/InnerWallVC.h Utils/src/InnerWallVC.meta Utils/src/LinearRegression.c Utils/src/LinearRegression.h Utils/src/MeshShapeVC.c Utils/src/MeshShapeVC.h Utils/src/MeshShapeVC.meta Utils/src/NewRemesher.c Utils/src/NewRemesher.def Utils/src/NewRemesher.h Utils/src/Operator.c Utils/src/Operator.h Utils/src/OperatorFieldVariable.c Utils/src/OperatorFieldVariable.h Utils/src/OperatorFieldVariable.meta Utils/src/RegularMeshUtils.c Utils/src/RegularMeshUtils.h Utils/src/RegularRemesher.c Utils/src/RegularRemesher.def Utils/src/RegularRemesher.h Utils/src/RegularRemesherCmpt.c Utils/src/RegularRemesherCmpt.h Utils/src/RegularRemesherCmpt.meta Utils/src/Remesher.c Utils/src/Remesher.h Utils/src/Remesher.meta Utils/src/SemiRegDeform.c Utils/src/SemiRegDeform.h Utils/src/SemiRegDeform.meta Utils/src/ShapeAdvector.c Utils/src/ShapeAdvector.h Utils/src/ShapeAdvector.meta Utils/src/SobolGenerator.c Utils/src/SobolGenerator.h Utils/src/SplitFrictionWallVC.c Utils/src/SplitFrictionWallVC.h Utils/src/SplitFrictionWallVC.meta Utils/src/StripRemesher.c Utils/src/StripRemesher.h Utils/src/StripRemesher.meta Utils/src/TimeIntegratee.c Utils/src/TimeIntegratee.h Utils/src/TimeIntegratee.meta Utils/src/TimeIntegrator.c Utils/src/TimeIntegrator.h Utils/src/TimeIntegrator.meta Utils/src/Utils.h Utils/src/WallVC.c Utils/src/WallVC.h Utils/src/WallVC.meta Utils/src/makefile Utils/src/types.h Utils/tests/Makefile.def Utils/tests/data/allVC.xml Utils/tests/data/compositeVC.xml Utils/tests/data/cornerVC.xml Utils/tests/data/wallVC.xml Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected Utils/tests/makefile Utils/tests/output/input-2007.10.10-15.21.36.xml Utils/tests/output/input-2007.10.10-17.13.05.xml Utils/tests/output/input-2007.10.10-17.14.06.xml Utils/tests/output/input.xml Utils/tests/output/testDofSave.vx.dat.0000 Utils/tests/output/testDofSave.vy.dat.0000 Utils/tests/output/testDofSave.vz.dat.0000 Utils/tests/output/testDofSave.x.dat.0000 Utils/tests/output/testDofSave.y.dat.0000 Utils/tests/output/testDofSave.z.dat.0000 Utils/tests/testAllNodesVC.0of1.expected Utils/tests/testAllNodesVC.0of1.sh Utils/tests/testAllNodesVC.0of2.expected Utils/tests/testAllNodesVC.0of2.sh Utils/tests/testAllNodesVC.0of3.expected Utils/tests/testAllNodesVC.0of3.sh Utils/tests/testAllNodesVC.1of2.expected Utils/tests/testAllNodesVC.1of2.sh Utils/tests/testAllNodesVC.1of3.expected Utils/tests/testAllNodesVC.1of3.sh Utils/tests/testAllNodesVC.2of3.expected Utils/tests/testAllNodesVC.2of3.sh Utils/tests/testAllNodesVC.c Utils/tests/testCompositeVC-dictionary.0of1.expected Utils/tests/testCompositeVC-dictionary.0of1.sh Utils/tests/testCompositeVC-dictionary.c Utils/tests/testCompositeVC.0of1.expected Utils/tests/testCompositeVC.0of1.sh Utils/tests/testCompositeVC.0of2.expected Utils/tests/testCompositeVC.0of2.sh Utils/tests/testCompositeVC.0of3.expected Utils/tests/testCompositeVC.0of3.sh Utils/tests/testCompositeVC.1of2.expected Utils/tests/testCompositeVC.1of2.sh Utils/tests/testCompositeVC.1of3.expected Utils/tests/testCompositeVC.1of3.sh Utils/tests/testCompositeVC.2of3.expected Utils/tests/testCompositeVC.2of3.sh Utils/tests/testCompositeVC.c Utils/tests/testCornerVC.0of1.expected Utils/tests/testCornerVC.0of1.sh Utils/tests/testCornerVC.0of2.expected Utils/tests/testCornerVC.0of2.sh Utils/tests/testCornerVC.0of3.expected Utils/tests/testCornerVC.0of3.sh Utils/tests/testCornerVC.1of2.expected Utils/tests/testCornerVC.1of2.sh Utils/tests/testCornerVC.1of3.expected Utils/tests/testCornerVC.1of3.sh Utils/tests/testCornerVC.2of3.expected Utils/tests/testCornerVC.2of3.sh Utils/tests/testCornerVC.c Utils/tests/testDofLayout-remap.0of1.expected Utils/tests/testDofLayout-remap.0of1.sh Utils/tests/testDofLayout-remap.c Utils/tests/testDofLayout-saveAndLoad.0of1.expected Utils/tests/testDofLayout-saveAndLoad.0of1.sh Utils/tests/testDofLayout-saveAndLoad.c Utils/tests/testDofLayout.0of1.expected Utils/tests/testDofLayout.0of1.sh Utils/tests/testDofLayout.c Utils/tests/testEmbeddedSurface.c Utils/tests/testFieldVariable_Register.0of1.expected Utils/tests/testFieldVariable_Register.0of1.sh Utils/tests/testFieldVariable_Register.c Utils/tests/testMeshCoarsener_Hexa.0of1.expected Utils/tests/testMeshCoarsener_Hexa.0of2.expected Utils/tests/testMeshCoarsener_Hexa.1of2.expected Utils/tests/testMeshCoarsener_Hexa.c Utils/tests/testOperatorFieldVariable.0of1.expected Utils/tests/testOperatorFieldVariable.0of1.sh Utils/tests/testOperatorFieldVariable.c Utils/tests/testRegularMeshUtils.0of1.expected Utils/tests/testRegularMeshUtils.0of1.sh Utils/tests/testRegularMeshUtils.0of2.expected Utils/tests/testRegularMeshUtils.0of2.sh Utils/tests/testRegularMeshUtils.1of2.expected Utils/tests/testRegularMeshUtils.1of2.sh Utils/tests/testRegularMeshUtils.c Utils/tests/testRegularRemesher.c Utils/tests/testSemiRegDeform.c Utils/tests/testSobolGenerator.0of1.sh Utils/tests/testSobolGenerator.c Utils/tests/testTimeIntegration.c Utils/tests/testTimeIntegrationEuler.0of1.expected Utils/tests/testTimeIntegrationEuler.0of1.sh Utils/tests/testTimeIntegrationRK2.0of1.expected Utils/tests/testTimeIntegrationRK2.0of1.sh Utils/tests/testTimeIntegrationRK4.0of1.expected Utils/tests/testTimeIntegrationRK4.0of1.sh Utils/tests/testWallVC.0of1.expected Utils/tests/testWallVC.0of1.sh Utils/tests/testWallVC.0of2.expected Utils/tests/testWallVC.0of2.sh Utils/tests/testWallVC.0of3.expected Utils/tests/testWallVC.0of3.sh Utils/tests/testWallVC.1of2.expected Utils/tests/testWallVC.1of2.sh Utils/tests/testWallVC.1of3.expected Utils/tests/testWallVC.1of3.sh Utils/tests/testWallVC.2of3.expected Utils/tests/testWallVC.2of3.sh Utils/tests/testWallVC.c build-functions.sh configure.sh libStgDomain/Toolbox/Toolbox.c libStgDomain/Toolbox/Toolbox.h libStgDomain/Toolbox/Toolbox.meta libStgDomain/Toolbox/makefile libStgDomain/makefile libStgDomain/src/Finalise.c libStgDomain/src/Finalise.h libStgDomain/src/Init.c libStgDomain/src/Init.h libStgDomain/src/StgDomain.h libStgDomain/src/makefile libStgDomain/tests/Makefile.def libStgDomain/tests/makefile libStgDomain/tests/testLibDiscretisation.0of1.expected libStgDomain/tests/testLibDiscretisation.0of1.sh libStgDomain/tests/testLibDiscretisation.c makefile project-config.sh
description:
Initial commit and port of StGermain/Discretisation into its own project: StgDomain. It is taken from StGermain repos version number 4190.


diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,39 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+subdirs = src tests
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/BlockGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/BlockGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,360 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: BlockGeometry.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+#include "BlockGeometry.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type BlockGeometry_Type = "BlockGeometry";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+BlockGeometry* BlockGeometry_DefaultNew( Name name )
+{
+	return (BlockGeometry*)_BlockGeometry_New(
+		sizeof(BlockGeometry), 
+		BlockGeometry_Type, 
+		_BlockGeometry_Delete, 
+		_BlockGeometry_Print,
+		_BlockGeometry_Copy,
+		(Stg_Component_DefaultConstructorFunction*)BlockGeometry_DefaultNew,
+		_BlockGeometry_Construct,
+		_BlockGeometry_Build,
+		_BlockGeometry_Initialise,
+		_BlockGeometry_Execute,
+		_BlockGeometry_Destroy,
+		name,
+		False,
+		_BlockGeometry_BuildPoints,
+		_BlockGeometry_PointAt,
+		NULL );
+}
+
+BlockGeometry* BlockGeometry_New(
+		Name name,
+		Dictionary*					dictionary )
+{
+	return _BlockGeometry_New( 
+		sizeof(BlockGeometry), 
+		BlockGeometry_Type, 
+		_BlockGeometry_Delete, 
+		_BlockGeometry_Print,
+		_BlockGeometry_Copy,
+		(Stg_Component_DefaultConstructorFunction*)BlockGeometry_DefaultNew,
+		_BlockGeometry_Construct,
+		_BlockGeometry_Build,
+		_BlockGeometry_Initialise,
+		_BlockGeometry_Execute,
+		_BlockGeometry_Destroy,
+		name,
+		True,
+		_BlockGeometry_BuildPoints,
+		_BlockGeometry_PointAt,
+		dictionary );
+}
+
+
+void BlockGeometry_Init(
+		BlockGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = BlockGeometry_Type;
+	self->_sizeOfSelf = sizeof(BlockGeometry);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _BlockGeometry_Delete;
+	self->_print = _BlockGeometry_Print;
+	self->_copy = _BlockGeometry_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)BlockGeometry_DefaultNew;
+	self->_construct = _BlockGeometry_Construct;
+	self->_build = _BlockGeometry_Build;
+	self->_initialise = _BlockGeometry_Initialise;
+	self->_execute = _BlockGeometry_Execute;
+	self->_destroy = _BlockGeometry_Destroy;
+	self->buildPoints = _BlockGeometry_BuildPoints;
+	self->pointAt = _BlockGeometry_PointAt;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	_Geometry_Init( (Geometry*)self );
+	
+	/* BlockGeometry info */
+	_BlockGeometry_Init( self, NULL );
+}
+
+
+BlockGeometry* _BlockGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary )
+{
+	BlockGeometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(BlockGeometry) );
+	self = (BlockGeometry*)_Geometry_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		buildPoints,
+		pointAt,
+		dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* BlockGeometry info */
+	if( initFlag ){
+		_BlockGeometry_Init( self, NULL );
+	}
+	
+	return self;
+}
+
+void _BlockGeometry_Init( BlockGeometry* self, IJK size ) {
+	/* General and Virtual info should already be set */
+	
+	/* BlockGeometry info */
+	self->isConstructed = False;
+
+	if ( size ) {
+		memcpy( self->size, size, sizeof(IJK) );
+	}
+	else {
+		self->size[ I_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeI", 2 );
+		self->size[ J_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeJ", 2 );
+		self->size[ K_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeK", 2 );
+	}
+	self->pointCount = self->size[I_AXIS] * self->size[J_AXIS] * self->size[K_AXIS];
+	assert( self->pointCount );
+	
+	self->min[ I_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minX", 0.0f );
+	self->min[ J_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minY", 0.0f );
+	self->min[ K_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minZ", 0.0f );
+
+	self->max[ I_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxX", 1.0f );
+	self->max[ J_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxY", 1.0f );
+	self->max[ K_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxZ", 1.0f );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _BlockGeometry_Delete( void* blockGeometry ) {
+	BlockGeometry* self = (BlockGeometry*)blockGeometry;
+	
+	/* Stg_Class_Delete parent */
+	_Geometry_Delete( self );
+}
+
+
+void _BlockGeometry_Print( void* blockGeometry, Stream* stream ) {
+	BlockGeometry* self = (BlockGeometry*)blockGeometry;
+	
+	/* Set the Journal for printing informations */
+	Stream* blockGeometryStream;
+	blockGeometryStream = Journal_Register( InfoStream_Type, "BlockGeometryStream" );
+
+	/* Print parent */
+	_Geometry_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "BlockGeometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* BlockGeometry info */
+}
+
+void _BlockGeometry_Construct( void* blockGeometry, Stg_ComponentFactory *cf, void* data ){
+	BlockGeometry*  self   = (BlockGeometry*)blockGeometry;
+	IJK             size;
+	int             shift;
+	Dimension_Index dim;
+	Dimension_Index dim_I;
+
+	self->dictionary = cf->rootDict;
+
+	/* Get Size from Dictionary */
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+		
+	size[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeI", 1 );  
+	size[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeJ", 1 );
+	size[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeK", 1 );
+	if ( dim == 2 )
+		size[ K_AXIS ] = 1;
+
+	/* Shift the size if nessesary */
+	shift = Stg_ComponentFactory_GetInt( cf, self->name, "sizeShift", 0 );
+	for ( dim_I = I_AXIS ; dim_I < dim ; dim_I++ )
+		size[ dim_I ] += shift;
+	
+	_Geometry_Init( (Geometry*)self );
+	_BlockGeometry_Init( self, size );
+}
+	
+void _BlockGeometry_Build( void* blockGeometry, void *data ){
+	
+}
+	
+void _BlockGeometry_Initialise( void* blockGeometry, void *data ){
+	
+}
+	
+void _BlockGeometry_Execute( void* blockGeometry, void *data ){
+	
+}
+	
+void _BlockGeometry_Destroy( void* blockGeometry, void *data ){
+	
+}
+
+void* _BlockGeometry_Copy( void* blockGeometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	BlockGeometry*	self = (BlockGeometry*)blockGeometry;
+	BlockGeometry*	newBlockGeometry;
+	Index		idx_I;
+	
+	newBlockGeometry = (BlockGeometry*)_Geometry_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	for( idx_I = 0; idx_I < 3; idx_I++ ) {
+		newBlockGeometry->size[idx_I] = self->size[idx_I];
+		newBlockGeometry->min[idx_I] = self->min[idx_I];
+		newBlockGeometry->max[idx_I] = self->max[idx_I];
+	}
+	
+	return (void*)newBlockGeometry;
+}
+
+
+void _BlockGeometry_BuildPoints( void* blockGeometry, Coord_List points )
+{
+	BlockGeometry*  self = (BlockGeometry*)blockGeometry;
+	Index		i;
+	
+	for( i = 0; i < self->pointCount; i++ ) {
+		IJK	ijk;
+	
+		ijk[0] = i % self->size[0];
+		ijk[1] = (i / self->size[0]) % self->size[1];
+		ijk[2] = i / (self->size[0] * self->size[1]);
+	
+		points[i][0] = self->size[0] > 1 ? self->min[0] + (self->max[0] - self->min[0]) * ((double)ijk[0] / 
+			(double)(self->size[0] - 1)) : self->min[0];
+		points[i][1] = self->size[1] > 1 ? self->min[1] + (self->max[1] - self->min[1]) * ((double)ijk[1] / 
+			(double)(self->size[1] - 1)) : self->min[1];
+		points[i][2] = self->size[2] > 1 ? self->min[2] + (self->max[2] - self->min[2]) * ((double)ijk[2] / 
+			(double)(self->size[2] - 1)) : self->min[2];
+	}
+}
+
+
+void _BlockGeometry_PointAt( void* blockGeometry, Index index, Coord point )
+{
+	BlockGeometry* self = (BlockGeometry*)blockGeometry;
+	
+	if( index < self->pointCount ) {
+		IJK	ijk;
+	
+		ijk[0] = index % self->size[0];
+		ijk[1] = (index / self->size[0]) % self->size[1];
+		ijk[2] = index / (self->size[0] * self->size[1]);
+	
+		point[0] = self->size[0] > 1 ? self->min[0] + (self->max[0] - self->min[0]) * ((double)ijk[0] / 
+			(double)(self->size[0] - 1)) : self->min[0];
+		point[1] = self->size[1] > 1 ? self->min[1] + (self->max[1] - self->min[1]) * ((double)ijk[1] / 
+			(double)(self->size[1] - 1)) : self->min[1];
+		point[2] = self->size[2] > 1 ? self->min[2] + (self->max[2] - self->min[2]) * ((double)ijk[2] / 
+			(double)(self->size[2] - 1)) : self->min[2];
+	}
+	else {
+		point[0] = HUGE_VAL;
+		point[1] = HUGE_VAL;
+		point[2] = HUGE_VAL;
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/BlockGeometry.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/BlockGeometry.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,144 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: BlockGeometry.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_BlockGeometry_h__
+#define __Domain_Geometry_BlockGeometry_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type BlockGeometry_Type;
+
+	/* BlockGeometry information */
+	#define __BlockGeometry \
+		/* General info */ \
+		__Geometry \
+		\
+		/* Virtual info */ \
+		\
+		/* BlockGeometry info ... */ \
+		IJK				size; \
+		XYZ				min; \
+		XYZ				max;
+	struct BlockGeometry { __BlockGeometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a BlockGeometry */
+	BlockGeometry* BlockGeometry_DefaultNew( Name name );
+	
+	BlockGeometry* BlockGeometry_New(
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Initialise a BlockGeometry */
+	void BlockGeometry_Init(
+		BlockGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	BlockGeometry* _BlockGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation functions */
+	void _BlockGeometry_Init( BlockGeometry* self, IJK size );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete BlockGeometry implementation */
+	void _BlockGeometry_Delete( void* blockGeometry );
+	
+	/* Print BlockGeometry implementation */
+	void _BlockGeometry_Print( void* blockGeometry, Stream* stream );
+	
+	void _BlockGeometry_Construct( void* blockGeometry, Stg_ComponentFactory *cf, void* data );
+	
+	void _BlockGeometry_Build( void* blockGeometry, void *data );
+	
+	void _BlockGeometry_Initialise( void* blockGeometry, void *data );
+	
+	void _BlockGeometry_Execute( void* blockGeometry, void *data );
+	
+	void _BlockGeometry_Destroy( void* blockGeometry, void *data );
+	
+	/* Copy */
+	#define BlockGeometry_Copy( self ) \
+		(BlockGeometry*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define BlockGeometry_DeepCopy( self ) \
+		(BlockGeometry*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _BlockGeometry_Copy( void* geometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _BlockGeometry_BuildPoints( void* blockGeometry, Coord_List points );
+	
+	void _BlockGeometry_PointAt( void* blockGeometry, Index index, Coord point );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_BlockGeometry_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/BlockGeometry.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/BlockGeometry.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">BlockGeometry</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Geometry</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeI</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeJ</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeK</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeShift</param>
+		<param name="Type">Int</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ComplexMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ComplexMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,206 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ComplexMath.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "TrigMath.h"
+#include "ComplexMath.h"
+#include <math.h>
+#include <string.h>
+
+#define a 	self[ REAL_PART ]
+#define b 	self[ IMAG_PART ]
+#define c 	Y[ REAL_PART ]		
+#define d 	Y[ IMAG_PART ]		
+
+/**  
+ * X = a + b . i, Y = c + d . i
+ * X + Y = (a + b.i) + (c + d.i) = (a + c) + i(b + d) 
+destination may be stored in either X or Y */
+void Cmplx_Add( Cmplx self, Cmplx Y, Cmplx destination ) {
+	destination[ REAL_PART ] = a + c;
+	destination[ IMAG_PART ] = b + d;
+}
+
+/** 
+X = a + b i, Y = c + d i
+X - Y = (a + b.i) - (c + d.i) = (a - c) + i(b - d) 
+destination may be stored in either X or Y */
+void Cmplx_Subtract( Cmplx self, Cmplx Y, Cmplx destination ) {
+	destination[ REAL_PART ] = a - c;
+	destination[ IMAG_PART ] = b - d;
+}
+
+/** 
+X = a + b . i, Y = c + d . i
+X . Y = (a + b.i)(c + d.i) = (ac - bd) + i(ad + bc) 
+destination may be stored in either X or Y */
+void Cmplx_Multiply( Cmplx self, Cmplx Y, Cmplx destination ) {
+	double real = a * c - b * d;
+	double imag = a * d + b * c;
+	destination[ REAL_PART ] = real;
+	destination[ IMAG_PART ] = imag;
+}
+
+/** 
+X = a + b i, Y = c + d i
+X / Y = \frac{a + b i}{c + d i} = \frac{(ac + bd) + i(bc - ad)}{c^2 + d^2} 
+destination may be stored in either X or Y */
+void Cmplx_Division( Cmplx self, Cmplx Y, Cmplx destination ) {
+	double denominator = c * c + d * d;
+	double real = (a * c + b * d)/denominator;
+	double imag = (b * c - a * d)/denominator;
+	
+	destination[ REAL_PART ] = real;
+	destination[ IMAG_PART ] = imag;
+}
+/** Add real to complex number */
+void Cmplx_AddReal( Cmplx self, double real, Cmplx destination ) {
+	destination[ REAL_PART ] = real + a;
+	destination[ IMAG_PART ] = b;
+}
+/** Subtract a complex number from a real number */
+void Cmplx_RealMinusCmplx( Cmplx self, double real, Cmplx destination ) {
+	destination[ REAL_PART ] = real - a;
+	destination[ IMAG_PART ] = -b;
+}
+
+/**  
+x(a + bi) = xa + xb i */
+void Cmplx_RealMultiply( Cmplx self, double real, Cmplx destination ) {
+	destination[ REAL_PART ] = real * a;
+	destination[ IMAG_PART ] = real * b;
+}
+
+/** 
+x/(a + bi) = x/(a^2 + b^2) * (a - bi) */
+void Cmplx_RealDivideByCmplx( Cmplx self, double real, Cmplx destination ) {
+	double factor = real/(a*a + b*b);
+	destination[ REAL_PART ] = a * factor;
+	destination[ IMAG_PART ] = -b * factor;
+}
+
+/** exp( a + bi ) = exp( a ) [ cos(b) + i sin(b) ] */
+void Cmplx_Exp( Cmplx self, Cmplx destination ) {
+	double realPart = self[ REAL_PART ];
+	double imagPart = self[ IMAG_PART ];
+
+	destination[ REAL_PART ] = exp( realPart ) * cos( imagPart );
+	destination[ IMAG_PART ] = exp( realPart ) * sin( imagPart );
+}
+/** Copy complex value from one variable to another. 
+This nicely replaces = sign for assignments */
+void Cmplx_Copy( Cmplx X, Cmplx destination ) {
+	memcpy( destination, X, sizeof(Cmplx) );
+}
+
+/** Sets a complex variable to zero */
+void Cmplx_Zero( Cmplx X ) {
+	memset( X, 0, sizeof(Cmplx) );
+}
+
+/**
+X = a + b i
+\bar X = a - b i
+conjugate may be stored in X */
+void Cmplx_Conjugate( Cmplx self, Cmplx conjugate ) {
+	conjugate[ REAL_PART ] = a;
+	conjugate[ IMAG_PART ] = -b;
+}
+
+/** 
+Defined as per: Eric W. Weisstein. "Complex Argument." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/ComplexArgument.html */
+double Cmplx_Argument( Cmplx self ) {
+	double argument = atan( b / a );
+	
+	if ( a > 0.0 ) 		/* If number is in first or fourth quadrant */
+		return argument;
+	else if ( a < 0.0 ) {
+		if ( b > 0.0 ) /* Number is in Second Quadrant */
+			return argument + M_PI;  
+		else           /* Number is in Third Quadrant */
+			return argument - M_PI;  
+	}
+	/* If a == 0 then: arg(x) = 
+		\pi/2     if b > 0.0 
+		undefined if b == 0.0 
+		-\pi/2    if b < 0.0 */
+	else {
+		if      ( b > 0.0 ) return  M_PI/2;
+		else if ( b < 0.0 ) return -M_PI/2;
+		else                return  0.0;
+	}
+}
+
+/** 
+X = a + b i
+|X| = \sqrt{a^2 + b^2}
+ */
+double Cmplx_Modulus( Cmplx self ) {
+	return sqrt( a * a + b * b );
+}
+
+/** 
+X = a + b i = |X|(\cos(\theta) + i \sin( \theta )) = |X| e^{i\theta}
+X^n = (|X| e^{i\theta})^n = |X|^n e^{i n \theta} = |X|^n (cos(\theta) + i sin(\theta) )
+destination may be stored in 'self' */
+void Cmplx_RealPower( Cmplx self, double y, Cmplx destination ) {
+	double mod   = pow( Cmplx_Modulus(self), y );
+	double theta = Cmplx_Argument( self ) * y;
+
+	destination[ REAL_PART ] = mod * cos(theta);
+	destination[ IMAG_PART ] = mod * sin(theta);
+}
+
+/** 
+see Eric W. Weisstein. "Complex Exponentiation." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/ComplexExponentiation.html
+destination may be stored in either 'self' or 'power' */
+void Cmplx_CmplxPower( Cmplx self, Cmplx Y, Cmplx destination ) {
+	double argX = Cmplx_Argument( self );
+	double modXSquared = a*a + b*b;
+	double mod   = pow( modXSquared, c * 0.5 ) * exp( -argX * d );
+	double theta = argX * c + 0.5 * d * log(modXSquared);
+
+	destination[ REAL_PART ] = mod * cos(theta);
+	destination[ IMAG_PART ] = mod * sin(theta);
+}
+
+/** Rotate complex value through an angle in radians. 
+This rotates the complex number on the complex plane. */
+void Cmplx_Rotate( Cmplx self, double angle, Cmplx dest ) {
+	Cmplx rotationFactor;
+
+	rotationFactor[ REAL_PART ] = cos( angle );
+	rotationFactor[ IMAG_PART ] = sin( angle );
+
+	Cmplx_Multiply( self, rotationFactor, dest );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ComplexMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ComplexMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,80 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic vector operations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ComplexMath.h 3735 2006-08-01 08:05:14Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_ComplexMath_h__
+#define __Domain_Geometry_ComplexMath_h__
+
+#include "units.h"
+
+/** Define names for index into complex numbers. 
+Which makes it clear what index it refers to.*/
+#define REAL_PART 0
+/** see comments for REAL_PART */
+#define IMAG_PART 1
+
+void Cmplx_Add( Cmplx X, Cmplx Y, Cmplx destination ) ;
+void Cmplx_Subtract( Cmplx X, Cmplx Y, Cmplx destination ) ;
+void Cmplx_Multiply( Cmplx X, Cmplx Y, Cmplx destination ) ;
+void Cmplx_Division( Cmplx X, Cmplx Y, Cmplx destination ) ;
+
+void Cmplx_AddReal( Cmplx X, double real, Cmplx destination ) ;
+void Cmplx_RealMinusCmplx( Cmplx X, double real, Cmplx destination ) ;
+void Cmplx_RealMultiply( Cmplx X, double real, Cmplx destination ) ;
+void Cmplx_RealDivideByCmplx( Cmplx X, double real, Cmplx destination ) ;
+void Cmplx_Exp( Cmplx X, Cmplx destination );
+void Cmplx_Copy( Cmplx X, Cmplx destination );
+void Cmplx_Zero( Cmplx X ) ;
+
+void Cmplx_Conjugate( Cmplx X, Cmplx conjugate ) ;
+
+double Cmplx_Argument( Cmplx X ) ;
+double Cmplx_Modulus( Cmplx X ) ;
+
+void Cmplx_RealPower( Cmplx X, double power, Cmplx destination ) ;
+void Cmplx_CmplxPower( Cmplx X, Cmplx power, Cmplx destination ) ;
+
+/** Calculate the square root of a complex number */
+#define Cmplx_Sqrt( self, destination ) \
+	Cmplx_RealPower( self, 0.5, destination )
+
+/** Print a complex number. 
+Currently uses %.5g formatting */ 
+#define Journal_PrintCmplx( stream, self ) \
+		Journal_Printf( stream, #self " = %.5g %c %.5g i\n", (self)[ REAL_PART ], (self)[ IMAG_PART ] >= 0.0 ? '+' : '-', fabs( (self)[ IMAG_PART ] ) )
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ComplexVectorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ComplexVectorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,550 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ComplexVectorMath.c 3677 2006-07-14 11:03:24Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "ComplexMath.h"
+#include "VectorMath.h"
+#include "ComplexVectorMath.h"
+#include "TrigMath.h"
+
+#include <math.h>
+#include <assert.h>
+
+/**(Assumes <=3D),  Set one ComplexVector to another */
+void ComplexVector_Set(CoordC set, CoordC dest) {
+	dest[0][REAL_PART] = set[0][REAL_PART];
+	dest[0][IMAG_PART] = set[0][IMAG_PART];
+	dest[1][REAL_PART] = set[1][REAL_PART];
+	dest[1][IMAG_PART] = set[1][IMAG_PART];
+	dest[2][REAL_PART] = set[2][REAL_PART];
+	dest[2][IMAG_PART] = set[2][IMAG_PART];
+}
+
+/**(Assumes 3D),  Set complex numbers to entries of function.
+One drawback, scalars must already be defined as complex numbers */
+void ComplexVector_SetScalar( Cmplx a, Cmplx b, Cmplx c, CoordC dest ) {
+	dest[0][REAL_PART] = a[REAL_PART];
+	dest[0][IMAG_PART] = a[IMAG_PART];
+	dest[1][REAL_PART] = b[REAL_PART];
+	dest[1][IMAG_PART] = b[IMAG_PART];
+	dest[2][REAL_PART] = c[REAL_PART];
+	dest[2][IMAG_PART] = c[IMAG_PART];
+
+}
+
+
+/** (Assumes 3D), Add two complex vectors:  dest = a + b */
+void ComplexVector_Add( CoordC a, CoordC b, CoordC dest ) {
+	Cmplx_Add( a[0], b[0], dest[0] );
+	Cmplx_Add( a[1], b[1], dest[1] );
+	Cmplx_Add( a[2], b[2], dest[2] );
+}	
+		
+/** (Assumes 3D), Subtract two complex vectors: dest = a - b */
+void ComplexVector_Sub( CoordC a, CoordC b, CoordC dest ) {
+	Cmplx_Subtract( a[0], b[0], dest[0] );
+	Cmplx_Subtract( a[1], b[1], dest[1] );
+	Cmplx_Subtract( a[2], b[2], dest[2] );
+}
+			
+/** (Assumes 3D), Returns the dot product of two complex vectors, a and b */
+void ComplexVector_Dot(CoordC a, CoordC b, Cmplx destSum ) {
+	CoordC dest;
+
+	Cmplx_Multiply(a[0], b[0], dest[0]);
+	Cmplx_Multiply(a[1], b[1], dest[1]);
+	Cmplx_Multiply(a[2], b[2], dest[2]);
+	Cmplx_Add(dest[0], dest[1], destSum);
+	Cmplx_Add(destSum, dest[2], destSum);
+	
+}	
+	
+/** (Assumes 3D), Multiply two complex vectors: dest = a * s */
+void ComplexVector_Mult(CoordC a, Cmplx s, CoordC dest ) {
+	Cmplx_Multiply(a[0], s, dest[0]);
+	Cmplx_Multiply(a[1], s, dest[1]);
+	Cmplx_Multiply(a[2], s, dest[2]);
+}
+
+/** (Assumes 3D), Multiply complex vector by real number */ 
+void ComplexVector_MultReal(CoordC a, double valueReal, CoordC dest ) {
+	Cmplx value;
+	value[REAL_PART] = valueReal;
+	value[IMAG_PART] = 0.0;
+	Cmplx_Multiply(a[0], value, dest[0]);
+	Cmplx_Multiply(a[1], value, dest[1]);
+	Cmplx_Multiply(a[2], value, dest[2]);
+}
+
+/** (Assumes 3D), Returns the magnitude of complex vector a */
+double ComplexVector_Mag(CoordC a ) {
+	double a_0, a_1, a_2;
+	a_0 = Cmplx_Modulus(a[0]);
+	a_1 = Cmplx_Modulus(a[1]);
+	a_2 = Cmplx_Modulus(a[2]);
+	return sqrt(a_0*a_0 + a_1*a_1 + a_2*a_2); 	
+}
+
+/** (Assumes 3D), complexVector projection of a onto b, store result in dest */
+void ComplexVector_Proj(CoordC a, CoordC b, CoordC dest ) {
+		/* Calculate norm of b */
+		Cmplx tmp;
+		ComplexVector_Norm( b, dest);
+		/* Calculate proj of a onto b */
+		ComplexVector_Dot( a, b, tmp );
+		ComplexVector_Mult( dest, tmp, dest );
+}
+	
+/** (Assumes 3D), Calculates cross product of two complex vectors */	
+void ComplexVector_Cross( CoordC a, CoordC b, CoordC dest ) {
+
+	Cmplx 	ans1, ans2;
+	 
+	Cmplx_Multiply(a[1], b[2], ans1);
+	Cmplx_Multiply(a[2], b[1], ans2);
+	Cmplx_Subtract(ans1, ans2, dest[0]);
+	
+	Cmplx_Multiply(a[2], b[0], ans1);
+	Cmplx_Multiply(a[0], b[2], ans2);
+	Cmplx_Subtract(ans1, ans2, dest[1]);
+	
+	Cmplx_Multiply(a[0], b[1], ans1);
+	Cmplx_Multiply(a[1], b[0], ans2);
+	Cmplx_Subtract(ans1, ans2, dest[2]);
+
+}
+
+/** (Assumes 3D), Divide complex vector by complex number */
+void ComplexVector_Div( CoordC a, Cmplx s, CoordC dest )
+{
+	Cmplx	inv, one;
+	one[REAL_PART] = 1.0;
+	one[IMAG_PART] = 0.0;
+	
+	Cmplx_Division( one, s, inv );
+
+	
+	Cmplx_Multiply(a[0], inv, dest[0]);
+	Cmplx_Multiply(a[1], inv, dest[1]);
+	Cmplx_Multiply(a[2], inv, dest[2]);
+}
+
+/** (Assumes 3D), Normalises complex vector */
+void ComplexVector_Norm(CoordC a, CoordC dest) {
+	double invMag;
+	
+	 
+	invMag = 1.0 / ComplexVector_Mag( a );
+	ComplexVector_MultReal(a, invMag, dest);
+
+}
+
+/** (Assumes 3D), Swaps coords based on i,j,k input */
+void ComplexVector_Swizzle( CoordC src, unsigned char iInd, 
+		unsigned char jInd, unsigned char kInd, CoordC dst ) {
+	CoordC dummy;
+	assert( iInd < 3 && jInd < 3 && kInd < 3 );
+	dummy[0][REAL_PART] = src[iInd][REAL_PART];
+	dummy[0][IMAG_PART] = src[iInd][IMAG_PART];
+	dummy[1][REAL_PART] = src[jInd][REAL_PART];
+	dummy[1][IMAG_PART] = src[jInd][IMAG_PART];
+	dummy[2][REAL_PART] = src[kInd][REAL_PART];
+	dummy[2][IMAG_PART] = src[kInd][IMAG_PART];
+		
+	dst[0][REAL_PART] = dummy[0][REAL_PART];
+	dst[0][IMAG_PART] = dummy[0][IMAG_PART];	
+	dst[1][REAL_PART] = dummy[1][REAL_PART];
+	dst[1][IMAG_PART] = dummy[1][IMAG_PART];
+	dst[2][REAL_PART] = dummy[2][REAL_PART];
+	dst[2][IMAG_PART] = dummy[2][IMAG_PART];
+}
+
+
+/** StGermain_ComplexRotateVector takes an argument 'vectorToRotate', and rotates it through 
+three angles for the x, y and z coordinates.(\alpha, \beta, \gama) respectively I believe.
+The angles should be reals, and in radians.
+This function cannot use Rodrigues' Rotation Formula because that is only defined for reals.
+See: 
+http://mathworld.wolfram.com/EulerAngles.html
+http://mathworld.wolfram.com/EulerParameters.html */
+void StGermain_RotateComplexVector(Cmplx* vector, double alpha, double beta, 
+			double gama, Cmplx* rotatedVector) {
+	double rotationMatrix[3][3]; 	/* Indicies [Column][Row][Real or Imag] */
+	/*double e0, e1, e2, e3; */
+				
+	Cmplx r_0, r_1, r_2, tmp ;
+
+	rotationMatrix[0][0] =   cos(beta) * cos(gama);
+	rotationMatrix[0][1] =   cos(beta) * sin(gama); 
+	rotationMatrix[0][2] =  -sin(beta);
+				
+	rotationMatrix[1][0] = -cos(alpha) * sin(gama) + sin(alpha) * sin(beta) * cos(gama);
+	rotationMatrix[1][1] =  cos(alpha) * cos(gama) + sin(alpha) * sin(beta) * sin(gama);
+	rotationMatrix[1][2] =  sin(alpha) * cos(beta);
+	
+	rotationMatrix[2][0] =  sin(alpha) * sin(gama) + cos(alpha) * sin(beta) * cos(gama);
+	rotationMatrix[2][1] = -sin(alpha) * cos(gama) + cos(alpha) * sin(beta) * sin(gama);
+	rotationMatrix[2][2] = 	cos(alpha) * cos(beta);		
+				
+
+	/* x direction */
+	Cmplx_RealMultiply(vector[0], rotationMatrix[0][0], r_0);
+	Cmplx_RealMultiply(vector[1], rotationMatrix[0][1], r_1);
+	Cmplx_RealMultiply(vector[2], rotationMatrix[0][2], r_2);
+
+	Cmplx_Add(r_0, r_1, tmp);
+	Cmplx_Add(tmp, r_2, rotatedVector[0]);
+
+	
+	/* y direction */
+	Cmplx_RealMultiply(vector[0], rotationMatrix[1][0], r_0);
+	Cmplx_RealMultiply(vector[1], rotationMatrix[1][1], r_1);
+	Cmplx_RealMultiply(vector[2], rotationMatrix[1][2], r_2);
+
+	Cmplx_Add(r_0, r_1, tmp);
+	Cmplx_Add(tmp, r_2, rotatedVector[1]);
+	
+	/* z direction */
+	Cmplx_RealMultiply(vector[0], rotationMatrix[2][0], r_0);
+	Cmplx_RealMultiply(vector[1], rotationMatrix[2][1], r_1);
+	Cmplx_RealMultiply(vector[2], rotationMatrix[2][2], r_2);
+
+	Cmplx_Add(r_0, r_1, tmp);
+	Cmplx_Add(tmp, r_2, rotatedVector[2]);
+}		
+
+/** StGermain_RotateCoordinateAxisComplex multiplies a vector with a Rotation Matrix to rotate it around a co-ordinate axis -
+Is a simpler function than StGermain_RotateComplexVector for more specific cases where the vector is to be rotated around one of the axes of the co-ordinate system. The arguments are the same except the the 'axis' argument is of type 'Index' which could be either I_AXIS, J_AXIS or K_AXIS. Vectors have to be the size of 3 doubles.
+See, Eric W. Weisstein. "Rotation Matrix." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/RotationMatrix.htm */
+void StGermain_RotateCoordinateAxisComplex( Cmplx* vector, 
+			Index axis, double theta, Cmplx* rotatedVector ) {
+	
+	Cmplx r_1, r_2;
+	/* Rotation around one axis will always leave the component on that axis alone */
+	rotatedVector[axis][REAL_PART] = vector[axis][REAL_PART];
+	rotatedVector[axis][IMAG_PART] = vector[axis][IMAG_PART];
+	/*printf("axis %d, %2.3f", axis, vector[axis][REAL_PART]); 				 */
+	switch (axis) {
+		case K_AXIS: /* Rotate around Z axis */
+			Cmplx_RealMultiply(vector[0], cos(theta), r_1);
+			Cmplx_RealMultiply(vector[1], sin(theta), r_2);
+			Cmplx_Add(r_1, r_2, rotatedVector[0]);
+		
+			Cmplx_RealMultiply(vector[0], sin(theta), r_1);
+			Cmplx_RealMultiply(vector[1], cos(theta), r_2);
+			Cmplx_Subtract(r_2, r_1, rotatedVector[1]);
+			return;
+		case I_AXIS:  /* Rotate around X axis */
+			Cmplx_RealMultiply(vector[1], cos(theta), r_1);
+			Cmplx_RealMultiply(vector[2], sin(theta), r_2);
+			Cmplx_Add(r_1, r_2, rotatedVector[1]);
+		
+			Cmplx_RealMultiply(vector[1], sin(theta), r_1);
+			Cmplx_RealMultiply(vector[2], cos(theta), r_2);
+			Cmplx_Subtract(r_2, r_1, rotatedVector[2] );
+			return;
+		case J_AXIS: /* Rotate around Y axis */
+			Cmplx_RealMultiply(vector[0], cos(theta), r_1);
+			Cmplx_RealMultiply(vector[2], sin(theta), r_2);
+			Cmplx_Subtract(r_1, r_2, rotatedVector[0] );
+		
+			Cmplx_RealMultiply(vector[0], sin(theta), r_1);
+			Cmplx_RealMultiply(vector[2], cos(theta), r_2);
+			Cmplx_Add(r_1, r_2, rotatedVector[2]) ;
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "ComplexVectorMath" );
+			Journal_Printf( error, "Impossible axis to rotate around in %s.", __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "ComplexVectorMath" ),
+				"Error in '%s':Impossible axis to rotate around. \n", __func__);
+		}
+	}
+}
+
+/** Subtracts one complex vector from another - 
+destination = vector1 - vector2
+Destination vector may be the same as either of the other two input vectors 
+Function is optimised for 1-3 dimensions but will work for any dimension */
+void StGermain_ComplexVectorSubtraction(Cmplx* destination, Cmplx* vector1, Cmplx* vector2, Index dim) {
+
+	switch (dim) {
+		case 3:
+			Cmplx_Subtract(vector1[2], vector2[2], destination[2]);			
+			
+		case 2:
+			Cmplx_Subtract(vector1[1], vector2[1], destination[1]);
+		case 1: 
+			Cmplx_Subtract(vector1[0], vector2[0], destination[0]);
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				Cmplx_Subtract(vector1[d], vector2[d], destination[d]);
+			return;
+		}
+	}	
+}
+
+/** Adds two vectors - 
+destination = vector1 + vector2
+Destination vector may be the same as either of the other two input vectors 
+Function is optimised for 1-3 dimensions but will work for any dimension */
+void StGermain_ComplexVectorAddition(Cmplx* destination, Cmplx* vector1, Cmplx* vector2, Index dim) {
+	switch (dim) {
+		case 3: 
+			Cmplx_Add(vector1[2], vector2[2], destination[2]);	
+		case 2:
+			Cmplx_Add(vector1[1], vector2[1], destination[1]);	
+		case 1: 
+			Cmplx_Add(vector1[0], vector2[0], destination[0]);	
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				Cmplx_Add(vector1[d], vector2[d], destination[d]);	
+                        /*printf("%f, %f", destination[d][REAL_PART], destination[d][IMAG_PART]); */
+			return;
+		}
+	}	
+}
+
+/** StGermain_ComplexVectorMagnitude calculates the magnitude of a vector
+|v| = \sqrt{ v . v } 
+This function uses function StGermain_ComplexVectorDotProduct to calculate v . v. 
+Vector has to be of size dim doubles */
+double StGermain_ComplexVectorMagnitude(Cmplx* vector, Index dim) {
+	Cmplx dotProduct;
+
+	StGermain_ComplexVectorDotProduct(vector, vector, dim, dotProduct);
+	return sqrt(Cmplx_Modulus(dotProduct));
+}
+
+/** StGermain_ComplexVectorDotProduct calculates the complex valued dot product of two
+complex vectors
+*/
+void StGermain_ComplexVectorDotProduct(Cmplx* vector1, Cmplx* vector2, Dimension_Index dim, Cmplx dotProduct) {
+	Cmplx tmp;
+	dotProduct[REAL_PART] = 0.0;
+	dotProduct[IMAG_PART] = 0.0;
+
+	switch (dim) {
+		case 3: {
+			Cmplx_Multiply(vector1[2], vector2[2], tmp);
+			Cmplx_Add(dotProduct, tmp, dotProduct);
+		}
+		case 2: {
+			Cmplx_Multiply(vector1[1], vector2[1], tmp);
+			Cmplx_Add(dotProduct, tmp, dotProduct);
+		}
+		case 1: {
+			Cmplx_Multiply(vector1[0], vector2[0], tmp);
+			Cmplx_Add(dotProduct, tmp, dotProduct);
+			break;
+		}
+		default: {
+			Dimension_Index d;
+			for ( d = 0 ; d < dim ; d++ ) {
+				Cmplx_Multiply(vector1[d], vector2[d], tmp);
+				Cmplx_Add(dotProduct, tmp, dotProduct);
+			}
+			break;
+		}
+	}
+	
+	
+}
+
+/** See Eric W. Weisstein. "Cross Product." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CrossProduct.html 
+Tested against http://www.engplanet.com/redirect.html?3859 */
+void StGermain_ComplexVectorCrossProduct(Cmplx* destination, Cmplx* vector1, Cmplx* vector2) {
+	Cmplx c_1, c_2;
+	/*x direction */
+	Cmplx_Multiply(vector1[1], vector2[2], c_1);
+	Cmplx_Multiply(vector1[2], vector2[1], c_2);
+	Cmplx_Subtract(c_1, c_2, destination[0]);
+
+	/*y direction */
+	Cmplx_Multiply(vector1[2], vector2[0], c_1);
+	Cmplx_Multiply(vector1[0], vector2[2], c_2);
+	Cmplx_Subtract(c_1, c_2, destination[1]);
+	/*z direction */
+	Cmplx_Multiply(vector1[0], vector2[1], c_1);
+	Cmplx_Multiply(vector1[1], vector2[0], c_2);
+	Cmplx_Subtract(c_1, c_2, destination[2]);
+}
+
+/** StGermain_VectorCrossProductMagnitude - See Eric W. Weisstein. "Cross Product." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CrossProduct.html 
+|a \times b| = |a||b|\sqrt{ 1 - (\hat a . \hat b)^2}
+*/
+void StGermain_ComplexVectorCrossProductMagnitude( Cmplx* vector1, Cmplx* vector2, Dimension_Index dim, Cmplx tmp ) {
+	double mag1       = StGermain_ComplexVectorMagnitude( vector1, dim );
+	double mag2       = StGermain_ComplexVectorMagnitude( vector2, dim );
+	Cmplx dotProduct, dotSquared;
+	StGermain_ComplexVectorDotProduct( vector1, vector2, dim, dotProduct );
+	
+	Cmplx_Multiply(dotProduct, dotProduct, dotSquared);
+	Cmplx_RealMultiply(dotSquared, 1.0/(mag1 * mag1 * mag2 * mag2), tmp);
+	Cmplx_RealMinusCmplx(tmp, 1.0, tmp); 
+	Cmplx_RealPower(tmp, 0.5, tmp);
+	Cmplx_RealMultiply(tmp, (mag1 * mag2), tmp);
+	
+}
+
+
+/** StGermain_ComplexScalarTripleProduct - Calculates the scalar vector product of three vectors -
+ * see Eric W. Weisstein. "Scalar Triple Product." From MathWorld--A Wolfram Web Resource. 
+	http://mathworld.wolfram.com/ScalarTripleProduct.html
+ * Assumes 3 Dimensions */
+void StGermain_ComplexScalarTripleProduct( Cmplx* vectorA, Cmplx* vectorB, Cmplx* vectorC, Cmplx tripleProduct ) {
+	XYZC crossProduct;
+	
+	StGermain_ComplexVectorCrossProduct( crossProduct, vectorB, vectorC );
+	StGermain_ComplexVectorDotProduct( vectorA, crossProduct, 3, tripleProduct );
+	 
+}
+
+
+/** StGermain_ComplexVectorNormalise calculates the magnitude of a vector
+\hat v = frac{v} / {|v|}
+This function uses function StGermain_VectorDotProduct to calculate v . v. 
+Vector has to be of size dim Cmplx */
+void StGermain_ComplexVectorNormalise(Cmplx* vector, Index dim) {
+	double mag;
+
+	mag = StGermain_ComplexVectorMagnitude( vector , dim );
+	switch (dim) {
+		case 3: 
+			Cmplx_RealMultiply(vector[2], 1.0/mag, vector[2]);
+		
+		case 2:
+			Cmplx_RealMultiply(vector[1], 1.0/mag, vector[1]);
+
+		case 1: 
+			Cmplx_RealMultiply(vector[0], 1.0/mag, vector[0]);			
+
+			break;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ )
+				Cmplx_RealMultiply(vector[d], 1.0/mag, vector[d]);
+			break;
+		}
+	}	
+}
+
+
+
+#define STGERMAIN_COMPLEXVECTOR_ONE_THIRD 0.3333333333333333333
+
+/** StGermain_ComplexTriangleCentroid Calculates the position vector to the centroid of a triangle whose verticies are given by position vectors 
+Position vectors have to be of size dim Cmplx */
+void StGermain_ComplexTriangleCentroid( Cmplx* centroid, Cmplx* pos0, Cmplx* pos1, Cmplx* pos2, Index dim) {
+	Cmplx tmp;
+	switch (dim) {
+		case 3:
+			Cmplx_Add(pos0[2], pos1[2], tmp);
+			Cmplx_Add(pos2[2], tmp, tmp);
+			Cmplx_RealMultiply(tmp, STGERMAIN_COMPLEXVECTOR_ONE_THIRD, centroid[2]);
+			
+		case 2: 
+			Cmplx_Add(pos0[1], pos1[1], tmp);
+			Cmplx_Add(pos2[1], tmp, tmp);
+			Cmplx_RealMultiply(tmp, STGERMAIN_COMPLEXVECTOR_ONE_THIRD, centroid[1]);
+		case 1:
+			Cmplx_Add(pos0[0], pos1[0], tmp);
+			Cmplx_Add(pos2[0], tmp, tmp);
+			Cmplx_RealMultiply(tmp, STGERMAIN_COMPLEXVECTOR_ONE_THIRD, centroid[0]);
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) {
+				Cmplx_Add(pos0[d], pos1[d], tmp);
+				Cmplx_Add(pos2[d], tmp, tmp);
+				Cmplx_RealMultiply(tmp, STGERMAIN_COMPLEXVECTOR_ONE_THIRD, centroid[d]);
+			}
+			return;
+		}
+	}
+}
+
+/** Prints complex Vector using %g on all entries.
+TODO: would like this to be specified from function call
+with automatic default value
+*/
+void StGermain_PrintComplexVector( Stream* stream, Cmplx* vector, Index dim ) {
+	Index d;
+
+	if ( dim <= 0 ) {
+		Journal_Printf( stream, "{<NON_POSITIVE DIMENSION %d>}\n", dim );
+		return;
+	}
+
+	Journal_Printf( stream, "{");
+	for ( d = 0 ; d < dim - 1 ; d++ ) 
+		Journal_Printf( stream, "%g + i %g, ", vector[d][REAL_PART], vector[d][IMAG_PART] );
+	
+	Journal_Printf( stream, "%g + i %g}\n", vector[d][REAL_PART], vector[d][IMAG_PART] );
+}
+
+/** Converts ComplexVector into a vector,
+but only if there are no non-zero imaginary values. */
+void ComplexVector_ToVector(CoordC complexVector, Dimension_Index dim, Coord vector) {
+	Dimension_Index index;
+	for (index = 0; index < dim; index++) {
+		if (complexVector[index][IMAG_PART] != 0.0) {
+			Journal_Firewall( False, Journal_Register( Error_Type, "ComplexVectorMath" ),
+				"Error in '%s': Complex value in complex vector at index '%s' \n", __func__, index );
+		}
+		else {
+			vector[index] = complexVector[index][REAL_PART];
+		}
+	}
+}
+
+/** Converts vector into Complex vector, seting all imaginary 
+parts to zero */
+void Vector_ToComplexVector(Coord vector, Dimension_Index dim, CoordC complexVector) {
+	Dimension_Index index;
+	for (index = 0; index < dim; index++) {
+		complexVector[index][REAL_PART] = vector[index];
+		complexVector[index][IMAG_PART] = 0.0;
+	}		
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ComplexVectorMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ComplexVectorMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,100 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic complex vector operations.
+**
+** Assumptions:
+**    - CoordC is an array of 3 Cmplx. 
+**
+** Comments:
+**    In any operation that involves two or more input vectors, those vectors 
+**    may be one and the same; it may be assumed that such an occurence will be
+**    handled.
+**
+** $Id: ComplexVectorMath.h 3677 2006-07-14 11:03:24Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_ComplexVectorMath_h__
+#define __Domain_Geometry_ComplexVectorMath_h__
+		
+#include "ComplexMath.h"
+
+typedef Cmplx ComplexVector[3];
+
+void ComplexVector_Set(CoordC set, CoordC dest);
+void ComplexVector_SetScalar( Cmplx a, Cmplx b, Cmplx c, CoordC dest );
+void ComplexVector_Add( CoordC a, CoordC b, CoordC dest );
+void ComplexVector_Sub( CoordC a, CoordC b, CoordC dest );		
+void ComplexVector_Dot(CoordC a, CoordC b, Cmplx dest );
+void ComplexVector_Mult(CoordC a, Cmplx s, CoordC dest );
+void ComplexVector_MultReal(CoordC a, double valueReal, CoordC dest );
+double ComplexVector_Mag(CoordC a );								
+void ComplexVector_Proj(CoordC a, CoordC b, CoordC  dest );					
+	
+
+void ComplexVector_Cross( CoordC a, CoordC b, CoordC dest );
+void ComplexVector_Div( CoordC a, Cmplx s, CoordC dest );
+void ComplexVector_Norm( CoordC a, CoordC dest);
+void ComplexVector_Swizzle( CoordC src, unsigned char iInd, 
+		unsigned char jInd, unsigned char kInd, CoordC dst );
+
+
+void StGermain_RotateComplexVector(Cmplx* vector, double phi, double theta, 
+			double eta, Cmplx* rotatedVector);
+void StGermain_RotateCoordinateAxisComplex( Cmplx* vector, Index axis, double theta, Cmplx* rotatedVector ) ;
+void StGermain_ComplexVectorSubtraction(Cmplx* destination, Cmplx* vector1, Cmplx* vector2, Index dim) ;
+void StGermain_ComplexVectorAddition(Cmplx* destination, Cmplx* vector1, Cmplx* vector2, Index dim) ;
+
+double StGermain_ComplexVectorMagnitude(Cmplx* vector, Index dim) ;
+void StGermain_ComplexVectorDotProduct(Cmplx* vector1, Cmplx* vector2, Dimension_Index dim, Cmplx dotProduct) ;
+void StGermain_ComplexVectorCrossProduct(Cmplx* destination, Cmplx* vector1, Cmplx* vector2) ;
+void StGermain_ComplexVectorCrossProductMagnitude( Cmplx* vector1, Cmplx* vector2, Dimension_Index dim, Cmplx dest ) ;
+void StGermain_ComplexScalarTripleProduct( Cmplx* vectorA, Cmplx* vectorB, Cmplx* vectorC, Cmplx dest );
+
+void StGermain_ComplexVectorNormalise(Cmplx* vector, Index dim ) ;
+
+void StGermain_ComplexTriangleCentroid( Cmplx* centroid, Cmplx* pos0, Cmplx* pos1, Cmplx* pos2, Index dim) ;
+
+void ComplexVector_ToVector(CoordC complexVector, Dimension_Index dim, Coord vector) ;
+void Vector_ToComplexVector(Coord vector, Dimension_Index dim, CoordC complexVector) ;
+
+
+void StGermain_PrintComplexVector( Stream* stream, Cmplx* vector, Index dim ) ;
+
+/** Prints a named ComplexVector */
+#define StGermain_PrintNamedComplexVector(stream, vector, dim) \
+		do {	\
+			Journal_Printf( stream, #vector " - " ); \
+			StGermain_PrintComplexVector( stream, vector, dim );	\
+		} while(0)
+		
+
+		
+#endif /* __Domain_Geometry_ComplexVectorMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Delaunay.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Delaunay.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1063 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+** The Delaunay class computes the constrained delaunay triangulation of a set of points
+** in 2 Dimensions along with the voronoi diagram of the point-set.
+** Assumptions:
+**
+** Comments:
+**
+** The recursive divide and conquer algorithm has been implemented from the pseudo-code
+** given in "Primitives for the manipulation of general subdivisions and the computation
+** of voronoi diagrams" by Leonidas Guibas and Jorge Stolfi.
+** ACM transtactions on graphics, Vol. 4, No. 2, April 1985, Pages 74-123
+**
+**
+** $Id: Delaunay.c 3462 2006-02-19 06:53:24Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "QuadEdge.h"
+#include "Delaunay.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+
+const Type Delaunay_Type="Delaunay";
+
+#if !defined INFINITY
+	#define INFINITY LONG_MAX
+#endif
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+/** Create a Delaunay */
+Delaunay* Delaunay_DefaultNew( Name name )
+{
+	Delaunay *d = _Delaunay_New(
+			sizeof( Delaunay ),
+			Delaunay_Type,
+			_Delaunay_Delete,
+			_Delaunay_Print,
+			_Delaunay_Copy,
+			(Stg_Component_DefaultConstructorFunction*)Delaunay_DefaultNew,
+			_Delaunay_Construct,
+			_Delaunay_Build,
+			_Delaunay_Initialise,
+			_Delaunay_Execute,
+			_Delaunay_Destroy,
+			name,
+			False,
+			NULL,
+			NULL,
+			0,
+			0,
+			NULL );
+
+	return d;
+}
+	
+Delaunay* Delaunay_New(
+	Name						name,
+	Dictionary*					dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							idOffset,
+	DelaunayAttributes			*attr )
+{
+	Delaunay *d = _Delaunay_New(
+			sizeof( Delaunay ),
+			Delaunay_Type,
+			_Delaunay_Delete,
+			_Delaunay_Print,
+			_Delaunay_Copy,
+			(Stg_Component_DefaultConstructorFunction*)Delaunay_DefaultNew,
+			_Delaunay_Construct,
+			_Delaunay_Build,
+			_Delaunay_Initialise,
+			_Delaunay_Execute,
+			_Delaunay_Destroy,
+			name,
+			True,
+			dictionary,
+			sites,
+			numSites,
+			idOffset,
+			attr );
+	
+	return d;
+}
+
+	/** Initialise a Delaunay */
+void Delaunay_Init(
+	Delaunay*					self,
+	Name						name,
+	Dictionary*					dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							idOffset,
+	DelaunayAttributes			*attr )
+{
+	int i = 0;
+
+	self->type = Delaunay_Type;
+	self->_sizeOfSelf = sizeof( Delaunay );
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+
+	self->_delete = _Delaunay_Delete;
+	self->_print = _Delaunay_Print;
+	self->_copy = _Delaunay_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)Delaunay_DefaultNew;
+	self->_construct = _Delaunay_Construct;
+	self->_build = _Delaunay_Build;
+	self->_initialise = _Delaunay_Initialise;
+	self->_execute = _Delaunay_Execute;
+	self->_destroy = _Delaunay_Destroy;
+
+	self->attributes = attr;
+	self->dictionary = dictionary;
+	
+	if( self->attributes->BuildBoundingTriangle ){
+		self->numSites = numSites + 3;
+	}
+	else{
+		self->numSites = numSites;
+	}
+	
+	self->numInputSites = numSites;
+	self->idOffset = idOffset;
+	
+	if( sites != NULL ){
+		self->sites = Memory_Alloc_Array_Unnamed( Site, self->numSites );
+		memset( self->boundingTriangle, 0, sizeof( self->boundingTriangle ) );
+
+		for( i=0; i<self->numSites; i++ ){
+			if( i < self->numInputSites ){
+				self->sites[i].coord = &(sites[i]);
+			}
+			else{
+				self->sites[i].coord = &(self->boundingTriangle[i%3]);
+			}
+			self->sites[i].id = i + self->idOffset;
+		}
+	}
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_Delaunay_Init( self );
+}
+
+/** Creation implementation */
+Delaunay* _Delaunay_New(
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*		_build,
+	Stg_Component_InitialiseFunction*		_initialise,
+	Stg_Component_ExecuteFunction*		_execute,
+	Stg_Component_DestroyFunction*		_destroy,
+	Name							name,
+	Bool							initFlag,
+	Dictionary					*dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							idOffset,
+	DelaunayAttributes			*attr )
+{
+	Delaunay *self = NULL;
+	
+	assert( _sizeOfSelf >= sizeof(Delaunay) );
+	self = (Delaunay*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+
+	self->points = sites;
+	self->attributes = attr;
+	self->dictionary = dictionary;
+
+	self->numInputSites = numSites;
+	self->idOffset = idOffset;
+	
+	if( initFlag ){
+		_Delaunay_Init( self );
+	}
+
+	return self;
+}
+
+#define PI 3.1415926535897932384626
+void Delaunay_FindMinMax( Site *sites, int count, float *minX, float *minY, float *maxX, float *maxY )
+{
+	int i = 0;
+	
+	*maxX = -INFINITY;
+	*maxY = -INFINITY;
+	
+	*minX = INFINITY;
+	*minY = INFINITY;
+
+	if (sites == NULL ) return;
+	
+	for( i=0; i<count; i++ ){
+		if( *maxX < (*(sites[i].coord))[0] ){
+			*maxX = (*(sites[i].coord))[0];
+		}
+		if( *maxY < (*(sites[i].coord))[1] ){
+			*maxY = (*(sites[i].coord))[1];
+		}
+		if( *minX > (*(sites[i].coord))[0] ){
+			*minX = (*(sites[i].coord))[0];
+		}
+		if( *minY > (*(sites[i].coord))[1] ){
+			*minY = (*(sites[i].coord))[1];
+		}
+	}
+}
+
+void _Delaunay_Init( Delaunay* self )
+{
+	float maxX, minX, maxY, minY;
+	float centreX, centreY;
+	float radius;
+	int i = 0;
+	CoordF *sites = NULL;
+	
+	assert( self );
+	
+	sites = self->points;
+	
+	if( self->attributes->BuildBoundingTriangle ){
+		self->numSites = self->numInputSites + 3;
+	}
+	else{
+		self->numSites = self->numInputSites;
+	}
+
+	if( sites != NULL ){
+		self->sites = Memory_Alloc_Array_Unnamed( Site, self->numSites );
+		memset( self->boundingTriangle, 0, sizeof( self->boundingTriangle ) );
+
+		for( i=0; i<self->numSites; i++ ){
+			if( i < self->numInputSites ){
+				self->sites[i].coord = &(sites[i]);
+			}
+			else{
+				self->sites[i].coord = &(self->boundingTriangle[i%3]);
+			}
+			self->sites[i].id = i + self->idOffset;
+		}
+	}
+	
+	centreX = 0; centreY = 0; 
+	
+	Delaunay_FindMinMax( self->sites, self->numSites, &minX, &minY, &maxX, &maxY );
+
+	radius = (sqrt((maxX - minX) * (maxX - minX) + (maxY - minY) * (maxY - minY)));
+			
+	centreX = minX + (maxX - minX) / 2.0f;
+	centreY = minY + (maxY - minY) / 2.0f;
+
+	self->boundingTriangle[0][0] = centreX - tan(PI/3.0f)*radius;
+	self->boundingTriangle[0][1] = centreY - radius;
+
+	self->boundingTriangle[1][0] = centreX + tan(PI/3.0f)*radius;
+	self->boundingTriangle[1][1] = centreY - radius;
+			
+	self->boundingTriangle[2][0] = centreX;
+	self->boundingTriangle[2][1] = centreY + radius/cos(PI/3.0f);
+}
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+/** Stg_Class_Delete() implementation */
+void _Delaunay_Delete( void* delaunay )
+{
+	Delaunay *self = (Delaunay*)delaunay;
+	
+	assert( self );
+
+	if( self->sites ){
+		Memory_Free( self->sites );
+	}
+	
+	if( self->qp ){
+		Stg_Class_Delete( self->qp );
+	}
+
+	if( self->vp ){
+		Stg_Class_Delete( self->vp );
+	}
+
+	if( self->triangleIndices ){
+		Memory_Free( self->triangleIndices[0] );
+		Memory_Free( self->triangleIndices );
+	}
+
+	if( self->triangleNeighbours ){
+		Memory_Free( self->triangleNeighbours[0] );
+		Memory_Free( self->triangleNeighbours );
+	}
+
+	if( self->numNeighbours ){
+		Memory_Free( self->numNeighbours );
+	}
+	
+	if( self->neighbours ){
+		Memory_Free( self->neighbours[0] );
+		Memory_Free( self->neighbours );
+	}
+
+	if( self->voronoiSides ){
+		Memory_Free( self->voronoiSides[0] );
+		Memory_Free( self->voronoiSides );
+	}
+
+	if( self->voronoiArea ){
+		Memory_Free( self->voronoiArea );
+	}
+
+	if( self->hull ){
+		Memory_Free( self->hull );
+	}
+
+	_Stg_Component_Delete( self );
+}
+
+/** Stg_Class_Print() implementation */
+void _Delaunay_Print( void* delaunay, Stream* stream )
+{
+	Delaunay *self = ( Delaunay* )delaunay;
+	
+	assert( self );
+	assert( stream );
+
+	_Stg_Component_Print( self, stream );
+	Journal_Printf( stream, "Delaunay (ptr): (%p)\n", self );
+	
+	Journal_Printf( stream, "\tNum Sites %d\n", self->numSites );
+	Journal_Printf( stream, "\tNum Edges %d\n", self->numEdges );
+	Journal_Printf( stream, "\tNum Triangles %d\n", self->numTriangles );
+	Journal_Printf( stream, "\tNum Voronoi Vertices %d\n", self->numVoronoiVertices );
+}
+
+void *_Delaunay_Copy( void* delaunay, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap )
+{
+	return NULL;
+}
+
+void _Delaunay_Construct( void* delaunay, Stg_ComponentFactory* cf, void* data )
+{
+	Delaunay *self = NULL;
+	Stg_ObjectList* pointerRegister;
+	int idOffset = 0;
+	CoordF *points = NULL;
+	DelaunayAttributes *attr = NULL;
+	int numSites = 0;
+
+	self = (Delaunay*) delaunay;
+	
+	pointerRegister = Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+	
+	assert( pointerRegister );
+
+	points = Stg_ObjectList_Get( pointerRegister, "dataPoints" );
+	attr = Stg_ObjectList_Get( pointerRegister, "delaunayAttributes" );
+
+	numSites = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "numSites", 0 );
+
+	assert( points );
+	assert( attr );
+	assert( numSites );
+	
+	self->dictionary = cf->rootDict;
+	self->points = points;
+	self->attributes = attr;
+
+	if( self->attributes->BuildBoundingTriangle ){
+		self->numSites = numSites + 3;
+	}
+	else{
+		self->numSites = numSites;
+	}
+	
+	self->numInputSites = numSites;
+	self->idOffset = idOffset;
+
+	_Delaunay_Init( self );
+	_Delaunay_Build( self, NULL );
+}
+
+void _Delaunay_Build( void* delaunay, void* data )
+{
+	Delaunay *self = ( Delaunay* )delaunay;
+	DelaunayAttributes *attr = NULL;
+    
+	assert( self );
+	
+	self->qp = MemoryPool_New( QuadEdge, self->numSites * 3, 10 );
+	
+	Delaunay_SortSites(self->sites, self->numSites);
+
+    Delaunay_Recurse(self, 0, self->numSites, &self->leftMost, &self->rightMost);
+
+	self->numEdges = self->qp->numElements - self->qp->numElementsFree;
+	self->numFaces = self->numEdges - self->numSites + 2;
+	self->numTriangles = 0;
+
+	attr = self->attributes;
+
+	if( attr->CreateVoronoiVertices ){
+		self->vp = MemoryPool_New( VoronoiVertex, self->numSites * 2, 10 );
+	}
+	
+	Delaunay_FindHull( self );
+	
+	if( attr->BuildTriangleIndices ){
+		Delaunay_BuildTriangleIndices( self );
+	}
+	
+	if( attr->CreateVoronoiVertices ){
+		Delaunay_BuildVoronoiVertices( self );
+		self->numVoronoiVertices = self->vp->numElements - self->vp->numElementsFree;
+	}
+	
+	Delaunay_FindNeighbours( self );
+}
+
+void _Delaunay_Initialise( void* delaunay, void* data )
+{
+	
+}
+
+void _Delaunay_Execute( void* delaunay, void* data )
+{
+	
+}
+
+void _Delaunay_Destroy( void* delaunay, void* data )
+{
+	
+}
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+/* Function for heap sorting the input points in ascending x-coordinate */
+void Delaunay_SortSites(Site *sites, int numSites )
+{
+   int gap, i, j;
+   Site temp;
+
+	for (gap = numSites/2; gap > 0; gap /= 2){
+		for (i = gap; i < numSites; i++){
+			for ( j = i-gap;
+				j >= 0 && ( (*(sites[j].coord))[0] != (*(sites[j+gap].coord))[0] ?
+					((*(sites[j].coord))[0] > (*(sites[j+gap].coord))[0]) : ((*(sites[j].coord))[1] > (*(sites[j+gap].coord))[1]));
+				j -= gap) 
+			{
+				memcpy( &temp, sites+j, sizeof( Site ) );
+				memcpy( sites+j, sites+j+gap, sizeof( Site ) );
+				memcpy( sites+j+gap, &temp, sizeof( Site ) );
+			}
+		}
+	}
+}
+
+/* Function to check if a point is to the right of an edge */
+int RightOf(Site *s, QuadEdgeRef e)
+{
+	double result=0;
+
+	CCW(s->coord, ((Site*)DEST(e))->coord, ((Site*)ORG(e))->coord, &result);
+
+	return result > 0.0;
+}
+
+/* Function to check if a point is to the left of an edge */
+int LeftOf(Site *s, QuadEdgeRef e)
+{
+	double result=0;
+	CCW(s->coord, ((Site*)ORG(e))->coord, ((Site*)DEST(e))->coord, &result);
+
+	return result > 0.0;
+}
+
+/* Function to check if a point is inside the circumcircle of three other points */
+int InCircle(Site *a, Site *b, Site *c, Site *d)
+{
+	double x1 = (*(a->coord))[0], y1 = (*(a->coord))[1];
+	double x2 = (*(b->coord))[0], y2 = (*(b->coord))[1];
+	double x3 = (*(c->coord))[0], y3 = (*(c->coord))[1];
+	double x4 = (*(d->coord))[0], y4 = (*(d->coord))[1];
+
+	return ((y4-y1)*(x2-x3)+(x4-x1)*(y2-y3))*((x4-x3)*(x2-x1)-(y4-y3)*(y2-y1)) >
+			((y4-y3)*(x2-x1)+(x4-x3)*(y2-y1))*((x4-x1)*(x2-x3)-(y4-y1)*(y2-y3));
+}
+
+/* This is the famous divide and conquer algorithm implemented from Guibas and Stolfi's 1985
+ * paper. Refer to ACM Transcations on graphics, Vol. 4, No. 2, April 1985, Pages 74-123 */
+void Delaunay_Recurse( Delaunay *delaunay, int sl, int sh, QuadEdgeRef *le, QuadEdgeRef *re )
+{
+	Site *sites = delaunay->sites;
+	
+	if (sh == sl+2) 
+	{
+		QuadEdgeRef a = MakeQuadEdge( delaunay->qp );
+		ORG(a) = &sites[sl]; DEST(a) = &sites[sl+1];
+		*le = a; *re = SYM(a);
+	}
+	else if (sh == sl+3) 
+	{
+		QuadEdgeRef a = MakeQuadEdge( delaunay->qp );
+		QuadEdgeRef b = MakeQuadEdge( delaunay->qp );
+		float ct;
+		CCW(sites[sl].coord, sites[sl+1].coord, sites[sl+2].coord, &ct);
+		SpliceQuadEdges(SYM(a), b);
+		ORG(a) = &sites[sl]; DEST(a) = &sites[sl+1];
+		ORG(b) = &sites[sl+1];  DEST(b) = &sites[sl+2];
+		if (ct == 0.0) 
+		{ *le = a; *re = SYM(b); }
+		else
+		{ QuadEdgeRef c = ConnectQuadEdges(delaunay->qp, b, a);
+			if (ct > 0.0) 
+			{ *le = a; *re = SYM(b); }
+			else 
+			{ *le = SYM(c); *re = c; }
+		}
+	}
+	else
+	{
+		QuadEdgeRef ldo = 0, ldi = 0, rdi = 0, rdo = 0;
+		QuadEdgeRef basel = 0, lcand = 0, rcand = 0;
+
+		int sm = (sl+sh)/2;
+
+		Delaunay_Recurse( delaunay, sl, sm, &ldo, &ldi );
+		Delaunay_Recurse( delaunay, sm, sh, &rdi, &rdo);
+
+		while (1) 
+		{
+			if (LeftOf(ORG(rdi), ldi)) ldi = LNEXT(ldi);
+			else if (RightOf(ORG(ldi), rdi)) rdi = ONEXT(SYM(rdi));
+			else break;
+		}
+
+		basel = ConnectQuadEdges(delaunay->qp, SYM(rdi), ldi);
+		if (ORG(ldi) == ORG(ldo)) ldo = SYM(basel);
+		if (ORG(rdi) == ORG(rdo)) rdo = basel;
+
+		while (1) 
+		{
+
+			lcand = ONEXT(SYM(basel));
+			if (RightOf(DEST(lcand), basel))
+				while (InCircle(DEST(basel), ORG(basel), DEST(lcand), DEST(ONEXT(lcand)))) 
+				{
+					QuadEdgeRef t = ONEXT(lcand);
+					
+					DeleteQuadEdge(delaunay->qp, lcand);
+					lcand = t;
+				}
+
+			rcand = OPREV(basel);
+			if (RightOf(DEST(rcand), basel))
+				while (InCircle(DEST(basel), ORG(basel), DEST(rcand), DEST(OPREV(rcand)))) 
+				{
+					QuadEdgeRef t = OPREV(rcand);
+
+					DeleteQuadEdge(delaunay->qp, rcand);
+					rcand = t;
+				}
+
+			if (!RightOf(DEST(lcand), basel) && !RightOf(DEST(rcand), basel)) break;
+
+			if ( !RightOf(DEST(lcand), basel) ||
+				( RightOf(DEST(rcand), basel) && 
+				InCircle(DEST(lcand), ORG(lcand), ORG(rcand), DEST(rcand))))
+				basel = ConnectQuadEdges(delaunay->qp, rcand, SYM(basel));
+			else
+				basel = ConnectQuadEdges(delaunay->qp, SYM(basel), SYM(lcand));
+		}
+		*le = ldo; *re = rdo;
+	}
+}
+
+/* Function to find the convex hull of a triangulated set of points */
+void Delaunay_FindHull( Delaunay *delaunay )
+{
+	QuadEdgeRef start = 0, le = 0;
+	
+	assert( delaunay );
+	
+	start = le = delaunay->leftMost;
+	
+	delaunay->hull = Memory_Alloc_Array_Unnamed( int, delaunay->numSites );
+	memset( delaunay->hull, 0, sizeof( int ) * delaunay->numSites );
+	
+	do{
+		delaunay->hull[((Site*)ORG(le))->id - delaunay->idOffset] = 1;
+		delaunay->hull[((Site*)DEST(le))->id - delaunay->idOffset] = 1;
+		le = RPREV(le);
+	}while(le != start);
+}
+
+/* Function for generating triangle indices from a triangulation */
+void Delaunay_BuildTriangleIndices( Delaunay *delaunay )
+{
+	int i = 0, triCount;
+	QuadEdgeRef e = 0, eStart = 0, eOnext = 0, eLnext = 0;
+	QuadEdge *edges = NULL;
+	Site *sites = NULL;
+	int maxEdges = 0;
+	unsigned int **triIndices = NULL;
+	int **edgeToTriangle = NULL;
+	int index = 0;
+
+	assert( delaunay );
+	
+	delaunay->triangleIndices = Memory_Alloc_Array_Unnamed( unsigned int*, delaunay->numFaces );
+	delaunay->triangleIndices[0] = Memory_Alloc_Array_Unnamed( unsigned int, delaunay->numFaces * 3 );
+	memset( delaunay->triangleIndices[0] , 0, sizeof(unsigned int) * delaunay->numFaces * 3 );
+	
+	if( delaunay->attributes->BuildTriangleNeighbours ){
+		delaunay->triangleNeighbours = Memory_Alloc_Array_Unnamed( unsigned int*, delaunay->numFaces );
+		delaunay->triangleNeighbours[0] = Memory_Alloc_Array_Unnamed( unsigned int, delaunay->numFaces * 3 );
+
+		edgeToTriangle = Memory_Alloc_Array_Unnamed( int*, delaunay->qp->numElements );
+		edgeToTriangle[0] = Memory_Alloc_Array_Unnamed( int, delaunay->qp->numElements * 2 );
+	}
+	
+	for( i=0; i<delaunay->numFaces; i++ ){
+		delaunay->triangleIndices[i] = delaunay->triangleIndices[0]+i*3;
+
+		if( delaunay->attributes->BuildTriangleNeighbours ){
+			delaunay->triangleNeighbours[i] = delaunay->triangleNeighbours[0]+i*3;
+			
+			delaunay->triangleNeighbours[i][0] = delaunay->numFaces-1;
+			delaunay->triangleNeighbours[i][1] = delaunay->numFaces-1;
+			delaunay->triangleNeighbours[i][2] = delaunay->numFaces-1;
+		}
+	}
+	
+	if( delaunay->attributes->BuildTriangleNeighbours ){
+		for( i=0; i<delaunay->qp->numElements; i++ ){
+			edgeToTriangle[i] = edgeToTriangle[0]+i*2;
+			
+			edgeToTriangle[i][0] = delaunay->numFaces-1;
+			edgeToTriangle[i][1] = delaunay->numFaces-1;
+		}
+	}
+		
+	triIndices = delaunay->triangleIndices;
+	
+	edges = (QuadEdge*)delaunay->qp->chunks[0].memory;
+	sites = delaunay->sites;
+	maxEdges = delaunay->qp->numElements;
+		
+	for (i = 0; i < maxEdges; i++) {
+		edges[i].count = 0;
+	}
+
+	triCount = 0;
+	for (i = 0; i < maxEdges; i++) {
+		
+		e = eStart = (QuadEdgeRef)((void*)&(edges[i]));
+		
+		if( IS_FREE(e) )continue;
+		
+		do{
+			eOnext = ONEXT(e);
+			eLnext = LNEXT(e);
+			
+			if( (COUNT(e)<2) && (COUNT(LNEXT(e))<2) && (COUNT(eOnext)<2) ){
+					if( ((((Site*)ORG(eLnext)) == ((Site*)DEST(e)))) &&
+					 ((((Site*)DEST(eLnext)) == ((Site*)DEST(eOnext)))) ){
+		
+						if( delaunay->attributes->BuildBoundingTriangle ){
+							if( (!( delaunay->hull[(((Site*)ORG(e))->id) - delaunay->idOffset] )) &&
+								(!( delaunay->hull[(((Site*)DEST(e))->id) - delaunay->idOffset] )) && 
+								(!( delaunay->hull[(((Site*)DEST(eOnext))->id) - delaunay->idOffset] )) )
+							{
+								triIndices[triCount][0] = (((Site*)ORG(e))->id);
+								triIndices[triCount][1] = (((Site*)DEST(e))->id);
+								triIndices[triCount][2] = (((Site*)DEST(eOnext))->id);
+
+								if( delaunay->attributes->BuildTriangleNeighbours ){
+									index = (int)(((QuadEdge*)((void*)e)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+									edgeToTriangle[index][COUNT(e)] = triCount;
+								
+									index = (int)(((QuadEdge*)((void*)eOnext)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+									edgeToTriangle[index][COUNT(eOnext)] = triCount;
+								
+									index = (int)(((QuadEdge*)((void*)eLnext)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+									edgeToTriangle[index][COUNT(eLnext)] = triCount;
+								}
+								
+								triCount++;
+							}
+						}
+						else{
+							triIndices[triCount][0] = (((Site*)ORG(e))->id);
+							triIndices[triCount][1] = (((Site*)DEST(e))->id);
+							triIndices[triCount][2] = (((Site*)DEST(eOnext))->id);
+							
+							if( delaunay->attributes->BuildTriangleNeighbours ){
+								index = (int)(((QuadEdge*)((void*)e)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+								edgeToTriangle[index][COUNT(e)] = triCount;
+								
+								index = (int)(((QuadEdge*)((void*)eOnext)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+								edgeToTriangle[index][COUNT(eOnext)] = triCount;
+								
+								index = (int)(((QuadEdge*)((void*)eLnext)) - (QuadEdge*)delaunay->qp->chunks[0].memory);
+								edgeToTriangle[index][COUNT(eLnext)] = triCount;
+							}
+
+							triCount++;
+						}
+
+						COUNT(e)++;
+						COUNT(LNEXT(e))++;
+						COUNT(eOnext)++;
+					}
+				}
+			e = eOnext;
+		}while( e != eStart );
+	}
+	
+	delaunay->numTriangles = triCount;
+
+	if( delaunay->attributes->BuildTriangleNeighbours ){
+		int *triangleNeighbourCount = NULL;
+
+		triangleNeighbourCount = Memory_Alloc_Array_Unnamed( int, delaunay->numFaces );
+		memset( triangleNeighbourCount, 0, sizeof( int ) * delaunay->numFaces );
+		
+		for( i=0; i<delaunay->qp->numElements; i++ ){
+			if( IS_FREE( (QuadEdgeRef)(&(delaunay->qp->chunks[0].memory[i*sizeof(QuadEdge)])) ) ) continue;
+
+		
+			if( edgeToTriangle[i][0] != (delaunay->numFaces-1) )
+				delaunay->triangleNeighbours[edgeToTriangle[i][0]][triangleNeighbourCount[edgeToTriangle[i][0]]++] = edgeToTriangle[i][1];
+		
+			if( edgeToTriangle[i][1] != (delaunay->numFaces-1) )
+				delaunay->triangleNeighbours[edgeToTriangle[i][1]][triangleNeighbourCount[edgeToTriangle[i][1]]++] = edgeToTriangle[i][0];
+		}
+		
+		Memory_Free( edgeToTriangle[0] );
+		Memory_Free( edgeToTriangle );
+		Memory_Free( triangleNeighbourCount );
+	}
+}
+
+/* Function for calculating voronoi vertices */
+void Delaunay_BuildVoronoiVertices( Delaunay *delaunay )
+{
+	int i = 0;
+	QuadEdgeRef e = 0, eStart = 0, eOnext = 0, eLnext = 0;
+	VoronoiVertex *new_voronoi_site = NULL;
+	QuadEdge *edges = NULL;
+	Site *sites = NULL;
+	int maxEdges = 0;
+
+	assert( delaunay );
+	
+	edges = (QuadEdge*)delaunay->qp->chunks[0].memory;
+	sites = delaunay->sites;
+	maxEdges = delaunay->qp->numElements;
+		
+	for (i = 0; i < maxEdges; i++) {
+		edges[i].count = 0;
+	}
+
+	for (i = 0; i < maxEdges; i++) {
+		
+		e = eStart = (QuadEdgeRef)((void*)&(edges[i]));
+		
+		if( IS_FREE(e) )continue;
+		
+		new_voronoi_site = NULL;
+		do{
+			eOnext = ONEXT(e);
+			eLnext = LNEXT(e);
+
+			if( (COUNT(e)<2) && (COUNT(LNEXT(e))<2) && (COUNT(eOnext)<2) ){
+					if( ((((Site*)ORG(eLnext)) == ((Site*)DEST(e)))) &&
+					 ((((Site*)DEST(eLnext)) == ((Site*)DEST(eOnext)))) ){
+						
+						/* voronoi */
+							
+						new_voronoi_site = MemoryPool_NewObject( VoronoiVertex, delaunay->vp );
+					
+						/* Fiding the center of the circumcircle defined by org(e), dest(eonext) and dest(e)
+						 * and retrieving the result via new_voronoi_site */
+						CIRCUM_CIRCLE( ((Site*)ORG(e))->coord, ((Site*)DEST(eOnext))->coord, ((Site*)DEST(e))->coord, &(new_voronoi_site) );
+						
+						/* Assigning the new voronoi vertex to the associated edges */
+						VDEST( e ) = new_voronoi_site;
+						VORG( eOnext ) = new_voronoi_site;
+						VDEST( eLnext ) = new_voronoi_site;
+						
+						/*         */
+						
+						/* Marking the edges so that we dont visit any edge more than twice */
+						COUNT(e)++;
+						COUNT(LNEXT(e))++;
+						COUNT(eOnext)++;
+					}
+				}
+			e = eOnext;
+		}while( e != eStart );
+	}
+}
+
+/* Function for finding the neighbours of each point, along with the sides
+ * of the voronoi cells and the surface area of the voronoi cells */
+void Delaunay_FindNeighbours( Delaunay *delaunay )
+{
+	int current_pos = 0, i = 0, count = 0, count1 = 0, numNeighboursSum;
+	int *tempNumNeighbours = NULL;
+	int maxEdges = 0, numSites = 0;
+	Site *src, *dst;
+	VoronoiVertex *vsrc, *vdst;
+	float dist = 0.0f, diffx = 0.0f, diffy = 0.0f, voronoiAreaResult = 0.0;
+	Site *sites = NULL;
+	QuadEdge *edges = NULL;
+	unsigned int *numNeighbours;
+	int *hull;
+	unsigned int **neighbours;
+	float *voronoiArea, **sides;
+	DelaunayAttributes *attr = NULL;
+
+	assert( delaunay );
+
+	attr = delaunay->attributes;
+	sites = delaunay->sites;
+	edges = (QuadEdge*)delaunay->qp->chunks[0].memory;
+	maxEdges = delaunay->qp->numElements;
+	numSites = delaunay->numSites;
+	
+	for (i = 0; i < maxEdges; i++) {
+		edges[i].count = 0;
+	}
+
+	delaunay->numNeighbours = Memory_Alloc_Array_Unnamed( unsigned int, numSites );
+	memset( delaunay->numNeighbours, 0, sizeof( unsigned int ) * numSites );
+	numNeighbours = delaunay->numNeighbours;
+	
+	hull = delaunay->hull;
+
+	numNeighboursSum = 0;
+	for( i=0; i<maxEdges; i++ ){
+		if( IS_FREE( (QuadEdgeRef)&(edges[i]) ) ) continue;
+		
+		if( edges[i].count == 0 ){
+			src = (Site*)ORG((QuadEdgeRef)((void*)(&(edges[i]))));
+			dst = (Site*)DEST((QuadEdgeRef)((void*)(&(edges[i]))));
+
+			if( (src->id < (delaunay->numInputSites+delaunay->idOffset)) 
+					&& (dst->id < (delaunay->numInputSites+delaunay->idOffset)) ){
+				
+				/* Finding the number of neighbours that each point has */
+				numNeighbours[src->id - delaunay->idOffset]++;
+				numNeighbours[dst->id - delaunay->idOffset]++;
+			
+				/* NumNeighboursSum is required for allocating just enough memory for storing the
+				 * actual neighbours and the sides of the voronoi celss */
+				numNeighboursSum += 2;
+
+			}
+
+			edges[i].count++;
+		}
+	}
+
+	/* allocating memory */
+	if( attr->CalculateVoronoiSurfaceArea ){
+		delaunay->voronoiArea = Memory_Alloc_Array_Unnamed( float, numSites );
+		memset( delaunay->voronoiArea, 0, sizeof( float ) * numSites );
+	}
+	
+	if( attr->FindNeighbours ){
+		delaunay->neighbours = Memory_Alloc_Array_Unnamed( unsigned int*, numSites );
+		delaunay->neighbours[0] = Memory_Alloc_Array_Unnamed( unsigned int, numNeighboursSum );
+		memset( delaunay->neighbours[0], 0, sizeof( unsigned int ) * numNeighboursSum );
+	}
+	
+	if( attr->CalculateVoronoiSides ){
+		delaunay->voronoiSides = Memory_Alloc_Array_Unnamed( float*, numSites );
+		delaunay->voronoiSides[0] = Memory_Alloc_Array_Unnamed( float, numNeighboursSum );
+		memset( delaunay->voronoiSides[0], 0, sizeof( float ) * numNeighboursSum );
+	}
+
+	tempNumNeighbours = Memory_Alloc_Array_Unnamed( int, numSites );
+	memcpy( tempNumNeighbours, numNeighbours, sizeof( int ) * numSites );
+
+	
+	voronoiArea = delaunay->voronoiArea;
+	neighbours = delaunay->neighbours;
+	sides = delaunay->voronoiSides;
+	
+	current_pos = 0;
+	for( i=0; i<numSites; i++ ){
+		
+		if( neighbours ) neighbours[i] = neighbours[0] + current_pos;
+		if( sides ) sides[i] = sides[0] + current_pos;
+		
+		current_pos += numNeighbours[i];
+	}
+	
+	for( i=0; i<maxEdges; i++ ){
+		if( IS_FREE( (QuadEdgeRef)&(edges[i]) ) ) continue;
+
+		src = (Site*)ORG((QuadEdgeRef)((void*)(&(edges[i]))));
+		dst = (Site*)DEST((QuadEdgeRef)((void*)(&(edges[i]))));
+
+		count = tempNumNeighbours[src->id - delaunay->idOffset];
+		count1 = tempNumNeighbours[dst->id - delaunay->idOffset];
+		
+		if( edges[i].count == 1 ){
+
+			if( (src->id < (delaunay->numInputSites+delaunay->idOffset)) 
+					&& (dst->id < (delaunay->numInputSites+delaunay->idOffset)) ){
+
+				vsrc = (VoronoiVertex*)VORG((QuadEdgeRef)((void*)(&(edges[i]))));
+				vdst = (VoronoiVertex*)VDEST((QuadEdgeRef)((void*)(&(edges[i]))));
+			
+				if( vsrc && vdst ){
+				
+					/* calculating the length of the voronoi sides */
+					if( attr->CalculateVoronoiSides ){
+					
+						diffx = ( vsrc->point[0] - vdst->point[0] );
+						diffy = ( vsrc->point[1] - vdst->point[1] );
+				
+						dist = sqrt( diffx*diffx + diffy*diffy );
+
+						sides[src->id - delaunay->idOffset][--count] = dist;
+						sides[dst->id - delaunay->idOffset][--count1] = dist;
+					}
+				
+					if( attr->CalculateVoronoiSurfaceArea ){
+					
+						/* calculating the voronoi surface area for each point, with the hull
+						 * nodes having an infinite unbounded area */
+
+						if( !(hull[src->id - delaunay->idOffset]) ){
+							CCW( src->coord, &(vsrc->point), &(vdst->point), &voronoiAreaResult );
+							voronoiArea[src->id - delaunay->idOffset] += FABS( voronoiAreaResult ) * 0.5;
+						}
+						else{
+							voronoiArea[src->id - delaunay->idOffset] = INFINITY;
+						}
+					
+						if( !(hull[dst->id - delaunay->idOffset]) ){
+							CCW( dst->coord, &(vsrc->point), &(vdst->point), &voronoiAreaResult );
+							voronoiArea[dst->id - delaunay->idOffset] += FABS( voronoiAreaResult ) * 0.5;
+						}
+						else{
+							voronoiArea[dst->id - delaunay->idOffset] = INFINITY;
+						}
+					}
+				}
+
+				/* Storing the actual neighbours of each node */
+				if( attr->FindNeighbours ){
+					neighbours[src->id - delaunay->idOffset][--tempNumNeighbours[src->id - delaunay->idOffset]] = dst->id;
+					neighbours[dst->id - delaunay->idOffset][--tempNumNeighbours[dst->id - delaunay->idOffset]] = src->id;
+				}
+			}
+			edges[i].count++;
+		}
+	}
+	Memory_Free(tempNumNeighbours);
+}
+
+/* Accessor functions below for accessing arrays inside the class */
+
+unsigned int **Delaunay_GetTriangleIndices( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->triangleIndices;
+}
+
+float **Delaunay_GetVoronoiSides( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->voronoiSides;
+}
+
+float *Delaunay_GetSurfaceArea( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->voronoiArea;
+}
+
+unsigned int *Delaunay_GetNumNeighbours( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->numNeighbours;
+}
+
+unsigned int **Delaunay_GetNeighbours( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->neighbours;
+}
+
+int *Delaunay_GetHull( Delaunay *delaunay )
+{
+	assert( delaunay );
+
+	return delaunay->hull;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Delaunay.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Delaunay.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,186 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Calculates the delaunay triangulation and the voronoi diangram of a set of points.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Delaunay.h 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Delaunay_h__
+#define __Domain_Geometry_Delaunay_h__
+
+	/* Virtual function types */
+	
+	/** Textual name of this class */
+	extern const Type Delaunay_Type;
+
+	typedef struct DelaunayAttributes_t{
+		int	BuildBoundingTriangle;
+		int BuildTriangleIndices;
+		int BuildTriangleNeighbours;
+		int CreateVoronoiVertices;
+		int CalculateVoronoiSides;
+		int CalculateVoronoiSurfaceArea;
+		int FindNeighbours;
+	}DelaunayAttributes;
+
+	typedef struct Site_t{
+		CoordF *coord;
+		int id;
+	}Site;
+
+	/** Delaunay class contents (see Delaunay) */
+	#define __Delaunay \
+		__Stg_Component \
+		Dictionary			*dictionary; \
+		MemoryPool			*qp; \
+		MemoryPool			*vp; \
+		int					numSites; \
+		int					numInputSites; \
+		CoordF				*points; \
+		Site				*sites; \
+		int					idOffset; \
+		CoordF				boundingTriangle[3]; \
+		int					numEdges; \
+		int					numVoronoiSites; \
+		int					numTriangles; \
+		int					numFaces; \
+		unsigned int		**triangleIndices; \
+		unsigned int		**triangleNeighbours; \
+		int					numVoronoiVertices; \
+		unsigned int		*numNeighbours; \
+		unsigned int		**neighbours; \
+		float				**voronoiSides; \
+		float				*voronoiArea; \
+		int					*hull; \
+		QuadEdgeRef			rightMost; \
+		QuadEdgeRef			leftMost; \
+		DelaunayAttributes *attributes;
+	
+	struct Delaunay { __Delaunay };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Create a Delaunay */
+	Delaunay* Delaunay_DefaultNew( Name name );
+	
+	Delaunay* Delaunay_New(
+		Name						name,
+		Dictionary*					dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							idOffset,
+		DelaunayAttributes			*attr );
+	
+	/** Initialise a Delaunay */
+	void Delaunay_Init(
+		Delaunay*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							idOffset,
+		DelaunayAttributes			*attr );
+	
+	/** Creation implementation */
+	Delaunay* _Delaunay_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Dictionary					*dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							idOffset,
+		DelaunayAttributes			*attr );
+	
+	void _Delaunay_Init( Delaunay* self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _Delaunay_Delete( void* delaunay );
+	
+	/** Stg_Class_Print() implementation */
+	void _Delaunay_Print( void* delaunay, Stream* stream );
+	
+	void *_Delaunay_Copy( void* delaunay, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _Delaunay_Construct( void* delaunay, Stg_ComponentFactory* cf, void* data );
+	
+	void _Delaunay_Build( void* delaunay, void* data );
+	
+	void _Delaunay_Initialise( void* delaunay, void* data );
+	
+	void _Delaunay_Execute( void* delaunay, void* data );
+	
+	void _Delaunay_Destroy( void* delaunay, void* data );
+
+	unsigned int **Delaunay_GetTriangleIndices( Delaunay *delaunay );
+	float **Delaunay_GetVoronoiSides( Delaunay *delaunay );
+	float *Delaunay_GetSurfaceArea( Delaunay *delaunay );
+	unsigned int *Delaunay_GetNumNeighbours( Delaunay *delaunay );
+	unsigned int **Delaunay_GetNeighbours( Delaunay *delaunay );
+	int *Delaunay_GetHull( Delaunay *delaunay );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	void Delaunay_SortSites(Site *sites, int numSites );
+	int RightOf(Site *s, QuadEdgeRef e);
+	int LeftOf(Site *s, QuadEdgeRef e);
+	int InCircle(Site *a, Site *b, Site *c, Site *d);
+	void Delaunay_Recurse( Delaunay *delaunay, int sl, int sh, QuadEdgeRef *le, QuadEdgeRef *re );
+	void Delaunay_FindHull( Delaunay *delaunay );
+	void Delaunay_BuildTriangleIndices( Delaunay *delaunay );
+	void Delaunay_BuildVoronoiVertices( Delaunay *delaunay );
+	void Delaunay_FindNeighbours( Delaunay *delaunay );
+	void Delaunay_FindMinMax( Site *sites, int count, float *minX, float *minY, float *maxX, float *maxY );
+	
+#endif /* __Domain_Geometry_Delaunay_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Delaunay.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Delaunay.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Delaunay</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Dimension.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Dimension.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,66 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Dimension.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "units.h"
+#include "types.h"
+#include "Dimension.h"
+
+void Dimension_3DTo1D_3_Func( Index dim0, Index dim1, Index dim2, 
+		Index dim0Size, Index dim1Size, Index dim2Size, 
+		Index* outputIndexPtr )
+{		
+	Index dimSizes[3];
+	dimSizes[0] = (dim0Size) ? (dim0Size) : 1;
+	dimSizes[1] = (dim1Size) ? (dim1Size) : 1;
+	dimSizes[2] = (dim2Size) ? (dim2Size) : 1;
+	
+	#if DEBUG 
+	{
+		Stream* dimensionError = Journal_Register( Error_Type, "DimensionMacros" );
+		Journal_Firewall( (dim0 < dimSizes[0]), dimensionError, "Error: Given coordinate[0] value %d >= "
+			"regionSize[0] %d\n", dim0, dimSizes[0] );
+		Journal_Firewall( (dim1 < dimSizes[1]), dimensionError, "Error: Given coordinate[1] value %d >= "
+			"regionSize[1] %d\n", dim1, dimSizes[1] );
+		Journal_Firewall( (dim2 < dimSizes[2]), dimensionError, "Error: Given coordinate[2] value %d >= "
+			"regionSize[2] %d\n", dim2, dimSizes[2] );
+	}	
+	#endif
+	
+	Dimension_3DTo1D_3_Macro( dim0, dim1, dim2, dim0Size, dim1Size, dim2Size, outputIndexPtr );
+}	
+
+void Dimension_1DTo3D_3_Func( Index index, Index dim0Size, Index dim1Size, Index dim2Size,
+		Index* dim0Ptr, Index* dim1Ptr, Index* dim2Ptr ) 
+{
+	Dimension_1DTo3D_3_Macro( index, dim0Size, dim1Size, dim2Size, dim0Ptr, dim1Ptr, dim2Ptr );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Dimension.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Dimension.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,99 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+** Role:
+**	Functions for converting from 1D indices to 3D co-ordinate numbers,
+**	and back again.
+**
+** Assumptions:
+**
+** Comments:
+**	These macros should be used anywhere where IJK-style conversions are 
+**	required. It was created since the FeEquationNumber needed to use 
+**	new co-ordinate systems.
+**
+** $Id: Dimension.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Dimension_h__
+#define __Domain_Geometry_Dimension_h__
+
+	/** Converts 3 3d coordinates into the sequential number for a given sized region. */ 
+	#define Dimension_3DTo1D_3_Macro( dim0, dim1, dim2, dim0Size, dim1Size, dim2Size, indexPtr ) \
+	do { \
+		Index dimSizes[3]; \
+		dimSizes[0] = (dim0Size) ? (dim0Size) : 1; \
+		dimSizes[1] = (dim1Size) ? (dim1Size) : 1; \
+		dimSizes[2] = (dim2Size) ? (dim2Size) : 1; \
+		\
+		*(indexPtr) = ( ((dim2)*dimSizes[0]*dimSizes[1]) + ((dim1)*dimSizes[0]) + (dim0) ); \
+	} while (0) 
+	
+	void Dimension_3DTo1D_3_Func( Index dim0, Index dim1, Index dim2, 
+		Index dim0Size, Index dim1Size, Index dim2Size, 
+		Index* outputIndexPtr );
+
+	#ifdef MACRO_AS_FUNC
+		#define Dimension_3DTo1D_3 Dimension_3DTo1D_3_Func
+	#else	
+		#define Dimension_3DTo1D_3 Dimension_3DTo1D_3_Macro
+	#endif	
+
+
+	/** Converts a 3d coordinate into the sequential number for a given sized region. */ 
+	#define Dimension_3DTo1D( coord, regionSizes, indexPtr ) \
+		Dimension_3DTo1D_3( (coord)[0], (coord)[1], (coord)[2], (regionSizes)[0], (regionSizes)[1], (regionSizes)[2], indexPtr )
+
+	/** Converts a sequential number into the 3d co-ordinates for a given region, returned separately */ 
+	#define Dimension_1DTo3D_3_Macro( index, dim0Size, dim1Size, dim2Size, dim0Ptr, dim1Ptr, dim2Ptr ) \
+	do { \
+		Index dimSizes[3]; \
+		dimSizes[0] = (dim0Size) ? (dim0Size) : 1; \
+		dimSizes[1] = (dim1Size) ? (dim1Size) : 1; \
+		dimSizes[2] = (dim2Size) ? (dim2Size) : 1; \
+		\
+		*(dim0Ptr) = (index) % (dimSizes[0]); \
+		*(dim1Ptr) = ((index)/(dimSizes[0])) % (dimSizes[1]); \
+		*(dim2Ptr) = ((index)/((dimSizes[0])*(dimSizes[1]))) % (dimSizes[2]); \
+	} while (0) 
+
+	void Dimension_1DTo3D_3_Func( Index index, Index dim0Size, Index dim1Size, Index dim2Size,
+		Index* dim0Ptr, Index* dim1Ptr, Index* dim2Ptr );
+	#ifdef MACRO_AS_FUNC
+		#define Dimension_1DTo3D_3 Dimension_1DTo3D_3_Func
+	#else
+		#define Dimension_1DTo3D_3 Dimension_1DTo3D_3_Macro
+	#endif
+
+		
+	/** Converts a sequential number into the 3d co-ordinates for a given region, returned as one */ 
+	#define Dimension_1DTo3D( index, regionSizes, coord ) \
+		Dimension_1DTo3D_3( index, (regionSizes)[0], (regionSizes)[1], (regionSizes)[2], &(coord)[0], &(coord)[1], &(coord)[2] )
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Edge.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Edge.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,97 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Edge.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Edge.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+#define Edge_TriMax( triCount )		\
+	(2 * triCount + 1)
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Edge_Index Edge_BuildList_FromTriangles(
+		Triangle_List		triTbl, 
+		Triangle_Index		triCount, 
+		Edge_List*		edgeTbl, 
+		EdgeFaces_List*		edgeFacesTbl )
+{
+	Edge_Index	cnt = 0;
+	Triangle_Index	tri_I;
+	
+	*edgeTbl = Memory_Alloc_Array( Edge, Edge_TriMax(triCount), "Edge->edgeTbl" );
+	*edgeFacesTbl = Memory_Alloc_Array( EdgeFaces, Edge_TriMax(triCount), "Edge->edgeFacesTbl" );
+	
+	for( tri_I = 0; tri_I < triCount; tri_I++ )
+	{
+		Index		i;
+		
+		for( i = 0; i < 3; i++ )
+		{
+			Coord_Index	p1 = triTbl[tri_I][i];
+			Coord_Index	p2 = triTbl[tri_I][(i + 1) % 3];
+			Edge_Index	edge_I;
+			
+			for( edge_I = 0; edge_I < cnt; edge_I++ )
+				if( (p1 == (*edgeTbl)[edge_I][0] && p2 == (*edgeTbl)[edge_I][1]) ||
+				    (p1 == (*edgeTbl)[edge_I][1] && p2 == (*edgeTbl)[edge_I][0]) ) break;
+			if (edge_I < cnt)
+			{
+				(*edgeFacesTbl)[edge_I][1] = tri_I;
+				continue;
+			}
+			
+			(*edgeTbl)[cnt][0] = p1;
+			(*edgeTbl)[cnt][1] = p2;
+			(*edgeFacesTbl)[cnt][0] = tri_I;
+			(*edgeFacesTbl)[cnt++][1] = triCount;
+		}
+	}
+	
+	*edgeTbl = Memory_Realloc_Array( *edgeTbl, Edge, cnt );
+	*edgeFacesTbl = Memory_Realloc_Array( *edgeFacesTbl, EdgeFaces, cnt );
+
+	return cnt;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Edge.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Edge.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,59 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic edge routines.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Edge.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Edge_h__
+#define __Domain_Geometry_Edge_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	/* constructs a list of edges and a list of faces touching each edge from a list of triangles */
+	Edge_Index Edge_BuildList_FromTriangles(
+			Triangle_List		triTbl, 
+			Triangle_Index		triCount, 
+			Edge_List*		edgeTbl, 
+			EdgeFaces_List*		edgeFacesTbl );
+
+	
+#endif /* __Domain_Geometry_Edge_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,45 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StgDomainGeometry_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Finalise_h__
+#define __Domain_Geometry_Finalise_h__
+	
+	Bool StgDomainGeometry_Finalise( void );
+	
+#endif /* __Domain_Geometry_Finalise_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/FullTensorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/FullTensorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,495 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: FullTensorMath.c  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "units.h"
+#include "types.h"
+#include "TensorMath.h"
+#include "VectorMath.h"
+#include "FullTensorMath.h"
+#include "ComplexVectorMath.h"
+#include "ComplexMath.h"
+#include "stg_lapack.h"
+
+#include <math.h>
+#include <string.h>
+
+#define STG_TENSOR_ERROR 1.0e-05;
+
+
+
+
+/** This function converts TensorArray's to ComplexTensorArray's */
+void TensorArray_ToComplexTensorArray(TensorArray tensorArray, ComplexTensorArray complexTensorArray, Dimension_Index dim) {
+	Dimension_Index index_I;
+
+	if (dim !=2 ) {
+		if (dim != 3) {
+			Journal_Firewall( False, Journal_Register( Error_Type, "FullTensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}	
+			
+	for (index_I = 0; index_I < dim * dim; index_I++) {
+		complexTensorArray[index_I][REAL_PART] = tensorArray[index_I];
+		complexTensorArray[index_I][IMAG_PART] = 0.0;
+	}
+	return;			
+}
+/** This function converts ComplexTensorArrays back into TensorArrays.
+If there are any non-zero entries for complex components,
+this function will JournalFirewall and exit */
+void ComplexTensorArray_ToTensorArray(ComplexTensorArray complexTensorArray, TensorArray tensorArray, Dimension_Index dim) {
+	Dimension_Index index_I;
+	Stream* error = Journal_Register( ErrorStream_Type, "FullTensorMath" );
+
+	if (dim !=2 ) {
+		if (dim != 3) {
+			Journal_Firewall( False, Journal_Register( Error_Type, "FullTensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+		
+	for (index_I = 0; index_I < dim * dim; index_I++) {
+		if (complexTensorArray[index_I][IMAG_PART] == 0) {
+			
+			tensorArray[index_I] = complexTensorArray[index_I][REAL_PART];
+		}
+	
+		else {
+			Journal_Printf(error, "Cannot convert to real matrix:\n");			
+			Journal_Printf(error, "Indicee %d in complexTensorArray is complex value.\n", index_I);
+			Journal_PrintComplexTensorArray(error, complexTensorArray, dim);
+			Journal_Firewall( False, error, "In func '%s'. Cannot convert ComplexTensor to Real Tensor \n", __func__ );
+		}
+	}
+	
+	return;		
+}
+/** This function converts ComplexTensorArrays to Complex Square Matrices */
+void ComplexTensorArray_ToComplexMatrix(ComplexTensorArray complexTensor, Dimension_Index dim, Cmplx** complexMatrix ) {
+	if (dim == 2) {
+		Cmplx_Copy(complexTensor[FT2D_00], complexMatrix[0][0]); 			
+		Cmplx_Copy(complexTensor[FT2D_01], complexMatrix[0][1]);	
+		Cmplx_Copy(complexTensor[FT2D_10], complexMatrix[1][0]);		
+		Cmplx_Copy(complexTensor[FT2D_11], complexMatrix[1][1]);	
+	}
+	else if (dim == 3) {
+		Cmplx_Copy(complexTensor[FT3D_00], complexMatrix[0][0]);	
+		Cmplx_Copy(complexTensor[FT3D_01], complexMatrix[0][1]);	
+		Cmplx_Copy(complexTensor[FT3D_02], complexMatrix[0][2]);
+		
+		Cmplx_Copy(complexTensor[FT3D_10], complexMatrix[1][0]);		
+		Cmplx_Copy(complexTensor[FT3D_11], complexMatrix[1][1]);	
+		Cmplx_Copy(complexTensor[FT3D_12], complexMatrix[1][2]);
+		
+		Cmplx_Copy(complexTensor[FT3D_20], complexMatrix[2][0]);	
+		Cmplx_Copy(complexTensor[FT3D_21], complexMatrix[2][1]);			
+		Cmplx_Copy(complexTensor[FT3D_22], complexMatrix[2][2]);	
+	}
+	else {
+		Journal_Firewall( False, Journal_Register( Error_Type, "FullTensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+}
+
+/** This function calculates only the eigenvalues of a given TensorArray */
+void TensorArray_CalcAllEigenvalues( TensorArray tensor, Dimension_Index dim, ComplexEigenvector* eigenvectorList ) {
+	/* False flag means Eigenvectors are not written to eigenvectorList */
+	TensorArray_CalcAllEigenFunctions(tensor, dim, False, eigenvectorList);
+	
+}
+
+/** This function calculates only the eigenvalues of a given 2D TensorArray */
+void TensorArray_CalcAllEigenvalues2D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) {
+	/* False flag means Eigenvectors are not written to eigenvectorList */
+	TensorArray_CalcAllEigenFunctions(tensor, 2, False, eigenvectorList);
+	
+}
+
+/** This function calculates only the eigenvalues of a given 3D TensorArray */
+void TensorArray_CalcAllEigenvalues3D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) {
+	/* False flag means Eigenvectors are not written to eigenvectorList */
+	TensorArray_CalcAllEigenFunctions(tensor, 3, False, eigenvectorList);
+	
+}
+
+/** This function is a wrapper to calculate all eigenvalues and vectors for 2 or 3D TensorArray's */
+void TensorArray_CalcAllEigenvectors(TensorArray tensor, Dimension_Index dim, ComplexEigenvector* eigenvectorList){
+	/* True flag means eigenvalues and vectors are calculated */
+	TensorArray_CalcAllEigenFunctions(tensor, dim, True, eigenvectorList);
+
+	ComplexEigenvectorList_Sort( eigenvectorList, dim );
+}
+
+/** This function is a wrapper to calculate all eigenvalues and vectors for 2D TensorArray's */
+void TensorArray_CalcAllEigenvectors2D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) {
+	
+	/* True flag means eigenvalues and vectors are calculated */
+
+	TensorArray_CalcAllEigenFunctions(tensor, 2, True, eigenvectorList);
+
+	ComplexEigenvectorList_Sort( eigenvectorList, 2 );
+	
+
+}
+/** This function is a wrapper to calculate all eigenvalues and vectors for 3D TensorArray's */
+void TensorArray_CalcAllEigenvectors3D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) {
+	
+	/* True flag means eigenvalues and vectors are calculated */
+
+	TensorArray_CalcAllEigenFunctions(tensor, 3, True, eigenvectorList);
+
+	ComplexEigenvectorList_Sort( eigenvectorList, 3 );
+	
+
+}
+
+/** This function will call the blas-lapack library and calculate the eigenvalues and eigenvectors
+For a given tensorArray and return the answers in a ComplexEigenvector structure.*/
+void TensorArray_CalcAllEigenFunctions(TensorArray tensor, Dimension_Index dim, Bool eigenFlag, ComplexEigenvector* eigenvectorList) {
+/**This function will call the blas-lapack library and calculate the eigenvalues and eigenvectors */
+	/* Define functions needed to pass to blaslapack library function */
+	char jobVecLeft='V';
+	char jobVecRight='N';
+	
+	double* arrayA;
+	int	leadDimVL, leadDimVR, dimWorkSpace, INFO;
+	double errorValue;
+    double* workSpace;
+    double* outputReal;
+    double* outputImag;
+    double* leftEigenVec;
+    double* rightEigenVec;
+	
+	int row_I, col_I; 
+	/*char* 	errorStringValues; */
+	Stream* errorStream = Journal_Register( ErrorStream_Type, "FullTensorMath" );
+	
+	/* Set size of workspace to pass to function */
+	dimWorkSpace = 10*dim;
+
+	/* define array size */
+	arrayA = Memory_Alloc_Array( double, dim * dim, "ArrayA" );				
+
+	/* define output eigenvalue matrices */
+	outputReal = Memory_Alloc_Array( double, dim, "OutputReal" );				
+	outputImag = Memory_Alloc_Array( double, dim, "OutputImag" );
+	for (row_I = 0; row_I < dim; row_I++) {
+		outputReal[row_I] = 0;
+		outputImag[row_I] = 0;
+	}
+	/* Define workspace */
+	workSpace = Memory_Alloc_Array( double, dimWorkSpace, "DimWorkSpace" );
+	
+	/* Transpose array so that it is in Fortran-style indexing */
+	for( row_I = 0 ; row_I < dim ; row_I++ ) {
+		 for( col_I = 0 ; col_I < dim ; col_I++ ) {
+			arrayA[ ( row_I * dim ) + col_I ] = tensor[TensorArray_TensorMap(row_I, col_I, dim)];
+		 }
+	}
+	 /* Turn off eigenvector calculations if eigenvector flag is not set */
+	if (eigenFlag == False) {
+		 jobVecLeft = 'N';
+	}
+	/* Set sizes for eigenvectors */
+	if (jobVecLeft=='V') {
+		/* times size by 2 to account for complex eigenvectors */
+		leadDimVL = 2*dim;
+	}
+	else {
+		leadDimVL = 1;
+	}
+	/* Set sizes for alternate eigenvectors
+	This is currently always turned off since calculating right eigenvectors
+	as well is redundant */
+	if (jobVecRight=='V') {
+		/* times 2 to account for complex eigenvectors */
+		leadDimVR = 2*dim;
+	}
+	else {
+		leadDimVR = 1;
+	}
+	
+	/* set size of eigenvector arrays */
+	leftEigenVec = Memory_Alloc_Array( double, leadDimVL * dim, "LeftEigenVec" );				
+	rightEigenVec = Memory_Alloc_Array( double, leadDimVR * dim, "RightEigenVec" );
+	for (row_I = 0; row_I < leadDimVL * dim; row_I++) {
+		leftEigenVec[row_I] = 0;
+	}
+	for (row_I = 0; row_I < leadDimVR * dim; row_I++) {
+		rightEigenVec[row_I] = 0;
+	}
+	
+	/* Definitions of lapack call inputs (from dgeev man page):
+
+		JOBVL   (input) CHARACTER*1
+				  = 'N': left eigenvectors of A are not computed;
+				  = 'V': left eigenvectors of A are computed.
+		JOBVR   (input) CHARACTER*1
+				 = 'N': right eigenvectors of A are not computed;
+				 = 'V': right eigenvectors of A are computed
+		N       (input) INTEGER
+				 The order of the matrix A. N >= 0.
+		A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+				 On entry, the N-by-N matrix A.
+				 On exit, A has been overwritten.
+		LDA     (input) INTEGER
+				 The leading dimension of the array A.  LDA >= max(1,N).
+		WR      (output) DOUBLE PRECISION array, dimension (N)
+		WI      (output) DOUBLE PRECISION array, dimension (N)
+				 WR and WI contain the real and imaginary parts,
+				 respectively, of the computed eigenvalues.  Complex
+				 conjugate pairs of eigenvalues appear consecutively
+				 with the eigenvalue having the positive imaginary part
+				 first.
+		VL      (output) DOUBLE PRECISION array, dimension (LDVL,N)
+				 If JOBVL = 'V', the left eigenvectors u(j) are stored one
+				 after another in the columns of VL, in the same order
+				 as their eigenvalues.
+				 If JOBVL = 'N', VL is not referenced.
+				 If the j-th eigenvalue is real, then u(j) = VL(:,j),
+				 the j-th column of VL.
+				 If the j-th and (j+1)-st eigenvalues form a complex
+				 conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and
+				 u(j+1) = VL(:,j) - i*VL(:,j+1).
+		LDVL    (input) INTEGER
+				 The leading dimension of the array VL.  LDVL >= 1; if
+				 JOBVL = 'V', LDVL >= N.
+		VR      (output) DOUBLE PRECISION array, dimension (LDVR,N)
+				 If JOBVR = 'V', the right eigenvectors v(j) are stored one
+				 after another in the columns of VR, in the same order
+				 as their eigenvalues.
+				 If JOBVR = 'N', VR is not referenced.
+				 If the j-th eigenvalue is real, then v(j) = VR(:,j),
+				 the j-th column of VR.
+				 If the j-th and (j+1)-st eigenvalues form a complex
+				 conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and
+				 v(j+1) = VR(:,j) - i*VR(:,j+1).
+		LDVR    (input) INTEGER
+				 The leading dimension of the array VR.  LDVR >= 1; if
+				 JOBVR = 'V', LDVR >= N.
+		WORK    (workspace/output) DOUBLE PRECISION array, dimension (LWORK)
+				 On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+		
+		LWORK   (input) INTEGER
+				 The dimension of the array WORK.  LWORK >= max(1,3*N), and
+				 if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*N.  For good
+				 performance, LWORK must generally be larger.
+				 If LWORK = -1, a workspace query is assumed.  The optimal
+				 size for the WORK array is calculated and stored in WORK(1),
+				 and no other work except argument checking is performed.
+		INFO    (output) INTEGER
+				 = 0:  successful exit
+				 < 0:  if INFO = -i, the i-th argument had an illegal value.
+				 > 0:  if INFO = i, the QR algorithm failed to compute all the
+					   eigenvalues, and no eigenvectors have been computed;
+					   elements i+1:N of WR and WI contain eigenvalues which
+					   have converged.	 
+	*/	 
+
+
+	/** Passes into blaslapack function dgeev:
+		 From Man page:
+		 	1.  JOBVL			2.	JOBVR 			3.	N 
+			4.	A 				5.	LDA 			6.	WR 
+			7.	WI	 			8. 	VL	 			9. 	LDVL 
+			10.	VR 				11.	LDVR 			12.	WORK 
+			13.	LWORK 			14. INFO 
+		 
+		 In this code:
+		 	1.  &jobVecLeft		2.  &jobVecRight 	3. &dimOrderN 
+		 	4.  arrayA 			5.  &dim 	 		6. outputReal
+			7.  outputImag		8.  leftEigenVec 	9. &dimOrderN
+			10. rightEigenVec	11. &dimOrderN		12. workSpace
+			13. &dimWorkSpace	14. &INFO		 
+		 */
+		 
+	/** Calls blas-lapack function, dgeev through stg_lapack header file substitution
+	to take account of different Fortran compilers	*/	 
+	stg_dgeev( &jobVecLeft, &jobVecRight, &dim, arrayA, &dim, 
+	 		outputReal, outputImag, leftEigenVec, &leadDimVL, 
+	 		rightEigenVec, &leadDimVR, workSpace, &dimWorkSpace, &INFO );
+
+
+	/* Check flag for succesful calculation */
+
+	if (INFO < 0) {
+		Journal_Printf( errorStream, "Error in %s, Blas-Lapack failed at %f-th argument for tensor:", 
+		__func__, fabs(INFO));
+		Journal_PrintTensorArray( errorStream, tensor, dim );
+		Journal_Firewall(INFO , errorStream, "Error.\n" );
+
+	}
+	else if (INFO > 0) {
+		Journal_Printf( errorStream, "Error in %s, Blas-Lapack function failed for tensor:", __func__ );
+		Journal_PrintTensorArray( errorStream, tensor, dim );
+		Journal_Firewall(INFO, errorStream, "Error.\n" );		
+	}
+	
+
+/*Pass values back */
+	errorValue = STG_TENSOR_ERROR;	
+	/* Assign eigenvalues */
+	for (col_I=0; col_I < dim; col_I++) {
+		
+		eigenvectorList[col_I].eigenvalue[REAL_PART] = outputReal[col_I];
+		eigenvectorList[col_I].eigenvalue[IMAG_PART] = outputImag[col_I];
+		if (fabs(eigenvectorList[col_I].eigenvalue[REAL_PART]) < errorValue) {
+			eigenvectorList[col_I].eigenvalue[REAL_PART] = 0;
+		}
+		if (fabs(eigenvectorList[col_I].eigenvalue[IMAG_PART]) < errorValue) {
+			eigenvectorList[col_I].eigenvalue[IMAG_PART] = 0;
+		}	
+	}
+	
+	/* If eigenvectors have been calculated */
+	if (eigenFlag == True ) {
+		int index_K;
+		int numSign;
+		
+		/* Assign eigenvectors - see format for VL in comments for lapack pass above*/
+		for (col_I=0; col_I < dim; col_I++) {
+			
+			if (outputImag[col_I] == 0.0) {
+				for (row_I = 0; row_I < dim; row_I++) {
+					eigenvectorList[col_I].vector[row_I][REAL_PART] = leftEigenVec[col_I * leadDimVL + row_I];
+					eigenvectorList[col_I].vector[row_I][IMAG_PART] = 0;
+				}
+			}
+			else {
+				for (index_K = col_I; index_K <= col_I + 1; index_K++) {
+					
+					/* set sign of complex vector components */
+					if (index_K == col_I) {
+						numSign = -1;
+					}
+					else {
+						numSign = 1;
+					}	
+					for (row_I = 0; row_I < dim; row_I++) {
+					
+						/* u(col, row) = v(row, col) 
+											     \+- i * v(row, col + 1) */
+						eigenvectorList[index_K].vector[row_I][REAL_PART] = 
+							leftEigenVec[col_I * leadDimVL + row_I];
+			
+						eigenvectorList[index_K].vector[row_I][IMAG_PART] = 
+							numSign * leftEigenVec[(col_I + 1) * leadDimVL + row_I];
+					
+
+					}
+				}
+				col_I++;
+			}
+		}
+	}
+	/* Round up values that are less than the error bar */
+	for (row_I = 0; row_I < dim; row_I++) {
+		for (col_I = 0; col_I <dim; col_I++) {
+			
+			if (fabs(eigenvectorList[row_I].vector[col_I][REAL_PART]) < errorValue) {
+						eigenvectorList[row_I].vector[col_I][REAL_PART] = 0.0;
+				}
+			if (fabs(eigenvectorList[row_I].vector[col_I][IMAG_PART]) < errorValue) {
+						eigenvectorList[row_I].vector[col_I][IMAG_PART] = 0.0;
+				} 	
+		}
+	}
+	
+	
+				
+	/* Free memory and exit function */
+	Memory_Free( arrayA );
+	Memory_Free( outputReal );
+	Memory_Free( outputImag );
+	Memory_Free( leftEigenVec );
+	Memory_Free( rightEigenVec );
+	Memory_Free( workSpace );	
+}
+/** This function checks eigenvalues to find which of
+the two has the biggest modulus*/
+int _QsortComplexEigenvalue( const void* _a, const void* _b ) {
+	ComplexEigenvector* a = (ComplexEigenvector*) _a;
+	ComplexEigenvector* b = (ComplexEigenvector*) _b;
+	double tmp_a, tmp_b;
+	tmp_a = Cmplx_Modulus(a->eigenvalue);
+	tmp_b = Cmplx_Modulus(b->eigenvalue);
+	if ( tmp_a > tmp_b )
+		return 1;
+	else
+		return -1;
+}
+
+/** Sorts the eigenvectors and eigenvalues according to the value of the modulus of the 
+eigenvalue - from smallest to greatest */
+void ComplexEigenvectorList_Sort( ComplexEigenvector* eigenvectorList, Index count ) {
+	qsort( eigenvectorList, count, sizeof( ComplexEigenvector ), _QsortComplexEigenvalue );
+
+}
+/** This function prints a ComplexTensorArray 
+At present, it only shows %7.5g as the format.
+TODO: It would be nice in future to make this variable.*/
+void Journal_PrintComplexTensorArray_Unnamed( Stream* stream, ComplexTensorArray tensor, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g + %7.5g i", 
+				tensor[ MAP_TENSOR( row_I, col_I, dim ) ][REAL_PART], 
+				tensor[ MAP_TENSOR( row_I, col_I, dim ) ][IMAG_PART]);
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
+
+/** This function prints a Complex Square matrix */
+void Journal_PrintComplexMatrix_Unnamed( Stream* stream, Cmplx** complexMatrix, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g + %7.5g i", 
+				complexMatrix[row_I][col_I][REAL_PART], 
+				complexMatrix[row_I][col_I][IMAG_PART]);
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/FullTensorMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/FullTensorMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,135 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic full tensor operations and conversions.
+**
+** Assumptions:
+** Comments:
+**
+** $Id: FullTensorMath.h  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_FullTensorMath_h__
+#define __Domain_Geometry_FullTensorMath_h__
+
+#include "ComplexMath.h"
+#include "ComplexVectorMath.h"
+#include "TensorMath.h"
+
+
+/** Create complex eigenvalue and vector:
+	This creates a Cmplx tuple to represent the vector
+	And a Complex value to represent the eigenvalue.
+	These can be referenced by:
+	{eigenvectorName}.vector[{indexNumber}], or {eigenvectorName}.eigenvalue
+	*/
+typedef struct {
+	XYZC    vector;
+	Cmplx eigenvalue;
+} ComplexEigenvector;
+
+/** TensorArray - Tensor (t_{ij}) here is defined in 2D as
+	 * t_{00} = tensor[0] t_{01} = tensor[1]
+	 * t_{10} = tensor[2] t_{11} = tensor[3] 
+	 *
+	 * and in 3D as
+	 * t_{00} = tensor[0] t_{01} = tensor[1] t_{02} = tensor[2]
+	 * t_{10} = tensor[3] t_{11} = tensor[4] t_{12} = tensor[5]
+	 * t_{20} = tensor[6] t_{21} = tensor[7] t_{22} = tensor[8]
+	 *
+	 * */
+
+	/** SymmetricTensor - stores only unique components 
+	 * in 2D
+	 * tensor[0] = u_{00}
+	 * tensor[1] = u_{11}
+	 * tensor[2] = u_{12} = u_{21}
+	 *
+	 * in 3D
+	 * tensor[0] = u_{00}
+	 * tensor[1] = u_{11}
+	 * tensor[2] = u_{22}
+	 * tensor[3] = u_{01} = u_{10}
+	 * tensor[4] = u_{02} = u_{20}
+	 * tensor[5] = u_{12} = u_{21}
+	 */
+
+
+/* Define ComplexTensor conversion function */ 	
+void TensorArray_ToComplexTensorArray(TensorArray tensorArray, ComplexTensorArray complexTensorArray, Dimension_Index dim);
+
+void ComplexTensorArray_ToTensorArray(ComplexTensorArray complexTensorArray, TensorArray tensorArray, Dimension_Index dim);
+
+void ComplexTensorArray_ToComplexMatrix(ComplexTensorArray complexTensor, Dimension_Index dim, Cmplx** complexMatrix ) ;
+
+
+/* Define all Eigenvalue and Eigenvector functions for TensorArray's */
+
+void TensorArray_CalcAllEigenvalues( TensorArray tensor, Dimension_Index dim, ComplexEigenvector* eigenvectorList ) ;
+
+void TensorArray_CalcAllEigenvalues2D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) ;
+void TensorArray_CalcAllEigenvalues3D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) ;
+
+
+void TensorArray_CalcAllEigenvectors( TensorArray tensor, Dimension_Index dim, ComplexEigenvector* eigenvectorList );
+
+void TensorArray_CalcAllEigenvectors2D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) ;
+void TensorArray_CalcAllEigenvectors3D( TensorArray tensor, ComplexEigenvector* eigenvectorList ) ;
+
+void TensorArray_CalcAllEigenFunctions(TensorArray tensor, Dimension_Index dim, Bool EigenFlag, ComplexEigenvector* eigenvectorList);
+
+/* Sorts the eigenvectors according to the value of the eigenvalue - from smallest to greatest */
+
+void ComplexEigenvectorList_Sort( ComplexEigenvector* eigenvectorList, Index count );
+
+
+/* Define print statements */
+
+/** Print a named ComplexTensorArray */
+#define Journal_PrintComplexTensorArray(stream, tensor, dim) \
+	do {	\
+		Journal_Printf( stream, #tensor " - \n" ); \
+		Journal_PrintComplexTensorArray_Unnamed( stream, tensor, dim ); \
+	} while(0) 
+
+void Journal_PrintComplexTensorArray_Unnamed( Stream* stream, ComplexTensorArray tensor, Dimension_Index dim ); 
+
+	/** Print a named ComplexMatrix */
+#define Journal_PrintComplexMatrix(stream, matrix, dim) \
+	do {	\
+		Journal_Printf( stream, #matrix " - \n" ); \
+		Journal_PrintComplexMatrix_Unnamed( stream, matrix, dim ); \
+	} while(0) 
+	
+void Journal_PrintComplexMatrix_Unnamed( Stream* stream, Cmplx** complexMatrix, Dimension_Index dim ) ;
+
+	
+	
+#endif /* __Domain_Geometry_FullTensorMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Geometry.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Geometry.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,79 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Geometry.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_h__
+#define __Domain_Geometry_h__
+	
+	#include "units.h"
+	#include "types.h"
+	#include "isinf.h"
+	#include "Dimension.h"
+	#include "VectorMath.h"
+	#include "TensorMath.h"
+	#include "TrigMath.h"
+	#include "ComplexMath.h"
+	#include "Plane.h"
+	#include "Edge.h"
+	#include "Line.h"
+	#include "RMatrix.h"
+	#include "Topology.h"
+	#include "IJKTopology.h"
+	#include "IJK6Topology.h"
+	#include "IJK26Topology.h"
+	#include "IrregTopology.h"
+	#include "GeometryClass.h"
+	#include "BlockGeometry.h"
+	#include "RefinedRegionsGeometry.h"
+	#include "ShellGeometry.h"
+	#include "IrregGeometry.h"
+	#include "QuadEdge.h"
+	#include "Delaunay.h"
+	#include "ParallelDelaunay.h"
+	#include "ComplexVectorMath.h"
+	#include "stg_lapack.h"
+	#include "FullTensorMath.h"
+	#include "TensorMultMath.h"
+	#include "Simplex.h"
+	#include "Hex.h"
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Domain_Geometry_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/GeometryClass.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/GeometryClass.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,157 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) {
+	IrregTopology* self = (IrregTopology*)ir
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: GeometryClass.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type Geometry_Type = "Geometry";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Geometry* _Geometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary )
+{
+	Geometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Geometry) );
+	self = (Geometry*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor, _construct, _build, 
+			_initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->buildPoints = buildPoints;
+	self->pointAt = pointAt;
+	
+	/* Geometry info */
+	if( initFlag ){
+		_Geometry_Init( self );
+	}
+	
+	return self;
+}
+
+void _Geometry_Init(
+		Geometry*					self )
+{
+	/* General and Virtual info should already be set */
+	
+	/* Geometry info */
+	self->isConstructed = True;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Geometry_Delete( void* geometry ) {
+	Geometry* self = (Geometry*)geometry;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Geometry_Print( void* geometry, Stream* stream ) {
+	Geometry* self = (Geometry*)geometry;
+	
+	/* Set the Journal for printing informations */
+	Stream* geometryStream;
+	geometryStream = Journal_Register( InfoStream_Type, "GeometryStream" );
+
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Geometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Geometry info */
+}
+
+
+void* _Geometry_Copy( void* geometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Geometry*	self = (Geometry*)geometry;
+	Geometry*	newGeometry;
+	
+	newGeometry = (Geometry*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newGeometry->buildPoints = self->buildPoints;
+	newGeometry->pointAt = self->pointAt;
+	
+	newGeometry->pointCount = self->pointCount;
+	
+	return (void*)newGeometry;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/GeometryClass.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/GeometryClass.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: GeometryClass.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_GeometryClass_h__
+#define __Domain_Geometry_GeometryClass_h__
+
+	/* Virtual function types */
+	typedef void	(Geometry_BuildPointsFunction)	( void* geometry, Coord_List points );
+	typedef void	(Geometry_PointAtFunction)	( void* geometry, Index index, Coord point );
+	
+	/* Textual name of this class */
+	extern const Type Geometry_Type;
+
+	/* Geometry information */
+	#define __Geometry \
+		/* General info */ \
+		__Stg_Component \
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		Geometry_BuildPointsFunction*		buildPoints; \
+		Geometry_PointAtFunction*		pointAt; \
+		\
+		/* Geometry info ... */ \
+		Index					pointCount;
+	struct Geometry { __Geometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Creation implementation */
+	Geometry* _Geometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation functions */
+	void _Geometry_Init(
+		Geometry*					self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions ) {
+	IrregTopology* self = (IrregTopology*)ir
+	*/
+	
+	/* Stg_Class_Delete Geometry implementation */
+	void _Geometry_Delete( void* geometry );
+	
+	/* Print Geometry implementation */
+	void _Geometry_Print( void* geometry, Stream* stream );
+	
+	/* Copy */
+	#define Geometry_Copy( self ) \
+		(Geometry*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Geometry_DeepCopy( self ) \
+		(Geometry*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Geometry_Copy( void* geometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_GeometryClass_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/GeometryClass.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/GeometryClass.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Geometry</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Hex.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Hex.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,64 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Simplex.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include "StGermain/StGermain.h"
+#include "Geometry.h"
+
+
+double Hex_Volume( double** verts, unsigned* inc, unsigned* inds ) {
+	static const unsigned	nTets = 5;
+	static const unsigned	tets[5][4] = {{0, 1, 2, 4}, 
+					      {1, 2, 3, 7}, 
+					      {1, 4, 5, 7}, 
+					      {2, 4, 6, 7}, 
+					      {1, 2, 4, 7}};
+	unsigned		curTet[4];
+	double			vol;
+	unsigned		tet_i, ind_i;
+
+	assert( verts );
+	assert( inc );
+	assert( inds );
+
+	vol = 0.0;
+	for( tet_i = 0; tet_i < nTets; tet_i++ ) {
+		for( ind_i = 0; ind_i < 4; ind_i++ )
+			curTet[ind_i] = inds[tets[tet_i][ind_i]];
+		vol += Simplex_Volume( verts, inc, curTet );
+	}
+
+	return vol;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Hex.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Hex.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Hex.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Hex_h__
+#define __Domain_Geometry_Hex_h__
+
+	double Hex_Volume( double** verts, unsigned* inc, unsigned* inds );
+
+#endif /* __Domain_Geometry_Hex_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK26Topology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK26Topology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,535 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IJK26Topology.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Topology.h"
+#include "IJKTopology.h"
+#include "IJK26Topology.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type IJK26Topology_Type = "IJK26Topology";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IJK26Topology* IJK26Topology_DefaultNew( Name name )
+{
+	return (IJK26Topology*)_IJKTopology_New( 
+		sizeof(IJK26Topology), 
+		IJK26Topology_Type, 
+		_IJK26Topology_Delete, 
+		_IJK26Topology_Print,
+		_IJKTopology_Copy,
+		(Stg_Component_DefaultConstructorFunction*)IJK26Topology_DefaultNew,
+		_IJK26Topology_Construct,
+		_IJK26Topology_Build,
+		_IJK26Topology_Initialise,
+		_IJK26Topology_Execute,
+		_IJK26Topology_Destroy,
+		name,
+		False,
+		_IJK26Topology_NeighbourCount,
+		_IJK26Topology_BuildNeighbours,
+		NULL,
+		NULL,
+		NULL );
+}
+
+IJK26Topology* IJK26Topology_New_All(
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	return _IJK26Topology_New( 
+		sizeof(IJK26Topology), 
+		IJK26Topology_Type, 
+		_IJK26Topology_Delete, 
+		_IJK26Topology_Print,
+		_IJKTopology_Copy,
+		(Stg_Component_DefaultConstructorFunction*)IJK26Topology_DefaultNew,
+		_IJK26Topology_Construct,
+		_IJK26Topology_Build,
+		_IJK26Topology_Initialise,
+		_IJK26Topology_Execute,
+		_IJK26Topology_Destroy,
+		name,
+		True,
+		_IJK26Topology_NeighbourCount,
+		_IJK26Topology_BuildNeighbours,
+		dictionary,
+		size,
+		isPeriodic );
+}
+
+
+void IJK26Topology_Init(
+		IJK26Topology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	/* General info */
+	self->type = IJK26Topology_Type;
+	self->_sizeOfSelf = sizeof(IJK26Topology);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _IJK26Topology_Delete;
+	self->_print = _IJK26Topology_Print;
+	self->_copy = _IJKTopology_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)IJK26Topology_DefaultNew;
+	self->_construct = _IJK26Topology_Construct;
+	self->_build = _IJK26Topology_Build;
+	self->_initialise = _IJK26Topology_Initialise;
+	self->_execute = _IJK26Topology_Execute;
+	self->_destroy = _IJK26Topology_Destroy;
+	self->neighbourCount = _IJK26Topology_NeighbourCount;
+	self->buildNeighbours = _IJK26Topology_BuildNeighbours;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+
+	/* IJK26Topology info */
+	_Topology_Init( (Topology*)self );
+	_IJKTopology_Init( (IJKTopology*)self, size, isPeriodic, False );
+	_IJK26Topology_Init( self, True );
+}
+
+
+IJK26Topology* _IJK26Topology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	IJK26Topology* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IJK26Topology) );
+	self = (IJK26Topology*)_IJKTopology_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, initFlag, neighbourCount, buildNeighbours,
+			dictionary, size, isPeriodic );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* IJK26Topology info */
+	if( initFlag ){
+		_IJK26Topology_Init( self, True );
+	}
+	
+	return self;
+}
+
+
+void _IJK26Topology_Init( IJK26Topology* self, Bool shiftNegOne )
+{
+	Index i;
+
+	if (self->dictionary) {
+		self->isConstructed = True;
+
+		/* Since the default is for elements, do a slight adjustment */
+		for (i=I_AXIS; i < 3; i++ ) {
+			if (shiftNegOne)
+				self->size[i] -= 1;
+
+			if ( self->size[i] == 0 )
+				self->size[i] = 1;
+		}
+		
+		self->indexCount = self->size[I_AXIS] * self->size[J_AXIS] * self->size[K_AXIS];
+		assert( self->indexCount );
+	}
+
+	return;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IJK26Topology_Delete( void* ijk26Topology ) {
+	IJK26Topology* self = (IJK26Topology*)ijk26Topology;
+	
+	/* Stg_Class_Delete parent */
+	_IJKTopology_Delete( self );
+}
+
+
+void _IJK26Topology_Print( void* ijk26Topology, Stream* stream ) {
+	IJK26Topology* self = (IJK26Topology*)ijk26Topology;
+	
+	/* Set the Journal for printing informations */
+	Stream* ijk26TopologyStream = Journal_Register( InfoStream_Type, "IJK26TopologyStream" );
+
+	/* Print parent */
+	_Topology_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( ijk26TopologyStream, "IJK26Topology (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IJK26Topology info */
+}
+
+void _IJK26Topology_Construct( void* ijk26Topology, Stg_ComponentFactory* cf, void* data ){
+	IJK26Topology *self = (IJK26Topology*)ijk26Topology;
+
+	_IJKTopology_Construct( self, cf, data );
+
+	/* No shifting sizes of topology because no assumption is made about elements */
+	_IJK26Topology_Init( self, False );
+}
+
+void _IJK26Topology_Build( void* ijk26Topology, void* data ){
+	
+}
+	
+void _IJK26Topology_Initialise( void* ijk26Topology, void* data ){
+	
+}
+	
+void _IJK26Topology_Execute( void* ijk26Topology, void* data ){
+	
+}
+	
+void _IJK26Topology_Destroy( void* ijk26Topology, void* data ){
+	
+}
+
+/* See header file for docs */
+NeighbourIndex _IJK26Topology_NeighbourCount( void* ijk26Topology, Index index ) {
+	IJK26Topology*  self = (IJK26Topology*)ijk26Topology;
+	IJK		max;		/* init later */
+	IJK		nbrPerDim = { 3, 3, 3 };
+	IJK		refObject;
+	Index	i;
+	
+	max[0] = self->size[I_AXIS] - 1;
+	max[1] = self->size[J_AXIS] - 1;
+	max[2] = self->size[K_AXIS] - 1;
+	 
+	IJK_1DTo3D( self, index, refObject );
+	
+	for( i=I_AXIS; i < 3; i++ ) {
+
+		if( 0 == max[i] )
+			nbrPerDim[i] = 1;
+
+		/* Ok given there is actually more than one item in this dim:
+		only if we are using "dynamic sizes" ie just want the good values to
+		be returned from BuildNeighbours and don't want entries in the array with
+		an INVALID tag, do we need to see if the size should be reduced */
+		else if( self->dynamicSizes ) {
+			if ( ( False == self->isPeriodic[i] )
+				&& (refObject[i] == 0 || refObject[i] == max[i]) )
+			{
+				nbrPerDim[i]--;
+			}	
+		}	
+	}	
+	
+	return nbrPerDim[I_AXIS] * nbrPerDim[J_AXIS] * nbrPerDim[K_AXIS] - 1;
+}
+
+
+void _IJK26Topology_BuildNeighbours( void* ijk26Topology, Index index, NeighbourIndex* neighbours )
+{
+	IJK26Topology*	self = (IJK26Topology*)ijk26Topology;
+	IJK		max; 		/* init later */
+	IJK		refObject;
+	Index		pos = 0;
+	int		nbrRelative[3];
+	Index	dim_I;
+	Bool	nbrExists = True;
+
+	max[0] = self->size[0] - 1;
+	max[1] = self->size[1] - 1;
+	max[2] = self->size[2] - 1;
+
+	IJK_1DTo3D( self, index, refObject );
+
+	/* For each neighbour position relative to the reference object */
+	for ( nbrRelative[K_AXIS] = -1; nbrRelative[K_AXIS] <= 1; nbrRelative[K_AXIS] ++ ) {
+		if ( (0 == max[K_AXIS]) && (nbrRelative[K_AXIS] != 0) ) continue; 
+		
+		for ( nbrRelative[J_AXIS] = -1; nbrRelative[J_AXIS] <= 1; nbrRelative[J_AXIS]++ ) {
+			if ( (0 == max[J_AXIS]) && (nbrRelative[J_AXIS] != 0) ) continue; 
+		
+			for ( nbrRelative[I_AXIS] = -1; nbrRelative[I_AXIS] <= 1; nbrRelative[I_AXIS]++ ) {
+				if ( (0 == max[I_AXIS]) && (nbrRelative[I_AXIS] != 0) ) continue; 
+
+				if ( ( 0 == nbrRelative[I_AXIS] ) && ( 0 == nbrRelative[J_AXIS] ) && ( 0 == nbrRelative[K_AXIS] )  ) {
+					continue;
+				}
+				
+				nbrExists = True;
+				/* Test if the neigbour exists or not, and modify the index appropriately */
+				for ( dim_I=0; dim_I < 3; dim_I++ ) {
+					if ( (False == self->isPeriodic[dim_I] ) &&
+						( (( refObject[dim_I] == 0 ) && (-1 == nbrRelative[dim_I] )) ||
+						(( refObject[dim_I] == max[dim_I] ) && (1 == nbrRelative[dim_I] )) ) )
+					{
+						nbrExists = False;
+						break;
+					}
+				}	
+				if (nbrExists) {
+					IJK     nbrPos;
+					Dimension_Index	innerDim_I;
+				
+					/* Find out the object's number */
+
+					for ( innerDim_I=0; innerDim_I < 3; innerDim_I++ ) {
+						if ( self->isPeriodic[innerDim_I] && (refObject[innerDim_I] == 0)
+							&& (-1 == nbrRelative[innerDim_I] ) )
+						{
+							nbrPos[innerDim_I] = max[innerDim_I];
+						}
+						else if ( self->isPeriodic[innerDim_I]
+							&& (refObject[innerDim_I] == max[innerDim_I] )
+							&& (1 == nbrRelative[innerDim_I] ) )
+						{
+							nbrPos[innerDim_I] = 0;
+						}
+						else {
+							nbrPos[innerDim_I] = refObject[innerDim_I] + nbrRelative[innerDim_I];
+						}
+					}	
+					
+					IJK_3DTo1D_3( self, 
+						nbrPos[I_AXIS],
+						nbrPos[J_AXIS],
+						nbrPos[K_AXIS],
+						&neighbours[pos] );
+					pos++;
+				}
+				else {
+					if( False == self->dynamicSizes ) {
+						/* Set the object to invalid if using dynamic sizes */
+						neighbours[pos] = Topology_Invalid( self );
+						pos++;
+					}	
+				}
+			}	
+		}	
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void IJK26Topology_PrintNeighboursOfIndex( IJK26Topology* self, Index refIndex, Stream* stream ) {
+	NeighbourIndex nbrCount;
+	NeighbourIndex* neighbours;
+
+	nbrCount = Topology_NeighbourCount( self, refIndex );
+	neighbours = Memory_Alloc_Array( NeighbourIndex, nbrCount, "neighbours" );
+	Topology_BuildNeighbours( self, refIndex, neighbours );
+	
+	IJK26Topology_PrintNeighbourOfIndexFromArray( self, refIndex, neighbours, nbrCount, stream );
+	Memory_Free( neighbours );
+}
+
+
+void IJK26Topology_PrintNeighbourOfIndexFromArray(
+		IJK26Topology* self,
+		Index refIndex,
+		NeighbourIndex* neighbours,
+		NeighbourIndex nbrCount,
+		Stream* stream )
+{		
+	if ( True == self->dynamicSizes )
+	{
+		Index nbr_I;
+
+		Journal_Printf( stream, "[%d] = {", nbrCount );
+		for ( nbr_I=0; nbr_I < nbrCount; nbr_I++ ) {
+			Journal_Printf( stream, "%d", neighbours[nbr_I] );
+			if ( neighbours[nbr_I] == Topology_Invalid( self ) ) {
+				Journal_Printf( stream, "(Inv)");
+			}
+			Journal_Printf( stream, ", ");
+		}
+		Journal_Printf( stream, "}\n" );
+	} 
+	else {
+		Dimension_Index  dimension = 0;
+		Dimension_Index  dim_I=0;
+
+		for ( dim_I=0; dim_I < 3; dim_I++ ) {
+			if (self->size[dim_I] > 1) {
+				dimension++;
+			}
+		}
+		if ( 0 == dimension ) {
+			Journal_Printf( stream, "|" );
+			Journal_Printf( stream, "(%3d  )", refIndex );
+			Journal_Printf( stream, "|" );
+			Journal_Printf( stream, "\n" );
+		}
+		else if ( 1 == dimension ) {
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintMiddleRow( self, neighbours, 0, refIndex, 1, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+		}
+		else if ( 2 == dimension ) {
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 5, 6, 7, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintMiddleRow( self, neighbours, 3, refIndex, 4, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 0, 1, 2, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+		}
+		else {
+			/* 3D: do it in 3 separate goes: */
+			Journal_Printf( stream, "-1 in 3rd dim plane\n" );
+			Stream_Indent( stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 6, 7, 8, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 3, 4, 5, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 0, 1, 2, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			Stream_UnIndent( stream );
+			Journal_Printf( stream, "ref item's plane in 3rd dim\n" );
+			Stream_Indent( stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 14, 15, 16, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintMiddleRow( self, neighbours, 12, refIndex, 13, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 9, 10, 11, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			Stream_UnIndent( stream );
+			Journal_Printf( stream, "+1 3rd dim\n" );
+			Stream_Indent( stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 23, 24, 25, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 20, 21, 22, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			IJK26Topology_PrintNormalRow( self, neighbours, 17, 18, 19, stream );
+			IJK26Topology_PrintRowSeparator( self, stream );
+			Stream_UnIndent( stream );
+		}
+	}
+}	
+
+
+void IJK26Topology_PrintRowSeparator( IJK26Topology* self, Stream* stream ) {  	
+	Journal_Printf( stream, "-------------------------\n" );
+}
+
+
+void IJK26Topology_PrintNeighbour( IJK26Topology* topology, Index itemIndex, Stream* stream ) {  	
+	if ( itemIndex == Topology_Invalid( topology ) ) {
+		Journal_Printf( stream, "   X   ", itemIndex );
+	}
+	else {	
+		Journal_Printf( stream, "%4d   ", itemIndex );
+	}
+}	
+
+
+void IJK26Topology_PrintNormalRow( IJK26Topology* topology, NeighbourIndex* neighbours,
+		Index nbr1, Index nbr2, Index nbr3, Stream* stream )
+{
+	/* Do middle row */
+	Journal_Printf( stream, "|" );
+	IJK26Topology_PrintNeighbour( topology, neighbours[nbr1], stream );
+	Journal_Printf( stream, "|" );
+	IJK26Topology_PrintNeighbour( topology, neighbours[nbr2], stream );
+	Journal_Printf( stream, "|" );
+	IJK26Topology_PrintNeighbour( topology, neighbours[nbr3], stream );
+	Journal_Printf( stream, "|" );
+	Journal_Printf( stream, "\n" );
+}
+
+
+void IJK26Topology_PrintMiddleRow( IJK26Topology* topology, NeighbourIndex* neighbours,
+		Index leftNbr, Index refPos, Index rightNbr, Stream* stream )
+{
+	/* Do middle row */
+	Journal_Printf( stream, "|" );
+	IJK26Topology_PrintNeighbour( topology, neighbours[leftNbr], stream );
+	Journal_Printf( stream, "|" );
+	/* represents the current one */
+	Journal_Printf( stream, "(%3d  )", refPos );
+	Journal_Printf( stream, "|" );
+	IJK26Topology_PrintNeighbour( topology, neighbours[rightNbr], stream );
+	Journal_Printf( stream, "|" );
+	Journal_Printf( stream, "\n" );
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK26Topology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK26Topology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,166 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Concrete IJKTopology class for elements or nodes with 26 neighbours
+**	(all directions, including diagonals).
+**
+** Assumptions:
+**
+** Comments:
+** Refactored by PatrickSunter on 7th July 2004 for easier readability.
+**
+** $Id: IJK26Topology.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_IJK26Topology_h__
+#define __Domain_Geometry_IJK26Topology_h__
+
+	/* Virtual function types */
+	
+	/** Textual name of this class */
+	extern const Type IJK26Topology_Type;
+
+	/** IJK26Topology class contents (see IJK26Topology) */
+	#define __IJK26Topology \
+		/* General info */ \
+		__IJKTopology \
+		\
+	
+	/**	Handles the 3D topology for an element/node, with 26 neighbours - see IJK26Topology.h.
+	That file has full information on the class and its member functions. */
+	struct IJK26Topology { __IJK26Topology };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Create a IJK26Topology, using the sizes in the dictionary */
+	#define IJK26Topology_New( name, dictionary ) \
+		IJK26Topology_New_All( name, dictionary, NULL, NULL )
+	
+	/** Create a IJK26Topology */
+	IJK26Topology* IJK26Topology_DefaultNew( Name name );
+	
+	IJK26Topology* IJK26Topology_New_All(
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] );
+	
+	/** Initialise a IJK26Topology */
+	void IJK26Topology_Init(
+		IJK26Topology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] );
+	
+	/** Creation implementation */
+	IJK26Topology* _IJK26Topology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] );
+	
+	/** Initialises members. Uses IJKTopology_Init(), but behaviour is different
+	if the mesh sizes are read from the dictionary: for the IJK26 system we assume
+	the topology relates to elements, and thus 1 is subtracted from each of the
+	total node numbers per dimension read from the dictionary. */
+	void _IJK26Topology_Init( IJK26Topology* self, Bool shiftNegOne );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _IJK26Topology_Delete( void* ijk26Topology );
+	
+	/** Stg_Class_Print() implementation */
+	void _IJK26Topology_Print( void* ijk26Topology, Stream* stream );
+	
+	void _IJK26Topology_Construct( void* ijk26Topology, Stg_ComponentFactory* cf, void* data );
+	
+	void _IJK26Topology_Build( void* ijk26Topology, void* data );
+	
+	void _IJK26Topology_Initialise( void* ijk26Topology, void* data );
+	
+	void _IJK26Topology_Execute( void* ijk26Topology, void* data );
+	
+	void _IJK26Topology_Destroy( void* ijk26Topology, void* data );
+	
+	/** Topology_NeighbourCount() implementation. */
+	NeighbourIndex _IJK26Topology_NeighbourCount( void* ijk26Topology, Index index );
+	
+	/** Topology_BuildNeighbours() implementation. */
+	void _IJK26Topology_BuildNeighbours( void* ijk26Topology, Index index, NeighbourIndex* neighbours );
+	
+	/* ******************** Public Functions ********************* */
+
+	/** Handy little function to print the neighbours of an item in an easy to read manner using
+		high-tech ASCII art techniques ;) */
+	void IJK26Topology_PrintNeighboursOfIndex( IJK26Topology* topology, Index index, Stream* stream );
+
+	/** Version of IJKTopology_PrintNeighboursOfIndex() for when you already have generated the nbr array */
+	void IJK26Topology_PrintNeighbourOfIndexFromArray( IJK26Topology* topology, Index index,
+		NeighbourIndex* neighbours, NeighbourIndex neighbourCount, Stream* stream );
+	
+	/* TODO: it would be cool to have a little ASCII art function to print the whole topology layout too
+		for 2D topologies, including some special symbols for periodicity too. */
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	/* Some little utility functions for printing the nbr info */
+	
+	void IJK26Topology_PrintRowSeparator( IJK26Topology* self, Stream* stream );
+	void IJK26Topology_PrintNeighbour( IJK26Topology* topology, Index itemIndex, Stream* stream );
+	void IJK26Topology_PrintNormalRow( IJK26Topology* topology, NeighbourIndex* neighbours,
+		Index nbr1, Index nbr2, Index nbr3, Stream* stream );
+	void IJK26Topology_PrintMiddleRow( IJK26Topology* topology, NeighbourIndex* neighbours,
+		Index leftNbr, Index refPos, Index rightNbr, Stream* stream );	
+	
+#endif /* __Domain_Geometry_IJK26Topology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK26Topology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK26Topology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IJK26Topology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">IJKTopology</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK6Topology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK6Topology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,345 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IJK6Topology.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Topology.h"
+#include "IJKTopology.h"
+#include "IJK6Topology.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type IJK6Topology_Type = "IJK6Topology";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IJK6Topology* IJK6Topology_DefaultNew( Name name )
+{
+	return _IJK6Topology_New( 
+		sizeof(IJK6Topology), 
+		IJK6Topology_Type, 
+		_IJK6Topology_Delete, 
+		_IJK6Topology_Print,
+		_IJKTopology_Copy,
+                (Stg_Component_DefaultConstructorFunction*)IJK6Topology_DefaultNew,
+		_IJK6Topology_Construct,
+		_IJK6Topology_Build,
+		_IJK6Topology_Initialise,
+		_IJK6Topology_Execute,
+		_IJK6Topology_Destroy,
+		name,
+		False,
+		_IJK6Topology_NeighbourCount,
+		_IJK6Topology_BuildNeighbours,
+		NULL,
+		NULL,
+		NULL );
+}
+
+IJK6Topology* IJK6Topology_New_All(
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	return _IJK6Topology_New( 
+		sizeof(IJK6Topology), 
+		IJK6Topology_Type, 
+		_IJK6Topology_Delete, 
+		_IJK6Topology_Print,
+		_IJKTopology_Copy,
+		(Stg_Component_DefaultConstructorFunction*)IJK6Topology_DefaultNew,
+		_IJK6Topology_Construct,
+		_IJK6Topology_Build,
+		_IJK6Topology_Initialise,
+		_IJK6Topology_Execute,
+		_IJK6Topology_Destroy,
+		name,
+		True,
+		_IJK6Topology_NeighbourCount,
+		_IJK6Topology_BuildNeighbours,
+		dictionary,
+		size,
+		isPeriodic );
+}
+
+void IJK6Topology_Init(
+		IJK6Topology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	/* General info */
+	self->type = IJK6Topology_Type;
+	self->_sizeOfSelf = sizeof(IJK6Topology);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _IJK6Topology_Delete;
+	self->_print = _IJK6Topology_Print;
+	self->_copy = _IJKTopology_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)IJK6Topology_DefaultNew;
+	self->_construct = _IJK6Topology_Construct;
+	self->_build = _IJK6Topology_Build,
+	self->_initialise = _IJK6Topology_Initialise;
+	self->_execute = _IJK6Topology_Execute;
+	self->_destroy = _IJK6Topology_Destroy;
+	self->neighbourCount = _IJK6Topology_NeighbourCount;
+	self->buildNeighbours = _IJK6Topology_BuildNeighbours;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	/* IJK6Topology info */
+	_Topology_Init( (Topology*)self );
+	_IJKTopology_Init( (IJKTopology*)self, size, isPeriodic, False );
+	_IJK6Topology_Init( self );
+}
+
+
+IJK6Topology* _IJK6Topology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK					size,
+		Bool					isPeriodic[3] )
+{
+	IJK6Topology* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IJK6Topology) );
+	self = (IJK6Topology*)_IJKTopology_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, initFlag, neighbourCount, buildNeighbours,
+			dictionary, size, isPeriodic );
+
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* IJK6Topology info */
+	if( initFlag ){
+		_IJK6Topology_Init( self );
+	}
+	
+	return self;
+}
+
+void _IJK6Topology_Init(
+		IJK6Topology*					self )
+{
+	self->isConstructed = True;
+	return;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IJK6Topology_Delete( void* ijk6Topology ) {
+	IJK6Topology* self = (IJK6Topology*)ijk6Topology;
+	
+	/* Stg_Class_Delete parent */
+	_Topology_Delete( self );
+}
+
+
+void _IJK6Topology_Print( void* ijk6Topology, Stream* stream ) {
+	IJK6Topology* self = (IJK6Topology*)ijk6Topology;
+	
+	/* Set the Journal for printing informations */
+	Stream* ijk6TopologyStream = Journal_Register( InfoStream_Type, "IJK6TopologyStream" );
+
+	/* Print parent */
+	_Topology_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( ijk6TopologyStream, "IJK6Topology (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IJK6Topology info */
+}
+
+void _IJK6Topology_Construct( void* ijk6Topology, Stg_ComponentFactory* cf, void* data ){
+	IJK6Topology *self = (IJK6Topology*)ijk6Topology;
+
+	_IJKTopology_Construct( self, cf, data );
+	_IJK6Topology_Init( self );
+}
+
+void _IJK6Topology_Build( void* ijk6Topology, void* data ){
+	
+}
+	
+void _IJK6Topology_Initialise( void* ijk6Topology, void* data ){
+	
+}
+	
+void _IJK6Topology_Execute( void* ijk6Topology, void* data ){
+	
+}
+	
+void _IJK6Topology_Destroy( void* ijk6Topology, void* data ){
+	
+}
+
+NeighbourIndex _IJK6Topology_NeighbourCount( void* ijk6Topology, Index index ) {
+	IJK6Topology*   self = (IJK6Topology*)ijk6Topology;
+	IJK		max;			/* init later */
+	Index		nbrCnt = 6;
+	Index		dim_I;
+	IJK		refObject;
+	int		nbrRelative[3];
+	int		sign;
+	
+	max[0] = self->size[0]-1;
+	max[1] = self->size[1]-1;
+	max[2] = self->size[2]-1;
+	 
+	IJK_1DTo3D( self, index, refObject );
+
+	for ( sign = 1; sign >= -1; sign -= 2 ) {
+		for (dim_I=I_AXIS; dim_I < 3; dim_I++) {
+			if( self->size[dim_I] == 1 ) {
+				nbrCnt--;
+				continue;
+			}	
+
+			if( True == self->dynamicSizes ) {
+				nbrRelative[I_AXIS] = nbrRelative[J_AXIS] = nbrRelative[K_AXIS] = 0;
+				nbrRelative[dim_I] = sign;
+
+				if ( ( False == self->isPeriodic[dim_I] ) &&
+					( (( refObject[dim_I] == 0 ) && (-1 == nbrRelative[dim_I] ) ) ||
+					(( refObject[dim_I] == max[dim_I] ) && (1 == nbrRelative[dim_I] )) ) )
+				{
+					nbrCnt--;
+				}
+			}	
+		}
+	}	
+	
+	return nbrCnt;
+}
+
+
+void _IJK6Topology_BuildNeighbours( void* ijk6Topology, Index index, NeighbourIndex* neighbours )
+{
+	IJK6Topology*	self = (IJK6Topology*)ijk6Topology;
+	IJK		max;			/* init later */
+	int		sign;
+	Index	dim_I;
+	IJK		refObject;
+	int		nbrRelative[3];
+	Index	pos = 0;
+	
+	max[0] = self->size[0]-1;
+	max[1] = self->size[1]-1;
+	max[2] = self->size[2]-1;
+ 
+	IJK_1DTo3D( self, index, refObject );
+
+	for ( sign = 1; sign >= -1; sign -= 2 ) {
+		for ( dim_I = I_AXIS; dim_I < 3; dim_I++ ) {
+			if ( 0 == max[dim_I] ) continue;
+		
+			nbrRelative[I_AXIS] = nbrRelative[J_AXIS] = nbrRelative[K_AXIS] = 0;
+			nbrRelative[dim_I] = sign;
+
+			if ( ( False == self->isPeriodic[dim_I] ) &&
+				( ( ( refObject[dim_I] == 0 ) && (-1 == nbrRelative[dim_I] ) ) ||
+				( ( refObject[dim_I] == max[dim_I] ) && (1 == nbrRelative[dim_I] ) ) ) )
+			{
+				if( False == self->dynamicSizes ) {
+					/* Set the object to invalid if using dynamic sizes */
+					neighbours[pos] = Topology_Invalid( self );
+					pos++;
+				}	
+			}
+			else {
+				IJK nbrPos;
+				Dimension_Index	innerDim_I;
+
+				for ( innerDim_I=0; innerDim_I < 3; innerDim_I++ ) {
+					if ( self->isPeriodic[innerDim_I] && (refObject[innerDim_I] == 0)
+						&& (-1 == nbrRelative[innerDim_I] ) )
+					{
+						nbrPos[innerDim_I] = max[innerDim_I];
+					}
+					else if ( self->isPeriodic[innerDim_I] && (refObject[innerDim_I] == max[innerDim_I] )
+						&& (1 == nbrRelative[innerDim_I] ) )
+					{
+						nbrPos[innerDim_I] = 0;
+					}
+					else {
+						nbrPos[innerDim_I] = refObject[innerDim_I] + nbrRelative[innerDim_I];
+					}
+				}	
+
+				IJK_3DTo1D_3( self, 
+					nbrPos[I_AXIS],
+					nbrPos[J_AXIS],
+					nbrPos[K_AXIS],
+					&neighbours[pos] );
+				pos++;
+			}
+		}
+	}	
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK6Topology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK6Topology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,158 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Concrete IJKTopology class for element or node with 6 neighbours
+**	(only fully adjoining directions, no diagonals).
+**
+** Assumptions:
+**
+** Comments:
+**	In this topology, the ordering goes:
+**	---In 3D---
+**	0:+ve I, 1:+ve J, 2:+ve K, 3:-ve I, 4:-ve J, 5:-ve K
+**
+**  ---In 2D---
+**  In 2D, the same convention applies, except the missing dimension is
+**	skipped. Eg if there was no K dimension:
+**	0:+ve I, 1:+ve J, 2: -ve I, 3: -ve J
+**
+**	TODO: Add a link to a TWiki page with a diagram.
+**
+** $Id: IJK6Topology.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_IJK6Topology_h__
+#define __Domain_Geometry_IJK6Topology_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type IJK6Topology_Type;
+
+	/** IJK6Topology class contents */
+	#define __IJK6Topology \
+		/* General info */ \
+		__IJKTopology \
+
+	/**	Concrete IJKTopology class for element or node with 6 neighbours
+	- see IJK6Topology.h for member functions. */
+	struct IJK6Topology { __IJK6Topology };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Create an IJK6Topology, using the dictonary */
+	#define IJK6Topology_New( name, dictionary ) \
+		IJK6Topology_New_All( name, dictionary, NULL, NULL )
+	
+	/** Create an IJK6Topology */
+	
+	IJK6Topology* IJK6Topology_DefaultNew( Name name );
+	
+	IJK6Topology* IJK6Topology_New_All(
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] );
+
+	/** Initialise an IJK6Topology */
+	void IJK6Topology_Init(
+		IJK6Topology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] );
+
+	
+	/** Creation implementation */
+	IJK6Topology* _IJK6Topology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK					size,
+		Bool						isPeriodic[3] );
+
+	/** Initialisation implementation */
+	void _IJK6Topology_Init(
+		IJK6Topology*					self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _IJK6Topology_Delete( void* ijk6Topology );
+	
+	/** Stg_Class_Print() implementation */
+	void _IJK6Topology_Print( void* ijk6Topology, Stream* stream );
+	
+	void _IJK6Topology_Construct( void* ijk6Topology, Stg_ComponentFactory* cf, void* data );
+	
+	void _IJK6Topology_Build( void* ijk6Topology, void* data );
+	
+	void _IJK6Topology_Initialise( void* ijk6Topology, void* data );
+	
+	void _IJK6Topology_Execute( void* ijk6Topology, void* data );
+	
+	void _IJK6Topology_Destroy( void* ijk6Topology, void* data );
+	
+	/** Topology_NeighbourCount() implementation. */
+	NeighbourIndex _IJK6Topology_NeighbourCount( void* ijk6Topology, Index index );
+	
+	/** Topology_BuildNeighbours() implementation. */
+	void _IJK6Topology_BuildNeighbours( void* ijk6Topology, Index index, NeighbourIndex* neighbours );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_IJK6Topology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJK6Topology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJK6Topology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IJK6Topology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">IJKTopology</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJKTopology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJKTopology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,249 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IJKTopology.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Topology.h"
+#include "IJKTopology.h"
+
+#include "Geometry.h"
+#include "BlockGeometry.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type IJKTopology_Type = "IJKTopology";
+
+const char IJKTopology_DimNumToDimLetter[3] = { 'I', 'J', 'K' };
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IJKTopology* _IJKTopology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool						isPeriodic[3] )
+{
+	IJKTopology* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IJKTopology) );
+	self = (IJKTopology*)_Topology_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, initFlag, neighbourCount, buildNeighbours );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* IJKTopology info */
+	if( initFlag ){
+		_IJKTopology_Init( self, size, isPeriodic, False );
+	}
+	
+	return self;
+}
+
+void _IJKTopology_Construct( void* ijkTopology, Stg_ComponentFactory* cf, void* data ){
+	IJKTopology*    self   = (IJKTopology*)ijkTopology;
+	IJK             size;
+	int             shift;
+	Dimension_Index dim;
+	Dimension_Index dim_I;
+	Bool		isPeriodic[3];
+	Bool		dynamic;
+
+	self->dictionary = cf->rootDict;
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+	
+	/* TODO _Topology_Construct( self, cf ); */
+	_Topology_Init( (Topology*)self );
+
+	size[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeI", 1 );  
+	size[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeJ", 1 );  
+	size[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeK", 1 );  
+	if ( dim == 2 )
+		size[ K_AXIS ] = 1;
+
+	isPeriodic[ I_AXIS ] = Stg_ComponentFactory_GetRootDictBool( cf, "isPeriodicI", False );  
+	isPeriodic[ J_AXIS ] = Stg_ComponentFactory_GetRootDictBool( cf, "isPeriodicJ", False );  
+	isPeriodic[ K_AXIS ] = Stg_ComponentFactory_GetRootDictBool( cf, "isPeriodicK", False );  
+
+	dynamic = Stg_ComponentFactory_GetBool( cf, self->name, "dynamic", False );
+	
+	/* Shift the topology if nessesary */
+	shift = Stg_ComponentFactory_GetInt( cf, self->name, "sizeShift", 0 );
+	for ( dim_I = I_AXIS ; dim_I < dim ; dim_I++ )
+		size[ dim_I ] += shift;
+
+	_IJKTopology_Init( self, size, isPeriodic, dynamic );
+}
+
+
+void _IJKTopology_Init(
+		IJKTopology*					self,
+		IJK						size,
+		Bool						isPeriodic[3], 
+		Bool						dynamic )
+{
+	Index i = I_AXIS;
+
+	/* General and Virtual info should already be set */
+	
+	/* IJKTopology info */
+	self->isConstructed = True;
+	if ( size ) {
+		for (i=I_AXIS; i < 3; i++ ) {
+			self->size[i] = size[i];
+		}
+	}
+	else if( self->dictionary ) {
+		char* keyBase = "meshSize";
+		char* key = Memory_Alloc_Array_Unnamed( char, (strlen( keyBase ) + 2 ) );
+
+		for (i=I_AXIS; i < 3; i++ ) {
+			sprintf ( key, "%s%c", keyBase, IJKTopology_DimNumToDimLetter[i] );
+			self->size[i] = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault(
+				self->dictionary, key, Dictionary_Entry_Value_FromUnsignedInt( 1 ) ) );
+		}
+		Memory_Free( key );
+	}
+	else {
+		fprintf( stderr, "Error - %s: either a valid Dictionary or size input parameter must be given.\n",
+			__func__ );
+		exit( EXIT_FAILURE );	
+	}
+	
+	if ( isPeriodic ) {
+		for (i=I_AXIS; i < 3; i++ ) {
+			self->isPeriodic[i] = isPeriodic[i];
+		}
+	}
+	else if( self->dictionary ) {
+		self->isPeriodic[I_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicI", False );
+		self->isPeriodic[J_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicJ", False );
+		self->isPeriodic[K_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicK", False );
+	}
+	else {
+		fprintf( stderr, "Error - %s: either a valid Dictionary or \"isPeriodic\" input parameter must be given.\n",
+			__func__ );
+		exit( EXIT_FAILURE );	
+	}	
+
+	for (i=I_AXIS; i < 3; i++ ) {
+		if ( self->size[i] == 0 ) self->size[i] = 1;
+	}
+	
+	self->indexCount = self->size[I_AXIS] * self->size[J_AXIS] * self->size[K_AXIS];
+	assert( self->indexCount );
+	
+	self->dynamicSizes = dynamic;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IJKTopology_Delete( void* ijk26Topology ) {
+	IJKTopology* self = (IJKTopology*)ijk26Topology;
+	
+	/* Stg_Class_Delete parent */
+	_Topology_Delete( self );
+}
+
+
+void _IJKTopology_Print( void* ijk26Topology, Stream* stream ) {
+	IJKTopology* self = (IJKTopology*)ijk26Topology;
+	
+	/* Print parent */
+	_Topology_Print( self, stream );
+	
+	 IJKTopology_PrintConcise( self, stream );
+}
+
+
+void IJKTopology_PrintConcise( IJKTopology* self, Stream* stream ) {
+	/* General info */
+	Journal_Printf( stream, "IJKTopology (ptr): (%p)\n", self );
+	
+	/* IJKTopology info */
+	Stream_Indent( stream );
+	Journal_Printf( stream, "size : (%u,%u,%u)\n", self->size[0], self->size[1], self->size[2] );
+	Journal_Printf( stream, "isPeriodic : (%s,%s,%s)\n",
+		StG_BoolToStringMap[self->isPeriodic[I_AXIS]],
+		StG_BoolToStringMap[self->isPeriodic[J_AXIS]],
+		StG_BoolToStringMap[self->isPeriodic[K_AXIS]] );
+	Journal_Printf( stream, "dynamicSizes : %s\n", StG_BoolToStringMap[self->dynamicSizes] );
+	Stream_UnIndent( stream );
+}
+
+
+void* _IJKTopology_Copy( void* ijkTopology, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	IJKTopology*	self = (IJKTopology*)ijkTopology;
+	IJKTopology*	newIJKTopology;
+	Dimension_Index	dim_I=0;
+	
+	newIJKTopology = (IJKTopology*)_Topology_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newIJKTopology->dictionary = self->dictionary;
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		newIJKTopology->size[dim_I] = self->size[dim_I];
+		newIJKTopology->isPeriodic[dim_I] = self->isPeriodic[dim_I];
+	}	
+	newIJKTopology->dynamicSizes = self->dynamicSizes;
+	
+	return (void*)newIJKTopology;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJKTopology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJKTopology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,162 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class inheriting from Topology, which handles the 3D topology for
+**	an element or node, in an IJK co-ordinate system.
+**
+** Assumptions:
+**
+** Comments:
+** This class was abstracted from the common code in IJK6Topology.h and
+**	IJK26Topology.h on 8 July 2004.
+**
+** $Id: IJKTopology.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Dimension.h"
+
+#ifndef __Domain_Geometry_IJKTopology_h__
+#define __Domain_Geometry_IJKTopology_h__
+
+	/* Virtual function types */
+	
+	/** Textual name of this class */
+	extern const Type IJKTopology_Type;
+
+	/** Mapping from integer dimension to letter */
+	extern const char IJKTopology_DimNumToDimLetter[3];
+
+	/** IJKTopology class contents (see IJKTopology) */
+	#define __IJKTopology \
+		/* General info */ \
+		/** Parent class - Topology */ \
+		__Topology \
+		Dictionary*			dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* IJKTopology info ... */ \
+		/** The total number of elements/nodes in the I,J, and K directions for the entire mesh. */ \
+		IJK				size; \
+		/** Determines, for each dimension, whether the topology is periodic */ \
+		Bool                            isPeriodic[3];	\
+		/** Determines whether objects outside the mesh should be counted - see Topology_NeighbourCount() and Topology_BuildNeighbours(). */ \
+		Bool				dynamicSizes;
+
+	/**	Abstract class inheriting from Topology, which handles the topology for
+	**	an element/node, in an IJK co-ordinate system - see IJKTopology.h for functions etc.
+	*/
+	struct IJKTopology { __IJKTopology };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Creation implementation */
+	IJKTopology* _IJKTopology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		IJK						size,
+		Bool                                            isPeriodic[3] );
+	
+	/** Initialises members. If a valid dictionary has been passed in, the mesh sizes
+	in the dictionary are used to determine the number of elements. Otherwise, the
+	values in the "size" input parameter are used. */
+	void _IJKTopology_Init(
+		IJKTopology*		self,
+		IJK			size,
+		Bool			isPeriodic[3], 
+		Bool			dynamic );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() IJKTopology implementation */
+	void _IJKTopology_Delete( void* ijk26Topology );
+	
+	/** Stg_Class_Print() IJKTopology implementation */
+	void _IJKTopology_Print( void* ijk26Topology, Stream* stream );
+	
+	/** Prints core info without all the Class overhead */
+	void IJKTopology_PrintConcise( IJKTopology* self, Stream* stream );
+
+	/* Copy */
+	#define IJKTopology_Copy( self ) \
+		(IJKTopology*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define IJKTopology_DeepCopy( self ) \
+		(IJKTopology*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _IJKTopology_Copy( void* ijkTopology, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	
+	void _IJKTopology_Construct( void* ijkTopology, Stg_ComponentFactory* cf, void* data );
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions/macros
+	*/
+	
+	/** Converts i,j,k coordinates into the exact element number for this topology type. */ 
+	#define IJK_3DTo1D( self, ijk, indexPtr ) \
+		Dimension_3DTo1D( (ijk), (self)->size, indexPtr )
+
+	/** Converts i,j,k coordinates into the exact element number for this topology type. */ 
+	#define IJK_3DTo1D_3( self, i, j, k, indexPtr ) \
+		Dimension_3DTo1D_3( (i), (j), (k), (self)->size[I_AXIS], (self)->size[J_AXIS], (self)->size[K_AXIS], indexPtr )
+
+	/** Converts an element number in the mesh into i,j,k co-ordinates, returned separately */
+	#define IJK_1DTo3D_3( self, index, iPtr, jPtr, kPtr ) \
+		Dimension_1DTo3D_3( (index), (self)->size[I_AXIS], (self)->size[J_AXIS], (self)->size[K_AXIS], (iPtr), (jPtr), (kPtr) )
+		
+	/** Converts an element number in to mesh into i,j,k co-ordinates, returned in an ijk array */
+	#define IJK_1DTo3D(self, index, ijk) \
+		IJK_1DTo3D_3(self, index, &(ijk)[I_AXIS], &(ijk)[J_AXIS], &(ijk)[K_AXIS])
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_IJKTopology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IJKTopology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IJKTopology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IJKTopology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Topology</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeI</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeJ</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeK</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">isPeriodicI</param>
+		<param name="Type">Bool</param>
+		<param name="Default">False</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">isPeriodicJ</param>
+		<param name="Type">Bool</param>
+		<param name="Default">False</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">isPeriodicK</param>
+		<param name="Type">Bool</param>
+		<param name="Default">False</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeShift</param>
+		<param name="Type">Int</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,82 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Init.h"
+#include "Topology.h"
+#include "IJKTopology.h"
+#include "IJK6Topology.h"
+#include "IJK26Topology.h"
+#include "IrregTopology.h"
+#include "GeometryClass.h"
+#include "BlockGeometry.h"
+#include "RefinedRegionsGeometry.h"
+#include "ShellGeometry.h"
+#include "IrregGeometry.h"
+#include "Delaunay.h"
+#include "ParallelDelaunay.h"
+
+#include <stdio.h>
+
+Bool StgDomainGeometry_Init( int* argc, char** argv[] ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+
+		
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), IJK6Topology_Type, "0", (Stg_Component_DefaultConstructorFunction*)IJK6Topology_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), IJK26Topology_Type, "0", (Stg_Component_DefaultConstructorFunction*)IJK26Topology_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), IrregTopology_Type, "0", (Stg_Component_DefaultConstructorFunction*)IrregTopology_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), BlockGeometry_Type, "0", (Stg_Component_DefaultConstructorFunction*)BlockGeometry_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), RefinedRegionsGeometry_Type, "0", RefinedRegionsGeometry_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ShellGeometry_Type, "0", (Stg_Component_DefaultConstructorFunction*)ShellGeometry_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), IrregGeometry_Type, "0", (Stg_Component_DefaultConstructorFunction*)IrregGeometry_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Delaunay_Type, "0", (Stg_Component_DefaultConstructorFunction*)Delaunay_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ParallelDelaunay_Type, "0", (Stg_Component_DefaultConstructorFunction*)ParallelDelaunay_DefaultNew );
+
+	RegisterParent( Delaunay_Type,               Stg_Component_Type );
+	RegisterParent( ParallelDelaunay_Type,       Delaunay_Type );
+	RegisterParent( Geometry_Type,               Stg_Component_Type );
+	RegisterParent( BlockGeometry_Type,          Geometry_Type );
+	RegisterParent( RefinedRegionsGeometry_Type, Geometry_Type );
+	RegisterParent( IrregGeometry_Type,          Geometry_Type );
+	RegisterParent( ShellGeometry_Type,          Geometry_Type );
+	
+	RegisterParent( Topology_Type,      Stg_Component_Type );
+	RegisterParent( IJKTopology_Type,   Topology_Type );
+	RegisterParent( IrregTopology_Type, Topology_Type );
+	RegisterParent( IJK26Topology_Type, IJKTopology_Type );
+	RegisterParent( IJK6Topology_Type,  IJKTopology_Type );
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Init_h__
+#define __Domain_Geometry_Init_h__
+	
+	Bool StgDomainGeometry_Init( int* argc, char** argv[] );
+	
+#endif /* __Domain_Geometry_Init_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,318 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IrregGeometry.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+#include "IrregGeometry.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type IrregGeometry_Type = "IrregGeometry";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IrregGeometry* IrregGeometry_DefaultNew( Name name )
+{
+	return (IrregGeometry*)_IrregGeometry_New(
+		sizeof(IrregGeometry), 
+		IrregGeometry_Type, 
+		_IrregGeometry_Delete, 
+		_IrregGeometry_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregGeometry_DefaultNew,
+		_IrregGeometry_Construct,
+		_IrregGeometry_Build,
+		_IrregGeometry_Initialise,
+		_IrregGeometry_Execute,
+		_IrregGeometry_Destroy,
+		name,
+		False,
+		_IrregGeometry_BuildPoints,
+		_IrregGeometry_PointAt,
+		NULL, 
+		NULL );
+}
+
+IrregGeometry* IrregGeometry_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	return _IrregGeometry_New( 
+		sizeof(IrregGeometry), 
+		IrregGeometry_Type, 
+		_IrregGeometry_Delete, 
+		_IrregGeometry_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregGeometry_DefaultNew,
+		_IrregGeometry_Construct,
+		_IrregGeometry_Build,
+		_IrregGeometry_Initialise,
+		_IrregGeometry_Execute,
+		_IrregGeometry_Destroy,
+		name,
+		True,
+		_IrregGeometry_BuildPoints,
+		_IrregGeometry_PointAt,
+		dictionary,
+		listKey );
+}
+
+
+void IrregGeometry_Init(
+		IrregGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	/* General info */
+	self->type = IrregGeometry_Type;
+	self->_sizeOfSelf = sizeof(IrregGeometry);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _IrregGeometry_Delete;
+	self->_print = _IrregGeometry_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)IrregGeometry_DefaultNew;
+	self->_construct = _IrregGeometry_Construct;
+	self->_build = _IrregGeometry_Build;
+	self->_initialise = _IrregGeometry_Initialise;
+	self->_execute = _IrregGeometry_Execute;
+	self->_destroy = _IrregGeometry_Destroy;
+	self->buildPoints = _IrregGeometry_BuildPoints;
+	self->pointAt = _IrregGeometry_PointAt;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	_Geometry_Init( (Geometry*)self );
+	
+	/* IrregGeometry info */
+	_IrregGeometry_Init( self, listKey );
+}
+
+
+IrregGeometry* _IrregGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	IrregGeometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IrregGeometry) );
+	self = (IrregGeometry*)_Geometry_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		buildPoints,
+		pointAt,
+		dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* IrregGeometry info */
+	if( initFlag ){
+		_IrregGeometry_Init( self, listKey );
+	}
+	
+	return self;
+}
+
+void _IrregGeometry_Init(
+		IrregGeometry*					self,
+		Name						listKey )
+{
+	/* General and Virtual info should already be set */
+	
+	/* IrregGeometry info */
+	Dictionary_Entry_Value*		list;
+	Dictionary_Entry_Value*		point;
+	Index				i;
+	
+	self->isConstructed = True;
+	list = Dictionary_Get( self->dictionary, listKey );
+	self->pointCount = Dictionary_Entry_Value_GetCount( list );
+	self->pointTbl = Memory_Alloc_Array( Coord, self->pointCount, "IrregGeometry->pointTbl" );
+	point = Dictionary_Entry_Value_GetFirstElement( list );
+	
+	for( i = 0; i < self->pointCount; i++ ) {
+		self->pointTbl[i][0] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( point, "x") );
+		self->pointTbl[i][1] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( point, "y") );
+		self->pointTbl[i][2] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( point, "z") );
+		point = point->next;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IrregGeometry_Delete( void* irregGeometry ) {
+	IrregGeometry* self = (IrregGeometry*)irregGeometry;
+	
+	/* Stg_Class_Delete parent */
+	_Geometry_Delete( self );
+}
+
+
+void _IrregGeometry_Print( void* irregGeometry, Stream* stream ) {
+	IrregGeometry* self = (IrregGeometry*)irregGeometry;
+	
+	/* Set the Journal for printing informations */
+	Stream* irregGeometryStream;
+	irregGeometryStream = Journal_Register( InfoStream_Type, "IrregGeometryStream" );
+
+	/* Print parent */
+	_Geometry_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "IrregGeometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IrregGeometry info */
+}
+
+void _IrregGeometry_Construct( void* irregGeometry, Stg_ComponentFactory *cf, void* data ){
+	IrregGeometry *self = (IrregGeometry*)irregGeometry;
+	Dictionary *componentDict = NULL;
+	Dictionary *thisComponentDict = NULL;
+	Name listName = NULL;
+
+	self->dictionary = cf->rootDict;
+	componentDict = cf->componentDict;
+	assert( componentDict );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, self->name );
+	assert( thisComponentDict );
+	
+	listName = Dictionary_GetString( thisComponentDict, "ListName" );
+
+	_Geometry_Init( (Geometry*)self );
+	_IrregGeometry_Init( self, listName );
+}
+	
+void _IrregGeometry_Build( void* irregGeometry, void *data ){
+	
+}
+	
+void _IrregGeometry_Initialise( void* irregGeometry, void *data ){
+	
+}
+	
+void _IrregGeometry_Execute( void* irregGeometry, void *data ){
+	
+}
+
+void _IrregGeometry_Destroy( void* irregGeometry, void *data ){
+	
+}
+
+void _IrregGeometry_BuildPoints( void* irregGeometry, Coord_List points )
+{
+	IrregGeometry*  self = (IrregGeometry*)irregGeometry;
+	Index		i;
+	
+	for( i = 0; i < self->pointCount; i++ ) {
+		points[i][0] = self->pointTbl[i][0];
+		points[i][1] = self->pointTbl[i][1];
+		points[i][2] = self->pointTbl[i][2];
+	}
+}
+
+
+void _IrregGeometry_PointAt( void* irregGeometry, Index index, Coord point )
+{
+	IrregGeometry* self = (IrregGeometry*)irregGeometry;
+	
+	if( index < self->pointCount ) {
+		point[0] = self->pointTbl[index][0];
+		point[1] = self->pointTbl[index][1];
+		point[2] = self->pointTbl[index][2];
+	}
+	else {
+		point[0] = HUGE_VAL;
+		point[1] = HUGE_VAL;
+		point[2] = HUGE_VAL;
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregGeometry.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregGeometry.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,139 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: IrregGeometry.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_IrregGeometry_h__
+#define __Domain_Geometry_IrregGeometry_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type IrregGeometry_Type;
+
+	/* IrregGeometry information */
+	#define __IrregGeometry \
+		/* General info */ \
+		__Geometry \
+		\
+		/* Virtual info */ \
+		\
+		/* IrregGeometry info ... */ \
+		Coord_List			pointTbl;
+	struct IrregGeometry { __IrregGeometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a IrregGeometry */
+	IrregGeometry* IrregGeometry_DefaultNew( );
+
+	IrregGeometry* IrregGeometry_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Initialise a IrregGeometry */
+	void IrregGeometry_Init(
+		IrregGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Creation implementation */
+	IrregGeometry* _IrregGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Initialisation implementation functions */
+	void _IrregGeometry_Init(
+		IrregGeometry*					self,
+		Name						listKey );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete IrregGeometry implementation */
+	void _IrregGeometry_Delete( void* irregGeometry );
+	
+	/* Print IrregGeometry implementation */
+	void _IrregGeometry_Print( void* irregGeometry, Stream* stream );
+	
+	void _IrregGeometry_Construct( void* irregGeometry, Stg_ComponentFactory *cf, void* data );
+	
+	void _IrregGeometry_Build( void* irregGeometry, void *data );
+	
+	void _IrregGeometry_Initialise( void* irregGeometry, void *data );
+	
+	void _IrregGeometry_Execute( void* irregGeometry, void *data );
+
+	void _IrregGeometry_Destroy( void* irregGeometry, void *data );
+	
+	void _IrregGeometry_BuildPoints( void* irregGeometry, Coord_List points );
+	
+	void _IrregGeometry_PointAt( void* irregGeometry, Index index, Coord point );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_IrregGeometry_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregGeometry.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregGeometry.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IrregGeometry</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Geometry</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregTopology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregTopology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,313 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IrregTopology.c 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Topology.h"
+#include "IrregTopology.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type IrregTopology_Type = "IrregTopology";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IrregTopology* IrregTopology_DefaultNew( Name name )
+{
+	return (IrregTopology*)_IrregTopology_New( 
+		sizeof(IrregTopology), 
+		IrregTopology_Type, 
+		_IrregTopology_Delete, 
+		_IrregTopology_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregTopology_DefaultNew,
+		_IrregTopology_Construct,
+		_IrregTopology_Build,
+		_IrregTopology_Initialise,
+		_IrregTopology_Execute,
+		_IrregTopology_Destroy,
+		name,
+		False,
+		_IrregTopology_NeighbourCount,
+		_IrregTopology_BuildNeighbours,
+		NULL,
+		NULL );
+}
+
+IrregTopology* IrregTopology_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	return _IrregTopology_New( 
+		sizeof(IrregTopology), 
+		IrregTopology_Type, 
+		_IrregTopology_Delete, 
+		_IrregTopology_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregTopology_DefaultNew,
+		_IrregTopology_Construct,
+		_IrregTopology_Build,
+		_IrregTopology_Initialise,
+		_IrregTopology_Execute,
+		_IrregTopology_Destroy,
+		name,
+		True,
+		_IrregTopology_NeighbourCount,
+		_IrregTopology_BuildNeighbours,
+		dictionary,
+		listKey );
+}
+
+
+void IrregTopology_Init(
+		IrregTopology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	/* General info */
+	self->type = IrregTopology_Type;
+	self->_sizeOfSelf = sizeof(IrregTopology);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _IrregTopology_Delete;
+	self->_print = _IrregTopology_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)IrregTopology_DefaultNew;
+	self->_construct = _IrregTopology_Construct;
+	self->_build = _IrregTopology_Build;
+	self->_initialise = _IrregTopology_Initialise;
+	self->_execute = _IrregTopology_Execute;
+	self->_destroy = _IrregTopology_Destroy;
+	self->neighbourCount = _IrregTopology_NeighbourCount;
+	self->buildNeighbours = _IrregTopology_BuildNeighbours;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	/* IrregTopology info */
+	_IrregTopology_Init( self, listKey );
+}
+
+
+IrregTopology* _IrregTopology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		Name						listKey )
+{
+	IrregTopology* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IrregTopology) );
+	self = (IrregTopology*)_Topology_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, initFlag, neighbourCount, buildNeighbours );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* IrregTopology info */
+	if( initFlag ){
+		_IrregTopology_Init( self, listKey );
+	}
+	
+	return self;
+}
+
+void _IrregTopology_Init(
+		IrregTopology*					self,
+		Name						listKey )
+{
+	/* General and Virtual info should already be set */
+	
+	/* IrregTopology info */
+	Dictionary_Entry_Value*		list;
+	Dictionary_Entry_Value*		index;
+	Dictionary_Entry_Value*		nbr;
+	Index				i;
+	
+	self->isConstructed = True;
+	list = Dictionary_Get( self->dictionary, listKey );
+	self->indexCount = Dictionary_Entry_Value_GetCount( list );
+	self->neighbourCountTbl = Memory_Alloc_Array( Index, self->indexCount, "IrregTopology->neighbourCountTbl" );
+	self->neighbourTbl = Memory_Alloc_Array( Index*, self->indexCount, "IrregTopology->neighbourCountTbl" );
+	index = Dictionary_Entry_Value_GetFirstElement( list );
+	
+	for( i = 0; i < self->indexCount; i++ ) {
+		Index n_I;
+		
+		self->neighbourCountTbl[i] = Dictionary_Entry_Value_GetCount( index );
+		nbr = Dictionary_Entry_Value_GetFirstElement( index );
+		self->neighbourTbl[i] = Memory_Alloc_Array( Index, self->neighbourCountTbl[i], "IrregTopology->neighbourTbl[]" );
+		
+		for( n_I = 0; n_I < self->neighbourCountTbl[i]; n_I++ ) {
+			self->neighbourTbl[i][n_I] = Dictionary_Entry_Value_AsUnsignedInt( nbr );
+			nbr = nbr->next;
+		}
+		
+		index = index->next;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IrregTopology_Delete( void* irregTopology ) {
+	IrregTopology*  self = (IrregTopology*)irregTopology;
+	Index		i;
+	
+	for( i = 0; i < self->indexCount; i++ )
+		if( self->neighbourTbl[i] )
+			Memory_Free( self->neighbourTbl[i] );
+	if( self->neighbourTbl ) {
+		Memory_Free( self->neighbourTbl );
+		self->neighbourTbl = NULL;
+	}
+	
+	if( self->neighbourCountTbl ) {
+		Memory_Free( self->neighbourCountTbl );
+		self->neighbourCountTbl = NULL;
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Topology_Delete( self );
+}
+
+
+void _IrregTopology_Print( void* irregTopology, Stream* stream ) {
+	IrregTopology* self = (IrregTopology*)irregTopology;
+	
+	/* Set the Journal for printing informations */
+	Stream* irregTopologyStream;
+	irregTopologyStream = Journal_Register( InfoStream_Type, "IrregTopologyStream" );
+
+	/* Print parent */
+	_Topology_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "IrregTopology (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IrregTopology info */
+}
+
+void _IrregTopology_Construct( void* irregTopology, Stg_ComponentFactory *cf, void* data ){
+	IrregTopology *self = (IrregTopology*)irregTopology;
+	Dictionary *componentDict = NULL;
+	Dictionary *thisComponentDict = NULL;
+	Name listName = NULL;
+
+	self->dictionary = cf->rootDict;
+	componentDict = cf->componentDict;
+	assert( componentDict );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, self->name );
+	assert( thisComponentDict );
+	
+	listName = Dictionary_GetString( thisComponentDict, "ListName" );
+
+	_Topology_Init( (Topology*)self );
+	_IrregTopology_Init( self, listName );
+}
+
+void _IrregTopology_Build( void* irregTopology, void* data ){
+	
+}
+	
+void _IrregTopology_Initialise( void* irregTopology, void* data ){
+	
+}
+	
+void _IrregTopology_Execute( void* irregTopology, void* data ){
+	
+}
+	
+void _IrregTopology_Destroy( void* irregTopology, void* data ){
+	
+}
+
+
+NeighbourIndex _IrregTopology_NeighbourCount( void* irregTopology, Index index ) {
+	IrregTopology* self = (IrregTopology*)irregTopology;
+
+	return self->neighbourCountTbl[index];
+}
+
+
+void _IrregTopology_BuildNeighbours( void* irregTopology, Index index, NeighbourIndex* neighbours ) {
+	IrregTopology*  self = (IrregTopology*)irregTopology;
+	NeighbourIndex  n_I;
+	
+	for( n_I = 0; n_I < self->neighbourCountTbl[index]; n_I++ )
+		neighbours[n_I] = self->neighbourTbl[index][n_I];
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregTopology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregTopology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,141 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: IrregTopology.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_IrregTopology_h__
+#define __Domain_Geometry_IrregTopology_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type IrregTopology_Type;
+
+	/* IrregTopology information */
+	#define __IrregTopology \
+		/* General info */ \
+		__Topology \
+		Dictionary*			dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* IrregTopology info ... */ \
+		Index*				neighbourCountTbl; \
+		Index**				neighbourTbl;
+	struct IrregTopology { __IrregTopology };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a IrregTopology */
+	IrregTopology* IrregTopology_DefaultNew( Name name );
+
+	IrregTopology* IrregTopology_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Initialise a IrregTopology */
+	void IrregTopology_Init(
+		IrregTopology*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Creation implementation */
+	IrregTopology* _IrregTopology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours,
+		Dictionary*					dictionary,
+		Name						listKey );
+	
+	/* Initialisation implementation functions */
+	void _IrregTopology_Init(
+		IrregTopology*					self,
+		Name						listKey );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete IrregTopology implementation */
+	void _IrregTopology_Delete( void* irregTopology );
+	
+	/* Print IrregTopology implementation */
+	void _IrregTopology_Print( void* irregTopology, Stream* stream );
+
+	void _IrregTopology_Construct( void* irregTopology, Stg_ComponentFactory *cf, void* data );
+
+	void _IrregTopology_Build( void* irregTopology, void* data );
+	
+	void _IrregTopology_Initialise( void* irregTopology, void* data );
+	
+	void _IrregTopology_Execute( void* irregTopology, void* data );
+	
+	void _IrregTopology_Destroy( void* irregTopology, void* data );
+	
+	NeighbourIndex _IrregTopology_NeighbourCount( void* irregTopology, Index index );
+	
+	void _IrregTopology_BuildNeighbours( void* irregTopology, Index index, NeighbourIndex* neighbours );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_IrregTopology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/IrregTopology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/IrregTopology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IrregTopology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Topology</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Line.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Line.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,52 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Line.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "Line.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Line.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Line.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,62 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic edge routines.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Line.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Line_h__
+#define __Domain_Geometry_Line_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	#define Stg_Line_CalcFromPoints( line, a, b ) \
+		(line)[0] = (a)[1] - (b)[1]; \
+		(line)[1] = (b)[0] - (a)[0]; \
+		(line)[2] = 0.0; \
+		Vec_Norm3D( line, line ); \
+		(line)[3] = Vec_Dot3D( line, a )
+	
+	#define Stg_Line_PointIsInside( line, point ) \
+		((Vec_Dot3D( line, point) >= line[3]) ? True : False)
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Geometry_Line_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ParallelDelaunay.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ParallelDelaunay.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1429 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+** The ParallelDelaunay class computes the constrained delaunay triangulation of a set of points
+** in 2 Dimensions along with the voronoi diagram of the point-set.
+** Assumptions:
+**
+** Comments:
+**
+** The recursive divide and conquer algorithm has been implemented from the pseudo-code
+** given in "Primitives for the manipulation of general subdivisions and the computation
+** of voronoi diagrams" by Leonidas Guibas and Jorge Stolfi.
+** ACM transtactions on graphics, Vol. 4, No. 2, April 1985, Pages 74-123
+**
+**
+** $Id: ParallelDelaunay.c 3462 2006-02-19 06:53:24Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "QuadEdge.h"
+#include "Delaunay.h"
+#include "ParallelDelaunay.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+const Type ParallelDelaunay_Type="ParallelDelaunay";
+#define PI 3.1415926535897932384626
+#define MERGE_FACTOR 1
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+/** Create a ParallelDelaunay */
+ParallelDelaunay* ParallelDelaunay_DefaultNew( Name name )
+{
+	ParallelDelaunay *d = _ParallelDelaunay_New(
+			sizeof( ParallelDelaunay ),
+			ParallelDelaunay_Type,
+			_ParallelDelaunay_Delete,
+			_ParallelDelaunay_Print,
+			_ParallelDelaunay_Copy,
+			(Stg_Component_DefaultConstructorFunction*)ParallelDelaunay_DefaultNew,
+			_ParallelDelaunay_Construct,
+			_ParallelDelaunay_Build,
+			_ParallelDelaunay_Initialise,
+			_ParallelDelaunay_Execute,
+			_ParallelDelaunay_Destroy,
+			name,
+			False,
+			NULL,
+			NULL,
+			0,
+			0,
+			0,
+			NULL,
+			NULL );
+
+	return d;
+}
+	
+ParallelDelaunay* ParallelDelaunay_New(
+	Name						name,
+	Dictionary*					dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							rank,
+	int							numProcs,
+	MPI_Comm					*comm,
+	DelaunayAttributes			*attr )
+{
+	ParallelDelaunay *d = _ParallelDelaunay_New(
+			sizeof( ParallelDelaunay ),
+			ParallelDelaunay_Type,
+			_ParallelDelaunay_Delete,
+			_ParallelDelaunay_Print,
+			_ParallelDelaunay_Copy,
+			(Stg_Component_DefaultConstructorFunction*)ParallelDelaunay_DefaultNew,
+			_ParallelDelaunay_Construct,
+			_ParallelDelaunay_Build,
+			_ParallelDelaunay_Initialise,
+			_ParallelDelaunay_Execute,
+			_ParallelDelaunay_Destroy,
+			name,
+			True,
+			dictionary,
+			sites,
+			numSites,
+			rank,
+			numProcs,
+			comm,
+			attr );
+	
+	return d;
+}
+
+#define MASTER_PROC 0
+
+	/** Initialise a ParallelDelaunay */
+void ParallelDelaunay_Init(
+	ParallelDelaunay*					self,
+	Name						name,
+	Dictionary*					dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							rank,
+	int							numProcs,
+	MPI_Comm					*comm,
+	DelaunayAttributes			*attr )
+{
+	self->type = ParallelDelaunay_Type;
+	self->_sizeOfSelf = sizeof( ParallelDelaunay );
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+
+	self->_delete = _ParallelDelaunay_Delete;
+	self->_print = _ParallelDelaunay_Print;
+	self->_copy = _ParallelDelaunay_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)ParallelDelaunay_DefaultNew;
+	self->_construct = _ParallelDelaunay_Construct;
+	self->_build = _ParallelDelaunay_Build;
+	self->_initialise = _ParallelDelaunay_Initialise;
+	self->_execute = _ParallelDelaunay_Execute;
+	self->_destroy = _ParallelDelaunay_Destroy;
+
+	self->attributes = Memory_Alloc_Unnamed( DelaunayAttributes );
+	memcpy( self->attributes, attr, sizeof( DelaunayAttributes ) );
+	self->attributes->BuildBoundingTriangle = 0;
+	
+	self->dictionary = dictionary;
+	self->numSites = numSites;
+	self->numInputSites = numSites;
+	self->points = sites;
+	self->leftProc = 0;
+	self->rightProc = 0;
+	self->haloSites[0] = NULL;
+	self->haloSites[1] = NULL;
+	self->localTriangulation = NULL;
+	self->rank = rank;
+	self->numProcs = numProcs;
+	self->comm = comm;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_ParallelDelaunay_Init( self );
+}
+
+/** Creation implementation */
+ParallelDelaunay* _ParallelDelaunay_New(
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*		_build,
+	Stg_Component_InitialiseFunction*		_initialise,
+	Stg_Component_ExecuteFunction*		_execute,
+	Stg_Component_DestroyFunction*		_destroy,
+	Name							name,
+	Bool							initFlag,
+	Dictionary					*dictionary,
+	CoordF						*sites,
+	int							numSites,
+	int							rank,
+	int							numProcs,
+	MPI_Comm					*comm,
+	DelaunayAttributes			*attr )
+{
+	ParallelDelaunay *self = NULL;
+	DelaunayAttributes *myAttr = NULL;
+	
+	myAttr = Memory_Alloc_Unnamed( DelaunayAttributes );
+	memcpy( myAttr, attr, sizeof( DelaunayAttributes ) );
+	myAttr->BuildBoundingTriangle = 0;
+	
+	assert( _sizeOfSelf >= sizeof(ParallelDelaunay) );
+	self = (ParallelDelaunay*)_Delaunay_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+			_construct, _build, _initialise, _execute, _destroy, name, True, dictionary, sites, numSites, 0, myAttr );
+	
+	self->points = sites;
+	self->leftProc = 0;
+	self->rightProc = 0;
+	self->haloSites[0] = NULL;
+	self->haloSites[1] = NULL;
+	self->localTriangulation = NULL;
+	self->rank = rank;
+	self->numProcs = numProcs;
+	self->comm = comm;
+	
+	if( initFlag ){
+		_ParallelDelaunay_Init( self );
+	}
+
+	return self;
+}
+
+int ParallelDelaunayBtreeCompareFunction( void *a, void *b )
+{
+	Site *s1, *s2;
+
+	s1 = (Site*)a;
+	s2 = (Site*)b;
+
+	if( (*(s1->coord))[0] > (*(s2->coord))[0] ){
+		return 1;
+	}
+	else if( (*(s1->coord))[0] == (*(s2->coord))[0] ){
+		if( (*(s1->coord))[1] > (*(s2->coord))[1] ){
+			return 1;
+		}
+		else if( (*(s1->coord))[1] < (*(s2->coord))[1] ){
+			return -1;
+		}
+		else{
+			return 0;
+		}
+	}
+	else{
+		return -1;
+	}
+}
+
+#define epsilon 0.0001
+#define LOAD_TAG 1
+#define DATA_TAG 1<<1
+#define NEW_SITE_FACTOR 100
+void _ParallelDelaunay_Init( ParallelDelaunay* self )
+{
+	assert( self );
+
+	self->numHaloSites[0] = 0;
+	self->numHaloSites[1] = 0;
+	self->sitePool = MemoryPool_New( Site, NEW_SITE_FACTOR, NEW_SITE_FACTOR );
+	self->coordPool = MemoryPool_New( CoordF, NEW_SITE_FACTOR, NEW_SITE_FACTOR );
+}
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+/** Stg_Class_Delete() implementation */
+void _ParallelDelaunay_Delete( void* pd )
+{
+	ParallelDelaunay *self = (ParallelDelaunay*)pd;
+	
+	assert( self );
+
+	Memory_Free( self->localPoints );
+	if( self->mappingTable[0] ) Memory_Free( self->mappingTable[0] );
+	if( self->mappingTable[1] ) Memory_Free( self->mappingTable[1] );
+	Memory_Free( self->mapGlobalToLocal );
+	if( self->processor ) Memory_Free( self->processor );
+	if( self->initialOrder ) Memory_Free( self->initialOrder );
+	Memory_Free( self->processorLoad );
+	Memory_Free( self->attributes );
+
+	Stg_Class_Delete( self->localTriangulation );
+	Stg_Class_Delete( self->sitePool );
+	Stg_Class_Delete( self->coordPool );
+	_Delaunay_Delete( self );
+}
+
+/** Stg_Class_Print() implementation */
+void _ParallelDelaunay_Print( void* pd, Stream* stream )
+{
+	ParallelDelaunay *self = ( ParallelDelaunay* )pd;
+	
+	assert( self );
+	assert( stream );
+
+	_Delaunay_Print( (Delaunay*)self, stream );
+	Journal_Printf( stream, "ParallelDelaunay (ptr): (%p)\n", self );
+}
+
+void *_ParallelDelaunay_Copy( void* pd, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap )
+{
+	return NULL;
+}
+
+void _ParallelDelaunay_Construct( void* pd, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _ParallelDelaunay_Build( void* pd, void* data )
+{
+	float _minX, _maxX;
+	float _minY, _maxY;
+	int numProcs, numSites, i, j, count;
+	float stride, start;
+	int *alloced = NULL;
+	int offset;
+	ParallelDelaunay *self = (ParallelDelaunay*)pd;
+	DelaunayAttributes attr;
+
+	assert( self );
+	
+	numProcs = self->numProcs;
+	numSites = self->numSites;
+
+	if( numProcs == 1 ){
+		self->leftProc = numProcs;
+		self->rightProc = numProcs;
+	}
+	else{
+		if( self->rank == MASTER_PROC ){
+			self->leftProc = numProcs;
+			self->rightProc = self->rank + 1;
+		}
+		else if( self->rank == (numProcs-1) ){
+			self->leftProc = self->rank - 1;
+			self->rightProc = numProcs;
+		}
+		else{
+			self->leftProc = self->rank - 1;
+			self->rightProc = self->rank + 1;
+		}
+	}
+	
+	self->mapGlobalToLocal = Memory_Alloc_Array_Unnamed( int, numSites );
+	self->processorLoad = Memory_Alloc_Array_Unnamed( int, numProcs );
+	memset( self->processorLoad, 0, sizeof( int )*numProcs );
+
+	if( self->rank == MASTER_PROC ){
+		self->processor = Memory_Alloc_Array_Unnamed( int, numSites );
+
+		alloced = Memory_Alloc_Array_Unnamed( int, numSites );
+		memset( alloced, 0, sizeof( int )*numSites );
+	
+		self->initialOrder = Memory_Alloc_Array_Unnamed( int, numSites );
+		memset( self->initialOrder, 0, sizeof( int )*numSites );
+		
+		Delaunay_FindMinMax( self->sites, self->numSites, &_minX, &_minY, &_maxX, &_maxY );
+		Delaunay_SortSites( self->sites, self->numSites );
+
+		for( i=0; i<numSites; i++ ){
+			self->initialOrder[i] = self->sites[i].id;
+		}
+		
+		stride = (_maxX - _minX)/((float)numProcs);
+
+		start = _minX;
+		for( i=0; i<numProcs; i++ ){
+			for( j=0; j<numSites; j++ ){
+				if( ((*(self->sites[j].coord))[0] >= start-epsilon) &&
+						((*(self->sites[j].coord))[0] <= (start+stride+epsilon)) &&
+						(!alloced[j]) ){
+					
+					alloced[j] = 1;
+					self->processorLoad[i]++;
+					self->processor[j] = i;
+				}
+			}
+			start+=stride;
+		}
+		
+		/*for( i=0; i<numProcs; i++ ){
+			printf( "processorLoad[%d] = %d\n", i, self->processorLoad[i] );
+		}*/
+		
+		for( i=MASTER_PROC+1; i<numProcs; i++ ){
+			MPI_Send( &(self->processorLoad[i]), 1, MPI_INT, i, LOAD_TAG, *self->comm );
+		}
+
+		self->numLocalSites = self->processorLoad[MASTER_PROC];
+		self->localPoints = Memory_Alloc_Array_Unnamed( CoordF, self->numLocalSites );
+		
+		{
+			CoordF **procCoords = NULL;
+			int *procCoordCounter = NULL;
+
+			procCoordCounter = malloc( sizeof(int)*numProcs );
+			memset( procCoordCounter, 0, sizeof(int)*numProcs );
+
+			procCoords = malloc( sizeof( CoordF* ) * numProcs );
+			for( i=MASTER_PROC+1; i<numProcs; i++ ){
+				procCoords[i] = malloc( sizeof(CoordF) * self->processorLoad[i] );
+				memset( procCoords[i], 0, sizeof( CoordF ) * self->processorLoad[i] );
+			}
+
+			count = 0;
+			for( i=0; i<numSites; i++ ){
+				if( self->processor[i] == MASTER_PROC ){
+					memcpy( &(self->localPoints[count++]), self->sites[i].coord, sizeof(CoordF) );
+				}
+				else{
+					memcpy( &(procCoords[self->processor[i]][procCoordCounter[self->processor[i]]++]), self->sites[i].coord,  sizeof(CoordF) );
+				}			
+			}
+			
+			for( i=MASTER_PROC+1; i<numProcs; i++ ){
+				MPI_Send( procCoords[i], sizeof( CoordF )*self->processorLoad[i], MPI_BYTE, i, DATA_TAG, *self->comm );
+			}
+
+			free( procCoordCounter );
+			for( i=MASTER_PROC+1; i<numProcs; i++ ){
+				free( procCoords[i] );
+			}
+			free( procCoords );
+		}
+
+		Memory_Free( alloced );
+	}
+	else{
+		MPI_Status status;
+		
+		MPI_Recv( &self->numLocalSites, 1, MPI_INT, MASTER_PROC, LOAD_TAG, *self->comm, &status );
+
+		self->localPoints = Memory_Alloc_Array_Unnamed( CoordF, self->numLocalSites );
+
+		MPI_Recv( self->localPoints, sizeof(CoordF)*self->numLocalSites, MPI_BYTE, MASTER_PROC, DATA_TAG, *self->comm, &status );
+	}
+
+	MPI_Bcast( self->processorLoad, numProcs, MPI_INT, MASTER_PROC, *self->comm );
+	self->numTotalLocalSites = self->numLocalSites;
+
+	offset = 0;
+	for( i=0; i<self->rank; i++ ){
+		offset += self->processorLoad[i];
+	}
+	
+	self->localTriangulation = Delaunay_New( "delaunay", self->dictionary, self->localPoints, self->numLocalSites, offset, self->attributes );
+	self->localTriangulation->qp = MemoryPool_New( QuadEdge, self->localTriangulation->numSites * (3 + MERGE_FACTOR), 10 );
+	Delaunay_SortSites(self->localTriangulation->sites, self->localTriangulation->numSites);
+    Delaunay_Recurse(self->localTriangulation, 0, self->localTriangulation->numSites,
+			&self->localTriangulation->leftMost, &self->localTriangulation->rightMost);
+
+	for( i=0; i<numSites; i++ ){
+		self->mapGlobalToLocal[i] = numSites;
+	}
+	
+	for( i=0; i<self->numLocalSites; i++ ){
+		self->mapGlobalToLocal[self->localTriangulation->sites[i].id] = self->localTriangulation->sites[i].id;
+	}
+	
+	if( self->leftProc != self->numProcs ){
+		ParallelDelaunayMerge( self, self->comm, self->leftProc );
+	}
+		
+	if( self->rightProc != self->numProcs ){
+		ParallelDelaunayMerge( self, self->comm, self->rightProc );
+	}
+}
+
+void _ParallelDelaunay_Initialise( void* pd, void* data )
+{
+	
+}
+
+void _ParallelDelaunay_Execute( void* pd, void* data )
+{
+	DelaunayAttributes attr;
+	ParallelDelaunay *self = (ParallelDelaunay*)pd;
+	int offset, i;
+	
+	offset = 0;
+	for( i=0; i<self->rank; i++ ){
+		offset += self->processorLoad[i];
+	}
+
+	if( self->leftProc != self->numProcs ){
+		ParallelDelaunay_RetriangulateAfterMerge( self, LEFT );
+	}
+
+	if( self->rightProc != self->numProcs ){
+		ParallelDelaunay_RetriangulateAfterMerge( self, RIGHT );
+	}
+
+	Stg_Class_Delete( self->localTriangulation );
+	
+	memcpy( &attr, self->attributes, sizeof( DelaunayAttributes ) );
+	attr.BuildTriangleIndices = 0;
+	self->localTriangulation = Delaunay_New( "delaunay", self->dictionary, self->localPoints, self->numTotalLocalSites, offset, &attr );
+	Stg_Component_Build( self->localTriangulation, NULL, True );
+	
+	if( self->attributes->BuildTriangleIndices ){
+		ParallelDelaunay_BuildTriangleIndices( self );
+	}	
+}
+
+void _ParallelDelaunay_Destroy( void* pd, void* data )
+{
+	
+}
+
+#define onCurrentProc( pd, id ) ( id < (pd->processorLoad[pd->rank]+pd->localTriangulation->idOffset) )
+#define onLeftProc( pd, id ) ( ( pd->numHaloSites[0]>0 ) && ( id >= (pd->processorLoad[pd->rank]+pd->localTriangulation->idOffset) ) && \
+				( id < (pd->processorLoad[pd->rank]+pd->numHaloSites[0]+pd->localTriangulation->idOffset) ) )
+#define onRightProc( pd, id ) ( ( pd->numHaloSites[1]>0 ) && ( id >= (pd->processorLoad[pd->rank]+pd->localTriangulation->idOffset+pd->numHaloSites[0]) ) && \
+				( id < (pd->numTotalLocalSites+pd->localTriangulation->idOffset) ) )
+
+void ParallelDelaunay_RetriangulateAfterMerge( ParallelDelaunay *pd, Direction d )
+{
+		BTreeIterator *iter = NULL;
+		Site *result = NULL;
+		ParallelDelaunay *self = pd;
+		int i = 0;
+		int numProcs;
+		int numSites;
+		int count;
+		int offset;
+
+		numProcs = self->numProcs;
+		numSites = self->numSites;
+		offset = 0;
+		for( i=0; i<self->rank; i++ ){
+			offset += self->processorLoad[i];
+		}
+		
+		self->haloSites[d] = BTree_New( ParallelDelaunayBtreeCompareFunction, NULL, NULL, NULL, BTREE_NO_DUPLICATES );
+		
+		for( i=0; i<self->localTriangulation->qp->numElements; i++ ){
+			if( IS_FREE((QuadEdgeRef)&(self->localTriangulation->qp->chunks[0].memory[i*sizeof(QuadEdge)])) ) continue;
+	
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->chunks[0].memory[i*sizeof(QuadEdge)]))->data[0])->id] == numSites )
+				BTree_InsertNode( self->haloSites[d], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->chunks[0].memory[i*sizeof(QuadEdge)]))->data[0]), sizeof( Site* ) );
+			
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->chunks[0].memory[i*sizeof(QuadEdge)]))->data[2])->id] == numSites )
+				BTree_InsertNode( self->haloSites[d], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->chunks[0].memory[i*sizeof(QuadEdge)]))->data[2]), sizeof( Site* ) );
+		}
+
+		self->localPoints = Memory_Realloc_Array
+			( self->localPoints, CoordF, sizeof(CoordF) * (self->numTotalLocalSites + self->haloSites[d]->nodeCount) );
+		
+		self->mappingTable[d] = Memory_Alloc_Array_Unnamed( int, self->haloSites[d]->nodeCount );
+		memset( self->mappingTable[d], 0, sizeof( int ) * self->haloSites[d]->nodeCount );
+		
+		count=0;
+		i = self->numTotalLocalSites;
+		iter = BTreeIterator_New( self->haloSites[d] );
+		for( result=(Site*)BTreeIterator_First(iter);
+				result;
+				result=(Site*)BTreeIterator_Next(iter)){
+			
+			self->mappingTable[d][count++] = result->id;
+			memcpy( &(self->localPoints[i++]), result->coord, sizeof( CoordF ) );
+		}
+		Stg_Class_Delete( self->localTriangulation );
+
+		self->localTriangulation = Delaunay_New( "delaunay", self->dictionary, self->localPoints, self->numLocalSites, offset, self->attributes );
+		self->localTriangulation->qp = MemoryPool_New( QuadEdge, self->localTriangulation->numSites * 4, 10 );
+		Delaunay_SortSites(self->localTriangulation->sites, self->localTriangulation->numSites);
+    	Delaunay_Recurse(self->localTriangulation, 0, self->localTriangulation->numSites,
+				&self->localTriangulation->leftMost, &self->localTriangulation->rightMost);
+
+		self->numHaloSites[d] = self->haloSites[d]->nodeCount;
+		self->numTotalLocalSites += self->haloSites[d]->nodeCount;
+		
+		Stg_Class_Delete( self->haloSites[d] );
+		Stg_Class_Delete( iter );
+}
+
+void ParallelDelaunay_BuildTriangleIndices( ParallelDelaunay *pd )
+{
+	int i = 0, triCount;
+	QuadEdgeRef e = 0, eStart = 0, eOnext = 0, eLnext = 0;
+	QuadEdge *edges = NULL;
+	Site *sites = NULL;
+	int maxEdges = 0;
+	int rank = 0;
+	int pass = 0;
+	unsigned int **triIndices = NULL;
+	Delaunay *delaunay = NULL;
+
+	delaunay = pd->localTriangulation;
+
+	assert( delaunay );
+
+	delaunay->triangleIndices = Memory_Alloc_Array_Unnamed( unsigned int*, delaunay->numFaces );
+	delaunay->triangleIndices[0] = Memory_Alloc_Array_Unnamed( unsigned int, delaunay->numFaces * 3 );
+	memset( delaunay->triangleIndices[0] , 0, sizeof(unsigned int) * delaunay->numFaces * 3 );
+
+	for( i=0; i<delaunay->numFaces; i++ ){
+		delaunay->triangleIndices[i] = delaunay->triangleIndices[0]+i*3;
+	}
+	
+	triIndices = delaunay->triangleIndices;
+	
+	edges = (QuadEdge*)delaunay->qp->chunks[0].memory;
+	sites = delaunay->sites;
+	rank = pd->rank;
+	maxEdges = delaunay->qp->numElements;
+		
+	for (i = 0; i < maxEdges; i++) {
+		edges[i].count = 0;
+	}
+
+	triCount = 0;
+	for (i = 0; i < maxEdges; i++) {
+		
+		e = eStart = (QuadEdgeRef)((void*)&(edges[i]));
+		
+		if( IS_FREE(e) )continue;
+		
+		do{
+			eOnext = ONEXT(e);
+			eLnext = LNEXT(e);
+			
+			if( (COUNT(e)<2) && (COUNT(LNEXT(e))<2) && (COUNT(eOnext)<2) ){
+				if( ((((Site*)ORG(eLnext)) == ((Site*)DEST(e)))) &&
+				 ((((Site*)DEST(eLnext)) == ((Site*)DEST(eOnext)))) ){
+		
+					if( onCurrentProc( pd, ((Site*)ORG(e))->id ) ||
+						onCurrentProc( pd, ((Site*)DEST(e))->id ) ||
+						onCurrentProc( pd, ((Site*)DEST(eOnext))->id ) ){
+						
+						pass = 0;
+						if( !onCurrentProc( pd, ((Site*)ORG(e))->id ) ){
+							if( !onRightProc( pd, ((Site*)ORG(e))->id ) ) pass = 1;
+						}
+						
+						if( !onCurrentProc( pd, ((Site*)DEST(e))->id ) ){
+							if( !onRightProc( pd, ((Site*)DEST(e))->id ) ) pass = 1;
+						}
+						
+						if( !onCurrentProc( pd, ((Site*)DEST(eOnext))->id ) ){
+							if( !onRightProc( pd, ((Site*)DEST(eOnext))->id ) ) pass = 1;
+						}
+						
+						if( !pass ){
+							triIndices[triCount][0] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)ORG(e))->id);
+							triIndices[triCount][1] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)DEST(e))->id);
+							triIndices[triCount][2] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)DEST(eOnext))->id);
+
+							triCount++;
+						}
+					}
+
+					COUNT(e)++;
+					COUNT(LNEXT(e))++;
+					COUNT(eOnext)++;
+				}
+			}
+			e = eOnext;
+		}while( e != eStart );
+	}
+	
+	delaunay->numTriangles = triCount;
+}
+
+#define NEIGHBOURS_TAG 1<<4
+#define VORONOI_SIDES_TAG 1<<5
+#define VORONOI_AREA_TAG 1<<6
+#define NUM_NEIGHBOUR_TAG 1<<7
+#define MAX_NEIGHBOURS 100
+
+void ParallelDelaunay_GatherTriangulation( ParallelDelaunay *pd )
+{
+	int i, j, k, l, count, count1;
+	MPI_Status st;
+	int numNeighboursSum = 0;
+	int stride = 0;
+	
+	assert( pd );
+
+	if( pd->rank == MASTER_PROC ){
+		
+		if( pd->attributes->CalculateVoronoiSurfaceArea ){
+			pd->voronoiArea = Memory_Alloc_Array_Unnamed( float, pd->numInputSites );
+		}
+
+		if( pd->attributes->FindNeighbours ){
+			pd->numNeighbours = Memory_Alloc_Array_Unnamed( unsigned int, pd->numInputSites );
+		}
+		
+		count = 0;
+		count1 = 0;
+		numNeighboursSum = 0;
+
+		{
+			float **procVoronoi = NULL;
+			int **procNumNeighbours = NULL;
+			int *procVoronoiCounter = NULL;
+			int *procNumNeighboursCounter = NULL;
+
+			procVoronoiCounter = malloc( sizeof( int ) * pd->numProcs );
+			memset( procVoronoiCounter, 0, sizeof( int ) * pd->numProcs );
+			
+			procNumNeighboursCounter = malloc( sizeof( int ) * pd->numProcs );
+			memset( procNumNeighboursCounter, 0, sizeof( int ) * pd->numProcs );
+
+			procVoronoi = malloc( sizeof( float* ) * pd->numProcs ); memset( procVoronoi, 0, sizeof(float*)*pd->numProcs );
+			procNumNeighbours = malloc( sizeof( int* ) * pd->numProcs ); memset( procNumNeighbours, 0, sizeof(int*)*pd->numProcs );
+
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+
+				if( pd->attributes->CalculateVoronoiSurfaceArea ){
+					procVoronoi[i] = malloc( sizeof(float)*pd->processorLoad[i] );
+					memset( procVoronoi[i], 0, sizeof( float ) * pd->processorLoad[i] );
+					MPI_Recv( procVoronoi[i], pd->processorLoad[i], MPI_FLOAT, i, VORONOI_AREA_TAG, (*pd->comm), &st );
+				}
+
+				if( pd->attributes->FindNeighbours ){
+					procNumNeighbours[i] = malloc( sizeof(int)*pd->processorLoad[i] );
+					memset( procNumNeighbours[i], 0, sizeof(int) * pd->processorLoad[i] );
+					MPI_Recv( procNumNeighbours[i], pd->processorLoad[i], MPI_INT, i, NUM_NEIGHBOUR_TAG, (*pd->comm), &st );
+				}
+			}
+
+			for( i=0; i<pd->numInputSites; i++ ){
+				int proc, order;
+				proc = pd->processor[i];
+				order = pd->initialOrder[i];
+
+				if( pd->attributes->CalculateVoronoiSurfaceArea ){
+					if( pd->processor[i] == MASTER_PROC ){
+						memcpy( &(pd->voronoiArea[pd->initialOrder[i]]), &(pd->localTriangulation->voronoiArea[count++]), sizeof( float ) );
+					}
+					else{
+						memcpy( &(pd->voronoiArea[order]), &(procVoronoi[proc][procVoronoiCounter[proc]++]), sizeof(float) );
+					}
+				}
+			
+				if( pd->attributes->FindNeighbours ){
+					if( pd->processor[i] == MASTER_PROC ){
+						memcpy( &(pd->numNeighbours[pd->initialOrder[i]]), &(pd->localTriangulation->numNeighbours[count1++]), sizeof( int ) );
+					}
+					else{
+						memcpy( &(pd->numNeighbours[pd->initialOrder[i]]), &(procNumNeighbours[proc][procNumNeighboursCounter[proc]++]), sizeof( int ) );
+					}
+					numNeighboursSum += pd->numNeighbours[pd->initialOrder[i]];
+				}
+			}
+			
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+				if( procVoronoi[i] ) free( procVoronoi[i] );
+				if( procNumNeighbours[i] ) free( procNumNeighbours[i] );
+			}
+			free( procVoronoi );
+			free( procNumNeighbours );
+			free( procVoronoiCounter );
+			free( procNumNeighboursCounter );
+		}
+
+		if( pd->attributes->FindNeighbours ){
+			pd->neighbours = Memory_Alloc_Array_Unnamed( unsigned int*, pd->numInputSites );
+			pd->neighbours[0] = Memory_Alloc_Array_Unnamed( unsigned int, numNeighboursSum );
+		}
+	
+		if( pd->attributes->CalculateVoronoiSides ){
+			pd->voronoiSides = Memory_Alloc_Array_Unnamed( float*, pd->numInputSites );
+			pd->voronoiSides[0] = Memory_Alloc_Array_Unnamed( float, numNeighboursSum );
+		}
+		
+		stride = 0;
+		for( j=0; j<pd->numInputSites; j++ ){
+			if( pd->attributes->FindNeighbours ){
+				pd->neighbours[j] = pd->neighbours[0]+stride;
+			}
+			
+			if( pd->attributes->CalculateVoronoiSides ){
+				pd->voronoiSides[j] = pd->voronoiSides[0]+stride;
+			}
+
+			if( pd->attributes->FindNeighbours ){
+				stride += pd->numNeighbours[j];
+			}
+		}
+		
+		{
+			float **procVoronoiSides = NULL;
+			float **procNeighbours = NULL;
+			int *procVoronoiSidesCounter = NULL;
+			int *procNeighboursCounter = NULL;
+			int *procNumNeighboursCount = NULL;
+
+			procVoronoiSidesCounter = malloc( sizeof( int ) * pd->numProcs );
+			memset( procVoronoiSidesCounter, 0, sizeof( int ) * pd->numProcs );
+			
+			procNeighboursCounter = malloc( sizeof( int ) * pd->numProcs );
+			memset( procNeighboursCounter, 0, sizeof( int ) * pd->numProcs );
+			
+			procNumNeighboursCount = malloc( sizeof( int ) * pd->numProcs );
+			memset( procNumNeighboursCount, 0, sizeof( int ) * pd->numProcs );
+
+			procVoronoiSides = malloc( sizeof( float* ) * pd->numProcs ); memset( procVoronoiSides, 0, sizeof(float*)*pd->numProcs );
+			procNeighbours = malloc( sizeof( unsigned int* ) * pd->numProcs ); memset( procNeighbours, 0, sizeof(unsigned int*)*pd->numProcs );
+
+			for( i=0; i<pd->numInputSites; i++ ){
+				procNumNeighboursCount[pd->processor[i]]+=pd->numNeighbours[pd->initialOrder[i]];
+			}
+
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+				if( pd->attributes->CalculateVoronoiSides ){
+					procVoronoiSides[i] = malloc( sizeof(float)*procNumNeighboursCount[i] );
+					memset( procVoronoiSides[i], 0, sizeof( float ) * procNumNeighboursCount[i] );
+					MPI_Recv( procVoronoiSides[i], procNumNeighboursCount[i], MPI_FLOAT, i, VORONOI_SIDES_TAG, (*pd->comm), &st );
+				}
+
+				if( pd->attributes->FindNeighbours ){
+					procNeighbours[i] = malloc( sizeof(unsigned int)*procNumNeighboursCount[i] );
+					memset( procNeighbours[i], 0, sizeof(unsigned int) * procNumNeighboursCount[i] );
+					MPI_Recv( procNeighbours[i], procNumNeighboursCount[i], MPI_INT, i, NEIGHBOURS_TAG, (*pd->comm), &st );
+				}
+			}
+
+			count = 0;
+			for(j=0; j<pd->numInputSites; j++){
+				int proc, order;
+				proc = pd->processor[j];
+				order = pd->initialOrder[j];
+				
+				if( pd->processor[j] == MASTER_PROC ){
+					if( pd->attributes->CalculateVoronoiSides ){
+						memcpy( (pd->voronoiSides[pd->initialOrder[j]]), (pd->localTriangulation->voronoiSides[count]),
+								sizeof(float)*pd->localTriangulation->numNeighbours[count] );
+					}
+					if( pd->attributes->FindNeighbours ){
+						memcpy( (pd->neighbours[pd->initialOrder[j]]), (pd->localTriangulation->neighbours[count]),
+								sizeof(int)*pd->localTriangulation->numNeighbours[count] );
+						for( i=0; i<pd->numNeighbours[pd->initialOrder[j]]; i++ ){
+							pd->neighbours[pd->initialOrder[j]][i] = 
+								pd->initialOrder[ParallelDelaunay_TranslateLocalToGlobal(pd, pd->neighbours[pd->initialOrder[j]][i])];
+						}
+					}
+					count++;
+				}
+				else{
+					if( pd->attributes->CalculateVoronoiSides ){
+						memcpy( (pd->voronoiSides[pd->initialOrder[j]]),
+								&(procVoronoiSides[proc][procVoronoiSidesCounter[proc]]),
+								sizeof(float)*pd->numNeighbours[order] );
+						procVoronoiSidesCounter[proc]+=pd->numNeighbours[order];
+					}
+					if( pd->attributes->FindNeighbours ){
+						memcpy( (pd->neighbours[pd->initialOrder[j]]),
+								&(procNeighbours[proc][procNeighboursCounter[proc]]),
+								sizeof(int)*pd->numNeighbours[order] );
+						procNeighboursCounter[proc]+=pd->numNeighbours[order];
+
+						for( i=0; i<pd->numNeighbours[pd->initialOrder[j]]; i++ ){
+							pd->neighbours[pd->initialOrder[j]][i] = pd->initialOrder[pd->neighbours[pd->initialOrder[j]][i]];
+						}
+					}
+				}
+			}
+
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+				if( procVoronoiSides[i] ) free( procVoronoiSides[i] );
+				if( procNeighbours[i] ) free( procNeighbours[i] );
+			}
+			free( procVoronoiSides );
+			free( procNeighbours );
+			free( procVoronoiSidesCounter );
+			free( procNeighboursCounter );			
+			free( procNumNeighboursCount );			
+		}
+	}
+	else{
+		if( pd->attributes->CalculateVoronoiSurfaceArea ){
+			MPI_Send( (pd->localTriangulation->voronoiArea), pd->numLocalSites, MPI_FLOAT, MASTER_PROC, VORONOI_AREA_TAG, (*pd->comm) );
+		}
+			
+		if( pd->attributes->FindNeighbours ){
+			MPI_Send( (pd->localTriangulation->numNeighbours), pd->numLocalSites, MPI_INT, MASTER_PROC, NUM_NEIGHBOUR_TAG, (*pd->comm) );
+		}
+		
+		if( pd->attributes->CalculateVoronoiSides ){
+			int sum = 0;
+			for( i=0; i<pd->numLocalSites; i++ ){
+				sum+=pd->localTriangulation->numNeighbours[i];
+			}
+			MPI_Send( pd->localTriangulation->voronoiSides[0], sum, 
+					MPI_FLOAT, MASTER_PROC, VORONOI_SIDES_TAG, *(pd->comm));
+		}
+
+		if( pd->attributes->FindNeighbours ){
+			int sum = 0;
+			for( i=0; i<pd->numLocalSites; i++ ){
+				sum+=pd->localTriangulation->numNeighbours[i];
+				
+				for( j=0; j<pd->localTriangulation->numNeighbours[i]; j++ ){
+					pd->localTriangulation->neighbours[i][j] = ParallelDelaunay_TranslateLocalToGlobal( pd, pd->localTriangulation->neighbours[i][j] );
+				}
+			}
+			MPI_Send( pd->localTriangulation->neighbours[0], sum, MPI_INT, MASTER_PROC, NEIGHBOURS_TAG, *(pd->comm) );
+		}
+	}
+	
+	if( pd->attributes->BuildTriangleIndices ){
+		unsigned int **triIndices = NULL;
+		int globalNumTriangles = 0;
+		Delaunay *delaunay = NULL;
+		int *triCountArray = NULL;
+		int triCount = 0;
+		int rank = 0;
+
+		delaunay = pd->localTriangulation;
+
+		assert( delaunay );
+	
+		triIndices = delaunay->triangleIndices;
+		triCount = delaunay->numTriangles;
+
+		MPI_Allreduce( &triCount, &globalNumTriangles, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD );
+	
+		pd->numTriangles = globalNumTriangles;
+		
+		triCountArray = Memory_Alloc_Array_Unnamed( int, pd->numProcs );
+		rank = pd->rank;
+	
+		if( rank == MASTER_PROC ){
+
+			pd->triangleIndices = Memory_Alloc_Array_Unnamed( unsigned int*,  globalNumTriangles );
+			pd->triangleIndices[0] = Memory_Alloc_Array_Unnamed( unsigned int, globalNumTriangles*3 );
+
+			if ( pd->attributes->BuildTriangleNeighbours ){
+				pd->triangleNeighbours = Memory_Alloc_Array_Unnamed( unsigned int*,  globalNumTriangles );
+				pd->triangleNeighbours[0] = Memory_Alloc_Array_Unnamed( unsigned int, globalNumTriangles*3 );
+			}
+
+			triCountArray[0] = triCount;
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+				MPI_Recv( &(triCountArray[i]), 1, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );					
+			}
+
+			for( i=0; i<globalNumTriangles; i++ ){
+				pd->triangleIndices[i] = pd->triangleIndices[0] + i*3;
+	
+				if ( pd->attributes->BuildTriangleNeighbours ){
+					pd->triangleNeighbours[i] = pd->triangleNeighbours[0] + i*3;
+
+					pd->triangleNeighbours[i][0] = pd->numTriangles;
+					pd->triangleNeighbours[i][1] = pd->numTriangles;
+					pd->triangleNeighbours[i][2] = pd->numTriangles;
+				}
+			}
+
+			for(j=0; j<triCountArray[0]; j++){
+				memcpy( pd->triangleIndices[j], triIndices[j], sizeof(int)*3 );
+			}
+		
+			stride = j;
+			for( i=MASTER_PROC+1; i<pd->numProcs; i++ ){
+				unsigned int *temp = malloc( sizeof(unsigned int)*triCountArray[i]*3 );
+					MPI_Recv( temp, triCountArray[i]*3, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );					
+				for(j=0; j<triCountArray[i]*3; j+=3){
+					memcpy( pd->triangleIndices[stride++], &(temp[j]), sizeof(int)*3 );
+				}
+				free( temp );
+			}
+
+			for( i=0; i<pd->numTriangles; i++ ){
+				pd->triangleIndices[i][0] = pd->initialOrder[pd->triangleIndices[i][0]];
+				pd->triangleIndices[i][1] = pd->initialOrder[pd->triangleIndices[i][1]];
+				pd->triangleIndices[i][2] = pd->initialOrder[pd->triangleIndices[i][2]];
+			}
+
+			/*for( j=0; j<globalNumTriangles; j++ ){
+				printf( "indices[%d] = [%d, %d, %d]\n", j, pd->triangleIndices[j][0], pd->triangleIndices[j][1], pd->triangleIndices[j][2] );
+			}*/
+			
+			stride = 0;
+			if ( pd->attributes->BuildTriangleNeighbours ){
+				int **nodeToTriangle = NULL;
+				int *nodeToTriangleCount = NULL;
+				int *triangleNeighboursCount = NULL;
+				int triangles[2];
+				int counter = 0;
+				int found = 0;
+				int m = 0;
+
+				nodeToTriangle = Memory_Alloc_Array_Unnamed( int*, pd->numInputSites );
+				nodeToTriangle[0] = Memory_Alloc_Array_Unnamed( int, numNeighboursSum );
+
+				nodeToTriangleCount = Memory_Alloc_Array_Unnamed( int, pd->numInputSites );
+				memset( nodeToTriangleCount, 0, sizeof( int ) * pd->numInputSites );
+				
+				triangleNeighboursCount = Memory_Alloc_Array_Unnamed( int, pd->numTriangles );
+				memset( triangleNeighboursCount, 0, sizeof( int ) * pd->numTriangles );
+
+				for( i=0; i<pd->numSites; i++ ){
+					nodeToTriangle[i] = nodeToTriangle[0] + stride;
+
+					stride += pd->numNeighbours[i];
+				}
+
+				for( i=0; i<pd->numTriangles; i++ ){
+					nodeToTriangle[pd->triangleIndices[i][0]][nodeToTriangleCount[pd->triangleIndices[i][0]]++] = i;
+					nodeToTriangle[pd->triangleIndices[i][1]][nodeToTriangleCount[pd->triangleIndices[i][1]]++] = i;
+					nodeToTriangle[pd->triangleIndices[i][2]][nodeToTriangleCount[pd->triangleIndices[i][2]]++] = i;
+				}
+				
+				for( i=0; i<pd->numInputSites; i++ ){
+					for( j=0; j<pd->numNeighbours[i]; j++ ){
+						triangles[0] = -1;
+						triangles[1] = -1;
+						counter = 0;
+						for( k=0; k<nodeToTriangleCount[i]; k++ ){
+							for( l=0; l<3; l++ ){
+								if( pd->neighbours[i][j] == pd->triangleIndices[nodeToTriangle[i][k]][l] ){
+									triangles[counter++] = nodeToTriangle[i][k];
+								}
+							}
+						}
+						
+						if( (triangles[0] > -1) ){
+							
+							found = 0;
+							for( m=0; m<3; m++ ){
+								if( pd->triangleNeighbours[triangles[0]][m] == triangles[1] ) found = 1;
+							}
+							if( !found ){
+								pd->triangleNeighbours[triangles[0]][triangleNeighboursCount[triangles[0]]++] = triangles[1];
+							}
+						}
+						if( (triangles[1] > -1) ){
+						
+							found = 0;
+							for( m=0; m<3; m++ ){
+								if( pd->triangleNeighbours[triangles[1]][m] == triangles[0] ) found = 1;
+							}
+							if( !found ){
+								pd->triangleNeighbours[triangles[1]][triangleNeighboursCount[triangles[1]]++] = triangles[0];
+							}
+						}
+					}
+				}
+				
+				Memory_Free( nodeToTriangle[0] );
+				Memory_Free( nodeToTriangle );
+				Memory_Free( nodeToTriangleCount );
+				Memory_Free( triangleNeighboursCount );
+			}
+		}
+		else{
+			MPI_Send( &triCount, 1, MPI_INT, MASTER_PROC, DATA_TAG, MPI_COMM_WORLD );
+			MPI_Send( triIndices[0], 3*triCount, MPI_INT, MASTER_PROC, DATA_TAG, MPI_COMM_WORLD );
+		}
+
+		Memory_Free( triCountArray );
+	}	
+}
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+int ParallelDelaunay_TranslateLocalToGlobal( ParallelDelaunay *self, int id )
+{
+	if( id >= (self->localTriangulation->idOffset+self->numLocalSites) ){
+	
+		if( (self->leftProc != self->numProcs) && (id < (self->localTriangulation->idOffset+self->numLocalSites + self->numHaloSites[0])) ){
+			
+			id = self->mappingTable[0][(id -
+						(self->localTriangulation->idOffset+
+						 self->numLocalSites))];
+		}
+		else{
+
+			id = self->mappingTable[1][(id -
+						(self->localTriangulation->idOffset+
+						 self->numLocalSites+
+						 self->numHaloSites[0]))];
+		}
+		return id;
+	}
+	else{
+		return id;
+	}
+}
+
+#define EDGE_TAG 102
+#define BREAK_TAG 103
+typedef struct SitePacket_t{
+	int id;
+	float xyz[3];
+}SitePacket;
+void ParallelDelaunaySendEdge( QuadEdgeRef edge, int rank, MPI_Comm *comm, MPI_Request *req )
+{
+	SitePacket sp[2];
+	assert(edge);
+
+	memcpy( sp[0].xyz, ((Site*)ORG(edge))->coord, sizeof( CoordF ) );
+	sp[0].id = ((Site*)ORG(edge))->id;
+	
+	memcpy( sp[1].xyz, ((Site*)DEST(edge))->coord, sizeof( CoordF ) );
+	sp[1].id = ((Site*)DEST(edge))->id;
+	MPI_Isend( sp, sizeof(SitePacket)*2, MPI_BYTE, rank, EDGE_TAG, *comm, req );
+}
+
+QuadEdgeRef ParallelDelaunayRecvEdge( ParallelDelaunay *pd, int rank, MPI_Comm *comm )
+{
+	QuadEdgeRef edge = 0;
+	CoordF *c[2];
+	Site *s[2];
+	MPI_Status st;
+	SitePacket sp[2];
+	Delaunay *d = NULL;
+	
+	assert( pd );
+	d = pd->localTriangulation;
+	
+	edge = MakeQuadEdge( d->qp );
+	
+	assert(edge);
+
+	s[0] = MemoryPool_NewObject( Site, pd->sitePool );
+	s[1] = MemoryPool_NewObject( Site, pd->sitePool );
+	
+	c[0] = MemoryPool_NewObject( CoordF, pd->coordPool );
+	c[1] = MemoryPool_NewObject( CoordF, pd->coordPool );
+	
+	MPI_Recv( sp, sizeof(SitePacket)*2, MPI_BYTE, rank, EDGE_TAG, *comm, &st );
+
+	memcpy( (c[0]), sp[0].xyz, sizeof( CoordF ) );
+	memcpy( (c[1]), sp[1].xyz, sizeof( CoordF ) );
+
+	s[0]->id = sp[0].id;
+	s[0]->coord = (c[0]);
+	s[1]->id = sp[1].id;
+	s[1]->coord = (c[1]);
+	
+	ORG(edge)=(s[0]);
+	DEST(edge)=(s[1]);
+
+	return edge;
+}
+
+int ParallelDelaunayListCompareFunction( void *a, void *b )
+{
+	QuadEdgeRef e1, e2;
+
+	e1 = (QuadEdgeRef)a;
+	e2 = (QuadEdgeRef)b;
+
+	if( e1 > e2 ){
+		return 1;
+	}
+	else if( e1 < e2 ){
+		return -1;
+	}
+	else{
+		return 0;
+	}
+}
+
+void ParallelDelaunayListDeleteFunction( void *a )
+{
+
+}
+
+QuadEdgeRef ParallelDelaunayFindLowestQuadEdge( ParallelDelaunay *pd, MPI_Comm *comm, int rank )
+{
+	QuadEdgeRef ldi=0, rdi=0;
+	MPI_Request r;
+	MPI_Status s;
+	int globalBreak, localBreak;
+	LinkedList *list = NULL;
+	LinkedListIterator *iter;
+	QuadEdgeRef result = 0;
+	Delaunay *d = NULL;
+
+	assert( pd );
+	d = pd->localTriangulation;
+	
+	list = LinkedList_New( ParallelDelaunayListCompareFunction, NULL, NULL, ParallelDelaunayListDeleteFunction, LINKEDLIST_UNSORTED );
+	iter = LinkedListIterator_New( list );
+	
+	if( rank == pd->leftProc ){
+		rdi = d->leftMost;
+	}
+	else if( rank == pd->rightProc ){
+		ldi = d->rightMost;
+	}
+	else{
+		fprintf( stderr, "Failed to find lowest edge on rank %d..!\n Aborting..!\n", rank );
+	}
+
+	if( rank == pd->numProcs ) return 0;
+	
+	localBreak = 0;
+	globalBreak = 0;
+
+	while (1) 
+	{
+		localBreak = 0;
+		globalBreak = 0;
+
+		if( rank == pd->leftProc ){
+			ParallelDelaunaySendEdge( rdi, rank, comm, &r );
+			ldi = ParallelDelaunayRecvEdge( pd, rank, comm );
+			MPI_Wait( &r, &s );
+			LinkedList_InsertNode( list, (void*)ldi, sizeof( QuadEdgeRef* ) );
+			
+			if (RightOf(ORG(ldi), rdi)){
+				rdi = ONEXT(SYM(rdi));
+				localBreak = 1;
+			}
+			else{
+			}
+		}
+		
+		if( rank == pd->rightProc ){
+			ParallelDelaunaySendEdge( ldi, rank, comm, &r );
+			rdi = ParallelDelaunayRecvEdge( pd, rank, comm );
+			MPI_Wait( &r, &s );
+			LinkedList_InsertNode( list, (void*)rdi, sizeof( QuadEdgeRef* ) );
+			
+			if (LeftOf(ORG(rdi), ldi)){
+				ldi = LNEXT(ldi);
+				localBreak = 1;
+			}
+			else{
+			}
+		}
+
+		MPI_Isend( &localBreak, 1, MPI_INT, rank, BREAK_TAG, *comm, &r );
+		MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &s );
+		MPI_Wait( &r, &s );
+		globalBreak |= localBreak;
+		
+		if( globalBreak == 0 ){
+			break;
+		}
+	}
+
+	for( result=(QuadEdgeRef)((void*)LinkedListIterator_First(iter));
+			result != 0;
+			result=(QuadEdgeRef)((void*)LinkedListIterator_Next(iter)) ){
+
+		DeleteQuadEdge( d->qp, result );
+	}
+
+	Stg_Class_Delete( list );
+	Stg_Class_Delete( iter );
+	
+	if( rank == pd->leftProc ){
+		return rdi;
+	}
+	else if( rank == pd->rightProc ){
+		return ldi;
+	}
+	
+	return 0;
+}
+
+void ParallelDelaunayMerge( ParallelDelaunay *pd, MPI_Comm *comm, int rank )
+{
+	QuadEdgeRef lowest = 0, lcand = 0, rcand = 0, basel = 0, baselPrev;
+	MPI_Request r;
+	MPI_Status s;
+	int localBreak=0, globalBreak=0;
+	double result = 0.0f;
+	Delaunay *d = NULL;
+	
+	assert( pd );
+
+	d = pd->localTriangulation;
+
+	lowest = ParallelDelaunayFindLowestQuadEdge( pd, comm, rank );
+	
+	localBreak = 0;
+	globalBreak = 0;
+
+	if( rank == pd->numProcs ){
+		fprintf( stderr, "Failed to merge rank %d with rank %d..!\nAborting..!\n", pd->rank, rank );
+		assert( 0 );
+	}
+	
+	if( rank == pd->leftProc ){
+		rcand = lowest;
+		
+		ParallelDelaunaySendEdge( lowest, rank, comm, &r );
+		lcand = ParallelDelaunayRecvEdge( pd, rank, comm );
+		MPI_Wait( &r, &s );
+		
+		basel = MakeQuadEdge( d->qp );
+		ORG(basel) = DEST(SYM(rcand));
+		DEST(basel) = ORG(lcand);
+
+		DeleteQuadEdge( d->qp, lcand );
+		
+		CCW( ((Site*)DEST(rcand))->coord, ((Site*)DEST(basel))->coord, ((Site*)ORG(basel))->coord, &result);
+		if( result == 0.0f ){
+			rcand = OPREV(rcand);
+		}
+		
+		while(1){
+			localBreak = 0;
+			if (RightOf(DEST(rcand), basel)){
+				while (InCircle(DEST(basel), ORG(basel), DEST(rcand), DEST(OPREV(rcand)))){
+					QuadEdgeRef t = OPREV(rcand);
+
+					DeleteQuadEdge(d->qp, rcand);
+					rcand = t;
+				}
+			}
+			
+			if (!RightOf(DEST(rcand), basel)) localBreak = 1;
+
+			MPI_Isend( &localBreak, 1, MPI_INT, rank, BREAK_TAG, *comm, &r );
+			MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &s );
+			MPI_Wait( &r, &s );
+			globalBreak &= localBreak;
+
+			if( globalBreak ){
+				break;
+			}
+
+			ParallelDelaunaySendEdge( rcand, rank, comm, &r );
+			lcand = ParallelDelaunayRecvEdge( pd, rank, comm );
+			MPI_Wait( &r, &s );
+
+			if ( !RightOf(DEST(lcand), basel) ||
+				( RightOf(DEST(rcand), basel) && 
+				InCircle(DEST(lcand), ORG(lcand), ORG(rcand), DEST(rcand)))){
+			
+				baselPrev = basel;
+				basel = MakeQuadEdge(d->qp);
+				ORG(basel) = DEST(rcand);
+				DEST(basel) = ORG(SYM(baselPrev));
+				
+				rcand=LNEXT(rcand);
+				DeleteQuadEdge( d->qp, lcand );
+			}
+			else{
+				baselPrev = basel;
+				basel = MakeQuadEdge(d->qp);
+				ORG(basel) = DEST(SYM(baselPrev));
+				DEST(basel) = ORG(SYM(lcand));
+			}
+		}
+	}
+	else if( rank == pd->rightProc ){
+		lcand = lowest;
+		
+		ParallelDelaunaySendEdge( lowest, rank, comm, &r );
+		rcand = ParallelDelaunayRecvEdge( pd, rank, comm );
+		MPI_Wait( &r, &s );
+		
+		basel = MakeQuadEdge(d->qp);
+		ORG(basel) = DEST(SYM(rcand));
+		DEST(basel) = ORG(lcand);
+		
+		DeleteQuadEdge( d->qp, rcand );
+		
+		CCW( ((Site*)DEST(lcand))->coord, ((Site*)DEST(basel))->coord, ((Site*)ORG(basel))->coord, &result);
+		if( result == 0.0f ){
+			lcand = ONEXT(lcand);
+		}
+		
+		while(1){
+			localBreak = 0;
+			if (RightOf(DEST(lcand), basel)){
+				while (InCircle(DEST(basel), ORG(basel), DEST(lcand), DEST(ONEXT(lcand)))){
+					QuadEdgeRef t = ONEXT(lcand);
+					
+					DeleteQuadEdge(d->qp, lcand);
+					lcand = t;
+				}
+			}
+			
+			if (!RightOf(DEST(lcand), basel)) localBreak = 1;
+
+			MPI_Isend( &localBreak, 1, MPI_INT, rank, BREAK_TAG, *comm, &r );
+			MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &s );
+			MPI_Wait( &r, &s );
+			globalBreak &= localBreak;
+
+			if( globalBreak ){
+				break;
+			}
+			
+			ParallelDelaunaySendEdge( lcand, rank, comm, &r );
+			rcand = ParallelDelaunayRecvEdge( pd, rank, comm );
+			MPI_Wait( &r, &s );
+
+			if ( !RightOf(DEST(lcand), basel) ||
+				( RightOf(DEST(rcand), basel) && 
+				InCircle(DEST(lcand), ORG(lcand), ORG(rcand), DEST(rcand)))){
+				
+				baselPrev = basel;
+				basel = MakeQuadEdge(d->qp);
+				ORG(basel) = DEST(rcand);
+				DEST(basel) = ORG(SYM(baselPrev));
+			}
+			else{
+				baselPrev = basel;
+				basel = MakeQuadEdge(d->qp);
+				ORG(basel) = DEST(SYM(baselPrev));
+				DEST(basel) = ORG(SYM(lcand));
+				
+				lcand = RPREV(lcand);
+				DeleteQuadEdge( d->qp, rcand );
+			}
+		}
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ParallelDelaunay.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ParallelDelaunay.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,171 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Calculates the ParallelDelaunay triangulation and the voronoi diangram of a set of points.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ParallelDelaunay.h 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_ParallelDelaunay_h__
+#define __Domain_Geometry_ParallelDelaunay_h__
+
+	/* Virtual function types */
+	
+	/** Textual name of this class */
+	extern const Type ParallelDelaunay_Type;
+
+	/** ParallelDelaunay class contents (see Delaunay) */
+	#define __ParallelDelaunay \
+		__Delaunay \
+		CoordF		*localPoints; \
+		int			*initialOrder; \
+		int			leftProc; \
+		int			rightProc; \
+		int			numProcs; \
+		BTree		*haloSites[2]; \
+		int			numHaloSites[2]; \
+		Delaunay	*localTriangulation; \
+		int			*mappingTable[2]; \
+		int			*mapGlobalToLocal; \
+		int			*processor; \
+		int			*processorLoad; \
+		int			rank; \
+		int			numLocalSites; \
+		int			numTotalLocalSites; \
+		MemoryPool	*sitePool; \
+		MemoryPool	*coordPool; \
+		MPI_Comm	*comm;
+	struct ParallelDelaunay { __ParallelDelaunay };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Create a ParallelDelaunay */
+	ParallelDelaunay* ParallelDelaunay_DefaultNew( Name name );
+	
+	ParallelDelaunay* ParallelDelaunay_New(
+		Name						name,
+		Dictionary*					dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							rank,
+		int							numProcs,
+		MPI_Comm					*comm,
+		DelaunayAttributes	*attr );
+	
+	/** Initialise a ParallelDelaunay */
+	void ParallelDelaunay_Init(
+		ParallelDelaunay*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							rank,
+		int							numProcs,
+		MPI_Comm					*comm,
+		DelaunayAttributes			*attr );
+	
+	/** Creation implementation */
+	ParallelDelaunay* _ParallelDelaunay_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Dictionary					*dictionary,
+		CoordF						*sites,
+		int							numSites,
+		int							rank,
+		int							numProcs,
+		MPI_Comm					*comm,
+		DelaunayAttributes			*attr );
+	
+	void _ParallelDelaunay_Init( ParallelDelaunay* self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _ParallelDelaunay_Delete( void* pd );
+	
+	/** Stg_Class_Print() implementation */
+	void _ParallelDelaunay_Print( void* pd, Stream* stream );
+	
+	void *_ParallelDelaunay_Copy( void* pd, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _ParallelDelaunay_Construct( void* pd, Stg_ComponentFactory* cf, void* data );
+	
+	void _ParallelDelaunay_Build( void* pd, void* data );
+	
+	void _ParallelDelaunay_Initialise( void* pd, void* data );
+	
+	void _ParallelDelaunay_Execute( void* pd, void* data );
+	
+	void _ParallelDelaunay_Destroy( void* pd, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	typedef enum Direction_t{
+		LEFT,
+		RIGHT
+	}Direction;
+
+	void ParallelDelaunay_RetriangulateAfterMerge( ParallelDelaunay *pd, Direction d );
+	void ParallelDelaunay_BuildTriangleIndices( ParallelDelaunay *pd );
+	void ParallelDelaunaySendEdge( QuadEdgeRef edge, int rank, MPI_Comm *comm, MPI_Request *req );
+	QuadEdgeRef ParallelDelaunayRecvEdge( ParallelDelaunay *pd, int rank, MPI_Comm *comm );
+
+	QuadEdgeRef ParallelDelaunayFindLowestQuadEdge( ParallelDelaunay *pd, MPI_Comm *comm, int rank );
+	void ParallelDelaunayMerge( ParallelDelaunay *pd, MPI_Comm *comm, int rank );
+	int ParallelDelaunay_TranslateLocalToGlobal( ParallelDelaunay *self, int id );
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions
+	*/
+	
+	void ParallelDelaunay_GatherTriangulation( ParallelDelaunay *pd );
+	
+#endif /* __Domain_Geometry_ParallelDelaunay_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ParallelDelaunay.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ParallelDelaunay.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ParallelDelaunay</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">Delaunay</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Plane.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Plane.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,61 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Plane.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "Plane.h"
+
+#include <stdio.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void Plane_LineIntersect( Plane plane, Line3 line, Coord point ) {
+	double		t = plane[3] - plane[0] * line[0][0] - plane[1] * line[0][1] - plane[2] * line[0][2];
+	
+	t /= plane[0] * line[1][0] + plane[1] * line[1][1] + plane[2] * line[1][2];
+	
+	point[0] = line[0][0] + line[1][0] * t;
+	point[1] = line[0][1] + line[1][1] * t;
+	point[2] = line[0][2] + line[1][2] * t;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Plane.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Plane.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,81 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides operations for use on infinite planes.
+**
+** Assumptions:
+**    - Coord is an array of 3 doubles.
+**
+** Comments:
+**
+** $Id: Plane.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Plane_h__
+#define __Domain_Geometry_Plane_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	/* calculate a plane equation from two non-parallel vectors and a point */
+	#define Plane_CalcFromVec( dest, axisA, axisB, pointOnPlane )		\
+		Vec_Cross3D( dest, axisA, axisB );				\
+		Vec_Norm3D( dest, dest );					\
+		dest[3] = Vec_Dot3D( dest, pointOnPlane )
+		
+	
+	/* return the plane's normal in dest */
+	#define Plane_Normal( dest, plane )		\
+		Vec_Set3D( dest, plane )
+		
+	
+	/* calculate the shortest distance from plane to point */
+	#define Plane_DistanceToPoint( plane, point )		\
+		(Vec_Dot3D( plane, point ) - plane[3])
+	
+	
+	/* determines if point is in front of the plane based on the direction of the plane's normal */
+	#define Plane_PointIsInFront( plane, point )					\
+		(Plane_DistanceToPoint( plane, point ) > 0.0 ? True : False)
+	
+	
+	/* determines if the point is situated on the plane */
+	#define Plane_PointIsOnPlane( plane, point )				\
+		(Vec_Dot3D( plane, point ) == plane[3] ? True : False)
+		
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void Plane_LineIntersect( Plane plane, Line3 line, Coord point );
+
+	
+#endif /* __Domain_Geometry_Plane_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/QuadEdge.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/QuadEdge.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,129 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: QuadEdge.c 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "QuadEdge.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+QuadEdgeRef MakeQuadEdge( MemoryPool *qp )
+{
+	QuadEdge *qe = (QuadEdge*)NULL;
+	QuadEdgeRef e = 0;
+
+	qe = MemoryPool_NewObject( QuadEdge, qp );
+	memset( qe, 0, sizeof( QuadEdge ) );
+	e = (QuadEdgeRef) qe;
+	SET_IN_USE( (QuadEdgeRef)e );
+	
+	if( e == 0 ){
+		fprintf( stderr, "Out of memory..!\n Aborting..!\n" );
+		assert( 0 );
+	}
+	
+	ONEXT(e) = e;
+	SYMDNEXT(e) = SYM(e);
+	ROTRNEXT(e) = TOR(e);
+	TORLNEXT(e) = ROT(e);
+	COUNT(e) = 0;
+	
+	return e;
+}
+
+void DeleteQuadEdge( MemoryPool *qp, QuadEdgeRef e)
+{
+	QuadEdgeRef f = SYM(e);
+	
+	if (ONEXT(e) != e) SpliceQuadEdges(e, OPREV(e));
+	if (ONEXT(f) != f) SpliceQuadEdges(f, OPREV(f));  
+    
+	MemoryPool_DeleteObject( qp, (QuadEdge*) ((e) & WORD) );
+}
+
+void SpliceQuadEdges(QuadEdgeRef a, QuadEdgeRef b)
+{
+	QuadEdgeRef ta, tb;
+	QuadEdgeRef alpha = ROT(ONEXT(a));
+	QuadEdgeRef beta = ROT(ONEXT(b));
+
+	ta = ONEXT(a);
+	tb = ONEXT(b);
+	ONEXT(a) = tb;
+	ONEXT(b) = ta;
+	ta = ONEXT(alpha);
+	tb = ONEXT(beta);
+	ONEXT(alpha) = tb;
+	ONEXT(beta) = ta;    
+}
+
+QuadEdgeRef ConnectQuadEdges(MemoryPool *qp, QuadEdgeRef a, QuadEdgeRef b)
+{
+	QuadEdgeRef e;
+
+	e = MakeQuadEdge( qp );
+	ORG(e) = DEST(a);
+	DEST(e) = ORG(b);
+	
+	SpliceQuadEdges(e, LNEXT(a));
+	SpliceQuadEdges(SYM(e), b);
+	
+	return e;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/QuadEdge.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/QuadEdge.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,201 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: QuadEdge.h 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_QuadEdge_h__
+#define __Domain_Geometry_QuadEdge_h__
+
+	/* Virtual function types */
+	
+	/** Textual name of this class */
+	extern const Type QuadEdge_Type;
+
+	#define IN_USE 1
+	
+	typedef struct VoronoiVertex_t{
+		float point[2];
+	}VoronoiVertex;
+
+	/** QuadEdge class contents (see QuadEdge) */
+	#define __QuadEdge \
+		QuadEdgeRef 	next[4];\
+		void			*data[4];\
+		unsigned		count;\
+		unsigned		attributes;
+
+	struct QuadEdge { __QuadEdge };
+
+/* Defining WORD according to the architecture */
+#if defined(SYSTEM_SIZEOF_LONG) && SYSTEM_SIZEOF_LONG == 8
+	#define WORD 0xfffffffffffffffcu
+#else
+	#define WORD 0xfffffffcu
+#endif
+
+#define COUNT(e)  ((QuadEdge *)((e)&WORD))->count
+
+/* Defining macros for operating on bit flags */
+/*#define IS_IN_USE(e)	(((QuadEdge *)((e)&WORD))->attributes == IN_USE)
+#define IS_FREE(e)		(!(((QuadEdge *)((e)&WORD))->attributes == IN_USE))
+#define SET_IN_USE(e)	(((QuadEdge *)((e)&WORD))->attributes = IN_USE)
+#define SET_FREE(e)		(((QuadEdge *)((e)&WORD))->attributes = 0)*/
+
+#define IS_IN_USE(e)   (((QuadEdge *)((e)&WORD))->attributes & IN_USE)
+#define IS_FREE(e)             (!(((QuadEdge *)((e)&WORD))->attributes & IN_USE))
+#define SET_IN_USE(e)  (((QuadEdge *)((e)&WORD))->attributes |= IN_USE)
+#define SET_FREE(e)            (((QuadEdge *)((e)&WORD))->attributes &= ~IN_USE)
+
+/* Edge orientation operators: */
+
+#define ROT(e) (((e)&WORD)+(((e)+1)&3u))
+#define SYM(e) (((e)&WORD)+(((e)+2)&3u))
+#define TOR(e) (((e)&WORD)+(((e)+3)&3u))
+
+/* Vertex/face walking operators: */
+
+#define ONEXT(e) ((QuadEdge *)((e)&WORD))->next[(e)&3]
+#define ROTRNEXT(e) ((QuadEdge *)((e)&WORD))->next[((e)+1)&3]
+#define SYMDNEXT(e) ((QuadEdge *)((e)&WORD))->next[((e)+2)&3]
+#define TORLNEXT(e) ((QuadEdge *)((e)&WORD))->next[((e)+3)&3]
+
+#define RNEXT(e) (TOR(ROTRNEXT(e)))
+#define DNEXT(e) (SYM(SYMDNEXT(e)))
+#define LNEXT(e) (ROT(TORLNEXT(e)))
+
+#define OPREV(e) (ROT(ROTRNEXT(e)))
+#define DPREV(e) (TOR(TORLNEXT(e)))
+#define RPREV(e) (SYMDNEXT(e))
+#define LPREV(e) (SYM(ONEXT(e)))
+
+/* Data pointers: */
+
+#define ODATA(e) ((QuadEdge *)((e)&WORD))->data[(e)&3]
+#define RDATA(e) ((QuadEdge *)((e)&WORD))->data[((e)+1)&3]
+#define DDATA(e) ((QuadEdge *)((e)&WORD))->data[((e)+2)&3]
+#define LDATA(e) ((QuadEdge *)((e)&WORD))->data[((e)+3)&3]
+
+#define ORG(e) ODATA(e)
+#define DEST(e) DDATA(e)
+
+#define VORG(e) RDATA(e)
+#define VDEST(e) LDATA(e)
+
+/* Fast absolute floating point value */
+#define FABS(a)  ((a) >= 0.0 ? (a) : -(a))
+
+/* Macro for calculating the area of a triangle */
+#define CCW(a, b, c, result)\
+	do{\
+		double ax=0, ay=0, bx=0, by=0, cx=0, cy=0; \
+		ax = (*(a))[0]; ay = (*(a))[1];\
+		bx = (*(b))[0]; by = (*(b))[1];\
+		cx = (*(c))[0]; cy = (*(c))[1];\
+		*(result) = ((bx*cy-by*cx) - (ax*cy-ay*cx) + (ax*by-ay*bx));\
+	}while(0)
+
+/* Macro for calculating the cross product of 2 3D vectors */
+#define CROSS_PROD( result, a, b )\
+	do{\
+		result[0]=a[1]*b[2] - b[1]*a[2];\
+		result[1]=-1.0f*(a[0]*b[2] - b[0]*a[2]);\
+		result[2]=a[0]*b[1] - b[0]*a[1];\
+	}while(0)
+
+/* Macro for calculating the circumcircle of 3 points */
+#define CIRCUM_CIRCLE( a, b, c, result ) \
+do{\
+	double ab[3], ac[3], abMid[3], acMid[3], cp1[3], cp2[3], rhs[3], lhs[3], mod, temp, lambda; \
+	ab[0] = (*(b))[0] - (*(a))[0];\
+	ab[1] = (*(b))[1] - (*(a))[1];\
+	ab[2] = 0.0f;\
+	mod = sqrt(ab[0]*ab[0] + ab[1]*ab[1]);\
+	ab[0]/=mod;\
+	ab[1]/=mod;\
+	abMid[0] = ((*(b))[0] + (*(a))[0])*0.5;\
+	abMid[1] = ((*(b))[1] + (*(a))[1])*0.5;\
+\
+	ac[0] = (*(c))[0] - (*(a))[0];\
+	ac[1] = (*(c))[1] - (*(a))[1];\
+	ac[2] = 0.0f;\
+	mod = sqrt(ac[0]*ac[0] + ac[1]*ac[1]);\
+	ac[0]/=mod;\
+	ac[1]/=mod;\
+	acMid[0] = ((*(c))[0] + (*(a))[0])*0.5;\
+	acMid[1] = ((*(c))[1] + (*(a))[1])*0.5;\
+\
+	temp = ab[0];\
+	ab[0] = -ab[1];\
+	ab[1] = temp;\
+\
+	temp = ac[0];\
+	ac[0] = -ac[1];\
+	ac[1] = temp;\
+\
+	CROSS_PROD( cp1, abMid, ac );\
+	CROSS_PROD( cp2, acMid, ac );\
+\
+	rhs[0] = cp2[0]-cp1[0];\
+	rhs[1] = cp2[1]-cp1[1];\
+	rhs[2] = cp2[2]-cp1[2];\
+\
+	CROSS_PROD( lhs, ab, ac );\
+\
+	lambda = rhs[2]/lhs[2];\
+\
+	(*(result))->point[0] = abMid[0] + ab[0]*lambda;\
+	(*(result))->point[1] = abMid[1] + ab[1]*lambda;\
+}while(0)
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	QuadEdgeRef MakeQuadEdge( MemoryPool *qp );
+	void DeleteQuadEdge( MemoryPool *qp, QuadEdgeRef e);
+	void SpliceQuadEdges(QuadEdgeRef a, QuadEdgeRef b);
+	QuadEdgeRef ConnectQuadEdges(MemoryPool *qp, QuadEdgeRef a, QuadEdgeRef b);
+	
+#endif /* __Domain_Geometry_QuadEdge_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/RMatrix.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/RMatrix.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RMatrix.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "RMatrix.h"
+#include "TrigMath.h"
+
+#include <math.h>
+#include <assert.h>
+#include <string.h>
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void RMatrix_BuildOrientation( RMatrix dest, Coord zAxis, Coord xAxis ) {
+	Coord		nxa;
+	
+	RMatrix_LoadIdentity( dest );
+	RMatrix_ApplyRotationY( dest, ArcTan( zAxis[0], zAxis[2] ) );
+	RMatrix_ApplyRotationX( dest, asin( zAxis[1] / Vec_Mag3D( zAxis ) ) );
+	
+	RMatrix_VectorMult( nxa, dest, xAxis );
+	RMatrix_ApplyRotationZ( dest, asin( nxa[1] / Vec_Mag3D( nxa ) ) );
+}
+
+
+void RMatrix_ApplyRotationY( RMatrix dest, double angle ) {
+	RMatrix		tmp;
+	
+	tmp[0] = cos( angle );  tmp[1] = 0.0;   tmp[2] = -sin( angle );
+	tmp[3] = 0.0;		tmp[4] = 1.0;   tmp[5] = 0.0;
+	tmp[6] = sin( angle );  tmp[7] = 0.0;   tmp[8] = cos( angle );
+	
+	RMatrix_Mult( dest, dest, tmp );
+}
+
+
+void RMatrix_ApplyRotationZ( RMatrix dest, double angle ) {
+	RMatrix		tmp;
+	
+	tmp[0] = cos( angle );  tmp[1] = sin( angle );  tmp[2] = 0.0;
+	tmp[3] = -sin( angle);  tmp[4] = cos( angle );  tmp[5] = 0.0;
+	tmp[6] = 0.0;		tmp[7] = 0.0;		tmp[8] = 1.0;
+	
+	RMatrix_Mult( dest, dest, tmp );
+}
+
+
+void RMatrix_ApplyRotationX( RMatrix dest, double angle ) {
+	RMatrix		tmp;
+	
+	tmp[0] = 1.0;   tmp[1] = 0.0;		tmp[2] = 0.0;
+	tmp[3] = 0.0;   tmp[4] = cos( angle );  tmp[5] = sin( angle );
+	tmp[6] = 0.0;   tmp[7] = -sin( angle);  tmp[8] = cos( angle );
+	
+	RMatrix_Mult( dest, dest, tmp );
+}
+
+
+void RMatrix_Mult( RMatrix dest, RMatrix a, RMatrix b ) {
+	RMatrix		tmp;
+	
+	tmp[0] = a[0] * b[0] + a[1] * b[3] + a[2] * b[6];
+	tmp[1] = a[0] * b[1] + a[1] * b[4] + a[2] * b[7];
+	tmp[2] = a[0] * b[2] + a[1] * b[5] + a[2] * b[8];
+	tmp[3] = a[3] * b[0] + a[4] * b[3] + a[5] * b[6];
+	tmp[4] = a[3] * b[1] + a[4] * b[4] + a[5] * b[7];
+	tmp[5] = a[3] * b[2] + a[4] * b[5] + a[5] * b[8];
+	tmp[6] = a[6] * b[0] + a[7] * b[3] + a[8] * b[6];
+	tmp[7] = a[6] * b[1] + a[7] * b[4] + a[8] * b[7];
+	tmp[8] = a[6] * b[2] + a[7] * b[5] + a[8] * b[8];
+	
+	memcpy( dest, tmp, sizeof(RMatrix) );
+}
+
+
+void RMatrix_VectorMult( Coord dest, RMatrix mat, Coord vec ) {
+	Coord		tmp;
+	
+	tmp[0] = mat[0] * vec[0] + mat[1] * vec[1] + mat[2] * vec[2];
+	tmp[1] = mat[3] * vec[0] + mat[4] * vec[1] + mat[5] * vec[2];
+	tmp[2] = mat[6] * vec[0] + mat[7] * vec[1] + mat[8] * vec[2];
+	
+	Vec_Set3D( dest, tmp );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/RMatrix.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/RMatrix.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,68 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides operations for use on infinite planes.
+**
+** Assumptions:
+**    - Coord is an array of 3 doubles.
+**
+** Comments:
+**
+** $Id: RMatrix.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_TMatrix_h__
+#define __Domain_Geometry_TMatrix_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	#define ArcTan( o, a ) \
+		(o < 0.0 ? atan( o / a ) + M_PI : o < 0.0 ? atan( o / a ) + 2.0 * M_PI : atan( o / a ))
+	
+	void RMatrix_BuildOrientation( RMatrix dest, Coord zAxis, Coord xAxis );
+	
+	void RMatrix_ApplyRotationX( RMatrix dest, double angle );
+	
+	void RMatrix_ApplyRotationY( RMatrix dest, double angle );
+	
+	void RMatrix_ApplyRotationZ( RMatrix dest, double angle );
+	
+	void RMatrix_Mult( RMatrix dest, RMatrix a, RMatrix b );
+	
+	void RMatrix_VectorMult( Coord dest, RMatrix mat, Coord vec );
+	
+	#define RMatrix_LoadIdentity( dest ) \
+		(dest)[0] = 1.0; (dest)[1] = 0.0; (dest)[2] = 0.0; \
+		(dest)[3] = 0.0; (dest)[4] = 1.0; (dest)[5] = 0.0; \
+		(dest)[6] = 0.0; (dest)[7] = 0.0; (dest)[8] = 1.0
+	
+	
+#endif /* __Domain_Geometry_TMatrix_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/RefinedRegionsGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/RefinedRegionsGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,564 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RefinedRegionsGeometry.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+#include "RefinedRegionsGeometry.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type RefinedRegionsGeometry_Type = "RefinedRegionsGeometry";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+void* RefinedRegionsGeometry_DefaultNew( Name name )
+{
+	return (void*) _RefinedRegionsGeometry_New(
+		sizeof(RefinedRegionsGeometry), 
+		RefinedRegionsGeometry_Type, 
+		_RefinedRegionsGeometry_Delete, 
+		_RefinedRegionsGeometry_Print,
+		_RefinedRegionsGeometry_Copy,
+		RefinedRegionsGeometry_DefaultNew,
+		_RefinedRegionsGeometry_Construct,
+		_RefinedRegionsGeometry_Build,
+		_RefinedRegionsGeometry_Initialise,
+		_RefinedRegionsGeometry_Execute,
+		_RefinedRegionsGeometry_Destroy,
+		name,
+		False,
+		_RefinedRegionsGeometry_BuildPoints,
+		_RefinedRegionsGeometry_PointAt,
+		NULL );
+}
+
+RefinedRegionsGeometry* RefinedRegionsGeometry_New(
+		Name name,
+		Dictionary*					dictionary )
+{
+	return _RefinedRegionsGeometry_New( 
+		sizeof(RefinedRegionsGeometry), 
+		RefinedRegionsGeometry_Type, 
+		_RefinedRegionsGeometry_Delete, 
+		_RefinedRegionsGeometry_Print,
+		_RefinedRegionsGeometry_Copy,
+		RefinedRegionsGeometry_DefaultNew,
+		_RefinedRegionsGeometry_Construct,
+		_RefinedRegionsGeometry_Build,
+		_RefinedRegionsGeometry_Initialise,
+		_RefinedRegionsGeometry_Execute,
+		_RefinedRegionsGeometry_Destroy,
+		name,
+		True,
+		_RefinedRegionsGeometry_BuildPoints,
+		_RefinedRegionsGeometry_PointAt,
+		dictionary );
+}
+
+
+void RefinedRegionsGeometry_Init(
+		RefinedRegionsGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = RefinedRegionsGeometry_Type;
+	self->_sizeOfSelf = sizeof(RefinedRegionsGeometry);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _RefinedRegionsGeometry_Delete;
+	self->_print = _RefinedRegionsGeometry_Print;
+	self->_copy = _RefinedRegionsGeometry_Copy;
+	self->_defaultConstructor = RefinedRegionsGeometry_DefaultNew;
+	self->_construct = _RefinedRegionsGeometry_Construct;
+	self->_build = _RefinedRegionsGeometry_Build;
+	self->_initialise = _RefinedRegionsGeometry_Initialise;
+	self->_execute = _RefinedRegionsGeometry_Execute;
+	self->_destroy = _RefinedRegionsGeometry_Destroy;
+	self->buildPoints = _RefinedRegionsGeometry_BuildPoints;
+	self->pointAt = _RefinedRegionsGeometry_PointAt;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	_Geometry_Init( (Geometry*)self );
+	
+	/* RefinedRegionsGeometry info */
+	_RefinedRegionsGeometry_Init( self, NULL );
+}
+
+
+RefinedRegionsGeometry* _RefinedRegionsGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary )
+{
+	RefinedRegionsGeometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(RefinedRegionsGeometry) );
+	self = (RefinedRegionsGeometry*)_Geometry_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		buildPoints,
+		pointAt,
+		dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* RefinedRegionsGeometry info */
+	if( initFlag ){
+		_RefinedRegionsGeometry_Init( self, NULL );
+	}
+	
+	return self;
+}
+
+void _RefinedRegionsGeometry_Init( RefinedRegionsGeometry* self, IJK size ) {
+	Dimension_Index		dim_I;
+	Dictionary_Entry_Value*	regionsList = NULL;
+
+	/* General and Virtual info should already be set */
+	
+	/* RefinedRegionsGeometry info */
+	self->isConstructed = False;
+
+	self->min[ I_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minX", 0.0f );
+	self->min[ J_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minY", 0.0f );
+	self->min[ K_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "minZ", 0.0f );
+
+	self->max[ I_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxX", 1.0f );
+	self->max[ J_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxY", 1.0f );
+	self->max[ K_AXIS ] = Dictionary_GetDouble_WithDefault( self->dictionary, "maxZ", 1.0f );
+
+	if ( size ) {
+		memcpy( self->countPerDim, size, sizeof(IJK) );
+	}
+	else {
+		self->countPerDim[ I_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeI", 2 );
+		self->countPerDim[ J_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeJ", 2 );
+		self->countPerDim[ K_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeK", 2 );
+	}
+
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		self->refinedRegionDeltas[dim_I] = 4;
+	}
+	
+	/* Now Read in the refined regions */
+	regionsList = Dictionary_Get( self->dictionary, "RefinedRegions" );	
+	if ( regionsList ) {
+		Index				entryCount = Dictionary_Entry_Value_GetCount( regionsList );
+		Index				entry_I = 0;
+		Dictionary_Entry_Value*		regionEntry;
+		Dictionary*			regionDict;
+		Dimension_Index			dim = 0;
+		double				regionStart = 0;
+		double				regionEnd = 0;
+		unsigned int			refinementFactor = 1;
+		
+		for( entry_I = 0; entry_I < entryCount; entry_I++ ) {
+			regionEntry = Dictionary_Entry_Value_GetElement( regionsList, entry_I );
+			regionDict = Dictionary_Entry_Value_AsDictionary( regionEntry );
+			dim = Dictionary_GetUnsignedInt_WithDefault( regionDict, "dim", 0 );
+			regionStart = Dictionary_GetDouble_WithDefault( regionDict, "regionStart", 0.0 );
+			regionEnd = Dictionary_GetDouble_WithDefault( regionDict, "regionEnd", 1.0 );
+			refinementFactor = Dictionary_GetUnsignedInt_WithDefault( regionDict, "refinementFactor", 2 );
+			_RefinedRegionsGeometry_AddRefinedRegion( self, dim, regionStart, regionEnd, refinementFactor );
+		}	
+	}
+	
+	self->pointCount = self->countPerDim[I_AXIS] * self->countPerDim[J_AXIS] *
+		self->countPerDim[K_AXIS];
+	
+	assert( self->pointCount );
+
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _RefinedRegionsGeometry_Delete( void* refinedRegionsGeometry ) {
+	RefinedRegionsGeometry* self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	
+	/* Stg_Class_Delete parent */
+	_Geometry_Delete( self );
+}
+
+
+void _RefinedRegionsGeometry_Print( void* refinedRegionsGeometry, Stream* stream ) {
+	RefinedRegionsGeometry* self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	
+	/* Print parent */
+	_Geometry_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "RefinedRegionsGeometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* RefinedRegionsGeometry info */
+}
+
+void _RefinedRegionsGeometry_Construct( void* refinedRegionsGeometry, Stg_ComponentFactory *cf, void* data ){
+	RefinedRegionsGeometry*  self   = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	IJK             size;
+	int             shift;
+	Dimension_Index dim;
+	Dimension_Index dim_I;
+
+	self->dictionary =  Dictionary_GetDictionary( cf->componentDict, self->name );
+
+	/* Get Size from Dictionary */
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+		
+	size[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeI", 1 );  
+	size[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeJ", 1 );
+	size[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "sizeK", 1 );
+	if ( dim == 2 )
+		size[ K_AXIS ] = 1;
+
+	/* Shift the size if nessesary */
+	shift = Stg_ComponentFactory_GetInt( cf, self->name, "sizeShift", 0 );
+	for ( dim_I = I_AXIS ; dim_I < dim ; dim_I++ )
+		size[ dim_I ] += shift;
+	
+	_Geometry_Init( (Geometry*)self );
+	_RefinedRegionsGeometry_Init( self, size );
+}
+	
+void _RefinedRegionsGeometry_Build( void* refinedRegionsGeometry, void *data ){
+	
+}
+	
+void _RefinedRegionsGeometry_Initialise( void* refinedRegionsGeometry, void *data ){
+	
+}
+	
+void _RefinedRegionsGeometry_Execute( void* refinedRegionsGeometry, void *data ){
+	
+}
+	
+void _RefinedRegionsGeometry_Destroy( void* refinedRegionsGeometry, void *data ){
+	
+}
+
+
+void* _RefinedRegionsGeometry_Copy( void* refinedRegionsGeometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	RefinedRegionsGeometry*	self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	RefinedRegionsGeometry*	newRefinedRegionsGeometry;
+	Index		dim_I;
+	
+	newRefinedRegionsGeometry = (RefinedRegionsGeometry*)_Geometry_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	for( dim_I = 0; dim_I < 3; dim_I++ ) {
+		newRefinedRegionsGeometry->countPerDim[dim_I] = 
+			self->countPerDim[dim_I];
+		newRefinedRegionsGeometry->min[dim_I] = self->min[dim_I];
+		newRefinedRegionsGeometry->max[dim_I] = self->max[dim_I];
+		newRefinedRegionsGeometry->refinedRegionCounts[dim_I] = 
+			self->refinedRegionCounts[dim_I];
+		newRefinedRegionsGeometry->refinedRegionSizes[dim_I] = 
+			self->refinedRegionSizes[dim_I];
+		newRefinedRegionsGeometry->refinedRegionDeltas[dim_I] = 
+			self->refinedRegionDeltas[dim_I];
+		memcpy( newRefinedRegionsGeometry->refinedRegions[dim_I],
+			self->refinedRegions[dim_I], 
+			sizeof(RefinedRegion) * self->refinedRegionCounts[dim_I] );
+	}
+	
+	return (void*)newRefinedRegionsGeometry;
+}
+
+
+void _RefinedRegionsGeometry_AddRefinedRegion( void* refinedRegionsGeometry, Index dim,
+		double regionStart, double regionEnd, unsigned int refinementFactor )
+{
+	RefinedRegionsGeometry*	self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+
+	if ( self->refinedRegionCounts[dim] == self->refinedRegionSizes[dim] )
+	{
+		self->refinedRegionSizes[dim] += self->refinedRegionDeltas[dim];
+		self->refinedRegions[dim] = Memory_Realloc( 
+			self->refinedRegions[dim],
+			self->refinedRegionSizes[dim] * sizeof(RefinedRegion) );
+	}
+	self->refinedRegions[dim][self->refinedRegionCounts[dim]].regionStart = regionStart;
+	self->refinedRegions[dim][self->refinedRegionCounts[dim]].regionEnd = regionEnd;
+	self->refinedRegions[dim][self->refinedRegionCounts[dim]].refinementFactor = refinementFactor;
+	/* Following 2 values are set to zero until real vals calculated later */
+	self->refinedRegions[dim][self->refinedRegionCounts[dim]].numElements = 0;
+	self->refinedRegions[dim][self->refinedRegionCounts[dim]].elementLength = 0.0;
+	self->refinedRegionCounts[dim]++;
+}
+
+
+
+
+
+void _RefinedRegionsGeometry_BuildPoints( void* refinedRegionsGeometry, Coord_List points )
+{
+	RefinedRegionsGeometry*  self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	Dimension_Index	dim_I = 0;
+	Index		currRegion_I[3] = { 0, 0, 0 };
+	double		elementLengthNormal[3];
+	Index		numElementsNormal[3];
+	RefinedRegion*	currRefinedRegion = NULL;
+	Index		i;
+	double		increment = 0;
+	IJK		ijk;
+	IJK		prevIJK = {0,0,0};
+	Coord		prevPos = {0,0,0};
+	Bool		withinRefined[3] = { False, False, False };
+	
+	_RefinedRegionsGeometry_CalculateElementLengths( refinedRegionsGeometry, numElementsNormal, elementLengthNormal );
+
+	for( i = 0; i < self->pointCount; i++ ) {
+	
+		ijk[0] = i % self->countPerDim[0];
+		ijk[1] = (i / self->countPerDim[0]) % self->countPerDim[1];
+		ijk[2] = i / (self->countPerDim[0] * self->countPerDim[1]);
+	
+		for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+			if ( ijk[dim_I] == 0 ) {
+				/* Axis reset to 0 - also reset the region iterator*/
+				points[i][dim_I] = self->min[dim_I];
+				currRegion_I[dim_I] = 0;
+			}
+			else if ( ijk[dim_I] == prevIJK[dim_I] ) {
+				/* We haven't moved in this direction this step */
+				points[i][dim_I] = prevPos[dim_I];
+			}
+			else if ( withinRefined[dim_I] ) {
+				currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I[dim_I]];
+				/* We are within a refined block */
+				increment = currRefinedRegion->elementLength;
+				points[i][dim_I] =  prevPos[dim_I] + increment;
+				if ( points[i][dim_I] > ( currRefinedRegion->regionEnd - 1e-6 ) ) {
+					withinRefined[dim_I] = False;
+					(currRegion_I[dim_I])++;
+				}
+			}
+			else if ( ( self->refinedRegions[dim_I] ) &&
+				( currRegion_I[dim_I] < self->refinedRegionCounts[dim_I] ) &&
+				(prevPos[dim_I] > self->refinedRegions[dim_I][currRegion_I[dim_I]].regionStart - 1e-6 ) )
+			{
+				currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I[dim_I]];
+				/* We are entering a refined block */
+				withinRefined[dim_I] = True;
+				increment = currRefinedRegion->elementLength;
+				points[i][dim_I] = prevPos[dim_I] + increment;
+			}	
+			else {
+				/* The "normal" case- not in refined area */
+				points[i][dim_I] = prevPos[dim_I] + elementLengthNormal[dim_I];
+			}
+
+			prevPos[dim_I] = points[i][dim_I];
+			prevIJK[dim_I] = ijk[dim_I];
+		}
+	}
+}
+
+void _RefinedRegionsGeometry_PointAt( void* refinedRegionsGeometry, Index index, Coord point )
+{
+	RefinedRegionsGeometry* self = (RefinedRegionsGeometry*)refinedRegionsGeometry;
+	
+	if( index < self->pointCount ) {
+		Index		i;
+		Bool		withinRefined[3] = { False, False, False };
+		Index		currRegion_I[3] = { 0, 0, 0 };
+		RefinedRegion*	currRefinedRegion = NULL;
+		Dimension_Index	dim_I = 0;
+		double		increment = 0;
+		IJK		ijk;
+		IJK		prevIJK = {0,0,0};
+		Coord		prevPos = {0,0,0};
+		double		elementLengthNormal[3];
+		Index		numElementsNormal[3];
+		
+		_RefinedRegionsGeometry_CalculateElementLengths( refinedRegionsGeometry, numElementsNormal, elementLengthNormal );
+		
+		for( i = 0; i <= index; i++ ) {
+		
+			ijk[0] = i % self->countPerDim[0];
+			ijk[1] = (i / self->countPerDim[0]) % self->countPerDim[1];
+			ijk[2] = i / (self->countPerDim[0] * self->countPerDim[1]);
+		
+			for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+				if ( ijk[dim_I] == 0 ) {
+					/* Axis reset to 0 - also reset the region iterator*/
+					point[dim_I] = self->min[dim_I];
+					currRegion_I[dim_I] = 0;
+				}
+				else if ( ijk[dim_I] == prevIJK[dim_I] ) {
+					/* We haven't moved in this direction this step */
+					point[dim_I] = prevPos[dim_I];
+				}
+				else if ( withinRefined[dim_I] ) {
+					currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I[dim_I]];
+					/* We are within a refined block */
+					increment = currRefinedRegion->elementLength;
+					point[dim_I] =  prevPos[dim_I] + increment;
+					if ( point[dim_I] > ( currRefinedRegion->regionEnd - 1e-6 ) ) {
+						withinRefined[dim_I] = False;
+						(currRegion_I[dim_I])++;
+					}
+				}
+				else if ( ( self->refinedRegions[dim_I] ) &&
+					( currRegion_I[dim_I] < self->refinedRegionCounts[dim_I] ) &&
+					( prevPos[dim_I] > self->refinedRegions[dim_I][currRegion_I[dim_I]].regionStart - 1e-6) )
+				{
+					currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I[dim_I]];
+					/* We are entering a refined block */
+					withinRefined[dim_I] = True;
+					increment = currRefinedRegion->elementLength;
+					point[dim_I] =  prevPos[dim_I] + increment;
+				}	
+				else {
+					/* The "normal" case- not in refined area */
+					point[dim_I] = prevPos[dim_I] + elementLengthNormal[dim_I];
+				}
+
+				prevPos[dim_I] = point[dim_I];
+				prevIJK[dim_I] = ijk[dim_I];
+			}
+		}	
+	}
+	else {
+		point[0] = HUGE_VAL;
+		point[1] = HUGE_VAL;
+		point[2] = HUGE_VAL;
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _RefinedRegionsGeometry_CalculateElementLengths(
+		RefinedRegionsGeometry*	self,
+		Index			numElementsNormal[3],
+		double			elementLengthNormal[3] )
+{	
+	Dimension_Index	dim_I = 0;
+	Index		currRegion_I = 0;
+	double		remainderLength;
+	RefinedRegion*	currRefinedRegion = NULL;
+	double		summation = 0;
+	double		elLengthBase = 0;
+	double		regionLength;
+
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		remainderLength = self->max[dim_I] - self->min[dim_I];
+
+		for ( currRegion_I = 0; currRegion_I < self->refinedRegionCounts[dim_I]; currRegion_I++ ) {
+			currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I];
+			remainderLength -= ( currRefinedRegion->regionEnd - currRefinedRegion->regionStart );
+		}
+		
+		summation = 0.0;
+		for ( currRegion_I = 0; currRegion_I < self->refinedRegionCounts[dim_I]; currRegion_I++ ) {
+			currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I];
+			summation += ( currRefinedRegion->regionEnd - currRefinedRegion->regionStart ) *
+				currRefinedRegion->refinementFactor;
+		}	
+		summation += remainderLength * 1;
+			
+		elLengthBase = 1.0 / (self->countPerDim[dim_I] - 1) * summation;	
+		
+		/* Now we have the base element length, calculate the rounded values for each section */
+		for ( currRegion_I = 0; currRegion_I < self->refinedRegionCounts[dim_I]; currRegion_I++ ) {
+			currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I];
+			regionLength = currRefinedRegion->regionEnd - currRefinedRegion->regionStart;
+			currRefinedRegion->numElements = floor( regionLength / elLengthBase *
+				currRefinedRegion->refinementFactor + 0.5 );
+			currRefinedRegion->elementLength = regionLength / currRefinedRegion->numElements;	
+		}	
+
+		/* Do a check to make sure the total number of elements is correct */
+		numElementsNormal[dim_I] = self->countPerDim[dim_I] - 1;
+		for ( currRegion_I = 0; currRegion_I < self->refinedRegionCounts[dim_I]; currRegion_I++ ) {
+			currRefinedRegion = &self->refinedRegions[dim_I][currRegion_I];
+			numElementsNormal[dim_I] -= currRefinedRegion->numElements;
+		}	
+		elementLengthNormal[dim_I] = remainderLength / numElementsNormal[dim_I];
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/RefinedRegionsGeometry.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/RefinedRegionsGeometry.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,186 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	This class allows the user to specify a regular geometry, but with refinements
+**	in special regions.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: RefinedRegionsGeometry.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_RefinedRegionsGeometry_h__
+#define __Domain_Geometry_RefinedRegionsGeometry_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type RefinedRegionsGeometry_Type;
+
+	typedef struct RefinedRegion {
+		double		regionStart;
+		double		regionEnd;
+		unsigned int	refinementFactor;
+		Index		numElements;
+		double		elementLength;
+	} RefinedRegion;
+
+	/* RefinedRegionsGeometry information */
+	#define __RefinedRegionsGeometry \
+		/* General info */ \
+		__Geometry \
+		\
+		/* Virtual info */ \
+		\
+		/* RefinedRegionsGeometry info ... */ \
+		IJK				countPerDim; \
+		XYZ				min; \
+		XYZ				max; \
+		Index				refinedRegionCounts[3]; \
+		Index				refinedRegionSizes[3]; \
+		Index				refinedRegionDeltas[3]; \
+		RefinedRegion*			refinedRegions[3]; \
+		
+	struct RefinedRegionsGeometry { __RefinedRegionsGeometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a RefinedRegionsGeometry */
+	void* RefinedRegionsGeometry_DefaultNew( Name name );
+	
+	RefinedRegionsGeometry* RefinedRegionsGeometry_New(
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Initialise a RefinedRegionsGeometry */
+	void RefinedRegionsGeometry_Init(
+		RefinedRegionsGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	RefinedRegionsGeometry* _RefinedRegionsGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation functions */
+	void _RefinedRegionsGeometry_Init( RefinedRegionsGeometry* self, IJK size );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete RefinedRegionsGeometry implementation */
+	void _RefinedRegionsGeometry_Delete( void* blockGeometry );
+	
+	/* Print RefinedRegionsGeometry implementation */
+	void _RefinedRegionsGeometry_Print( void* blockGeometry, Stream* stream );
+	
+	void _RefinedRegionsGeometry_Construct( void* blockGeometry, Stg_ComponentFactory *cf, void* data );
+	
+	void _RefinedRegionsGeometry_Build( void* blockGeometry, void *data );
+	
+	void _RefinedRegionsGeometry_Initialise( void* blockGeometry, void *data );
+	
+	void _RefinedRegionsGeometry_Execute( void* blockGeometry, void *data );
+	
+	void _RefinedRegionsGeometry_Destroy( void* blockGeometry, void *data );
+	
+	/* Copy */
+	#define RefinedRegionsGeometry_Copy( self ) \
+		(RefinedRegionsGeometry*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define RefinedRegionsGeometry_DeepCopy( self ) \
+		(RefinedRegionsGeometry*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _RefinedRegionsGeometry_Copy( void* geometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _RefinedRegionsGeometry_AddRefinedRegion( void* blockGeometry, Index dimension, double regionStart, double regionEnd, unsigned int refinementFactor );
+
+	void _RefinedRegionsGeometry_BuildPoints( void* blockGeometry, Coord_List points );
+	
+	void _RefinedRegionsGeometry_PointAt( void* blockGeometry, Index index, Coord point );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	/** Calculates element lengths and numbers of elements in each region, including the "normal"
+	unrefined region. A first iteration at the normal length is calculated using:
+	X0 = 1 / globalRes * ( sigma ( Fn * Rn) ) 
+	Where:
+	X0 = unrefined element length, 
+	globalRes = global number of elements in this dimension
+	Fn = requested refinement factor of nth region
+	Rn = Region length of nth region
+
+	We then calculate the number of elements in the refined regions, _rounding off_ to ensure
+	even division:
+	resN = round( Rn / X0 * Fn)
+	where resN = the number of elements in the nth region, others as before.
+
+	And the element length can be calculated as:
+	elLengthN = Rn / resN.
+	
+	The number of elements in the unrefined region is then recovered by subtracting all the
+	other element totals, and the element length calcualted as above.
+	*/
+	void _RefinedRegionsGeometry_CalculateElementLengths(
+		RefinedRegionsGeometry*	self,
+		Index			numElementsNormal[3],
+		double			elementLengthNormal[3] );
+
+	
+#endif /* __Domain_Geometry_RefinedRegionsGeometry_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/RefinedRegionsGeometry.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/RefinedRegionsGeometry.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">RefinedRegionsGeometry</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Geometry</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeI</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeJ</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeK</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">sizeShift</param>
+		<param name="Type">Int</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ShellGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ShellGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,334 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ShellGeometry.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+#include "ShellGeometry.h"
+#include "TrigMath.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type ShellGeometry_Type = "ShellGeometry";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+ShellGeometry* ShellGeometry_DefaultNew( Name name )
+{
+	return (ShellGeometry*)_ShellGeometry_New(
+		sizeof(ShellGeometry), 
+		ShellGeometry_Type, 
+		_ShellGeometry_Delete, 
+		_ShellGeometry_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)ShellGeometry_DefaultNew,
+		_ShellGeometry_Construct,
+		_ShellGeometry_Build,
+		_ShellGeometry_Initialise,
+		_ShellGeometry_Execute,
+		_ShellGeometry_Destroy,
+		name,
+		False,
+		_ShellGeometry_BuildPoints,
+		_ShellGeometry_PointAt,
+		NULL );
+}
+
+ShellGeometry* ShellGeometry_New(
+		Name name,
+		Dictionary*					dictionary )
+{
+	return _ShellGeometry_New( 
+		sizeof(ShellGeometry), 
+		ShellGeometry_Type, 
+		_ShellGeometry_Delete, 
+		_ShellGeometry_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)ShellGeometry_DefaultNew,
+		_ShellGeometry_Construct,
+		_ShellGeometry_Build,
+		_ShellGeometry_Initialise,
+		_ShellGeometry_Execute,
+		_ShellGeometry_Destroy,
+		name,
+		True,
+		_ShellGeometry_BuildPoints,
+		_ShellGeometry_PointAt,
+		dictionary );
+}
+
+
+void ShellGeometry_Init(
+		ShellGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = ShellGeometry_Type;
+	self->_sizeOfSelf = sizeof(ShellGeometry);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _ShellGeometry_Delete;
+	self->_print = _ShellGeometry_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)ShellGeometry_DefaultNew;
+	self->_construct = _ShellGeometry_Construct;
+	self->_build = _ShellGeometry_Build;
+	self->_initialise = _ShellGeometry_Initialise;
+	self->_execute = _ShellGeometry_Execute;
+	self->_destroy = _ShellGeometry_Destroy;
+	self->buildPoints = _ShellGeometry_BuildPoints;
+	self->pointAt = _ShellGeometry_PointAt;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+
+	_Geometry_Init( (Geometry*)self );
+	
+	/* ShellGeometry info */
+	_ShellGeometry_Init( self );
+}
+
+
+ShellGeometry* _ShellGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary )
+{
+	ShellGeometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ShellGeometry) );
+	self = (ShellGeometry*)_Geometry_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name, 
+		initFlag,
+		buildPoints,
+		pointAt,
+		dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ShellGeometry info */
+	if( initFlag ){
+		_ShellGeometry_Init( self );
+	}
+	
+	return self;
+}
+
+void _ShellGeometry_Init(
+		ShellGeometry*					self )
+{
+	/* General and Virtual info should already be set */
+	
+	/* ShellGeometry info */
+	self->isConstructed = True;
+	self->size[0] = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, "meshSizeI",
+		Dictionary_Entry_Value_FromUnsignedInt( 2 ) ) );
+	self->size[1] = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, "meshSizeJ",
+		Dictionary_Entry_Value_FromUnsignedInt( 2 ) ) );
+	self->size[2] = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, "meshSizeK",
+		Dictionary_Entry_Value_FromUnsignedInt( 2 ) ) );
+	self->pointCount = self->size[0] * self->size[1] * self->size[2];
+	assert( self->pointCount );
+	
+	self->min[0] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "minTheta",
+		Dictionary_Entry_Value_FromDouble( 2.0 * M_PI / 3.0 ) ) );
+	self->min[1] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "minPhi",
+		Dictionary_Entry_Value_FromDouble( 2.0 * M_PI / 3.0 ) ) );
+	self->min[2] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "minR",
+		Dictionary_Entry_Value_FromDouble( 0.5f ) ) );
+	self->max[0] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "maxTheta",
+		Dictionary_Entry_Value_FromDouble( M_PI / 3.0 ) ) );
+	self->max[1] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "maxPhi",
+		Dictionary_Entry_Value_FromDouble( M_PI / 3.0 ) ) );
+	self->max[2] = Dictionary_Entry_Value_AsDouble( Dictionary_GetDefault( self->dictionary, "maxR",
+		Dictionary_Entry_Value_FromDouble( 1.0f ) ) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _ShellGeometry_Delete( void* shellGeometry ) {
+	ShellGeometry* self = (ShellGeometry*)shellGeometry;
+	
+	/* Stg_Class_Delete parent */
+	_Geometry_Delete( self );
+}
+
+
+void _ShellGeometry_Print( void* shellGeometry, Stream* stream ) {
+	ShellGeometry* self = (ShellGeometry*)shellGeometry;
+	
+	/* Set the Journal for printing informations */
+	Stream* shellGeometryStream;
+	shellGeometryStream = Journal_Register( InfoStream_Type, "ShellGeometryStream" );
+
+	/* Print parent */
+	_Geometry_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "ShellGeometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* ShellGeometry info */
+}
+
+void _ShellGeometry_Construct( void* shellGeometry, Stg_ComponentFactory *cf, void* data ){
+	
+}
+	
+void _ShellGeometry_Build( void* shellGeometry, void *data ){
+	
+}
+	
+void _ShellGeometry_Initialise( void* shellGeometry, void *data ){
+	
+}
+	
+void _ShellGeometry_Execute( void* shellGeometry, void *data ){
+	
+}
+
+void _ShellGeometry_Destroy( void* shellGeometry, void *data ){
+	
+}
+
+void _ShellGeometry_BuildPoints( void* shellGeometry, Coord_List points )
+{
+	ShellGeometry*  self = (ShellGeometry*)shellGeometry;
+	Index		i;
+	
+	for( i = 0; i < self->pointCount; i++ ) {
+		IJK	ijk;
+		XYZ     coords;
+	
+		ijk[0] = i % self->size[0];
+		ijk[1] = (i / self->size[0]) % self->size[1];
+		ijk[2] = i / (self->size[0] * self->size[1]);
+	
+		coords[0] = self->size[0] > 1 ? self->min[0] + (self->max[0] - self->min[0]) * ((double)ijk[0] / 
+			(double)(self->size[0] - 1)) : self->min[0];
+		coords[1] = self->size[1] > 1 ? self->min[1] + (self->max[1] - self->min[1]) * ((double)ijk[1] / 
+			(double)(self->size[1] - 1)) : self->min[1];
+		coords[2] = self->size[2] > 1 ? self->min[2] + (self->max[2] - self->min[2]) * ((double)ijk[2] / 
+			(double)(self->size[2] - 1)) : self->min[2];
+		
+		points[i][0] = coords[2] * cos( coords[0] ) * sin( coords[1] );
+		points[i][1] = coords[2] * sin( coords[0] ) * sin( coords[1] );
+		points[i][2] = coords[2] * cos( coords[1] );
+	}
+}
+
+
+void _ShellGeometry_PointAt( void* shellGeometry, Index index, Coord point )
+{
+	ShellGeometry* self = (ShellGeometry*)shellGeometry;
+	
+	if( index < self->pointCount ) {
+		IJK	ijk;
+		XYZ     coords;
+	
+		ijk[0] = index % self->size[0];
+		ijk[1] = (index / self->size[0]) % self->size[1];
+		ijk[2] = index / (self->size[0] * self->size[1]);
+	
+		coords[0] = self->size[0] > 1 ? self->min[0] + (self->max[0] - self->min[0]) * ((double)ijk[0] / 
+			(double)(self->size[0] - 1)) : self->min[0];
+		coords[1] = self->size[1] > 1 ? self->min[1] + (self->max[1] - self->min[1]) * ((double)ijk[1] / 
+			(double)(self->size[1] - 1)) : self->min[1];
+		coords[2] = self->size[2] > 1 ? self->min[2] + (self->max[2] - self->min[2]) * ((double)ijk[2] / 
+			(double)(self->size[2] - 1)) : self->min[2];
+		
+		point[0] = coords[2] * cos( coords[0] ) * sin( coords[1] );
+		point[1] = coords[2] * sin( coords[0] ) * sin( coords[1] );
+		point[2] = coords[2] * cos( coords[1] );
+	}
+	else {
+		point[0] = HUGE_VAL;
+		point[1] = HUGE_VAL;
+		point[2] = HUGE_VAL;
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ShellGeometry.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ShellGeometry.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,138 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments: ) {
+	IrregTopology* self = (IrregTopology*)ir
+**
+** $Id: ShellGeometry.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_ShellGeometry_h__
+#define __Domain_Geometry_ShellGeometry_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type ShellGeometry_Type;
+
+	/* ShellGeometry information */
+	#define __ShellGeometry \
+		/* General info */ \
+		__Geometry \
+		\
+		/* Virtual info */ \
+		\
+		/* ShellGeometry info ... */ \
+		IJK				size; \
+		XYZ				min; \
+		XYZ				max;
+	struct ShellGeometry { __ShellGeometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a ShellGeometry */
+	ShellGeometry* ShellGeometry_DefaultNew( Name name );
+	
+	ShellGeometry* ShellGeometry_New(
+		Name name,
+		Dictionary*					dictionary );
+	
+	/* Initialise a ShellGeometry */
+	void ShellGeometry_Init(
+		ShellGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	ShellGeometry* _ShellGeometry_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Geometry_BuildPointsFunction*			buildPoints,
+		Geometry_PointAtFunction*			pointAt,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation functions */
+	void _ShellGeometry_Init(
+		ShellGeometry*					self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete ShellGeometry implementation */
+	void _ShellGeometry_Delete( void* shellGeometry );
+	
+	/* Print ShellGeometry implementation */
+	void _ShellGeometry_Print( void* shellGeometry, Stream* stream );
+	
+	void _ShellGeometry_Construct( void* shellGeometry, Stg_ComponentFactory *cf, void* data );
+	
+	void _ShellGeometry_Build( void* shellGeometry, void *data );
+	
+	void _ShellGeometry_Initialise( void* shellGeometry, void *data );
+	
+	void _ShellGeometry_Execute( void* shellGeometry, void *data );
+
+	void _ShellGeometry_Destroy( void* shellGeometry, void *data );
+	
+	void _ShellGeometry_BuildPoints( void* shellGeometry, Coord_List points );
+	
+	void _ShellGeometry_PointAt( void* shellGeometry, Index index, Coord point );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Domain_Geometry_ShellGeometry_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/ShellGeometry.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/ShellGeometry.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ShellGeometry</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Geometry</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Simplex.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Simplex.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,216 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Simplex.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include "StGermain/StGermain.h"
+#include "Geometry.h"
+
+
+Bool Simplex_Search3D( double** verts, unsigned* inc, 
+		       unsigned nSimplices, unsigned** inds, 
+		       double* point, double* bc, unsigned* inside )
+{
+	unsigned	s_i;
+
+	assert( inds );
+
+	for( s_i = 0; s_i < nSimplices; s_i++ ) {
+		unsigned	ind_i;
+
+		Simplex_Barycenter3D( verts, inc, inds[s_i], point, bc );
+		for( ind_i = 0; ind_i < 4; ind_i++ ) {
+			if( bc[ind_i] < 0.0 || bc[ind_i] > 1.0 )
+				break;
+		}
+		if( ind_i == 4 ) {
+			*inside = s_i;
+			return True;
+		}
+	}
+
+	return False;
+}
+
+Bool Simplex_Search2D( double** verts, unsigned* inc, 
+		       unsigned nSimplices, unsigned** inds, 
+		       double* point, double* bc, unsigned* inside )
+{
+	unsigned	s_i;
+
+	assert( inds );
+
+	for( s_i = 0; s_i < nSimplices; s_i++ ) {
+		unsigned	ind_i;
+
+		Simplex_Barycenter2D( verts, inc, inds[s_i], point, bc );
+		for( ind_i = 0; ind_i < 3; ind_i++ ) {
+			if( bc[ind_i] < 0.0 || bc[ind_i] > 1.0 )
+				break;
+		}
+		if( ind_i == 3 ) {
+			*inside = s_i;
+			return True;
+		}
+	}
+
+	return False;
+}
+
+void Simplex_Barycenter3D( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc ) {
+	double*	tet[4];
+	double	x0, y0, z0;
+	double	x1, y1, z1;
+	double	x2, y2, z2;
+	double	x3, y3, z3;
+	double	px, py, pz;
+	double	den;
+
+	assert( verts );
+	assert( inc );
+	assert( inds );
+	assert( point );
+	assert( bc );
+	assert( verts[inc[inds[0]]] );
+	assert( verts[inc[inds[1]]] );
+	assert( verts[inc[inds[2]]] );
+	assert( verts[inc[inds[3]]] );
+
+	tet[0] = verts[inc[inds[0]]];
+	tet[1] = verts[inc[inds[1]]];
+	tet[2] = verts[inc[inds[2]]];
+	tet[3] = verts[inc[inds[3]]];
+	x0 = tet[0][0]; x1 = tet[1][0]; x2 = tet[2][0]; x3 = tet[3][0];
+	y0 = tet[0][1]; y1 = tet[1][1]; y2 = tet[2][1]; y3 = tet[3][1];
+	z0 = tet[0][2]; z1 = tet[1][2]; z2 = tet[2][2]; z3 = tet[3][2];
+	px = point[0]; py = point[1]; pz = point[2];
+	den = 1.0 / (x1*(y0*(z3 - z2) + y2*(z0 - z3) + y3*(z2 - z0)) + 
+			     x0*(y2*(z3 - z1) + y1*(z2 - z3) + y3*(z1 - z2)) + 
+			     x2*(y1*(z3 - z0) + y0*(z1 - z3) + y3*(z0 - z1)) + 
+			     x3*(y0*(z2 - z1) + y1*(z0 - z2) + y2*(z1 - z0)));
+
+	bc[1] = -(x0*(py*(z3 - z2) + y2*(pz - z3) + y3*(z2 - pz)) + 
+		   px*(y2*(z3 - z0) + y0*(z2 - z3) + y3*(z0 - z2)) + 
+		   x2*(y0*(z3 - pz) + py*(z0 - z3) + y3*(pz - z0)) + 
+		   x3*(py*(z2 - z0) + y0*(pz - z2) + y2*(z0 - pz))) * den;
+	if( Num_Approx( bc[1], 0.0 ) ) bc[1] = 0.0;
+	else if( Num_Approx( bc[1], 1.0 ) ) bc[1] = 1.0;
+
+	bc[2] = (x0*(py*(z3 - z1) + y1*(pz - z3) + y3*(z1 - pz)) + 
+		  px*(y1*(z3 - z0) + y0*(z1 - z3) + y3*(z0 - z1)) + 
+		  x1*(y0*(z3 - pz) + py*(z0 - z3) + y3*(pz - z0)) + 
+		  x3*(py*(z1 - z0) + y0*(pz - z1) + y1*(z0 - pz))) * den;
+	if( Num_Approx( bc[2], 0.0 ) ) bc[2] = 0.0;
+	else if( Num_Approx( bc[2], 1.0 ) ) bc[2] = 1.0;
+
+	bc[3] = -(x0*(py*(z2 - z1) + y1*(pz - z2) + y2*(z1 - pz)) + 
+		   px*(y1*(z2 - z0) + y0*(z1 - z2) + y2*(z0 - z1)) + 
+		   x1*(y0*(z2 - pz) + py*(z0 - z2) + y2*(pz - z0)) + 
+		   x2*(py*(z1 - z0) + y0*(pz - z1) + y1*(z0 - pz))) * den;
+	if( Num_Approx( bc[3], 0.0 ) ) bc[3] = 0.0;
+	else if( Num_Approx( bc[3], 1.0 ) ) bc[3] = 1.0;
+
+	bc[0] = 1.0 - bc[1] - bc[2] - bc[3];
+	if( Num_Approx( bc[0], 0.0 ) ) bc[0] = 0.0;
+	else if( Num_Approx( bc[0], 1.0 ) ) bc[0] = 1.0;
+}
+
+void Simplex_Barycenter2D( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc ) {
+	double*	tri[3];
+	double	a;
+	double	b;
+	double	c;
+	double	d;
+	double	e;
+	double	f;
+
+	assert( verts );
+	assert( inc );
+	assert( inds );
+	assert( point );
+	assert( bc );
+	assert( verts[inc[inds[0]]] );
+	assert( verts[inc[inds[1]]] );
+	assert( verts[inc[inds[2]]] );
+
+	tri[0] = verts[inc[inds[0]]];
+	tri[1] = verts[inc[inds[1]]];
+	tri[2] = verts[inc[inds[2]]];
+	a = tri[0][0] - tri[2][0];
+	b = tri[1][0] - tri[2][0];
+	c = tri[2][0] - point[0];
+	d = tri[0][1] - tri[2][1];
+	e = tri[1][1] - tri[2][1];
+	f = tri[2][1] - point[1];
+
+	bc[0] = (b * f - c * e) / (a * e - b * d);
+	if( Num_Approx( bc[0], 0.0 ) ) bc[0] = 0.0;
+	else if( Num_Approx( bc[0], 1.0 ) ) bc[0] = 1.0;
+	bc[1] = (a * f - c * d) / (b * d - a * e);
+	if( Num_Approx( bc[1], 0.0 ) ) bc[1] = 0.0;
+	else if( Num_Approx( bc[1], 1.0 ) ) bc[1] = 1.0;
+	bc[2] = 1.0 - bc[0] - bc[1];
+	if( Num_Approx( bc[2], 0.0 ) ) bc[2] = 0.0;
+	else if( Num_Approx( bc[2], 1.0 ) ) bc[2] = 1.0;
+}
+
+double Simplex_Volume( double** verts, unsigned* inc, unsigned* inds ) {
+	static const double	fac = 1.0 / 6.0;
+	double			da[3], db[3], dc[3];
+
+	assert( verts );
+	assert( inc );
+	assert( inds );
+
+	Vec_Sub3D( da, verts[inc[inds[2]]], verts[inc[inds[0]]] );
+	Vec_Sub3D( db, verts[inc[inds[2]]], verts[inc[inds[1]]] );
+	Vec_Sub3D( dc, verts[inc[inds[2]]], verts[inc[inds[2]]] );
+	Vec_Cross3D( db, db, dc );
+
+	return fac * fabs( Vec_Dot3D( da, db ) );
+}
+
+double Simplex_Area( double** verts, unsigned* inc, unsigned* inds ) {
+	unsigned	a = inc[inds[0]];
+	unsigned	b = inc[inds[1]];
+	unsigned	c = inc[inds[2]];
+
+	assert( verts );
+	assert( inc );
+	assert( inds );
+
+	return 0.5 * fabs( verts[a][0] * (verts[c][1] - verts[b][1]) + 
+			   verts[b][0] * (verts[a][1] - verts[c][1]) + 
+			   verts[c][0] * (verts[b][1] - verts[a][1]) );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Simplex.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Simplex.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,57 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Simplex.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Simplex_h__
+#define __Domain_Geometry_Simplex_h__
+
+	Bool Simplex_Search3D( double** verts, unsigned* inc, 
+			       unsigned nSimplices, unsigned** inds, 
+			       double* point, double* bc, unsigned* inside );
+	Bool Simplex_Search2D( double** verts, unsigned* inc, 
+			       unsigned nSimplices, unsigned** inds, 
+			       double* point, double* bc, unsigned* inside );
+
+	void Simplex_Barycenter3D( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc );
+	void Simplex_Barycenter2D( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc );
+
+	double Simplex_Volume( double** verts, unsigned* inc, unsigned* inds );
+	double Simplex_Area( double** verts, unsigned* inc, unsigned* inds );
+
+#endif /* __Domain_Geometry_Simplex_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Simplex.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Simplex.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Simplex</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">StGermain/Discretisation/Geometry/src</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TensorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TensorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1044 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TensorMath.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "units.h"
+#include "types.h"
+#include "TensorMath.h"
+#include "VectorMath.h"
+#include "TrigMath.h"
+
+#include <math.h>
+#include <string.h>
+
+/** Mappings from enumerated types to arrays
+This gives the user the option to use:
+References instead of enumerated types.
+TensorMapFT2D[0][0] = FT2D_00
+etc.
+*/
+const unsigned int TensorMapFT2D[2][2] = {{FT2D_00, FT2D_01},{FT2D_10, FT2D_11}};
+
+/** See explanation for TensorMapFT2D */
+const unsigned int TensorMapST2D[2][2] = {{ST2D_00, ST2D_01},{ST2D_01, ST2D_11}};
+
+/** See explanation for TensorMapFT2D */
+const unsigned int TensorMapFT3D[3][3] ={{FT3D_00, FT3D_01, FT3D_02},{FT3D_10, FT3D_11, FT3D_12},{FT3D_20, FT3D_21, FT3D_22}};
+
+/** See explanation for TensorMapFT2D */
+const unsigned int TensorMapST3D[3][3] ={{ST3D_00, ST3D_01, ST3D_02},{ST3D_01, ST3D_11, ST3D_12},{ST3D_02, ST3D_12, ST3D_22}};
+
+/** This is a wrapper that converts a row/col index and a dimension
+into the correct number to reference the correct address of the value
+in the tensorArray function.
+*/
+int TensorArray_TensorMap(Dimension_Index row_I, Dimension_Index col_I, Dimension_Index dim) {
+	switch (dim) {
+		case 3: {
+			return TensorMapFT3D[ row_I ][ col_I ];
+		}
+		case 2: {
+			return TensorMapFT2D[ row_I ][ col_I ];
+		}
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+		
+	}
+	return 0;
+}
+
+/** This is a wrapper that converts a row/col index and a dimension
+into the correct number to reference the correct address of the value
+in the symmetricTensor function.
+*/
+int SymmetricTensor_TensorMap(Dimension_Index row_I, Dimension_Index col_I, Dimension_Index dim) {
+	switch (dim) {
+		case 3: {
+			return TensorMapST3D[ row_I ][ col_I ];
+		}
+		case 2: {
+			return TensorMapST2D[ row_I ][ col_I ];
+		}
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+		
+	}
+	return 0;
+}
+
+/** This sets the values from a nxn array into a TensorArray */ 
+void TensorArray_SetFromDoubleArray( TensorArray tensor, double** array, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			tensor[ MAP_TENSOR( row_I, col_I, dim ) ] = array[ row_I ][ col_I ];
+		}
+	}
+}
+
+/** Converts a symmetric tensor to a full tensor */
+void StGermain_SymmetricTensor_ToTensorArray(SymmetricTensor symTensor, Dimension_Index dim, TensorArray fullTensor) {
+	switch (dim) {
+		case 3:
+			StGermain_SymmetricTensor_ToTensorArray3D(symTensor, fullTensor);
+			return;
+		case 2:
+			StGermain_SymmetricTensor_ToTensorArray2D(symTensor, fullTensor);
+			return;
+		default: {
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+}
+/** This function uses enumerated types to convert symmetric tensors to full tensors */
+void StGermain_SymmetricTensor_ToTensorArray2D(SymmetricTensor symTensor, TensorArray fullTensor) {
+
+	fullTensor[FT2D_00] = symTensor[ST2D_00];
+	fullTensor[FT2D_01] = symTensor[ST2D_01];
+	fullTensor[FT2D_10] = symTensor[ST2D_01];
+	fullTensor[FT2D_11] = symTensor[ST2D_11];
+	
+
+}
+
+/** This function uses enumerated types to convert symmetric tensors to full tensors */
+void StGermain_SymmetricTensor_ToTensorArray3D(SymmetricTensor symTensor, TensorArray fullTensor) {
+	/*Using enumerated types to convert symmetric tensors to full tensors */
+	fullTensor[FT3D_00] = symTensor[ST3D_00];
+	fullTensor[FT3D_01] = symTensor[ST3D_01];
+	fullTensor[FT3D_02] = symTensor[ST3D_02];
+	fullTensor[FT3D_10] = symTensor[ST3D_01];
+	fullTensor[FT3D_11] = symTensor[ST3D_11];
+	fullTensor[FT3D_12] = symTensor[ST3D_12];
+	fullTensor[FT3D_20] = symTensor[ST3D_02];
+	fullTensor[FT3D_21] = symTensor[ST3D_12];
+	fullTensor[FT3D_22] = symTensor[ST3D_22];
+	
+
+}
+
+/** This function converts TensorArray's to square Matrixes */
+void TensorArray_ToMatrix( TensorArray tensor, Dimension_Index dim, double** matrix ) {
+	if (dim == 2) {
+		matrix[0][0] = tensor[FT2D_00] ; matrix[0][1] = tensor[FT2D_01] ;
+		matrix[1][0] = tensor[FT2D_10] ; matrix[1][1] = tensor[FT2D_11] ;
+	}
+	else if (dim == 3) {
+		matrix[0][0] = tensor[FT3D_00];	matrix[0][1] = tensor[FT3D_01];	matrix[0][2] = tensor[FT3D_02];
+		matrix[1][0] = tensor[FT3D_10];	matrix[1][1] = tensor[FT3D_11];	matrix[1][2] = tensor[FT3D_12];
+		matrix[2][0] = tensor[FT3D_20];	matrix[2][1] = tensor[FT3D_21];	matrix[2][2] = tensor[FT3D_22];
+	}
+	else {
+		Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+}
+
+
+void ZeroMatrix( double** matrix, Index rows, Index cols ) {
+	Index count_I;
+	for( count_I = 0 ; count_I < rows ; count_I++ ) {
+		memset( matrix[ count_I ], 0, (cols*sizeof(double)) );
+	}
+}
+
+
+/** This function extracts out the antiSymmetric part of a tensor Array
+v_{ij} = 0.5 * ( u_{ij} - u_{ji} )
+See http://mathworld.wolfram.com/AntisymmetricPart.html */
+void TensorArray_GetAntisymmetricPart( TensorArray tensor, Dimension_Index dim, TensorArray antiSymmetric ) {
+	switch (dim) {
+		case 3:
+			/* v_{xz} = 0.5*( u_{xz} - u_{zx} ) */
+			antiSymmetric[ TensorMapFT3D[0][2] ] = 0.5 * (tensor[ TensorMapFT3D[0][2] ] - 
+							tensor[ TensorMapFT3D[2][0] ] );
+			
+			/* v_{yz} = 0.5*( u_{yz} - u_{zy} ) */
+			antiSymmetric[ TensorMapFT3D[1][2] ] = 0.5 * (tensor[ TensorMapFT3D[1][2] ] - 
+							tensor[ TensorMapFT3D[2][1] ] );
+			
+			/* v_{zx} = 0.5*( u_{zx} - u_{xz} ) */
+			antiSymmetric[ TensorMapFT3D[2][0] ] = - antiSymmetric[ TensorMapFT3D[0][2] ];
+
+			/* v_{zy} = 0.5*( u_{zy} - u_{yz} ) */	
+			antiSymmetric[ TensorMapFT3D[2][1] ] = - antiSymmetric[ TensorMapFT3D[1][2] ];
+
+			/* v_{zz} = 0.5*( u_{zz} - u_{zz} ) */
+			antiSymmetric[ TensorMapFT3D[2][2] ] = 0.0;
+
+			/* v_{xy} = 0.5*( u_{xy} - u_{yx} ) */
+			antiSymmetric[ TensorMapFT3D[0][1] ] = 0.5 * (tensor[ TensorMapFT3D[0][1] ] - 
+						tensor[ TensorMapFT3D[1][0] ] );
+
+			/* v_{yx} = 0.5*( u_{yx} - u_{xy} ) */
+			antiSymmetric[ TensorMapFT3D[1][0] ] = - antiSymmetric[ TensorMapFT3D[0][1] ];
+
+			/* v_{yy} = 0.5*( u_{yy} - u_{yy} ) */
+			antiSymmetric[ TensorMapFT3D[1][1] ] = 0.0;
+			
+			/* v_{xx} = 0.5*( u_{xx} - u_{xx} ) */
+			antiSymmetric[ TensorMapFT3D[0][0] ] = 0.0;
+			return;
+		case 2:		
+			/* v_{xy} = 0.5*( u_{xy} - u_{yx} ) */
+			antiSymmetric[ TensorMapFT2D[0][1] ] = 0.5 * (tensor[ TensorMapFT2D[0][1] ] - 
+						tensor[ TensorMapFT2D[1][0] ] );
+
+			/* v_{yx} = 0.5*( u_{yx} - u_{xy} ) */
+			antiSymmetric[ TensorMapFT2D[1][0] ] = - antiSymmetric[ TensorMapFT2D[0][1] ];
+
+			/* v_{yy} = 0.5*( u_{yy} - u_{yy} ) */
+			antiSymmetric[ TensorMapFT2D[1][1] ] = 0.0;
+			
+			/* v_{xx} = 0.5*( u_{xx} - u_{xx} ) */
+			antiSymmetric[ TensorMapFT2D[0][0] ] = 0.0;
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot store tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+}
+
+/** This function calculates the symmetric part of a TensorArray and returns
+it in a SymmetricTensor: 
+v_{ij} = 0.5 * ( u_{ij} + u_{ji} ) 
+see http://mathworld.wolfram.com/SymmetricPart.html 
+It can also be used to convert a symmetric TensorArray to a SymmetricTensor
+if the TensorArray is guaranteed to be Symmetric. (It has no type checking)*/
+void TensorArray_GetSymmetricPart( TensorArray tensor, Dimension_Index dim, SymmetricTensor symmetricTensor ) {
+	switch (dim) {
+		case 2:
+			/* Diagonal Terms */
+			/* v_{xx} = 0.5*( u_{xx} + u_{xx} ) */
+			/* v_{yy} = 0.5*( u_{yy} + u_{yy} ) */
+			symmetricTensor[ TensorMapST2D[0][0] ] = tensor[ TensorMapFT2D[0][0] ]; 
+			symmetricTensor[ TensorMapST2D[1][1] ] = tensor[ TensorMapFT2D[1][1] ]; 
+			
+			/* Off-diagonal Term */
+			/* v_{xy} = 0.5*( u_{xy} + u_{yx} ) */
+			symmetricTensor[ TensorMapST2D[0][1] ] = 
+				0.5 * (tensor[ TensorMapFT2D[0][1] ] + tensor[ TensorMapFT2D[1][0] ]); 
+			return;
+		case 3:
+			/* Diagonal Terms */
+			/* v_{xx} = 0.5*( u_{xx} + u_{xx} ) */
+			/* v_{yy} = 0.5*( u_{yy} + u_{yy} ) */
+			/* v_{zz} = 0.5*( u_{zz} + u_{zz} ) */
+			symmetricTensor[ TensorMapST3D[0][0] ] = tensor[ TensorMapFT3D[0][0] ]; 
+			symmetricTensor[ TensorMapST3D[1][1] ] = tensor[ TensorMapFT3D[1][1] ]; 
+			symmetricTensor[ TensorMapST3D[2][2] ] = tensor[ TensorMapFT3D[2][2] ]; 
+			
+			/* Off-diagonal Terms */
+			/* v_{xy} = 0.5*( u_{xy} + u_{yx} ) */
+			/* v_{xz} = 0.5*( u_{xz} + u_{zx} ) */
+			/* v_{yz} = 0.5*( u_{yz} + u_{zy} ) */
+			symmetricTensor[ TensorMapST3D[0][1] ] =
+				0.5 * (tensor[ TensorMapFT3D[0][1] ] + tensor[ TensorMapFT3D[1][0] ]); 
+		
+			symmetricTensor[ TensorMapST3D[0][2] ] =
+				0.5 * (tensor[ TensorMapFT3D[0][2] ] + tensor[ TensorMapFT3D[2][0] ]); 
+		
+			symmetricTensor[ TensorMapST3D[1][2] ] =
+				0.5 * (tensor[ TensorMapFT3D[1][2] ] + tensor[ TensorMapFT3D[2][1] ]); 
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot store tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+}
+
+
+/** This function calculates the trace of a tenorArray 
+trace = u_{ii} */
+void TensorArray_GetTrace( TensorArray tensor, Dimension_Index dim, double *trace ) {
+	switch (dim) {
+	  case 1:
+		/* Sum the diagonal terms */
+		*trace = 	tensor[0];
+		break;
+	  case 2:
+		/* Sum the diagonal terms */
+		/*
+		*trace = 	tensor[ MAP_2D_TENSOR( 0, 0 ) ]
+		+ 	tensor[ MAP_2D_TENSOR( 1, 1 ) ];
+		*/
+		*trace = tensor[FT2D_00] + tensor[FT2D_11];
+		break;
+	  case 3:
+		/* Sum the diagonal terms */
+		/*
+		*trace = 	tensor[ MAP_3D_TENSOR( 0, 0 ) ]
+				+	tensor[ MAP_3D_TENSOR( 1, 1 ) ]
+				+	tensor[ MAP_3D_TENSOR( 2, 2 ) ];
+		*/
+		*trace = tensor[FT3D_00] + tensor[FT3D_11] + tensor[FT3D_22];
+		break;
+		  default:{
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot compute trace for tensor in dimension %d (in %s) since dim < 1.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+			break;
+		}
+	}
+}
+
+/** This function will calculate the trace of a symmetric tensor type */
+void SymmetricTensor_GetTrace( SymmetricTensor symmTensor, Dimension_Index dim, double *trace ) {
+	switch (dim) {
+	  case 1:
+		*trace = symmTensor[0];
+		break;
+	  case 2:
+		*trace = symmTensor[ST2D_00] + symmTensor[ST2D_11];
+		break;
+	  case 3:
+		*trace = symmTensor[ST3D_00] + symmTensor[ST3D_11] + symmTensor[ST3D_22];
+		break;
+	  default:{
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+		Journal_Printf( error, "Cannot compute trace for symmetric tensor in dimension %d (in %s) since dim is not in the range [1, 3].\n", dim, __func__);
+		Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+			"In func '%s' don't understand dim = %u\n", __func__, dim );
+		break;
+		  }
+	}
+
+}
+
+/** This function prints an unnamed tensorArray */
+void Journal_PrintTensorArray_Unnamed( Stream* stream, TensorArray tensor, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g     ", tensor[ MAP_TENSOR( row_I, col_I, dim ) ] );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
+
+/** This function prints an unnamed square 2-D Array */
+void Journal_PrintSquareArray_Unnamed( Stream* stream, double** array, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g     ", array[row_I][col_I] );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
+
+/** This function prints an unnamed SymmetricTensor */
+void Journal_PrintSymmetricTensor_Unnamed( Stream* stream, SymmetricTensor tensor, Dimension_Index dim ) {
+	Dimension_Index row_I, col_I;
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+
+	for ( row_I = 0 ; row_I < dim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < dim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g     ", tensor[ MAP_SYMM_TENSOR( row_I, col_I, dim ) ] );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
+
+/** This function calculates the second Invariant of a TensorArray: 
+u = \sqrt{ 0.5 u_{ij} u_{ij} } */
+double TensorArray_2ndInvariant( TensorArray tensor, Dimension_Index dim ) {
+	double invariant = 0.0;
+	switch( dim ) {
+		case 3:
+			invariant += 
+				tensor[4] * tensor[4] +
+				tensor[5] * tensor[5] +
+				tensor[6] * tensor[6] +
+				tensor[7] * tensor[7] +
+				tensor[8] * tensor[8] ;
+		case 2:
+			invariant += 
+				tensor[1] * tensor[1] +
+				tensor[2] * tensor[2] +
+				tensor[3] * tensor[3] ;
+		case 1:
+			invariant += tensor[0] * tensor[0];
+			break;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+	return sqrt( 0.5 * invariant );
+}
+
+/** This function calculates the second Invariant of a SymmetricTensor:  
+u = \sqrt{ 0.5 u_{ij} u_{ij} } */
+double SymmetricTensor_2ndInvariant( SymmetricTensor tensor, Dimension_Index dim ) {
+	double invariant = 0.0;
+	
+	switch( dim ) {
+		case 3:
+			invariant = 
+				0.5 * ( tensor[ TensorMapST3D[0][0] ] * tensor[ TensorMapST3D[0][0] ]   +
+				        tensor[ TensorMapST3D[1][1] ] * tensor[ TensorMapST3D[1][1] ]   +
+				        tensor[ TensorMapST3D[2][2] ] * tensor[ TensorMapST3D[2][2] ] ) +
+				
+				tensor[ TensorMapST3D[0][1] ] * tensor[ TensorMapST3D[1][0] ] +
+				tensor[ TensorMapST3D[0][2] ] * tensor[ TensorMapST3D[2][0] ] +
+				tensor[ TensorMapST3D[1][2] ] * tensor[ TensorMapST3D[2][1] ] ;
+			break;
+		case 2:
+			invariant = 
+				0.5 * ( tensor[ TensorMapST2D[0][0] ] * tensor[ TensorMapST2D[0][0] ]   +
+				        tensor[ TensorMapST2D[1][1] ] * tensor[ TensorMapST2D[1][1] ] ) +
+				tensor[ TensorMapST2D[0][1] ] * tensor[ TensorMapST2D[1][0] ] ;
+			break;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+	return sqrt( invariant );
+}
+
+
+/** a_i * u_{ij} * b_j */
+double TensorArray_MultiplyByVectors( TensorArray tensor, double* a, double* b, Dimension_Index dim ) {
+	double result = 0.0;
+
+	switch( dim ) {
+		case 3:
+			result = 
+				a[0] * tensor[ FT3D_00 ] * b[0] +
+				a[0] * tensor[ FT3D_01 ] * b[1] +
+				a[0] * tensor[ FT3D_02 ] * b[2] +
+
+				a[1] * tensor[ FT3D_10 ] * b[0] +
+				a[1] * tensor[ FT3D_11 ] * b[1] +
+				a[1] * tensor[ FT3D_12 ] * b[2] +
+
+				a[2] * tensor[ FT3D_20 ] * b[0] +
+				a[2] * tensor[ FT3D_21 ] * b[1] +
+				a[2] * tensor[ FT3D_22 ] * b[2] ;
+			break;
+		case 2:
+			result = 
+				a[0] * tensor[ FT2D_00 ] * b[0] +
+				a[0] * tensor[ FT2D_01 ] * b[1] +
+
+				a[1] * tensor[ FT2D_10 ] * b[0] +
+				a[1] * tensor[ FT2D_11 ] * b[1] ;
+			break;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+	return result;
+}
+
+/** returns u_{ij} * a_j */
+void SymmetricTensor_ApplyOnVector( SymmetricTensor tensor, double* vector, Dimension_Index dim, XYZ result ) {
+	switch( dim ) {
+		case 3:
+			result[0] = 
+				tensor[ TensorMapST3D[0][0] ] * vector[0] +
+				tensor[ TensorMapST3D[0][1] ] * vector[1] +
+				tensor[ TensorMapST3D[0][2] ] * vector[2] ;
+
+			result[1] = 	
+				tensor[ TensorMapST3D[1][0] ] * vector[0] +
+				tensor[ TensorMapST3D[1][1] ] * vector[1] +
+				tensor[ TensorMapST3D[1][2] ] * vector[2] ;
+
+			result[2] = 	
+				tensor[ TensorMapST3D[2][0] ] * vector[0] +
+				tensor[ TensorMapST3D[2][1] ] * vector[1] +
+				tensor[ TensorMapST3D[2][2] ] * vector[2] ;
+			break;
+		case 2:
+			result[0] = 
+				tensor[ TensorMapST2D[0][0] ] * vector[0] +
+				tensor[ TensorMapST2D[0][1] ] * vector[1] ;
+
+			result[1] = 
+				tensor[ TensorMapST2D[1][0] ] * vector[0] +
+				tensor[ TensorMapST2D[1][1] ] * vector[1] ;
+			break;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+}
+
+
+/** returns a_i * u_{ij} * b_j */
+double SymmetricTensor_MultiplyByVectors( SymmetricTensor tensor, double* a, double* b, Dimension_Index dim ) {
+	double result = 0.0;
+
+	switch( dim ) {
+		case 3:
+			result = 
+				a[0] * tensor[ TensorMapST3D[0][0] ] * b[0] +
+				a[0] * tensor[ TensorMapST3D[0][1] ] * b[1] +
+				a[0] * tensor[ TensorMapST3D[0][2] ] * b[2] +
+
+				a[1] * tensor[ TensorMapST3D[1][0] ] * b[0] +
+				a[1] * tensor[ TensorMapST3D[1][1] ] * b[1] +
+				a[1] * tensor[ TensorMapST3D[1][2] ] * b[2] +
+
+				a[2] * tensor[ TensorMapST3D[2][0] ] * b[0] +
+				a[2] * tensor[ TensorMapST3D[2][1] ] * b[1] +
+				a[2] * tensor[ TensorMapST3D[2][2] ] * b[2] ;
+			break;
+		case 2:
+			result = 
+				a[0] * tensor[ TensorMapST2D[0][0] ] * b[0] +
+				a[0] * tensor[ TensorMapST2D[0][1] ] * b[1] +
+
+				a[1] * tensor[ TensorMapST2D[1][0] ] * b[0] +
+				a[1] * tensor[ TensorMapST2D[1][1] ] * b[1] ;
+			break;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMath" );
+			Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+	return result;
+}
+
+void SymmetricTensor_ToMatrix( SymmetricTensor tensor, Dimension_Index dim, double** matrix ) {
+	if (dim == 2) {
+		matrix[0][0] = tensor[ST2D_00] ; matrix[0][1] = tensor[ST2D_01] ;
+		matrix[1][0] = tensor[ST2D_01] ; matrix[1][1] = tensor[ST2D_11] ;
+	}
+	else if (dim == 3) {
+		matrix[0][0] = tensor[ST3D_00];	matrix[0][1] = tensor[ST3D_01];	matrix[0][2] = tensor[ST3D_02];
+		matrix[1][0] = tensor[ST3D_01];	matrix[1][1] = tensor[ST3D_11];	matrix[1][2] = tensor[ST3D_12];
+		matrix[2][0] = tensor[ST3D_02];	matrix[2][1] = tensor[ST3D_12];	matrix[2][2] = tensor[ST3D_22];
+	}
+	else {
+		Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+}
+		
+void TensorArray_Zero( TensorArray tensor ) {
+	memset( tensor, 0, sizeof(TensorArray) );
+}
+void SymmetricTensor_Zero( SymmetricTensor tensor ) {
+	memset( tensor, 0, sizeof(SymmetricTensor) );
+}
+
+
+int _QsortEigenvalue( const void* _a, const void* _b ) {
+	Eigenvector* a = (Eigenvector*) _a;
+	Eigenvector* b = (Eigenvector*) _b;
+
+	if ( a->eigenvalue > b->eigenvalue )
+		return 1;
+	else
+		return -1;
+}
+
+
+void SymmetricTensor_CalcAllEigenvalues( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList ) {
+	if ( dim == 2 ) 
+		SymmetricTensor_CalcAllEigenvalues2D( tensor, eigenvectorList );
+	else 
+		SymmetricTensor_CalcAllEigenvalues3D( tensor, eigenvectorList );
+}
+
+/* 
+For a symmetric 2D Matrix, Eigenvalues are given by: 
+\lambda = \frac{u_{00} + u_{11}}{2} \pm \sqrt{ \left(\frac{u_{00} - u_{11}}{2}\right)^2 + u_{01} }
+*/
+void SymmetricTensor_CalcAllEigenvalues2D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) {
+	double descriminantRoot, average;
+	
+	descriminantRoot = sqrt( 0.25 * (tensor[ST2D_00] - tensor[ST2D_11]) * 
+				(tensor[ST2D_00] - tensor[ST2D_11]) + tensor[ST2D_01] * tensor[ST2D_01] );
+
+	average = 0.5 * (tensor[ST2D_00] + tensor[ST2D_11]);
+
+	eigenvectorList[0].eigenvalue = average - descriminantRoot;
+	eigenvectorList[1].eigenvalue = average + descriminantRoot;
+}
+
+#define EQL(A,B)    (fabs( (A) - (B) ) < 1.0e-8) 
+/**
+Calculates the roots of the characteristic polynomial given by
+det( [tensor] - \lambda [I] ) = 0
+1.0 \lambda^3 + a2 \lambda^2 + a1 \lambda + a0 = 0
+Results compared with applet located at http://www.math.ubc.ca/~israel/applet/mcalc/matcalc.html */
+void SymmetricTensor_CalcAllEigenvalues3D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) {
+	double a2, a1, a0;
+	double rootList[3];
+
+	/*
+	a3 = 1.0
+	a2 = - tensor_xx - tensor_yy - tensor_zz
+	a1 = tensor_xx * tensor_yy  +  tensor_xx * tensor_zz  +  
+		tensor_yy * tensor_zz  -  tensor_xy^2  -  tensor_xz^2  - tensor_yz^2 
+	a0 = -tensor_xx * tensor_yy * tensor_zz  - 
+		2 * tensor_xy * tensor_xz * tensor_yz  + 
+		tensor_xx * tensor_yz^2  +  tensor_yy * tensor_xz^2  +  tensor_zz * tensor_xy^2
+	*/
+
+	a2 = - tensor[ST3D_00] - tensor[ST3D_11] - tensor[ST3D_22];
+	a1 = (tensor[ST3D_00] * tensor[ST3D_11])  +  
+		 (tensor[ST3D_00] * tensor[ST3D_22])  +  
+		 (tensor[ST3D_11] * tensor[ST3D_22])  -  
+		 (tensor[ST3D_01] * tensor[ST3D_01])  -  
+		 (tensor[ST3D_02] * tensor[ST3D_02])  -  
+		 (tensor[ST3D_12] * tensor[ST3D_12]);
+	a0 = - 	  (tensor[ST3D_00] * tensor[ST3D_11] * tensor[ST3D_22])  -  
+		2.0 * (tensor[ST3D_01] * tensor[ST3D_02] * tensor[ST3D_12]) +  
+			  (tensor[ST3D_00] * tensor[ST3D_12] * tensor[ST3D_12])  +  
+			  (tensor[ST3D_11] * tensor[ST3D_02] * tensor[ST3D_02])  +  
+			  (tensor[ST3D_22] * tensor[ST3D_01] * tensor[ST3D_01]);
+	
+	CubicSolver_OnlyRealRoots( a2, a1, a0, rootList );
+
+	eigenvectorList[0].eigenvalue = rootList[0];
+	eigenvectorList[1].eigenvalue = rootList[1];
+	eigenvectorList[2].eigenvalue = rootList[2];
+}
+/** Wrapper to calculate 2 and 3D eigenvectors */
+void SymmetricTensor_CalcAllEigenvectors( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList ) {
+	if ( dim == 2 ) 
+		SymmetricTensor_CalcAllEigenvectors2D( tensor, eigenvectorList );
+	else 
+		SymmetricTensor_CalcAllEigenvectors3D( tensor, eigenvectorList );
+}
+/** Calculates an eigenvector for a given 2D SymmetricTensor */
+Bool SymmetricTensor_CalcEigenvector2D( SymmetricTensor tensor, Eigenvector* eigenvector ) {
+	if ( fabs(tensor[ST2D_01]) > fabs(eigenvector->eigenvalue - tensor[ST2D_00]) ) {
+		eigenvector->vector[0] = 1.0;
+		eigenvector->vector[1] = (eigenvector->eigenvalue - tensor[ST2D_00])/tensor[ST2D_01];
+	}
+	else {
+		eigenvector->vector[0] = tensor[ST2D_01]/(eigenvector->eigenvalue - tensor[ST2D_00]);
+		eigenvector->vector[1] = 1.0;
+	}
+	StGermain_VectorNormalise( eigenvector->vector, 2 );
+
+	return True;
+}
+
+/** Calculates eigenvectors for 2D SymmetricTensor's only. This is guaranteed to
+return real eigenvectors and eigenvalues */
+void SymmetricTensor_CalcAllEigenvectors2D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) {
+	SymmetricTensor_CalcAllEigenvalues2D( tensor, eigenvectorList );
+	
+	if ( EQL(tensor[ST2D_01],0.0) ) {
+		/* [ a 0 ] */
+		/* [ 0 b ] */
+		if ( EQL(eigenvectorList[0].eigenvalue, tensor[ST2D_00]) ) {
+			eigenvectorList[0].vector[0] = 1.0;
+			eigenvectorList[0].vector[1] = 0.0;
+
+			eigenvectorList[1].vector[0] = 0.0;
+			eigenvectorList[1].vector[1] = 1.0;
+			return;
+		}
+		else {
+			eigenvectorList[0].vector[0] = 0.0;
+			eigenvectorList[0].vector[1] = 1.0;
+
+			eigenvectorList[1].vector[0] = 1.0;
+			eigenvectorList[1].vector[1] = 0.0;
+			return;
+		}
+	}
+
+	/* First Eigenvector */
+	SymmetricTensor_CalcEigenvector2D( tensor, &eigenvectorList[0] );
+	SymmetricTensor_CalcEigenvector2D( tensor, &eigenvectorList[1] );
+
+	/* Don't need to sort here because SymmetricTensor_CalcEigenvalues2D already has them sorted */
+}
+
+/** Calculates an eigenvector for a given 3D SymmetricTensor */
+Bool SymmetricTensor_CalcEigenvector3D( SymmetricTensor tensor, Eigenvector* eigenvector ) {
+	double A, B, C, d, e, f;
+
+	A = tensor[ST3D_00] - eigenvector->eigenvalue;
+	B = tensor[ST3D_11] - eigenvector->eigenvalue;
+	C = tensor[ST3D_22] - eigenvector->eigenvalue;
+	d = tensor[ST3D_01];
+	e = tensor[ST3D_02];
+	f = tensor[ST3D_12];
+
+	if ( ! EQL(B*e, f*d) && ! EQL( e, 0.0 ) ) {
+		eigenvector->vector[0] = 1.0;
+		eigenvector->vector[1] = (f*A - d*e)/(B*e - f*d);
+		eigenvector->vector[2] = (-A - d * eigenvector->vector[1] ) / e ;
+	}	
+	else if ( ! EQL(f*A, d*e) && ! EQL( e, 0.0 ) ) {
+		eigenvector->vector[0] = (B*e - f*d)/(f*A - d*e);
+		eigenvector->vector[1] = 1.0;
+		eigenvector->vector[2] = (-d - A*eigenvector->vector[0])/e;
+	}
+	else if ( ! EQL(d*d, B*A) && ! EQL( d, 0.0 ) ) {
+		eigenvector->vector[0] = (B*e - f*d)/(d*d - B*A);
+		eigenvector->vector[1] = (-e - A*eigenvector->vector[0])/d;
+		eigenvector->vector[2] = 1.0;
+	}
+	else {
+		return False;
+	}
+
+	StGermain_VectorNormalise( eigenvector->vector, 3 );
+
+	return True;
+}
+
+/** Calculates eigenvectors for 3D SymmetricTensor's only. This is guaranteed to
+return real eigenvectors and eigenvalues */
+void SymmetricTensor_CalcAllEigenvectors3D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) {
+	Dimension_Index dim_I;
+	Bool            result;
+
+	SymmetricTensor_CalcAllEigenvalues3D( tensor, eigenvectorList );
+
+	for ( dim_I = 0 ; dim_I < 3 ; dim_I++ ) {
+		result = SymmetricTensor_CalcEigenvector3D( tensor, &eigenvectorList[dim_I] );
+
+		if ( ! result ) {
+			SymmetricTensor_CalcAllEigenvectorsJacobi( tensor, 3, eigenvectorList );
+			return;
+		}
+	}
+
+	EigenvectorList_Sort( eigenvectorList, 3 );
+}
+
+
+void SymmetricTensor_CalcAllEigenvectorsJacobi( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList ){
+	double** matrix = Memory_Alloc_2DArray( double, dim, dim, "Matrix" );
+		
+	SymmetricTensor_ToMatrix( tensor, dim, matrix);
+	Matrix_CalcAllEigenvectorsJacobi( matrix, dim, eigenvectorList );
+	Memory_Free( matrix );
+}
+
+/** Modified code from Numerical Recipies */
+/**
+Numerical Recipies in C
+Second Edition, 1992
+pp. 463-469
+*/
+/* Works for symmetric matrix */
+/* Order N^3 !! */
+/**
+Compared results with applet located at
+http://www.math.ubc.ca/~israel/applet/mcalc/matcalc.html
+*/
+#define ROTATE(a,i,j,k,l)\
+	g=a[i][j];\
+	h=a[k][l];\
+	a[i][j]=g-s*(h+g*tau);\
+	a[k][l]=h+s*(g-h*tau);
+
+#define ROTATE_EIGENVECTOR_LIST(eigenvectorList,i,j,k,l)\
+	g=eigenvectorList[i].vector[j];\
+	h=eigenvectorList[k].vector[l];\
+	eigenvectorList[i].vector[j]=g-s*(h+g*tau);\
+	eigenvectorList[k].vector[l]=h+s*(g-h*tau); 
+
+/** Calculate all Eigenvectors for a Symmetric Tensor converted to a Matrix 
+using the Jacobi Method. This method will ONLY work with symmetric real tensors.
+See: Numerical Recipies in C
+Second Edition, 1992
+pp. 463-469,
+
+*/
+void Matrix_CalcAllEigenvectorsJacobi(double **matrix, Index count, Eigenvector* eigenvectorList ) {
+	int j,iq,ip,i;
+	double tresh,theta,tau,t,sum,s,h,g,c,*b,*z;
+
+	b = Memory_Alloc_Array( double, count, "b" );
+	z = Memory_Alloc_Array( double, count, "z" );
+
+	for ( ip = 0 ; ip < count ; ip++ ) {
+		/* Initialise Identity Matrix */
+		for ( iq = 0 ; iq < count ; iq++ ) eigenvectorList[ip].vector[iq]=0.0;
+		eigenvectorList[ip].vector[ip]=1.0;
+		
+		/* Initialise b and eigenvalues to diagonal of matrix */
+		b[ip] = eigenvectorList[ip].eigenvalue = matrix[ip][ip];
+		/* This vector will accumulate terms of the form ta_{pq} as in eq 11.1.14 of Numerical Recipies */
+		z[ip]=0.0;
+	}
+
+	for ( i = 1 ; i <= 50 ; i++ ) {
+
+		/* Sum the off-diagonal elements */
+		sum = 0.0;
+		for ( ip = 0 ; ip < count-1 ; ip++ ) {
+			for ( iq = ip+1 ; iq < count ; iq++ )
+				sum += fabs(matrix[ip][iq]);
+		}
+		/* The normal return, which relies on quadratic convergence to machine underflow */
+		if (sum == 0.0) 
+			break;
+
+		if (i < 4)
+			tresh = 0.2 * sum / (count*count);
+		else
+			tresh=0.0;
+
+		for ( ip = 0; ip < count-1 ; ip++ ) {
+			for ( iq = ip+1 ; iq < count ; iq++) {
+				g=100.0*fabs(matrix[ip][iq]);
+
+				/* After the first four sweeps, skip the rotation if the off-diagonal element is small */
+				if (i > 4 && (fabs(eigenvectorList[ip].eigenvalue)+g) == fabs(eigenvectorList[ip].eigenvalue)
+								&& (fabs(eigenvectorList[iq].eigenvalue)+g) == fabs(eigenvectorList[iq].eigenvalue))
+					matrix[ip][iq]=0.0;
+				else if (fabs(matrix[ip][iq]) > tresh) {
+					h=eigenvectorList[iq].eigenvalue - eigenvectorList[ip].eigenvalue;
+					if ((double)(fabs(h)+g) == (double)fabs(h))
+						t=(matrix[ip][iq])/h;	/* t = 1/(2theta) */
+					else {
+						theta=0.5*h/(matrix[ip][iq]);
+						t=1.0/(fabs(theta)+sqrt(1.0+theta*theta));
+						if (theta < 0.0) t = -t;
+					}
+					c=1.0/sqrt(1+t*t);
+					s=t*c;
+					tau=s/(1.0+c);
+					h=t*matrix[ip][iq];
+					z[ip] -= h;
+					z[iq] += h;
+					eigenvectorList[ip].eigenvalue -= h;
+					eigenvectorList[iq].eigenvalue += h;
+					matrix[ip][iq]=0.0;
+					for ( j = 0 ; j <= ip-1 ; j++ ) {
+						ROTATE(matrix,j,ip,j,iq)
+					}
+					for ( j = ip+1 ; j <= iq-1 ; j++ ) {
+						ROTATE(matrix,ip,j,j,iq)
+					}
+					for ( j = iq+1 ; j < count ; j++ ) {
+						ROTATE(matrix,ip,j,iq,j)
+					}
+					for ( j = 0 ; j < count ; j++ ) {
+						ROTATE_EIGENVECTOR_LIST(eigenvectorList,ip,j,iq,j)
+					}
+				}
+			}
+		}
+		for ( ip = 0 ; ip < count ; ip++ ) {
+			b[ip] += z[ip];
+			eigenvectorList[ip].eigenvalue =b[ip];
+			z[ip]=0.0;
+		}
+	}
+	
+	Memory_Free(z);
+	Memory_Free(b);
+	
+	EigenvectorList_Sort( eigenvectorList, count );
+}
+
+
+/** Sorts the eigenvectors according to the value of the eigenvalue - from smallest to greatest */
+void EigenvectorList_Sort( Eigenvector* eigenvectorList, Index count ) {
+	qsort( eigenvectorList, count, sizeof( Eigenvector ), _QsortEigenvalue );
+}
+/** Calculates the determinant of a matrix, independent of the ordering of the axis.*/
+double StGermain_MatrixDeterminant_AxisIndependent( double** matrix, Dimension_Index dim, Coord_Index A_axis, Coord_Index B_axis, Coord_Index C_axis ) {
+	switch (dim) {
+		case 1:
+			return matrix[A_axis][A_axis];
+		case 2:
+			return matrix[A_axis][A_axis]*matrix[B_axis][B_axis] - matrix[A_axis][B_axis]*matrix[B_axis][A_axis];
+		case 3:
+			return 
+				matrix[A_axis][A_axis] *
+					( matrix[B_axis][B_axis]*matrix[C_axis][C_axis] - matrix[B_axis][C_axis]*matrix[C_axis][B_axis] ) 
+				- matrix[A_axis][B_axis] *
+					( matrix[B_axis][A_axis]*matrix[C_axis][C_axis] - matrix[B_axis][C_axis]*matrix[C_axis][A_axis] )
+				+ matrix[A_axis][C_axis] *
+					( matrix[B_axis][A_axis]*matrix[C_axis][B_axis] - matrix[B_axis][B_axis]*matrix[C_axis][A_axis] );
+		default: {
+			Stream* error = Journal_Register( Error_Type , CURR_MODULE_NAME );
+			Journal_Printf(error, "Function %s doesn't support dimension %d.\n", __func__, dim);
+			Journal_Firewall( False, Journal_Register( Error_Type, "TensorMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}
+	return 0; /* Silly, but TAU-PDT complains otherwise */
+}
+
+/** Solves a cubic. See:  
+Eric W. Weisstein. "Cubic Formula." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CubicFormula.html */
+void CubicSolver_OnlyRealRoots( double a2, double a1, double a0, double* rootList ) {
+	double Q, R;
+	double D;
+	double theta;
+	double factor;
+
+	Q = (3.0 * a1 - a2 * a2)/9.0;                                   /* Equation 20 */
+	R = (9.0*a2*a1 - 27.0 * a0 - 2.0 * a2 * a2 * a2)/54.0;          /* Equation 21 */
+
+	/* Get Polynomial Discrimanent  (Equation 47) */
+	D = Q*Q*Q + R*R;
+		
+	if ( EQL( D, 0.0 ) ) {
+		double halfB;
+
+		if ( R < 0.0 ) 
+			halfB = - pow( -R, 1.0/3.0 );
+		else
+			halfB = pow( R, 1.0/3.0 );
+
+		rootList[0] = -a2/3.0 + 2.0 * halfB;
+		rootList[1] = rootList[2] = -a2/3.0 - halfB;
+		return;
+	}
+	Journal_Firewall( D <= 0.0, Journal_Register( Error_Type, "CubicSolver" ),
+			"In func %s - Polynomial discrimanent %g is positive which means there are complex solutions.\nCannot solve equation x^3 + %.4f x^2 + %.4f x + %.4f = 0\n", __func__ , D, a2, a1, a0 );
+
+
+	theta = acos( R/sqrt( -Q*Q*Q ) )/3.0;
+	factor = 2.0 * sqrt( -Q );
+
+	rootList[0] = factor * cos( theta ) - a2/3.0;
+	rootList[1] = factor * cos( theta + 2.0*M_PI/3.0 ) - a2/3.0;
+	rootList[2] = factor * cos( theta + 4.0*M_PI/3.0 ) - a2/3.0;
+}
+
+
+/** Uses Cramer's rule to solve a system of linear equations 
+ * see http://mathworld.wolfram.com/CramersRule.html */
+void TensorArray_SolveSystem( TensorArray tensorArray, double* solution, double* rightHandSide, Dimension_Index dim ) {
+	double determinant;
+	switch ( dim ) {
+		case 3: {
+			determinant = + tensorArray[ FT3D_00 ] *
+								( tensorArray[ FT3D_11 ] * tensorArray[ FT3D_22 ] -
+								  tensorArray[ FT3D_21 ] * tensorArray[ FT3D_12 ] )
+							- tensorArray[ FT3D_01 ] *
+								( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_22 ] -
+								  tensorArray[ FT3D_12 ] * tensorArray[ FT3D_20 ] )
+							+ tensorArray[ FT3D_02 ] *
+								( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_21 ] -
+								  tensorArray[ FT3D_11 ] * tensorArray[ FT3D_20 ] );
+
+			solution[ 0 ] = ( rightHandSide[0] * 
+								( tensorArray[ FT3D_11 ] * tensorArray[ FT3D_22 ] -
+								  tensorArray[ FT3D_21 ] * tensorArray[ FT3D_12 ] )
+							- tensorArray[ FT3D_01 ] *
+								( rightHandSide[1] * tensorArray[ FT3D_22 ] -
+								  tensorArray[ FT3D_12 ] * rightHandSide[2] )
+							+ tensorArray[ FT3D_02 ] *
+								( rightHandSide[1] * tensorArray[ FT3D_21 ] -
+								  tensorArray[ FT3D_11 ] * rightHandSide[2] ))/determinant;
+
+			solution[ 1 ] = ( tensorArray[ FT3D_00 ] *
+								( rightHandSide[1] * tensorArray[ FT3D_22 ] -
+								  rightHandSide[2] * tensorArray[ FT3D_12 ] )
+							- rightHandSide[0] * 
+								( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_22 ] -
+								  tensorArray[ FT3D_12 ] * tensorArray[ FT3D_20 ] )
+							+ tensorArray[ FT3D_02 ] *
+								( tensorArray[ FT3D_10 ] * rightHandSide[2] -
+								  rightHandSide[1] * tensorArray[ FT3D_20 ] ))/determinant;
+
+			solution[ 2 ] = ( tensorArray[ FT3D_00 ] *
+								( tensorArray[ FT3D_11 ] * rightHandSide[2] -
+								  tensorArray[ FT3D_21 ] * rightHandSide[1] )
+							- tensorArray[ FT3D_01 ] *
+								( tensorArray[ FT3D_10 ] * rightHandSide[2] -
+								  rightHandSide[1] * tensorArray[ FT3D_20 ] )
+							+ rightHandSide[0] *
+								( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_21 ] -
+								  tensorArray[ FT3D_11 ] * tensorArray[ FT3D_20 ] ))/determinant;
+			return;
+		}
+
+		case 2:
+			determinant = tensorArray[ FT2D_00 ] * tensorArray[ FT2D_11 ] 
+			            - tensorArray[ FT2D_10 ] * tensorArray[ FT2D_01 ];
+			
+			solution[ 0 ] = (rightHandSide[0] * tensorArray[ FT2D_11 ] - 
+				tensorArray[ FT2D_01 ] * rightHandSide[1])/determinant;
+			
+			solution[ 1 ] = (rightHandSide[1] * tensorArray[ FT2D_00 ] - 
+				tensorArray[ FT2D_10 ] * rightHandSide[0])/determinant;
+
+			return;
+		default: 
+			Journal_Firewall( 
+					False, 
+					Journal_Register( Error_Type, CURR_MODULE_NAME ),
+					"Function %s - doesn't understand dim = %u\n", __func__, dim );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TensorMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TensorMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,222 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic tensor operations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: TensorMath.h 3909 2006-12-19 04:43:56Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_TensorMath_h__
+#define __Domain_Geometry_TensorMath_h__
+
+	/* TensorArray - Tensor (t_{ij}) here is defined in 2D as
+	 * t_{00} = tensor[0] t_{01} = tensor[1]
+	 * t_{10} = tensor[2] t_{11} = tensor[3] 
+	 *
+	 * and in 3D as
+	 * t_{00} = tensor[0] t_{01} = tensor[1] t_{02} = tensor[2]
+	 * t_{10} = tensor[3] t_{11} = tensor[4] t_{12} = tensor[5]
+	 * t_{20} = tensor[6] t_{21} = tensor[7] t_{22} = tensor[8]
+	 *
+	 * */
+
+	/** SymmetricTensor - stores only unique components 
+	 * in 2D
+	 * tensor[0] = u_{00}
+	 * tensor[1] = u_{11}
+	 * tensor[2] = u_{12} = u_{21}
+	 *
+	 * in 3D
+	 * tensor[0] = u_{00}
+	 * tensor[1] = u_{11}
+	 * tensor[2] = u_{22}
+	 * tensor[3] = u_{01} = u_{10}
+	 * tensor[4] = u_{02} = u_{20}
+	 * tensor[5] = u_{12} = u_{21}
+	 */
+
+	typedef struct {
+		XYZ    vector;
+		double eigenvalue;
+	} Eigenvector;
+
+/** TensorIndex creates an enumerated type that can be used as 
+Tensor indices for referencing:
+These indexes are defined as: 
+	ST ~ symmetric tensorArray
+	FT ~ full tensorArray \\
+	2D ~ in 2 dimensions \\
+	3D ~ in 3 dimensions \\
+For example, tensorArray[FT2D_00] \\
+
+And the indexes follow this naming scheme (for full tensors):
+For 2D:
+\left{ 	a_{00},	a_{01} \\
+		a_{10},	a_{11} \right}
+For 3D:		
+\left{ 	a_{00},	a_{01},	a_{02} \\
+		a_{10},	a_{11},	a_{12} \\
+		a_{20}, a_{21}, a_{22} \right}
+
+Symmetric tensors only use the upper triangle indicee definitions.
+
+*/
+ typedef enum TensorIndexST2D { ST2D_00=0, ST2D_11=1, ST2D_01=2 } TensorIndexST2D;
+ /** See description for TensorIndexST2D */
+ typedef enum TensorIndexFT2D { FT2D_00=0, FT2D_11=3, FT2D_01=1, FT2D_10=2 } TensorIndexFT2D;
+ /** See description for TensorIndexST2D */
+ typedef enum TensorIndexST3D { ST3D_00=0, ST3D_11=1, ST3D_22=2, ST3D_01=3, ST3D_02=4, ST3D_12=5} TensorIndexST3D;
+  /** See description for TensorIndexST2D */
+ typedef enum TensorIndexFT3D { FT3D_00=0, FT3D_11=4, FT3D_22=8, FT3D_01=1, FT3D_02=2, FT3D_10=3, FT3D_12=5, FT3D_20=6, FT3D_21=7} TensorIndexFT3D;
+
+/*Define mapping function for enumerated types to arrays */
+extern const unsigned int TensorMapFT2D[2][2];
+extern const unsigned int TensorMapST2D[2][2];
+extern const unsigned int TensorMapFT3D[3][3];
+extern const unsigned int TensorMapST3D[3][3];
+
+/*Define TensorArray mapping functions */
+ 
+int TensorArray_TensorMap(Dimension_Index row_I, Dimension_Index col_I, Dimension_Index dim);
+int SymmetricTensor_TensorMap(Dimension_Index row_I, Dimension_Index col_I, Dimension_Index dim);	
+
+/** Alternate mapping index for 2D TensorArray */ 
+#define MAP_2D_TENSOR( ii, jj )  ( (jj) + 2*(ii) )
+
+ /** Alternate mapping index for 3D TensorArray */ 
+#define MAP_3D_TENSOR( ii, jj )  ( (jj) + 3*(ii) )
+
+/** Alternate wrapper for indexing a TensorArray */
+#define MAP_TENSOR( ii, jj, dim ) \
+	((dim) == 2 ? MAP_2D_TENSOR( ii, jj ) : MAP_3D_TENSOR( ii, jj ))
+
+/** Alternate mapping index for 2D SymmetricTensor */ 
+#define MAP_2D_SYMM_TENSOR( ii, jj )  ( (ii) == (jj) ? (ii) : 2 )
+
+/** Alternate mapping index for 2D SymmetricTensor */ 
+#define MAP_3D_SYMM_TENSOR( ii, jj )  ( (ii) == (jj) ? (ii) : ((ii) + (jj) + 2) )
+
+/** Alternate wrapper for indexing a SymmetricTensor */
+#define MAP_SYMM_TENSOR( ii, jj, dim ) \
+	(dim == 2 ? MAP_2D_SYMM_TENSOR( ii, jj ) : MAP_3D_SYMM_TENSOR( ii, jj ))
+
+/** Function calculates component size of symmetric tensor given it's dimension */
+#define StGermain_nSymmetricTensorVectorComponents( dim ) (Index) (0.5 * ((dim) * ((dim) + 1)))
+
+/** Prints the tensorArray, and it's name in the code */
+#define Journal_PrintTensorArray(stream, tensor, dim) \
+	do {	\
+		Journal_Printf( stream, #tensor " - \n" ); \
+		Journal_PrintTensorArray_Unnamed( stream, tensor, dim ); \
+	} while(0) 
+	
+/** Prints the Symmetric Tensor, and it's name in the code */
+#define Journal_PrintSymmetricTensor(stream, tensor, dim) \
+	do {	\
+		Journal_Printf( stream, #tensor " - \n" ); \
+		Journal_PrintSymmetricTensor_Unnamed( stream, tensor, dim ); \
+	} while (0)
+	
+/** Prints a square matrix, and it's name in the code */
+#define Journal_PrintSquareArray(stream, array, dim) \
+	do {	\
+		Journal_Printf( stream, #array " - \n" ); \
+		Journal_PrintSquareArray_Unnamed( stream, array, dim ); \
+	} while (0)
+	
+/* Define Tensor conversion functions */ 
+void StGermain_SymmetricTensor_ToTensorArray(SymmetricTensor symTensor, Dimension_Index dim, TensorArray fullTensor);
+	
+void StGermain_SymmetricTensor_ToTensorArray2D(SymmetricTensor symTensor, TensorArray fullTensor);
+void StGermain_SymmetricTensor_ToTensorArray3D(SymmetricTensor symTensor, TensorArray fullTensor);
+
+void TensorArray_ToMatrix( TensorArray tensor, Dimension_Index dim, double** matrix );	
+void SymmetricTensor_ToMatrix( SymmetricTensor tensor, Dimension_Index dim, double** matrix ) ;
+	
+/* Define Tensor conversion / extraction functions */	
+void TensorArray_SetFromDoubleArray( TensorArray tensor, double** array, Dimension_Index dim ) ;
+void TensorArray_GetAntisymmetricPart( TensorArray tensor, Dimension_Index dim, TensorArray antiSymmetric ) ;
+void TensorArray_GetSymmetricPart( TensorArray tensor, Dimension_Index dim, SymmetricTensor symmetricTensor ) ;
+
+/* Define Print functions */	
+void Journal_PrintTensorArray_Unnamed( Stream* stream, TensorArray tensor, Dimension_Index dim ) ;
+void Journal_PrintSymmetricTensor_Unnamed( Stream* stream, SymmetricTensor tensor, Dimension_Index dim ) ;
+void Journal_PrintSquareArray_Unnamed( Stream* stream, double** array, Dimension_Index dim ) ;
+
+/* Define Full Tensor and Symmetric Tensor, 'trace' functions */ 
+void TensorArray_GetTrace( TensorArray tensor, Dimension_Index dim, double *trace );
+void SymmetricTensor_GetTrace( SymmetricTensor tensor, Dimension_Index dim, double *trace );
+	
+double TensorArray_2ndInvariant( TensorArray tensor, Dimension_Index dim ) ;
+double SymmetricTensor_2ndInvariant( SymmetricTensor tensor, Dimension_Index dim ) ;
+
+/* Define Null / Zero matrices */
+void TensorArray_Zero( TensorArray tensor ) ;
+void SymmetricTensor_Zero( SymmetricTensor tensor ) ;
+void ZeroMatrix( double** matrix, Index rows, Index cols ) ;
+
+/* Define tensorArray Vector functions */
+double TensorArray_MultiplyByVectors( TensorArray tensor, double* a, double* b, Dimension_Index dim ) ;
+
+void SymmetricTensor_ApplyOnVector( SymmetricTensor tensor, double* vector, Dimension_Index dim, XYZ result ) ;
+double SymmetricTensor_MultiplyByVectors( SymmetricTensor tensor, double* a, double* b, Dimension_Index dim ) ;
+
+
+/* Eigenvector Stuff - All Eigenvector calculations sort eigenvectors from smallest to largest */
+void SymmetricTensor_CalcAllEigenvalues( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList ) ;
+void SymmetricTensor_CalcAllEigenvalues2D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) ;
+void SymmetricTensor_CalcAllEigenvalues3D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) ;
+
+void SymmetricTensor_CalcAllEigenvectors( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList ) ;
+
+Bool SymmetricTensor_CalcEigenvector2D( SymmetricTensor tensor, Eigenvector* eigenvector ) ;
+void SymmetricTensor_CalcAllEigenvectors2D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) ;
+
+Bool SymmetricTensor_CalcEigenvector3D( SymmetricTensor tensor, Eigenvector* eigenvector ) ;
+void SymmetricTensor_CalcAllEigenvectors3D( SymmetricTensor tensor, Eigenvector* eigenvectorList ) ;
+
+void SymmetricTensor_CalcAllEigenvectorsJacobi( SymmetricTensor tensor, Dimension_Index dim, Eigenvector* eigenvectorList );
+void Matrix_CalcAllEigenvectorsJacobi(double **matrix, Index count, Eigenvector* eigenvectorList ) ;
+
+/* Sorts the eigenvectors according to the value of the eigenvalue - from smallest to greatest */
+void EigenvectorList_Sort( Eigenvector* eigenvectorList, Index count ) ;
+
+/* Define other useful tensor and matrix functions */
+#define StGermain_MatrixDeterminant( matrix, dim ) StGermain_MatrixDeterminant_AxisIndependent( matrix, dim, I_AXIS, J_AXIS, K_AXIS )
+double StGermain_MatrixDeterminant_AxisIndependent( double** matrix, Dimension_Index dim, Coord_Index A_axis, Coord_Index B_axis, Coord_Index C_axis ) ;
+
+void CubicSolver_OnlyRealRoots( double a2, double a1, double a0, double* rootList ) ;
+
+void TensorArray_SolveSystem( TensorArray tensorArray, double* solution, double* rightHandSide, Dimension_Index dim ) ;
+
+#endif /* __Domain_Geometry_TensorMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TensorMultMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TensorMultMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,671 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**	Alireza Asgari, Researcher, Deakin University.
+**  Julian Giordani, Researcher, Monash Cluster Computing, Monash University
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TensorMultMath.c  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "units.h"
+#include "types.h"
+#include "TensorMath.h"
+#include "VectorMath.h"
+#include "TensorMultMath.h"
+#include <math.h>
+#include <string.h>
+
+#define STG_TENSORMULT_ERROR 1.0e-15;
+
+/** Create Identity Tensor */
+void TensorArray_Identity(Dimension_Index dim, TensorArray tensorArray){
+
+	Dimension_Index index;
+	/* Check dimension */
+	if ( (dim != 2)&&(dim != 3) ) {		
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+		Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+		Journal_Firewall( dim, error,
+			"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+	
+	/* Calculate indentity matrix */
+	for (index = 0; index < (dim * dim); index++){
+		tensorArray[index] = 0.0;	
+	}
+	for (index = 0; index < dim; index++ ){
+		tensorArray[TensorArray_TensorMap(index, index, dim)] = 1.0;
+	}			
+	return;
+}
+
+/** Create Identity SymmetricTensor */
+void SymmetricTensor_Identity(Dimension_Index dim, SymmetricTensor symmetricTensor) {
+
+	Dimension_Index index;
+	/* Check dimension */
+	if ( (dim != 2)&&(dim != 3) ) {		
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+		Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+		Journal_Firewall( dim, error,
+			"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+	
+	/* Calculate indentity matrix: zero max = (0.5 * ((dim) * ((dim) + 1)) [Triangular number]*/
+	for (index = 0; index < (0.5 * (dim * (dim + 1 )) ); index++){
+		symmetricTensor[index] = 0.0;	
+	}
+	for (index = 0; index < dim; index++ ){
+		symmetricTensor[SymmetricTensor_TensorMap(index, index, dim)] = 1.0;
+	}			
+	return;
+}
+
+/** Calculates the transpose of a given tensor array */
+void TensorArray_Transpose(TensorArray tensor, Dimension_Index dim, TensorArray result){
+switch (dim) {
+        case 3:
+            result[FT3D_00] = tensor[FT3D_00];
+            result[FT3D_01] = tensor[FT3D_10];
+            result[FT3D_02] = tensor[FT3D_20];
+            result[FT3D_10] = tensor[FT3D_01];
+            result[FT3D_11] = tensor[FT3D_11];
+            result[FT3D_12] = tensor[FT3D_21];
+            result[FT3D_20] = tensor[FT3D_02];
+            result[FT3D_21] = tensor[FT3D_12];
+            result[FT3D_22] = tensor[FT3D_22];
+            return;
+        case 2:
+            result[FT2D_00] = tensor[FT2D_00];
+            result[FT2D_01] = tensor[FT2D_10];
+            result[FT2D_10] = tensor[FT2D_01];
+            result[FT2D_11] = tensor[FT2D_11];
+            break;
+        default: {
+           	Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+           	Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );;
+            }
+        }
+}
+
+/** Adds tensorA to tensorB and returns answer in TensorArray result */
+void TensorArray_Add(TensorArray tensorA, TensorArray tensorB, Dimension_Index dim, TensorArray result) {
+    Dimension_Index index;
+	
+	if ( (dim != 2)&&(dim != 3) ) {		
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+    for (index = 0; index < (dim * dim); index++){
+        result[index] = tensorA[index] + tensorB[index];
+    }
+}
+
+/** Subtracts tensorB from tensorA and returns answer in TensorArray result*/
+void TensorArray_Subtract(	TensorArray tensorArrayA, TensorArray tensorArrayB, Dimension_Index dim, 
+							TensorArray result) 
+{
+	Dimension_Index index;
+	
+		if ( (dim != 2)&&(dim != 3) ) {		
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	    for (index = 0; index < (dim * dim); index++){
+        result[index] = tensorArrayA[index] - tensorArrayB[index];
+    }
+}
+
+/** Multiplies two TensorArray's */ 
+void TensorArray_MultiplyByTensorArray(	TensorArray tensorA, TensorArray tensorB, Dimension_Index dim, TensorArray result) {
+	
+	switch (dim) {
+        case 3:
+            result[FT3D_00] = 	tensorA[FT3D_00] * tensorB[FT3D_00] 
+							+ 	tensorA[FT3D_01] * tensorB[FT3D_10]
+							+ 	tensorA[FT3D_02] * tensorB[FT3D_20];
+		
+            result[FT3D_01] =	tensorA[FT3D_00] * tensorB[FT3D_01]
+							+	tensorA[FT3D_01] * tensorB[FT3D_11]
+							+	tensorA[FT3D_02] * tensorB[FT3D_21];
+        
+			result[FT3D_02] =	tensorA[FT3D_00] * tensorB[FT3D_02]
+							+	tensorA[FT3D_01] * tensorB[FT3D_12]
+							+ 	tensorA[FT3D_02] * tensorB[FT3D_22];
+
+            result[FT3D_10] =	tensorA[FT3D_10] * tensorB[FT3D_00]
+							+	tensorA[FT3D_11] * tensorB[FT3D_10]
+							+	tensorA[FT3D_12] * tensorB[FT3D_20];
+		
+            result[FT3D_11] =	tensorA[FT3D_10] * tensorB[FT3D_01]
+							+ 	tensorA[FT3D_11] * tensorB[FT3D_11]
+							+	tensorA[FT3D_12] * tensorB[FT3D_21];
+        
+			result[FT3D_12] =	tensorA[FT3D_10] * tensorB[FT3D_02]
+							+ 	tensorA[FT3D_11] * tensorB[FT3D_12]
+							+	tensorA[FT3D_12] * tensorB[FT3D_22];
+
+            result[FT3D_20] =	tensorA[FT3D_20] * tensorB[FT3D_00]
+							+	tensorA[FT3D_21] * tensorB[FT3D_10]
+							+	tensorA[FT3D_22] * tensorB[FT3D_20];
+							
+            result[FT3D_21]	=	tensorA[FT3D_20] * tensorB[FT3D_01]
+							+	tensorA[FT3D_21] * tensorB[FT3D_11]
+							+	tensorA[FT3D_22] * tensorB[FT3D_21];
+							
+            result[FT3D_22] =	tensorA[FT3D_20] * tensorB[FT3D_02]
+							+	tensorA[FT3D_21] * tensorB[FT3D_12]
+							+	tensorA[FT3D_22] * tensorB[FT3D_22];
+            return;
+        case 2:
+            result[FT2D_00]	=	tensorA[FT2D_00] * tensorB[FT2D_00] 
+							+ 	tensorA[FT2D_01] * tensorB[FT2D_10];
+		
+            result[FT2D_01]	=	tensorA[FT2D_00] * tensorB[FT2D_01]
+							+ 	tensorA[FT2D_01] * tensorB[FT2D_11];
+
+            result[FT2D_10]	=	tensorA[FT2D_10] * tensorB[FT2D_00]
+							+	tensorA[FT2D_11] * tensorB[FT2D_10];
+		
+            result[FT2D_11]	=	tensorA[FT2D_10] * tensorB[FT2D_01]
+							+	tensorA[FT2D_11] * tensorB[FT2D_11];
+            return;
+        default: {
+           Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+           Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+           	Journal_Firewall( dim, Journal_Register( Error_Type, "TensorMultMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );;
+            }
+    }
+
+}
+
+
+
+/** Multiplies tensor A, on the right by it's transpose, A^T to give A*A^T 
+And returns the answer in a symmetric tensor*/
+void TensorArray_MultiplyByRightTranspose(TensorArray tensor, Dimension_Index dim, SymmetricTensor result) {
+
+	TensorArray tensorTranspose;
+	TensorArray fullTensorResult;
+
+
+	TensorArray_Transpose(tensor, dim, tensorTranspose);
+	TensorArray_MultiplyByTensorArray(tensor, tensorTranspose, dim, fullTensorResult);
+	
+	/** Answer is automatically a symmetric tensor by definition */	
+	TensorArray_GetSymmetricPart( fullTensorResult, dim, result ) ;
+
+	return;
+}
+
+/** Multiplies tensor A, on the left by it's transpose, A^T to give A^T * A 
+And returns the answer in a symmetric tensor*/
+void TensorArray_MultiplyByLeftTranspose(TensorArray tensor, Dimension_Index dim, SymmetricTensor result) {
+
+	TensorArray tensorTranspose;
+	TensorArray fullTensorResult;
+
+	TensorArray_Transpose( tensor, dim, tensorTranspose);
+	TensorArray_MultiplyByTensorArray( tensorTranspose, tensor, dim, fullTensorResult );
+	
+	/** Answer is automatically a symmetric tensor by definition */	
+	TensorArray_GetSymmetricPart( fullTensorResult, dim, result);
+	return;
+}
+
+/**	Multiplies TensorArray by SymmetricTensor, and gives answer in a TensorArray:
+	A * symB */
+void TensorArray_MultiplyBySymmetricTensor(	TensorArray tensorArray, SymmetricTensor symmetricTensor,
+											Dimension_Index dim, TensorArray result)
+{
+switch (dim) {
+        case 3:
+            result[FT3D_00] = 	tensorArray[FT3D_00] * symmetricTensor[ST3D_00] 
+							+ 	tensorArray[FT3D_01] * symmetricTensor[ST3D_01]
+							+ 	tensorArray[FT3D_02] * symmetricTensor[ST3D_02];
+		
+            result[FT3D_01] =	tensorArray[FT3D_00] * symmetricTensor[ST3D_01]
+							+	tensorArray[FT3D_01] * symmetricTensor[ST3D_11]
+							+	tensorArray[FT3D_02] * symmetricTensor[ST3D_12];
+        
+			result[FT3D_02] =	tensorArray[FT3D_00] * symmetricTensor[ST3D_02]
+							+	tensorArray[FT3D_01] * symmetricTensor[ST3D_12]
+							+ 	tensorArray[FT3D_02] * symmetricTensor[ST3D_22];
+
+            result[FT3D_10] =	tensorArray[FT3D_10] * symmetricTensor[ST3D_00]
+							+	tensorArray[FT3D_11] * symmetricTensor[ST3D_01]
+							+	tensorArray[FT3D_12] * symmetricTensor[ST3D_02];
+		
+            result[FT3D_11] =	tensorArray[FT3D_10] * symmetricTensor[ST3D_01]
+							+ 	tensorArray[FT3D_11] * symmetricTensor[ST3D_11]
+							+	tensorArray[FT3D_12] * symmetricTensor[ST3D_12];
+        
+			result[FT3D_12] =	tensorArray[FT3D_10] * symmetricTensor[ST3D_02]
+							+ 	tensorArray[FT3D_11] * symmetricTensor[ST3D_12]
+							+	tensorArray[FT3D_12] * symmetricTensor[ST3D_22];
+
+            result[FT3D_20] =	tensorArray[FT3D_20] * symmetricTensor[ST3D_00]
+							+	tensorArray[FT3D_21] * symmetricTensor[ST3D_01]
+							+	tensorArray[FT3D_22] * symmetricTensor[ST3D_02];
+							
+            result[FT3D_21]	=	tensorArray[FT3D_20] * symmetricTensor[ST3D_01]
+							+	tensorArray[FT3D_21] * symmetricTensor[ST3D_11]
+							+	tensorArray[FT3D_22] * symmetricTensor[ST3D_12];
+							
+            result[FT3D_22] =	tensorArray[FT3D_20] * symmetricTensor[ST3D_02]
+							+	tensorArray[FT3D_21] * symmetricTensor[ST3D_12]
+							+	tensorArray[FT3D_22] * symmetricTensor[ST3D_22];
+            return;
+        case 2:
+            result[FT2D_00]	=	tensorArray[FT2D_00] * symmetricTensor[ST2D_00] 
+							+ 	tensorArray[FT2D_01] * symmetricTensor[ST2D_01];
+		
+            result[FT2D_01]	=	tensorArray[FT2D_00] * symmetricTensor[ST2D_01]
+							+ 	tensorArray[FT2D_01] * symmetricTensor[ST2D_11];
+
+            result[FT2D_10]	=	tensorArray[FT2D_10] * symmetricTensor[ST2D_00]
+							+	tensorArray[FT2D_11] * symmetricTensor[ST2D_01];
+		
+            result[FT2D_11]	=	tensorArray[FT2D_10] * symmetricTensor[ST2D_01]
+							+	tensorArray[FT2D_11] * symmetricTensor[ST2D_11];
+            return;
+        default: {
+           Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+           Journal_Printf( error, "Cannot read tensor for dimension %d in %s.\n", dim, __func__);
+           	Journal_Firewall( dim, Journal_Register( Error_Type, "TensorMultMath" ),
+				"In func '%s' don't understand dim = %u\n", __func__, dim );;
+            }
+		}
+}
+
+/**	Multiplies SymmetricTensor by TensorArray and gives answer in a TensorArray:
+	symA * B */
+void SymmetricTensor_MultiplyByTensorArray(	TensorArray tensorArray, SymmetricTensor symmetricTensor,
+											Dimension_Index dim, TensorArray result)
+{
+	TensorArray fullTensor;
+	StGermain_SymmetricTensor_ToTensorArray(symmetricTensor, dim, fullTensor);
+	TensorArray_MultiplyByTensorArray(fullTensor, tensorArray, dim, result);
+	return;
+}
+
+/** Multiplies a tensorArray by vector on the left: v * A */
+void TensorArray_MultiplyByLeftVector(	TensorArray tensorArray, double* vector, 
+										Dimension_Index dim, double* result) 
+{
+	switch (dim) {
+		case 3:
+			result[0] = vector[0] * tensorArray[FT3D_00] +
+						vector[1] * tensorArray[FT3D_10] +
+						vector[2] * tensorArray[FT3D_20];
+		
+			result[1] = vector[0] * tensorArray[FT3D_01] +
+						vector[1] * tensorArray[FT3D_11] +
+						vector[2] * tensorArray[FT3D_21];
+		
+			result[2] = vector[0] * tensorArray[FT3D_02] +
+						vector[1] * tensorArray[FT3D_12] +
+						vector[2] * tensorArray[FT3D_22];		
+			return;
+		case 2:
+			result[0] = vector[0] * tensorArray[FT2D_00] 
+					  + vector[1] * tensorArray[FT2D_10];
+		
+			result[1] = vector[0] * tensorArray[FT2D_01] 
+					  + vector[1] * tensorArray[FT2D_11];		
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}		
+		return;
+}
+
+/** Multiplies a tensorArray by vector on the right:  A * v */
+void TensorArray_MultiplyByRightVector(	TensorArray tensorArray, double* vector, 
+										Dimension_Index dim, double* result)
+{
+	switch (dim) {
+		case 3:
+			result[0] = tensorArray[FT3D_00] * vector[0] +
+						tensorArray[FT3D_01] * vector[1] +
+						tensorArray[FT3D_02] * vector[2];
+		
+			result[1] = tensorArray[FT3D_10] * vector[0] +
+						tensorArray[FT3D_11] * vector[1] +
+						tensorArray[FT3D_12] * vector[2];
+		
+			result[2] = tensorArray[FT3D_20] * vector[0] +
+						tensorArray[FT3D_21] * vector[1] +
+						tensorArray[FT3D_22] * vector[2];		
+			return;
+		case 2:
+			result[0] = tensorArray[FT2D_00] * vector[0] + 
+						tensorArray[FT2D_01] * vector[1];
+		
+			result[1] = tensorArray[FT2D_10] * vector[0] +
+					  	tensorArray[FT2D_11] * vector[1];		
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+		}
+	}		
+	return;	
+	
+}
+
+/** Calculates the determinant of a TensorArray*/
+double TensorArray_CalcDeterminant(TensorArray tensorArray, Dimension_Index dim) {
+
+    double determinant;
+    switch ( dim ) {
+        case 3:{
+            determinant =   tensorArray[ FT3D_00] *
+                                ( tensorArray[ FT3D_11 ] * tensorArray[ FT3D_22 ] -
+                                  tensorArray[ FT3D_21 ] * tensorArray[ FT3D_12 ] )
+                            - tensorArray[ FT3D_01 ] *
+                                ( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_22 ] -
+                                  tensorArray[ FT3D_12 ] * tensorArray[ FT3D_20 ] )
+                            + tensorArray[ FT3D_02 ] *
+                                ( tensorArray[ FT3D_10 ] * tensorArray[ FT3D_21 ] -
+                                  tensorArray[ FT3D_11 ] * tensorArray[ FT3D_20 ] );
+            return determinant;
+            }
+        case 2:{
+            determinant = tensorArray[ FT2D_00 ] * tensorArray[ FT2D_11 ]
+                        - tensorArray[ FT2D_10 ] * tensorArray[ FT2D_01 ];
+            return determinant;
+            }
+        default: {
+ 			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+			Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+        }
+    }
+	return 0;
+}
+
+/** Calculates the inverse of a tensorArray for non-zero determinants.  */
+void TensorArray_CalcInverse(TensorArray tensor, Dimension_Index dim, TensorArray result) {
+	
+	double determinant;
+	/* Calculate determinant */
+	determinant = TensorArray_CalcDeterminant(tensor, dim);	
+	TensorArray_CalcInverseWithDeterminant(tensor, determinant, dim, result);
+	return;
+}
+
+/** Calculates inverse of tensorArray for non-zero determinant when given a value 
+for the determinant. This allows the use of different determinants 
+if such calculation is needed.*/
+void TensorArray_CalcInverseWithDeterminant(TensorArray tensor, double determinant, Dimension_Index dim, TensorArray result) {
+	double  errorValue;
+
+	/* Check if determinant is zero or close to zero*/
+	errorValue = STG_TENSORMULT_ERROR;
+	if (fabs(determinant) <= errorValue) {
+			Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+			Journal_Printf( error, "Error in '%s', Cannot calculate inverse of singular tensorArray:\n", 
+							__func__); 
+			Journal_PrintTensorArray( error, tensor, dim);
+			Journal_Printf( error, "Determinant, %g is zero or near zero. \n", determinant);
+		Journal_Firewall( False, Journal_Register( ErrorStream_Type, "TensorMultMath" ),
+				"In func '%s',TensorArray is singular, cannot divide by zero determinant, %g\n", __func__, determinant );
+		return;		
+	}
+	
+	/** Uses formula : 
+	A^{-1} \= \frac{(-1)^i + j(M_{ij})}{detA} 
+	*/ 
+	switch (dim) {
+			case 3:
+				result[FT3D_00] = ( tensor[FT3D_11] * tensor[FT3D_22] - 
+									tensor[FT3D_21] * tensor[FT3D_12] ) / determinant;
+				result[FT3D_10] = ( tensor[FT3D_20] * tensor[FT3D_12] - 
+									tensor[FT3D_10] * tensor[FT3D_22] ) / determinant;
+				result[FT3D_20] = ( tensor[FT3D_10] * tensor[FT3D_21] - 
+									tensor[FT3D_20] * tensor[FT3D_11] ) / determinant;
+	
+				result[FT3D_01] = ( tensor[FT3D_21] * tensor[FT3D_02] - 
+									tensor[FT3D_01] * tensor[FT3D_22] ) / determinant;
+				result[FT3D_11] = ( tensor[FT3D_00] * tensor[FT3D_22] - 
+									tensor[FT3D_20] * tensor[FT3D_02] ) / determinant;
+				result[FT3D_21] = ( tensor[FT3D_20] * tensor[FT3D_01] - 
+									tensor[FT3D_00] * tensor[FT3D_21] ) / determinant;
+	
+				result[FT3D_02] = ( tensor[FT3D_01] * tensor[FT3D_12] - 
+									tensor[FT3D_11] * tensor[FT3D_02] ) / determinant;
+				result[FT3D_12] = ( tensor[FT3D_10] * tensor[FT3D_02] - 
+									tensor[FT3D_00] * tensor[FT3D_12] ) / determinant;
+				result[FT3D_22] = ( tensor[FT3D_00] * tensor[FT3D_11] - 
+									tensor[FT3D_10] * tensor[FT3D_01] ) / determinant;
+				break;
+			case 2:
+				result[FT2D_00] = tensor[FT2D_11] / determinant;
+				result[FT2D_01] = ( -1.0 * tensor[FT2D_01] ) / determinant;
+				result[FT2D_10] = ( -1.0 * tensor[FT2D_10] ) / determinant;
+				result[FT2D_11] = tensor[FT2D_00] / determinant;
+				break;
+			default: {
+ 				Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+				Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+				Journal_Firewall( dim, error,
+				"In func '%s' don't understand dim = %u\n", __func__, dim );
+				}
+		}
+}
+
+
+/** Calculate double dot product of two tensors */
+double TensorArray_DoubleContraction(TensorArray tensorA,TensorArray tensorB, Dimension_Index dim){
+    double contraction;
+    Dimension_Index i, j;
+	/** \[\sigma:\epsilon=\sum_{i=1}^{n}\sum_{i=1}^{n}\sigma_{ij}\epsilon_{ij}\]  */
+	/* Check dimension */
+	if ( (dim != 2)&&(dim != 3) ) {		
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+		Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+		Journal_Firewall( dim, error,
+			"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+	
+	/* Calculate contraction */
+	contraction = 0.0;
+	for ( i = 0; i < dim; i++) {
+		for (j = 0; j < dim; j++) {
+			contraction = 	contraction + 
+							tensorA[ TensorArray_TensorMap(i, j, dim) ] * 
+							tensorB[ TensorArray_TensorMap(i, j, dim) ];       
+		}        
+	}
+
+    return contraction;
+}
+
+/** Calculate double dot product of two symmteric tensors */
+double SymmetricTensor_DoubleContraction(SymmetricTensor tensorA, SymmetricTensor tensorB, Dimension_Index dim)
+{
+    double contraction;
+    Dimension_Index i, j;
+	
+	/* Check dimension */
+	if ( (dim != 2)&&(dim != 3) ) {		
+		Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+		Journal_Printf( error, "Cannot get tensor value for dimension %d in %s.\n", dim, __func__);
+		Journal_Firewall( dim, error,
+			"In func '%s' don't understand dim = %u\n", __func__, dim );
+	}
+	
+	/* Calculate contraction */
+	contraction = 0.0;
+	for ( i = 0; i < dim; i++) {
+		for (j = 0; j < dim; j++) {
+			contraction = 	contraction + 
+							tensorA[ SymmetricTensor_TensorMap(i, j, dim) ] * 
+							tensorB[ SymmetricTensor_TensorMap(i, j, dim) ];       
+		}        
+	}
+
+    return contraction;
+}
+
+/************ All NonSquareMatrix Functions assume the output Matrix/Vector data structure is already initialised *******/
+/** This function calculates the transpose of a non-square nxm 2D matrix
+	It requires the row and column dimensions, and assumes an answer matrix
+	that is the correct size, ie mxn */
+void NonSquareMatrix_Transpose( double** originalMatrix, Dimension_Index rowDimOrig, 
+	Dimension_Index colDimOrig, double** newMatrix ) {
+	Dimension_Index row_I, col_I;
+	if ((rowDimOrig <=0) || (colDimOrig <=0)) {
+        Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+
+		Journal_Firewall( False, error,
+				"In func '%s' don't understand rows = %u or cols = %u\n", 
+			__func__, rowDimOrig, colDimOrig );
+	}
+	for( row_I = 0 ; row_I < rowDimOrig ; row_I++ ) {
+		for( col_I = 0 ; col_I < colDimOrig ; col_I++ ) {
+			newMatrix[ col_I ][ row_I ] = originalMatrix[ row_I ][ col_I ];
+		}
+	}
+	return;
+}
+
+void NonSquareMatrix_MultiplicationByNonSquareMatrix( double **AMatrix, int rowDimA, int colDimA,
+					 double **BMatrix, int rowDimB, int colDimB, 
+					 double** resultMatrix ) {
+	int counter;
+	for( counter = 0 ; counter < rowDimA ; counter++ ) {
+		memset( resultMatrix[counter], 0, sizeof( double ) * colDimB );
+	}
+NonSquareMatrix_CumulativeMultiplicationByNonSquareMatrix(AMatrix,rowDimA,colDimA,
+					 BMatrix,rowDimB, colDimB, 
+					 resultMatrix );	
+	
+}
+/** This function multiplies 2 non square matrices. It requires the row and column 
+	dimensions for each matrix. Columns In Matrix A = Rows In Matrix B
+	resultMatrix_ik = AMatrix_ij x BMatrix_jk */
+void NonSquareMatrix_CumulativeMultiplicationByNonSquareMatrix( double **AMatrix, 
+					 int rowDimA, int colDimA,
+					 double **BMatrix, int rowDimB, int colDimB, 
+					 double** resultMatrix ) {
+			
+  int row_I, col_I; /* location with resultMatrix  */
+  int counter;      /* counter which facilitates the multiplication of AMatrix and BMatrix */
+	/** Error Checking Code */
+	Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+					 
+	if (colDimA != rowDimB) {
+		Journal_Firewall( False, error,
+				"In func '%s'  row dimension B, %u != column dimension A, %u\n", 
+			__func__, rowDimB, colDimA );
+	}
+	if ((AMatrix == NULL) || (BMatrix == NULL) || (resultMatrix == NULL) ) {
+			Journal_Firewall( False, error,
+				"In func '%s', Input matrices: %s %s, or Output matrix: %s is NULL \n", 
+			__func__, AMatrix, BMatrix, resultMatrix);
+	}
+	/** End error checking code */
+	/** Calculate result matrix */
+	for( row_I = 0 ; row_I < rowDimA ; row_I++ ) {
+		for( col_I = 0 ; col_I < colDimB ; col_I++ ) {
+			/** resultMatrix[ row_I ][ col_I] = AMatrix_ij x BMatrix_jk */
+		       	for( counter = 0 ; counter < colDimA ; counter++ ) {
+				resultMatrix[ row_I ][ col_I ] += ( AMatrix[row_I][counter] * BMatrix[counter][col_I] );
+			}
+		}
+	}
+}
+
+/** This function multiplies a M x N matrices by a N vector.. It requires the column 
+	dimensions of the matrix and the row dimension. Columns In Matrix A = Rows In Vector B
+	resultMatrix_ij = AMatrix_ij x BVector_j */
+void NonSquareMatrix_MatrixVectorMultiplication( double** AMatrix, int rowsInA, int colsInA,
+		     double* BVec, int rowsInB,double* resultVector ) {
+  /*This assumes the resultVector is of the correct length. */
+	memset(resultVector,0,sizeof(double)* rowsInA);		 
+	NonSquareMatrix_CumulativeMatrixVectorMultiplication( AMatrix, rowsInA, colsInA,
+		                     BVec, rowsInB, resultVector);						   
+}
+/**This function multiplies a M x N matrices by a N vector, and then adds this result
+to the passed in 'solution Vector'. It requires the column 
+	dimensions of the matrix and the row dimension. Columns In Matrix A = Rows In Vector B
+	resultMatrix_ij = AMatrix_ij x BVector_j
+*/
+void NonSquareMatrix_CumulativeMatrixVectorMultiplication( double** AMatrix, int rowsInA, int colsInA,
+		                               double* BVec, int rowsInB, double* resultVector ) {
+  int row_I, col_I; /* counters through matrix rows and columns respectively */
+	Stream* error = Journal_Register( ErrorStream_Type, "TensorMultMath" );
+	Journal_Firewall( ( colsInA == rowsInB ), error,
+			"In func '%s' column dimensions of A_Matrix = %d is not equal to the row dimensions of B_Vec = %d\n",
+			__func__, colsInA, rowsInB );
+	Journal_Firewall( (resultVector != NULL) || (AMatrix != NULL) || (BVec != NULL) , error,
+			"In func '%s', Input matrices: %p %p, or Output matrix: %p is NULL \n", 
+			__func__, AMatrix, BVec, resultVector);
+	/* calculate the result Vector */
+	for( row_I = 0 ; row_I < rowsInA ; row_I++ ) {
+		for( col_I = 0 ; col_I < colsInA ; col_I++ ) {
+			resultVector[ row_I ] += AMatrix[ row_I ][ col_I ] * BVec[ col_I ];
+		}
+	}
+}
+
+/** Prints out a non square matrix if given the row and col dimension */
+void Journal_PrintNonSquareMatrix_Unnamed( Stream* stream, double** NonSquareMatrix, 
+	Dimension_Index rowDim, Dimension_Index colDim ) 
+{
+	Dimension_Index row_I, col_I;
+
+	/* For efficency - Check if stream is enabled */
+	if (!Stream_IsEnable(stream)) return;
+	
+	for ( row_I = 0 ; row_I < rowDim ; row_I++ ) {
+		for ( col_I = 0 ; col_I < colDim ; col_I++ ) {
+			Journal_Printf( stream, "%7.5g	", NonSquareMatrix[row_I][col_I] );
+			}
+		Journal_Printf( stream, "\n" );
+	}
+		
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TensorMultMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TensorMultMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**	Alireza Asgari, Researcher, Deakin University.
+**  Julian Giordani, Researcher, Monash Cluster Computing, Monash University
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic tensor and vector multiplication operations for 2D and 3D.
+**
+** Assumptions:
+** Comments:
+**
+** $Id: TensorMultMath.h  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_TensorMultMath_h__
+#define __Domain_Geometry_TensorMultMath_h__
+
+/* Added to enhance Tensor math for Solid Mechanics applications */
+
+/* TODO These should be in TensorMath  */
+void TensorArray_Identity(Dimension_Index dim, TensorArray tensorArray );
+void SymmetricTensor_Identity(Dimension_Index dim, SymmetricTensor symmetricTensor) ;
+
+/* Basic operations */
+void TensorArray_Transpose(TensorArray tensorArray, Dimension_Index dim, TensorArray result);
+void TensorArray_Add(	TensorArray tensorArrayA, TensorArray tensorArrayB, 
+						Dimension_Index dim, TensorArray result);
+void TensorArray_Subtract(	TensorArray tensorArrayA, TensorArray tensorArrayB, Dimension_Index dim,
+							TensorArray result);
+
+/* Multiplication Operations */
+
+void TensorArray_MultiplyByTensorArray(	TensorArray tensorArrayA, TensorArray tensorArrayB, 
+										Dimension_Index dim, TensorArray result);
+void TensorArray_MultiplyByRightTranspose(TensorArray tensorArray, Dimension_Index dim, SymmetricTensor result);
+void TensorArray_MultiplyByLeftTranspose(TensorArray tensorArray, Dimension_Index dim, SymmetricTensor result);
+void TensorArray_MultiplyBySymmetricTensor(	TensorArray tensorArray, SymmetricTensor symmetricTensor,
+											Dimension_Index dim, TensorArray result);
+void TensorArray_MultiplyByLeftVector(	TensorArray tensorArray, double* vector, 
+										Dimension_Index dim, double* result);
+void TensorArray_MultiplyByRightVector(	TensorArray tensorArray, double* vector, 
+										Dimension_Index dim, double* result); 
+
+/* Other useful operations */
+double TensorArray_CalcDeterminant(TensorArray tensorArray, Dimension_Index dim);
+void TensorArray_CalcInverse( TensorArray tensorA, Dimension_Index dim, TensorArray result);
+void TensorArray_CalcInverseWithDeterminant(TensorArray tensor, double determinant, Dimension_Index dim, TensorArray result);
+
+
+/* Useful operations in Solid Mechanics */
+double TensorArray_DoubleContraction(TensorArray tensorArrayA,TensorArray tensorArrayB, Dimension_Index dim);
+double SymmetricTensor_DoubleContraction(SymmetricTensor tensorA, SymmetricTensor tensorB, Dimension_Index dim);
+
+/* Non-square matrix operations */
+void NonSquareMatrix_Transpose( double** originalMatrix, Dimension_Index rowDimOrig, 
+	Dimension_Index colDimOrig, double** newMatrix );
+
+void NonSquareMatrix_MultiplicationByNonSquareMatrix( double **AMatrix, int rowsInA, int colsInA,
+					 double **BMatrix, int rowsInB, int colsInB, 
+					 double** resultMatrix );	
+
+void NonSquareMatrix_CumulativeMultiplicationByNonSquareMatrix( double **AMatrix, int rowDimA, int colDimA,
+					 double **BMatrix, int rowDimB, int colDimB, 
+					 double** resultMatrix );
+
+void NonSquareMatrix_MatrixVectorMultiplication( double** AMatrix, int rowsInA, int colsInA,
+		                               double* BVec, int rowsInB, double* resultVector );
+void NonSquareMatrix_CumulativeMatrixVectorMultiplication( double** AMatrix, int rowsInA, int colsInA,
+		                               double* BVec, int rowsInB, double* resultVector ); 						   
+/** Print a named NonSquareMatrix */
+#define Journal_PrintNonSquareMatrix(stream, matrix, rowDim, colDim) \
+	do {	\
+		Journal_Printf( stream, #matrix " - \n" ); \
+		Journal_PrintNonSquareMatrix_Unnamed( stream, matrix, rowDim, colDim ); \
+	} while(0) 
+	
+void Journal_PrintNonSquareMatrix_Unnamed( Stream* stream, double** NonSquareMatrix, 
+	Dimension_Index rowDim, Dimension_Index colDim ) ;
+
+
+
+
+#endif /* __Domain_Geometry_TensorMultMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Topology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Topology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,167 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Topology.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Topology.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type Topology_Type = "Topology";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Topology* _Topology_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*		neighbourCount,
+		Topology_BuildNeighboursFunction*		buildNeighbours )
+{
+	Topology* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Topology) );
+	self = (Topology*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor, _construct, _build, 
+			_initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->neighbourCount = neighbourCount;
+	self->buildNeighbours = buildNeighbours;
+	
+	/* Topology info */
+	if( initFlag ){
+		_Topology_Init( self );
+	}
+	
+	return self;
+}
+
+void _Topology_Init(
+		Topology*					self )
+{
+	/* General and Virtual info should already be set */
+	
+	/* Topology info */
+	self->isConstructed = True;
+	self->indexCount = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Topology_Delete( void* topology ) {
+	Topology* self = (Topology*)topology;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Topology_Print( void* topology, Stream* stream ) {
+	Topology* self = (Topology*)topology;
+	
+	/* Set the Journal for printing informations */
+	Stream* topologyStream;
+	topologyStream = Journal_Register( InfoStream_Type, "TopologyStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Topology (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Topology info */
+}
+
+
+void* _Topology_Copy( void* topology, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Topology*	self = (Topology*)topology;
+	Topology*	newTopology;
+	
+	newTopology = (Topology*)_Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newTopology->neighbourCount = self->neighbourCount;
+	newTopology->buildNeighbours = self->buildNeighbours;
+	
+	newTopology->indexCount = self->indexCount;
+	
+	return (void*)newTopology;
+}
+
+
+NeighbourIndex Topology_NeighbourCount( void* topology, Index index ) {
+	Topology* self = (Topology*)topology;
+	assert( topology );
+	return self->neighbourCount( self, index );
+}
+
+void Topology_BuildNeighbours( void* topology, Index index, NeighbourIndex* neighbours ) {
+	Topology* self = (Topology*)topology;
+	assert( topology );
+	self->buildNeighbours( self, index, neighbours );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Topology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Topology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,155 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+** Role:
+**	Abstract class which handles the 3D topology for an element or node. 
+**	This includes responsibility for finding neighbour information
+**	for a given element or node.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Topology.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_Topology_h__
+#define __Domain_Geometry_Topology_h__
+	
+	/** Textual name of this class */
+	extern const Type Topology_Type;
+	
+	/* Virtual function types */
+	typedef NeighbourIndex	(Topology_NeighbourCountFunction)   ( void* topology, Index index );
+	typedef void		(Topology_BuildNeighboursFunction)  ( void* topology, Index index, NeighbourIndex* neighbours );
+	
+	/** Topology class contents (see Topology) */
+	#define __Topology \
+		/* General info */ \
+		/** Parent class - Stg_Component */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		/**	Virtual function ptr for Topology_NeighbourCount() */ \
+		Topology_NeighbourCountFunction*		neighbourCount; \
+		/**	Virtual function ptr for Topology_BuildNeighbours() */ \
+		Topology_BuildNeighboursFunction*		buildNeighbours; \
+		\
+		/* Stg_Class info */ \
+		/** The maximum number of nodes/elements in the mesh */ \
+		Index						indexCount;
+
+	/**	Abstract class which handles the 3D topology for an element or node
+	- see Topology.h for member functions. */
+	struct Topology { __Topology };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Creation implementation */
+
+	Topology* _Topology_New( 
+		SizeT							_sizeOfSelf, 
+		Type							type,
+		Stg_Class_DeleteFunction*					_delete,
+		Stg_Class_PrintFunction*					_print, 
+		Stg_Class_CopyFunction*					_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		Topology_NeighbourCountFunction*			neighbourCount,
+		Topology_BuildNeighboursFunction*			buildNeighbours );
+	
+	/** Initialisation implementation functions */
+	void _Topology_Init(
+		Topology*						self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _Topology_Delete( void* topology );
+	
+	/** Stg_Class_Print() implementation */
+	void _Topology_Print( void* topology, Stream* stream);
+	
+	/* Copy */
+	#define Topology_Copy( self ) \
+		(Topology*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Topology_DeepCopy( self ) \
+		(Topology*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Topology_Copy( void* topology, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	/** Returns the number of neigbours for the given element. If the mesh
+	system is 2D or 1D, the count will be decreased appropriately. For regular
+	systems, the IJKTopology::dynamicSizes parameter effects the count. If
+	False, the count will ignore the possibility of neighbours outside the
+	mesh not existing. If True, the count will return the number of 
+	neighbours that actually exist. */
+	NeighbourIndex Topology_NeighbourCount( void* topology, Index index );
+	
+	/** Returns a dynamically allocated array containing the Index
+	number of the neighbours of a given node or element.
+	
+	Assumes that the neighbours input array has been pre-allocated to the 
+	correct size, as returned by Topology_NeighbourCount().
+
+	For regular topologies, the returned contents of the neighbours array
+	depends on the IJKTopology::dynamicSizes parameter. If False, the
+	positions in the array indexing Neigbours that don't exist will be 
+	filled with Topology_Invalid(). If true, neigbours that don't exist
+	will be skipped and only neighbours that exist will be returned.
+	*/
+	void Topology_BuildNeighbours( void* topology, Index index, NeighbourIndex* neighbours );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions/Macros
+	*/
+
+	/** This macro defines what should be used to record an invalid value, eg an
+	element in the neighbour table that doesn't exist (if you're on the outside
+	boundary on the mesh. */
+	#define Topology_Invalid( self ) \
+		(self)->indexCount
+	
+#endif /* __Domain_Geometry_Topology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/Topology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/Topology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Topology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Geometry/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TrigMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TrigMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,127 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TrigMath.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include <math.h>
+
+#include "units.h"
+#include "types.h"
+#include "TrigMath.h"
+
+#include <assert.h>
+
+#define RADIUS sphericalCoords[0]
+#define THETA  sphericalCoords[1]
+#define PHI    sphericalCoords[2]
+#define X      rectangularCoords[0]
+#define Y      rectangularCoords[1]
+#define Z      rectangularCoords[2]
+
+/** StGermain_RectangularToSpherical - Converts a from rectanglar coordinates to spherical coordinates */
+/* Macros (X, Y, Z) and (RADIUS, THETA, PHI) are used for clarity - See macros defined above */
+void StGermain_RectangularToSpherical(double* sphericalCoords, double* rectangularCoords, Index dim) {
+	double theta_sin_solution1, theta_sin_solution2;
+	double theta_cos_solution1, theta_cos_solution2;
+	
+	if (dim == 2) {
+		RADIUS = sqrt(X*X + Y*Y);
+
+		/* Get first solution for arcos */
+		theta_cos_solution1 = acos(X/RADIUS);		
+		
+		/* Get first solution for arcsin */
+		theta_sin_solution1 = asin(Y/RADIUS);		
+	}
+	else if (dim == 3) { 
+		RADIUS = sqrt(X*X + Y*Y + Z*Z);
+		PHI = acos(Z/RADIUS);
+
+		/* Get first solution for arcos */
+		theta_cos_solution1 = acos( X/ (RADIUS*sin(PHI)) );		/* Solution is between 0 and PI i.e. quadrant 1 and 2 */
+		
+		/* Get first solution for arcsin */
+		theta_sin_solution1 = asin( Y/(RADIUS*sin(PHI)) );		/* Solution is between -PI/2 and PI/2 i.e. quadrant 1 and 4 */
+	}
+	else {
+		Stream* error = Journal_Register( Error_Type , __FILE__ );
+		Journal_Printf( error, "Func %s does not work with dimension %u\n", __func__, dim );
+		exit(EXIT_FAILURE);
+	}
+
+	/* Get second solution for arcos */
+	theta_cos_solution2 = 2.0 * M_PI - theta_cos_solution1;			/* Solution is between PI and 2 PI - i.e. quadrant 3 and 4 */
+
+	/* Get second solution for arcsin */
+	theta_sin_solution2 = M_PI - theta_sin_solution1;			/* Solution is between PI/2 and 3PI/2 - i.e. quadrant 2 and 3 */
+	
+	/* Find sine and cosine solutions that match up */
+	if ( StGermain_TrigQuadrant( theta_cos_solution1 ) ==  StGermain_TrigQuadrant(theta_sin_solution1) 
+		||  StGermain_TrigQuadrant( theta_cos_solution1 ) ==  StGermain_TrigQuadrant( theta_sin_solution2 ) ) { 
+		THETA = theta_cos_solution1;
+	}
+	else { 
+		THETA = theta_cos_solution2;
+	}
+}
+
+
+/** StGermain_SphericalToRectangular - Converts a from spherical coordinates to rectanglar coordinates */
+/* Macros (X, Y, Z) and (RADIUS, THETA, PHI) are used for clarity - See macros defined above */
+void StGermain_SphericalToRectangular(double* rectangularCoords, double* sphericalCoords, Index dim) {
+	X = RADIUS * cos(THETA);
+	Y = RADIUS * sin(THETA);
+	
+	if (dim == 3) {
+		X = X * sin(PHI);
+		Y = Y * sin(PHI);
+		Z = RADIUS * cos(PHI);
+	}
+}
+
+/** StGermain_TrigDomain - Gets angle into domain between 0 and 2\pi */
+double StGermain_TrigDomain(double angle) {
+	if (angle > 0)
+		return fmod( angle, 2.0 * M_PI );
+	else 
+		return (2.0 * M_PI - fmod( fabs(angle), 2.0 * M_PI ));
+}
+
+/** StGermain_TrigQuadrant - Returns 0 (UPPER_RIGHT_QUADRANT), 1 (UPPER_LEFT_QUADRANT), 
+2 (LOWER_RIGHT_QUADRANT), or 3 (LOWER_RIGHT_QUADRANT) depending on what quadrant the angle is in */
+char StGermain_TrigQuadrant(double angle) {
+	/* Gets radian into correct domain */
+	angle = StGermain_TrigDomain(angle);
+	
+	/* return angle * \frac{2}{\pi} */
+	return (char) (angle * M_2_PI);
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/TrigMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/TrigMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,66 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic vector operations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: TrigMath.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_TrigMath_h__
+#define __Domain_Geometry_TrigMath_h__
+
+	#define UPPER_RIGHT_QUADRANT 	0
+	#define UPPER_LEFT_QUADRANT 	1
+	#define LOWER_LEFT_QUADRANT 	2
+	#define LOWER_RIGHT_QUADRANT 	3
+	
+	#ifndef M_PI
+		#define M_PI   3.14159265358979323846
+	#endif
+	#ifndef M_1_PI
+		#define M_1_PI 0.31830988618379067154
+	#endif
+	#ifndef M_2_PI
+		#define M_2_PI 0.63661977236758134308
+	#endif
+
+	#define StGermain_RadianToDegree(RAD) (180.0 * M_1_PI * (RAD))
+	#define StGermain_DegreeToRadian(DEG) (M_PI / 180.0 * (DEG))
+
+	void StGermain_RectangularToSpherical(double* sphericalCoords, double* rectangularCoords, Index dim) ;
+	void StGermain_SphericalToRectangular(double* rectangularCoords, double* sphericalCoords, Index dim) ;
+
+	double StGermain_TrigDomain(double angle) ;
+	char StGermain_TrigQuadrant(double angle) ;
+
+#endif /* __Domain_Geometry_TrigMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/VectorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/VectorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,477 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VectorMath.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "TrigMath.h"
+
+#include <math.h>
+#include <assert.h>
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+/** (Assumes 3D) Define a cross product of 2 vectors */
+void Vec_Cross3D( double* dst, double* a, double* b ) {
+	double	tmp[3];
+
+	tmp[0] = a[1] * b[2] - a[2] * b[1];
+	tmp[1] = a[2] * b[0] - a[0] * b[2];
+	tmp[2] = a[0] * b[1] - a[1] * b[0];
+
+	Vec_Set3D( dst, tmp );
+}
+
+/** (Assumes 3D) Divide a vector by a real */
+void Vec_Div2D( double* dst, double* a, double s ) {
+	double	inv = 1.0 / s;
+
+	Vec_Scale2D( dst, a, inv );
+}
+
+void Vec_Div3D( double* dst, double* a, double s ) {
+	double	inv = 1.0 / s;
+
+	Vec_Scale3D( dst, a, inv );
+}
+
+/** Calculate the normal of the vector. (ie length = 1 )*/
+void Vec_Norm3D( double* dst, double* a ) {
+	double	invMag = 1.0 / Vec_Mag3D( a );
+
+	Vec_Scale3D( dst, a, invMag );
+}
+
+void Vec_Norm2D( double* dst, double* a ) {
+	double	invMag = 1.0 / Vec_Mag2D( a );
+
+	Vec_Scale2D( dst, a, invMag );
+}
+
+/** Swap coordinates according to i,j, k index */
+void Vec_Swizzle( double* dst, double* src, unsigned char iInd, unsigned char jInd, unsigned char kInd ) {
+	assert( iInd < 3 && jInd < 3 && kInd < 3 );
+	
+	dst[0] = src[iInd];
+	dst[1] = src[jInd];
+	dst[2] = src[kInd];
+}
+
+
+/** StGermain_RotateVector takes an argument 'vectorToRotate', to rotate around a second vector 'axis' through an angle 
+'theta' radians. The rotated vector is stored in vector from the first argument. Each vector: 'rotatedVector', 
+'vectorToRotate' and 'axis' must be the size of 3 doubles. The function uses Rodrigues' Rotation Formula 
+which was taken from: 
+Eric W. Weisstein et al. "Rodrigues' Rotation Formula." From MathWorld--A Wolfram Web Resource. 
+http://mathworld.wolfram.com/RodriguesRotationFormula.html. */
+void StGermain_RotateVector(double* rotatedVector, double* vector, double* w, double theta) {
+	double rotationMatrix[3][3]; 	/* Indicies [Column][Row] */
+	double cosTheta = cos(theta);
+	double sinTheta = sin(theta);
+	
+	rotationMatrix[0][0] = cosTheta + w[0] * w[0] * (1.0 - cosTheta);
+	rotationMatrix[0][1] = w[0] * w[1] * (1.0 - cosTheta) - w[2] * sinTheta;
+	rotationMatrix[0][2] = w[1] * sinTheta + w[0] * w[2] * (1.0 - cosTheta);
+
+	rotationMatrix[1][0] = w[2] * sinTheta + w[0] * w[1] * (1.0 - cosTheta);
+	rotationMatrix[1][1] = cosTheta + w[1] * w[1] * (1.0 - cosTheta);
+	rotationMatrix[1][2] = -w[0] * sinTheta + w[1] * w[2] * (1.0 - cosTheta);
+	
+	rotationMatrix[2][0] = -w[1] * sinTheta + w[0] * w[2] * (1.0 - cosTheta);
+	rotationMatrix[2][1] = w[0] * sinTheta + w[1] * w[2] * (1.0 - cosTheta);
+	rotationMatrix[2][2] = cosTheta + w[2] * w[2] * (1.0 - cosTheta);
+
+	rotatedVector[0] = rotationMatrix[0][0]*vector[0] + rotationMatrix[0][1]*vector[1] + rotationMatrix[0][2]*vector[2];
+	rotatedVector[1] = rotationMatrix[1][0]*vector[0] + rotationMatrix[1][1]*vector[1] + rotationMatrix[1][2]*vector[2];
+	rotatedVector[2] = rotationMatrix[2][0]*vector[0] + rotationMatrix[2][1]*vector[1] + rotationMatrix[2][2]*vector[2];
+}		
+
+/** StGermain_RotateCoordinateAxis multiplies a vector with a Rotation Matrix to rotate it around a co-ordinate axis -
+Is a simpler function than StGermain_RotateVector for more specific cases where the vector is to be rotated around one of the axes of the co-ordinate system. The arguments are the same except the the 'axis' argument is of type 'Index' which could be either I_AXIS, J_AXIS or K_AXIS. Vectors have to be the size of 3 doubles.
+See, Eric W. Weisstein. "Rotation Matrix." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/RotationMatrix.htm */
+void StGermain_RotateCoordinateAxis( double* rotatedVector, double* vector, Index axis, double theta ) {
+	
+	/* Rotation around one axis will always leave the component on that axis alone */
+	rotatedVector[axis] = vector[axis];
+	
+	switch (axis) {
+		case K_AXIS: /* Rotate around Z axis */
+			rotatedVector[0] =  vector[0]*cos(theta) - vector[1]*sin(theta);
+			rotatedVector[1] =  vector[0]*sin(theta) + vector[1]*cos(theta);
+			return;
+		case I_AXIS:  /* Rotate around X axis */
+			rotatedVector[1] =  vector[1]*cos(theta) - vector[2]*sin(theta);
+			rotatedVector[2] =  vector[1]*sin(theta) + vector[2]*cos(theta);
+			return;
+		case J_AXIS: /* Rotate around Y axis */
+			rotatedVector[0] =  vector[0]*cos(theta) + vector[2]*sin(theta);
+			rotatedVector[2] = -vector[0]*sin(theta) + vector[2]*cos(theta);
+			return;
+		default: {
+			Stream* error = Journal_Register( ErrorStream_Type, "VectorMath" );
+			Journal_Printf( error, "Impossible axis to rotate around in %s.", __func__);
+			exit(EXIT_FAILURE);
+		}
+	}
+}
+
+/** Subtracts one vector from another - 
+destination = vector1 - vector2
+Destination vector may be the same as either of the other two input vectors 
+Function is optimised for 1-3 dimensions but will work for any dimension */
+void StGermain_VectorSubtraction(double* destination, double* vector1, double* vector2, Index dim) {
+	switch (dim) {
+		case 3: 
+			destination[2] = vector1[2] - vector2[2];
+		case 2:
+			destination[1] = vector1[1] - vector2[1];
+		case 1: 
+			destination[0] = vector1[0] - vector2[0];
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				destination[d] = vector1[d] - vector2[d];
+			return;
+		}
+	}	
+}
+
+/** Adds two vectors - 
+destination = vector1 + vector2
+Destination vector may be the same as either of the other two input vectors 
+Function is optimised for 1-3 dimensions but will work for any dimension */
+void StGermain_VectorAddition(double* destination, double* vector1, double* vector2, Index dim) {
+	switch (dim) {
+		case 3: 
+			destination[2] = vector1[2] + vector2[2];
+		case 2:
+			destination[1] = vector1[1] + vector2[1];
+		case 1: 
+			destination[0] = vector1[0] + vector2[0];
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				destination[d] = vector1[d] + vector2[d];
+			return;
+		}
+	}	
+}
+
+/** StGermain_VectorMagnitude calculates the magnitude of a vector
+|v| = \sqrt{ v . v } 
+This function uses function StGermain_VectorDotProduct to calculate v . v. 
+Vector has to be of size dim doubles */
+double StGermain_VectorMagnitude(double* vector, Index dim) {
+	return sqrt(StGermain_VectorDotProduct(vector,vector,dim));
+}
+
+/** StGermain_VectorDotProduct calculates the magnitude of a vector
+|v| = \sqrt{ v . v } 
+This function uses function StGermain_VectorDotProduct to calculate v . v. 
+Vectors have to be of size dim doubles
+*/
+double StGermain_VectorDotProduct(double* vector1, double* vector2, Index dim) {
+	double dotProduct = 0.0;
+
+	switch (dim) {
+		case 3:	
+			dotProduct = dotProduct + vector1[2] * vector2[2];
+		case 2:
+			dotProduct = dotProduct + vector1[1] * vector2[1];
+		case 1:
+			dotProduct = dotProduct + vector1[0] * vector2[0];
+			break;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				dotProduct = dotProduct + vector1[d] * vector2[d];
+			break;
+		}
+	}
+	
+	return dotProduct;
+}
+
+/** See Eric W. Weisstein. "Cross Product." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CrossProduct.html 
+Tested against http://www.engplanet.com/redirect.html?3859 */
+void StGermain_VectorCrossProduct(double* destination, double* vector1, double* vector2) {
+	destination[0] = vector1[1]*vector2[2] - vector1[2]*vector2[1];
+	destination[1] = vector1[2]*vector2[0] - vector1[0]*vector2[2];
+	destination[2] = vector1[0]*vector2[1] - vector1[1]*vector2[0];
+}
+
+/** StGermain_VectorCrossProductMagnitude - See Eric W. Weisstein. "Cross Product." 
+From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CrossProduct.html 
+|a \times b| = |a||b|\sqrt{ 1 - (\hat a . \hat b)^2}
+*/
+double StGermain_VectorCrossProductMagnitude( double* vector1, double* vector2, Dimension_Index dim ) {
+	double mag1       = StGermain_VectorMagnitude( vector1, dim );
+	double mag2       = StGermain_VectorMagnitude( vector2, dim );
+	double dotProduct = StGermain_VectorDotProduct( vector1, vector2, dim );
+	
+	return mag1 * mag2 * sqrt( 1.0 - dotProduct * dotProduct / (mag1 * mag1 * mag2 * mag2) );
+}
+
+
+/** StGermain_ScalarTripleProduct - Calculates the scalar vector product of three vectors -
+ * see Eric W. Weisstein. "Scalar Triple Product." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/ScalarTripleProduct.html
+ * Assumes 3 Dimensions */
+double StGermain_ScalarTripleProduct( double* vectorA, double* vectorB, double* vectorC ) {
+	double crossProduct[3];
+	
+	StGermain_VectorCrossProduct( crossProduct, vectorB, vectorC );
+	return StGermain_VectorDotProduct( vectorA, crossProduct, 3 );
+}
+
+
+/** StGermain_VectorNormalise calculates the magnitude of a vector
+\hat v = frac{v} / {|v|}
+This function uses function StGermain_VectorDotProduct to calculate v . v. 
+Vector has to be of size dim doubles */
+void StGermain_VectorNormalise(double* vector, Index dim) {
+	double mag;
+
+	mag = StGermain_VectorMagnitude( vector , dim );
+	switch (dim) {
+		case 3: 
+			vector[2] = vector[2]/mag;
+		case 2:
+			vector[1] = vector[1]/mag;
+		case 1: 
+			vector[0] = vector[0]/mag;
+			break;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				vector[d] = vector[d]/mag;
+			break;
+		}
+	}	
+}
+
+/** Finds the angle between two vectors 
+\cos{\theta} = \frac{a.b}{|a||b|}
+Uses StGermain_AngleBetweenVectors and StGermain_VectorMagnitude
+Vectors has to be of size dim doubles */
+double StGermain_AngleBetweenVectors( double* vectorA, double* vectorB, Index dim ) {
+	double dotProduct = StGermain_VectorDotProduct(vectorA, vectorB, dim);
+	double magA = StGermain_VectorMagnitude( vectorA, dim );
+	double magB = StGermain_VectorMagnitude( vectorB, dim );
+
+	double value = dotProduct/ (magA * magB);
+
+	if (value >= 1.0)
+		return 0.0;
+	if (value <= -1.0)
+		return M_PI;
+
+	return acos( value );
+}
+
+/** Calculates the distance between two points - given by their position vectors relative to the origin
+distance = |a - b|
+Uses StGermain_VectorSubtraction and StGermain_VectorMagnitude
+Position vectors have to be of size dim doubles */
+double StGermain_DistanceBetweenPoints( double* pos1, double* pos2, Index dim) {
+	double mag;
+	double *vector;
+	
+	/* Allocate memory */
+	vector = Memory_Alloc_Array( double, dim, "Vector" );
+	
+	/* vector between points */
+	StGermain_VectorSubtraction( vector, pos1, pos2, dim ) ;
+	mag = StGermain_VectorMagnitude( vector, dim );
+
+	Memory_Free( vector );
+	return mag;
+}
+
+/** Given three points which define a plane, StGermain_NormalToPlane will give the unit vector which is normal to that plane
+Uses StGermain_VectorSubtraction, StGermain_VectorCrossProduct and StGermain_VectorNormalise
+Position vectors and normal have to be of size 3 doubles */
+void StGermain_NormalToPlane( double* normal, double* pos0, double* pos1, double* pos2) {
+	double vector1[3], vector2[3];
+
+	StGermain_VectorSubtraction( vector1, pos1, pos0, 3) ;
+	StGermain_VectorSubtraction( vector2, pos2, pos0, 3) ;
+	
+	StGermain_VectorCrossProduct( normal, vector1, vector2 );
+
+	StGermain_VectorNormalise( normal, 3 );
+}
+
+#define ONE_THIRD 0.3333333333333333333
+/** Calculates the position vector to the centroid of a triangle whose verticies are given by position vectors 
+Position vectors have to be of size dim doubles */
+void StGermain_TriangleCentroid( double* centroid, double* pos0, double* pos1, double* pos2, Index dim) {
+
+	switch (dim) {
+		case 3:
+			centroid[2] = ONE_THIRD * (pos0[2] + pos1[2] + pos2[2]);
+		case 2: 
+			centroid[1] = ONE_THIRD * (pos0[1] + pos1[1] + pos2[1]);
+		case 1:
+			centroid[0] = ONE_THIRD * (pos0[0] + pos1[0] + pos2[0]);
+			return;
+		default: {
+			Index d;
+			for ( d = 0 ; d < dim ; d++ ) 
+				centroid[d] = ONE_THIRD * (pos0[d] + pos1[d] + pos2[d]);
+			return;
+		}
+	}
+}
+
+/** Calculates the area of a triangle whose verticies are given by position vectors 
+Position vectors have to be of size dim doubles 
+Only works for dim == 2 or dim == 3
+*/
+double StGermain_TriangleArea( double* pos0, double* pos1, double* pos2, Index dim ) {
+	double normal[3];
+	double vector1[3], vector2[3];
+	double area;
+
+	if (dim != 2 && dim != 3) return 0.0;
+
+	vector1[2] = vector2[2] = 0.0;
+
+	StGermain_VectorSubtraction( vector1, pos1, pos0, dim) ;
+	StGermain_VectorSubtraction( vector2, pos2, pos0, dim) ;
+
+	StGermain_VectorCrossProduct( normal, vector1, vector2 );
+	
+	area = 0.5 * StGermain_VectorMagnitude(normal, dim);
+	return area;
+}
+
+/** StGermain_ConvexQuadrilateralArea - See Eric W. Weisstein. "Quadrilateral." 
+ * From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/Quadrilateral.html
+ * Area = \frac{1}{2}| p \times q | where p and q are diagonals of a convex polygon
+ * This function will not work for dim > 3 and verticies have to be given in a winding direction
+*/
+double StGermain_ConvexQuadrilateralArea( double* vertexCoord1, double* vertexCoord2, double* vertexCoord3, double* vertexCoord4, Dimension_Index dim ) {
+	Coord diagonal1;	
+	Coord diagonal2;
+
+	/* Calculate Diagonals */
+	StGermain_VectorSubtraction( diagonal1, vertexCoord3, vertexCoord1, dim );
+	StGermain_VectorSubtraction( diagonal2, vertexCoord4, vertexCoord2, dim );
+
+	return 0.5 * StGermain_VectorCrossProductMagnitude( diagonal1, diagonal2, dim );
+}
+
+/** StGermain_ParallelepipedVolume - Calculates the volume of parallelepiped -
+ * see Eric W. Weisstein et al. "Parallelepiped." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/Parallelepiped.html
+ * Assumes 3 Dimensions */
+double StGermain_ParallelepipedVolume( 
+		double* coordLeftBottomFront, 
+		double* coordRightBottomFront, 
+		double* coordLeftTopFront, 
+		double* coordLeftBottomBack ) {
+
+	double vectorA[3], vectorB[3], vectorC[3];
+
+	/* Find vectors which define Parallelepiped */
+	StGermain_VectorSubtraction( vectorA, coordRightBottomFront, coordLeftBottomFront, 3 );
+	StGermain_VectorSubtraction( vectorB, coordLeftTopFront,     coordLeftBottomFront, 3 );
+	StGermain_VectorSubtraction( vectorC, coordLeftBottomBack,   coordLeftBottomFront, 3 );
+
+	return fabs( StGermain_ScalarTripleProduct( vectorA, vectorB, vectorC ) );
+}	
+
+/** StGermain_ParallelepipedVolumeFromCoordList - 
+ * shortcut for StGermain_ParallelepipedVolume - assuming nodes laid out in order of
+ * 	Left Bottom Front        
+ * 	Right Bottom Front        
+ * 	Right Top Front
+ * 	Left Top_Front             
+ * 	Left Bottom Back       
+ * 	Right Bottom Back      
+ * 	Right Top Back 
+ * 	Left Top Back   */
+double StGermain_ParallelepipedVolumeFromCoordList( Coord_List list ) {
+	return StGermain_ParallelepipedVolume( list[ 0 ], list[ 1 ], list[ 3 ], list[ 4 ] );
+}
+
+/** StGermain_AverageCoord - Does simple average of coordinates */
+void StGermain_AverageCoord( double* coord, double** coordList, Index count, Dimension_Index dim ) {
+	double factor = 1.0/(double)count;
+	Index  coord_I;
+	
+	/* Initialise */
+	coord[ I_AXIS ] = coord[ J_AXIS ] = coord[ K_AXIS ] = 0.0;
+
+	/* Sum verticies */
+	for ( coord_I = 0 ; coord_I < count ; coord_I++ ) {
+		coord[ I_AXIS ] += coordList[ coord_I ][ I_AXIS ];
+		coord[ J_AXIS ] += coordList[ coord_I ][ J_AXIS ];
+		if (dim == 3)
+			coord[ K_AXIS ] += coordList[ coord_I ][ K_AXIS ];
+	}
+
+	/* Find Average */
+	coord[ I_AXIS ] *= factor;
+	coord[ J_AXIS ] *= factor;
+	if (dim == 3)
+		coord[ K_AXIS ] *= factor;
+}
+/** Prints a vector of any non-zero positive length 
+Uses %lf print statement*/
+void StGermain_PrintVector( Stream* stream, double* vector, Index dim ) {
+	Index d;
+
+	if ( dim <= 0 ) {
+		Journal_Printf( stream, "{<NON_POSITIVE DIMENSION %d>}\n", dim );
+		return;
+	}
+
+	Journal_Printf( stream, "{");
+	for ( d = 0 ; d < dim - 1 ; d++ ) 
+		Journal_Printf( stream, "%lf, ", vector[d] );
+	
+	Journal_Printf( stream, "%lf}\n", vector[d] );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/VectorMath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/VectorMath.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,163 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    Provides basic vector operations.
+**
+** Assumptions:
+**    - Coord is an array of 3 doubles.
+**
+** Comments:
+**    In any operation that involves two or more input vectors, those vectors 
+**    may be one and the same; it may be assumed that such an occurence will be
+**    handled.
+**
+** $Id: VectorMath.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_VectorMath_h__
+#define __Domain_Geometry_VectorMath_h__
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+
+	#define Vec_Set2D( dst, src )			\
+		((dst)[0] = (src)[0],			\
+		 (dst)[1] = (src)[1], 0)
+
+	#define Vec_Set3D( dst, src )			\
+		(Vec_Set2D( dst, src ),			\
+		 (dst)[2] = (src)[2], 0)
+
+	#define Vec_SetScalar2D( dst, x, y )		\
+		((dst)[0] = x,				\
+		 (dst)[1] = y, 0)
+
+	#define Vec_SetScalar3D( dst, x, y, z )		\
+		(Vec_SetScalar2D( dst, x, y ),		\
+		 (dst)[2] = z, 0)
+
+	#define Vec_Add2D( dst, a, b )			\
+		((dst)[0] = (a)[0] + (b)[0],		\
+		 (dst)[1] = (a)[1] + (b)[1], 0)
+
+	#define Vec_Add3D( dst, a, b )			\
+		(Vec_Add2D( dst, a, b ),		\
+		 (dst)[2] = (a)[2] + (b)[2], 0)
+
+	#define Vec_Sub2D( dst, a, b )			\
+		((dst)[0] = (a)[0] - (b)[0],		\
+		 (dst)[1] = (a)[1] - (b)[1], 0)
+
+	#define Vec_Sub3D( dst, a, b )			\
+		(Vec_Sub2D( dst, a, b ),		\
+		 (dst)[2] = (a)[2] - (b)[2], 0)
+
+	#define Vec_Dot2D( a, b )			\
+		((a)[0] * (b)[0] + (a)[1] * (b)[1])
+
+	#define Vec_Dot3D( a, b )			\
+		(Vec_Dot2D( a, b ) + (a)[2] * (b)[2])
+
+	#define Vec_Scale2D( dst, a, s )		\
+		((dst)[0] = (a)[0] * (s),		\
+		 (dst)[1] = (a)[1] * (s), 0)
+
+	#define Vec_Scale3D( dst, a, s )		\
+		(Vec_Scale2D( dst, a, s ),		\
+		 (dst)[2] = (a)[2] * (s), 0)
+
+	#define Vec_MagSq2D( a )			\
+		Vec_Dot2D( a, a )
+
+	#define Vec_MagSq3D( a )			\
+		Vec_Dot3D( a, a )
+
+	#define Vec_Mag2D( a )				\
+		sqrt( Vec_MagSq2D( a ) )
+
+	#define Vec_Mag3D( a )				\
+		sqrt( Vec_MagSq3D( a ) )
+
+	#define Vec_Proj2D( dst, a, b )					\
+		(Vec_Norm2D( dst, b ),					\
+		 Vec_Scale2D( dst, dst, Vec_Dot2D( a, b ) ), 0)
+
+	#define Vec_Proj3D( dst, a, b )					\
+		(Vec_Norm3D( dst, b ),					\
+		 Vec_Scale3D( dst, dst, Vec_Dot3D( a, b ) ), 0)
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	void Vec_Cross3D( double* dst, double* a, double* b );
+	void Vec_Div2D( double* dst, double* a, double s );
+	void Vec_Div3D( double* dst, double* a, double s );
+	void Vec_Norm2D( double* dst, double* a );
+	void Vec_Norm3D( double* dst, double* a );
+
+	void StGermain_RotateVector(double* rotatedVector, double* vector, double* w, double theta) ;
+	void StGermain_RotateCoordinateAxis( double* rotatedVector, double* vector, Index axis, double theta ) ;
+	void StGermain_VectorSubtraction(double* destination, double* vector1, double* vector2, Index dim) ;
+	void StGermain_VectorAddition(double* destination, double* vector1, double* vector2, Index dim) ;
+	double StGermain_VectorMagnitude(double* vector, Index dim) ;
+	double StGermain_VectorDotProduct(double* vector1, double* vector2, Index dim) ;
+	void StGermain_VectorCrossProduct(double* destination, double* vector1, double* vector2) ;
+	double StGermain_VectorCrossProductMagnitude( double* vector1, double* vector2, Dimension_Index dim ) ;
+	double StGermain_ScalarTripleProduct( double* vectorA, double* vectorB, double* vectorC ) ;
+
+	void StGermain_VectorNormalise(double* vector, Index dim) ;
+	double StGermain_AngleBetweenVectors( double* vectorA, double* vectorB, Index dim ) ;
+	double StGermain_DistanceBetweenPoints( double* pos1, double* pos2, Index dim) ;
+	void StGermain_NormalToPlane( double* normal, double* pos0, double* pos1, double* pos2) ;
+
+	void StGermain_TriangleCentroid( double* centroid, double* pos0, double* pos1, double* pos2, Index dim) ;
+	double StGermain_TriangleArea( double* pos0, double* pos1, double* pos2, Index dim ) ;
+	double StGermain_ConvexQuadrilateralArea( double* vertexCoord1, double* vertexCoord2, 
+						  double* vertexCoord3, double* vertexCoord4, 
+						  Dimension_Index dim ) ;
+	double StGermain_ParallelepipedVolume( double* coordLeftBottomFront, 
+					       double* coordRightBottomFront, 
+					       double* coordLeftTopFront, 
+					       double* coordLeftBottomBack );
+	double StGermain_ParallelepipedVolumeFromCoordList( Coord_List list ) ;
+	
+	void StGermain_AverageCoord( double* coord, double** coordList, Index count, Dimension_Index dim ) ;
+	void StGermain_PrintVector( Stream* stream, double* vector, Index dim ) ;
+
+	/** Print a named vector. Name comes from vector variable in file*/
+	#define StGermain_PrintNamedVector(stream, vector, dim)		\
+		do {							\
+			Journal_Printf( stream, #vector " - " );	\
+			StGermain_PrintVector( stream, vector, dim );	\
+		} while(0)
+
+#endif /* __Domain_Geometry_VectorMath_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/isinf.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/isinf.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	isinf is a popular macro but doesn't is not standard... this file implements it for systems that dont.
+**
+** Assumptions:
+**	Implemented for OSF... no idea about others at this time
+**
+** Comments:
+**
+** $Id: isinf.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_isinf_h__
+#define __Domain_Geometry_isinf_h__
+	
+	#include <math.h>
+	
+	#ifndef isinf
+		#define isinf( value )	( finite( value ) ? 0 : isnan( value ) ? 0 : 1 )
+	#endif
+	
+#endif /* __Domain_Geometry_isinf_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,127 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+lib = StgDomainGeometry
+libstatic = yes
+libdynamic = yes
+includes = StgDomain/Geometry
+
+SRCS = \
+	Dimension.c \
+	VectorMath.c \
+	TensorMath.c \
+	TrigMath.c \
+	ComplexMath.c \
+	Line.c \
+	Plane.c \
+	Edge.c \
+	RMatrix.c \
+	Topology.c \
+	IJKTopology.c \
+	IJK6Topology.c \
+	IJK26Topology.c \
+	IrregTopology.c \
+	GeometryClass.c \
+	BlockGeometry.c \
+	RefinedRegionsGeometry.c \
+	ShellGeometry.c \
+	IrregGeometry.c \
+	QuadEdge.c \
+	Delaunay.c \
+	ParallelDelaunay.c \
+	Init.c \
+	Finalise.c \
+	ComplexVectorMath.c \
+	TensorMultMath.c \
+	Simplex.c \
+	Hex.c
+ifdef USE_OPTIONAL_MATH
+	SRCS += FullTensorMath.c
+endif
+
+HDRS = \
+	units.h \
+	types.h \
+	isinf.h \
+	Dimension.h \
+	VectorMath.h \
+	TensorMath.h \
+	TrigMath.h \
+	ComplexMath.h \
+	Line.h \
+	Plane.h \
+	Edge.h \
+	RMatrix.h \
+	Topology.h \
+	IJKTopology.h \
+	IJK6Topology.h \
+	IJK26Topology.h \
+	IrregTopology.h \
+	GeometryClass.h \
+	ShellGeometry.h \
+	BlockGeometry.h \
+	RefinedRegionsGeometry.h \
+	IrregGeometry.h \
+	QuadEdge.h \
+	Delaunay.h \
+	ParallelDelaunay.h \
+	Init.h \
+	Finalise.h \
+	Geometry.h \
+	ComplexVectorMath.h \
+	stg_lapack.h \
+	FullTensorMath.h \
+	TensorMultMath.h \
+	Simplex.h \
+	Hex.h
+
+PROJ_CFLAGS += ${F77_SYMBOL_TRANSLATION}
+EXTERNAL_INCLUDES = 
+EXTERNAL_LIBS = #-L${LIB_DIR} ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+endif
+
+ifdef SYSTEM_SIZEOF_LONG
+	PROJ_CFLAGS += -DSYSTEM_SIZEOF_LONG=${SYSTEM_SIZEOF_LONG}
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/stg_lapack.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/stg_lapack.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**    The Lapack headers in c.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ComplexMath.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_stg_lapack_h__
+#define __Domain_Geometry_stg_lapack_h__
+
+#ifdef FORTRAN_NORMAL
+	#define stg_dgeev dgeev
+#elif FORTRAN_SINGLE_TRAILINGBAR
+	#define stg_dgeev dgeev_
+#elif FORTRAN_DOUBLE_TRAILINGBAR
+	#define stg_dgeev dgeev__
+#elif FORTRAN_UPPERCASE
+	#define stg_dgeev DGEEV
+#else 
+	/* FALLBACK - eg for Intel MKL C implementation*/
+	#define stg_dgeev dgeev
+#endif	
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/types.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 4026 2007-03-13 11:42:25Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_types_h__
+#define __Domain_Geometry_types_h__
+
+
+	typedef Index		NeighbourIndex;
+
+	/** Describes a plane in 3D space, ie. Ax + By + Cz = d */
+	typedef double		Plane[4];             
+	/** Type used for indexing into lists of planes */ 
+	typedef Index		Plane_Index;
+	typedef Plane*		Plane_List;
+
+
+	/** Stores three indices per triangle, each index refering to a coordinate stored in an external list */
+	typedef Index		Triangle[3];
+	/** Type used for indexing into lists of triangles */
+	typedef Index		Triangle_Index;
+	/** A type used to point to the head of a list of triangles */
+	typedef Triangle*	Triangle_List;
+	
+	/** Stores the three planes needed to describe the 3D boundary of a triangle */
+	typedef Plane		TriangleBoundary[3];
+
+	/** Describes an edge between two points. Stored as two indices into an external coordinate list */
+	typedef Index		Edge[2];
+	/** Type used for indexing into lists of edges */
+	typedef Index		Edge_Index;
+	/** A type used to point to the head of a list of edges */
+	typedef Edge*		Edge_List;
+
+	/** Every edge can be touching at most two faces/elements/triangles. This type consists of two indices into
+	 an external list of faces/elements/triangles describing the faces touched by an edge. */	
+	typedef Index		EdgeFaces[2];
+	typedef EdgeFaces*	EdgeFaces_List;
+	typedef Index		EdgeFaces_Index;
+
+	typedef double		Stg_Line[4];
+	typedef Index		Line_Index;
+	typedef Stg_Line*	Stg_Line_List;
+
+	typedef Coord		Line3[2];
+	
+	
+	typedef double		RMatrix[9];
+	
+	typedef Index		Dimension_Index;
+	typedef Index		IJK[3];				/* ijk indices, positive, not constrained */
+	typedef Index*		Indices;			/* array/list of indices */
+	typedef enum Axis { I_AXIS=0, J_AXIS=1, K_AXIS=2 } Axis;
+
+	typedef Coord*				Coord_List;
+	typedef Index				Coord_Index;
+	typedef long int 			QuadEdgeRef;
+
+	typedef struct Topology			Topology;
+	typedef struct IJKTopology		IJKTopology;
+	typedef struct IJK6Topology		IJK6Topology;
+	typedef struct IJK26Topology	IJK26Topology;
+	typedef struct IrregTopology	IrregTopology;
+	typedef struct Geometry			Geometry;
+	typedef struct BlockGeometry	BlockGeometry;
+	typedef struct RefinedRegionsGeometry	RefinedRegionsGeometry;
+	typedef struct ShellGeometry	ShellGeometry;
+	typedef struct IrregGeometry	IrregGeometry;
+	typedef struct QuadEdge			QuadEdge;
+	typedef struct QuadEdgePool		QuadEdgePool;
+	typedef struct VoronoiVertexPool		VoronoiVertexPool;
+	typedef struct Delaunay			Delaunay;
+	typedef struct ParallelDelaunay	ParallelDelaunay;
+
+	
+#endif /* __Domain_Geometry_types_h__ */
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/src/units.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/src/units.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,67 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as publishdify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: units.h 3735 2006-08-01 08:05:14Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Geometry_units_h__
+#define __Domain_Geometry_units_h__
+
+	#define MAX_SYMMETRIC_TENSOR_COMPONENTS 6
+	#define MAX_TENSOR_COMPONENTS           9
+	
+	/** Defines a complex number as 2 doubles */
+	typedef double Cmplx[2];
+	/** Defines a set of 3 doubles */
+	typedef double XYZ[3];
+	typedef XYZ Coord;
+	/**Defines a set of 3 floats */
+	typedef float XYZF[3];
+	typedef XYZF CoordF;
+	/** Defines a set of 3 integers that can be used to index
+	into vectors */
+	typedef int XYZI[3];
+	typedef XYZI CoordI;
+	/** Defines a set of 3 Cmplx */
+	typedef Cmplx XYZC[3];
+	typedef XYZC CoordC;
+
+	typedef double SymmetricTensor[ MAX_SYMMETRIC_TENSOR_COMPONENTS ];
+	typedef double TensorArray[ MAX_TENSOR_COMPONENTS ];
+	typedef Cmplx ComplexTensorArray[MAX_TENSOR_COMPONENTS]; 
+
+#endif /* __Domain_Geometry_units_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,73 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3960 2007-01-11 02:20:49Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainDiscretisationGeometry
+
+def_srcs = \
+	testDimensionMacros.c \
+	testVectorMath.c \
+	testTensorMath.c \
+	testTrigMath.c \
+	testComplexMath.c \
+	testEdge.c \
+	testPlane.c \
+	testLine.c \
+	testRMatrix.c \
+	testBlockGeometry.c \
+	testRefinedRegionsGeometry.c \
+	testShellGeometry.c \
+	testIrregGeometry.c \
+	testIJK6Topology.c \
+	testIJK26Topology.c \
+	testDelaunay.c \
+	testParallelDelaunay.c \
+	testComplexVectorMath.c \
+	testTensorMultMath.c
+	
+def_checks = \
+	testDimensionMacros.0of1.sh \
+	testVectorMath.0of1.sh \
+	testTensorMath.0of1.sh \
+	testTrigMath.0of1.sh \
+	testComplexMath.0of1.sh \
+	testEdge.0of1.sh \
+	testPlane.0of1.sh \
+	testLine.0of1.sh \
+	testBlockGeometry.0of1.sh \
+	testRefinedRegionsGeometry.0of1.sh \
+	testShellGeometry.0of1.sh \
+	testIrregGeometry.0of1.sh \
+	testIJK6Topology.0of1.sh \
+	testIJK26Topology.0of1.sh \
+	testDelaunay.0of1.sh \
+	testParallelDelaunay.0of1.sh \
+	testParallelDelaunay.0of2.sh \
+	testComplexVectorMath.0of1.sh \
+	testTensorMultMath.0of1.sh \
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/data/points.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/data/points.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<!-- using an <asciidata> tag without specifying syntax:- will read in
+	according to the data structure already defined in the code, or else just
+	add as a set of strings-->
+	<list name="pointList">
+		<asciidata>
+			<columnDefinition name="x" type="double"/>
+			<columnDefinition name="y" type="double"/>
+			<columnDefinition name="z" type="double"/>
+0.2 0.9 0.1
+0.1 0.7 0.0
+0.2 0.5 0.08
+0.3 0.3 0.1
+0.2 0.1 0.1
+
+0.3 0.9 0.3
+0.2 0.7 0.2
+0.3 0.5 0.28
+0.4 0.3 0.3
+0.3 0.1 0.3
+
+0.5 0.9 0.5
+0.4 0.7 0.4
+0.5 0.5 0.48
+0.6 0.3 0.4
+0.5 0.1 0.4
+
+0.7 0.9 0.7
+0.6 0.7 0.6
+0.7 0.5 0.68
+0.8 0.3 0.7
+0.7 0.1 0.7
+
+0.8 0.9 0.9
+0.7 0.7 0.8
+0.8 0.5 0.88
+0.9 0.3 0.9
+0.8 0.1 0.9
+
+		</asciidata>
+	</list>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,102 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+tests = libStGermainDomainGeometry
+
+ifdef USE_OPTIONAL_MATH
+	def_checks += testFullTensorMath.0of1.sh
+endif
+	 
+SRCS = \
+	testDimensionMacros.c \
+	testVectorMath.c \
+	testTensorMath.c \
+	testTrigMath.c \
+	testComplexMath.c \
+	testEdge.c \
+	testPlane.c \
+	testLine.c \
+	testRMatrix.c \
+	testBlockGeometry.c \
+	testRefinedRegionsGeometry.c \
+	testShellGeometry.c \
+	testIrregGeometry.c \
+	testIJK6Topology.c \
+	testIJK26Topology.c \
+	testDelaunay.c \
+	testParallelDelaunay.c \
+	testComplexVectorMath.c \
+	testTensorMultMath.c
+ifdef USE_OPTIONAL_MATH
+	SRCS += testFullTensorMath.c
+endif 
+
+checks = \
+	testDimensionMacros.0of1.sh \
+	testVectorMath.0of1.sh \
+	testTensorMath.0of1.sh \
+	testTrigMath.0of1.sh \
+	testComplexMath.0of1.sh \
+	testEdge.0of1.sh \
+	testPlane.0of1.sh \
+	testLine.0of1.sh \
+	testBlockGeometry.0of1.sh \
+	testRefinedRegionsGeometry.0of1.sh \
+	testShellGeometry.0of1.sh \
+	testIrregGeometry.0of1.sh \
+	testIJK6Topology.0of1.sh \
+	testIJK26Topology.0of1.sh \
+	testDelaunay.0of1.sh \
+	testParallelDelaunay.0of1.sh \
+	testParallelDelaunay.0of2.sh \
+	testComplexVectorMath.0of1.sh \
+	testTensorMultMath.0of1.sh
+
+PROJ_LIBS = 
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainGeometry ${RPATH_LFLAGS} 
+
+packages = STGERMAIN MPI XML MATH
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+	ifneq (Darwin,${SYSTEM})
+		EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/small.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/small.txt	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+17
+1.000000 0.000000
+0.923880 0.382683
+0.707107 0.707107
+0.382683 0.923880
+0.000000 1.000000
+-0.382683 0.923880
+-0.707107 0.707107
+-0.923880 0.382683
+-1.000000 0.000000
+-0.923880 -0.382683
+-0.707107 -0.707107
+-0.382683 -0.923880
+-0.000000 -1.000000
+0.382683 -0.923880
+0.707107 -0.707107
+0.923880 -0.382683
+0.000000 0.000000
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testBlockGeometry.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testBlockGeometry.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,133 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Individual point test:
+	Point 0 : { 0, 0, 0 }
+	Point 1 : { 0.333333, 0, 0 }
+	Point 2 : { 0.666667, 0, 0 }
+	Point 3 : { 1, 0, 0 }
+	Point 4 : { 0, 0.333333, 0 }
+	Point 5 : { 0.333333, 0.333333, 0 }
+	Point 6 : { 0.666667, 0.333333, 0 }
+	Point 7 : { 1, 0.333333, 0 }
+	Point 8 : { 0, 0.666667, 0 }
+	Point 9 : { 0.333333, 0.666667, 0 }
+	Point 10 : { 0.666667, 0.666667, 0 }
+	Point 11 : { 1, 0.666667, 0 }
+	Point 12 : { 0, 1, 0 }
+	Point 13 : { 0.333333, 1, 0 }
+	Point 14 : { 0.666667, 1, 0 }
+	Point 15 : { 1, 1, 0 }
+	Point 16 : { 0, 0, 0.333333 }
+	Point 17 : { 0.333333, 0, 0.333333 }
+	Point 18 : { 0.666667, 0, 0.333333 }
+	Point 19 : { 1, 0, 0.333333 }
+	Point 20 : { 0, 0.333333, 0.333333 }
+	Point 21 : { 0.333333, 0.333333, 0.333333 }
+	Point 22 : { 0.666667, 0.333333, 0.333333 }
+	Point 23 : { 1, 0.333333, 0.333333 }
+	Point 24 : { 0, 0.666667, 0.333333 }
+	Point 25 : { 0.333333, 0.666667, 0.333333 }
+	Point 26 : { 0.666667, 0.666667, 0.333333 }
+	Point 27 : { 1, 0.666667, 0.333333 }
+	Point 28 : { 0, 1, 0.333333 }
+	Point 29 : { 0.333333, 1, 0.333333 }
+	Point 30 : { 0.666667, 1, 0.333333 }
+	Point 31 : { 1, 1, 0.333333 }
+	Point 32 : { 0, 0, 0.666667 }
+	Point 33 : { 0.333333, 0, 0.666667 }
+	Point 34 : { 0.666667, 0, 0.666667 }
+	Point 35 : { 1, 0, 0.666667 }
+	Point 36 : { 0, 0.333333, 0.666667 }
+	Point 37 : { 0.333333, 0.333333, 0.666667 }
+	Point 38 : { 0.666667, 0.333333, 0.666667 }
+	Point 39 : { 1, 0.333333, 0.666667 }
+	Point 40 : { 0, 0.666667, 0.666667 }
+	Point 41 : { 0.333333, 0.666667, 0.666667 }
+	Point 42 : { 0.666667, 0.666667, 0.666667 }
+	Point 43 : { 1, 0.666667, 0.666667 }
+	Point 44 : { 0, 1, 0.666667 }
+	Point 45 : { 0.333333, 1, 0.666667 }
+	Point 46 : { 0.666667, 1, 0.666667 }
+	Point 47 : { 1, 1, 0.666667 }
+	Point 48 : { 0, 0, 1 }
+	Point 49 : { 0.333333, 0, 1 }
+	Point 50 : { 0.666667, 0, 1 }
+	Point 51 : { 1, 0, 1 }
+	Point 52 : { 0, 0.333333, 1 }
+	Point 53 : { 0.333333, 0.333333, 1 }
+	Point 54 : { 0.666667, 0.333333, 1 }
+	Point 55 : { 1, 0.333333, 1 }
+	Point 56 : { 0, 0.666667, 1 }
+	Point 57 : { 0.333333, 0.666667, 1 }
+	Point 58 : { 0.666667, 0.666667, 1 }
+	Point 59 : { 1, 0.666667, 1 }
+	Point 60 : { 0, 1, 1 }
+	Point 61 : { 0.333333, 1, 1 }
+	Point 62 : { 0.666667, 1, 1 }
+	Point 63 : { 1, 1, 1 }
+
+Total point test:
+	Point 0 : { 0, 0, 0 }
+	Point 1 : { 0.333333, 0, 0 }
+	Point 2 : { 0.666667, 0, 0 }
+	Point 3 : { 1, 0, 0 }
+	Point 4 : { 0, 0.333333, 0 }
+	Point 5 : { 0.333333, 0.333333, 0 }
+	Point 6 : { 0.666667, 0.333333, 0 }
+	Point 7 : { 1, 0.333333, 0 }
+	Point 8 : { 0, 0.666667, 0 }
+	Point 9 : { 0.333333, 0.666667, 0 }
+	Point 10 : { 0.666667, 0.666667, 0 }
+	Point 11 : { 1, 0.666667, 0 }
+	Point 12 : { 0, 1, 0 }
+	Point 13 : { 0.333333, 1, 0 }
+	Point 14 : { 0.666667, 1, 0 }
+	Point 15 : { 1, 1, 0 }
+	Point 16 : { 0, 0, 0.333333 }
+	Point 17 : { 0.333333, 0, 0.333333 }
+	Point 18 : { 0.666667, 0, 0.333333 }
+	Point 19 : { 1, 0, 0.333333 }
+	Point 20 : { 0, 0.333333, 0.333333 }
+	Point 21 : { 0.333333, 0.333333, 0.333333 }
+	Point 22 : { 0.666667, 0.333333, 0.333333 }
+	Point 23 : { 1, 0.333333, 0.333333 }
+	Point 24 : { 0, 0.666667, 0.333333 }
+	Point 25 : { 0.333333, 0.666667, 0.333333 }
+	Point 26 : { 0.666667, 0.666667, 0.333333 }
+	Point 27 : { 1, 0.666667, 0.333333 }
+	Point 28 : { 0, 1, 0.333333 }
+	Point 29 : { 0.333333, 1, 0.333333 }
+	Point 30 : { 0.666667, 1, 0.333333 }
+	Point 31 : { 1, 1, 0.333333 }
+	Point 32 : { 0, 0, 0.666667 }
+	Point 33 : { 0.333333, 0, 0.666667 }
+	Point 34 : { 0.666667, 0, 0.666667 }
+	Point 35 : { 1, 0, 0.666667 }
+	Point 36 : { 0, 0.333333, 0.666667 }
+	Point 37 : { 0.333333, 0.333333, 0.666667 }
+	Point 38 : { 0.666667, 0.333333, 0.666667 }
+	Point 39 : { 1, 0.333333, 0.666667 }
+	Point 40 : { 0, 0.666667, 0.666667 }
+	Point 41 : { 0.333333, 0.666667, 0.666667 }
+	Point 42 : { 0.666667, 0.666667, 0.666667 }
+	Point 43 : { 1, 0.666667, 0.666667 }
+	Point 44 : { 0, 1, 0.666667 }
+	Point 45 : { 0.333333, 1, 0.666667 }
+	Point 46 : { 0.666667, 1, 0.666667 }
+	Point 47 : { 1, 1, 0.666667 }
+	Point 48 : { 0, 0, 1 }
+	Point 49 : { 0.333333, 0, 1 }
+	Point 50 : { 0.666667, 0, 1 }
+	Point 51 : { 1, 0, 1 }
+	Point 52 : { 0, 0.333333, 1 }
+	Point 53 : { 0.333333, 0.333333, 1 }
+	Point 54 : { 0.666667, 0.333333, 1 }
+	Point 55 : { 1, 0.333333, 1 }
+	Point 56 : { 0, 0.666667, 1 }
+	Point 57 : { 0.333333, 0.666667, 1 }
+	Point 58 : { 0.666667, 0.666667, 1 }
+	Point 59 : { 1, 0.666667, 1 }
+	Point 60 : { 0, 1, 1 }
+	Point 61 : { 0.333333, 1, 1 }
+	Point 62 : { 0.666667, 1, 1 }
+	Point 63 : { 1, 1, 1 }
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testBlockGeometry.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testBlockGeometry.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testBlockGeometry " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testBlockGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testBlockGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,98 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testBlockGeometry.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	Geometry*	geometry;
+	Coord_List	points;
+	Index		i;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	
+	geometry = (Geometry*)BlockGeometry_New( "blockGeometry", dictionary );
+	
+	printf( "Individual point test:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, point );
+		printf( "{ %g, %g, %g }\n", point[0], point[1], point[2] );
+	}
+	printf( "\n" );
+	
+	printf( "Total point test:\n" );
+	points = Memory_Alloc_Array( Coord, geometry->pointCount, "points" );
+	geometry->buildPoints( geometry, points );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, points[i] );
+		printf( "{ %g, %g, %g }\n", points[i][0], points[i][1], points[i][2] );
+	}
+	printf( "\n" );
+	if( points )
+		Memory_Free( points );
+	
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,74 @@
+StGermain Framework revision 3839. Copyright (C) 2003-2005 VPAC.
+
+----------------- Testing Complex Journal Printing Macro -----------------
+x = 1.0000000 + 2.0000000 i
+y = -1.5000000 + 3.0000000 i
+u = -1.5000000 - 3.0000000 i
+v = 1.5000000 - 3.0000000 i
+i = 0.0000000 + 1.0000000 i
+
+----------------- Testing Addition -----------------
+dest = -0.5000000 + 5.0000000 i
+x = -0.5000000 + 5.0000000 i
+
+----------------- Testing Subtraction -----------------
+x = 1.0000000 + 2.0000000 i
+dest = 2.5000000 - 1.0000000 i
+
+----------------- Testing Multiplication -----------------
+dest = -7.5000000 + 0.0000000 i
+y = -7.5000000 + 0.0000000 i
+
+----------------- Testing Division -----------------
+y = -1.5000000 + 3.0000000 i
+dest = 0.4000000 - 0.5333333 i
+
+----------------- Testing Real Number Math stuff -----------------
+dest = 0.5000000 + 3.0000000 i
+dest = 5.5000000 - 3.0000000 i
+dest = -0.1500000 + 0.3000000 i
+dest = -0.1333333 - 0.2666667 i
+Answer within tolerance 1e-15 of 1.00000 + i 0.00000
+
+----------------- Testing Conjugate -----------------
+x = 1.0000000 - 2.0000000 i
+x = 1.0000000 + 2.0000000 i
+
+----------------- Testing Complex Polar Stuff -----------------
+x = 2.2361 e^{i 1.1071} = 1.0000 + 2.0000
+y = 3.3541 e^{i 2.0344} = -1.5000 + 3.0000
+u = 3.3541 e^{i -2.0344} = -1.5000 + -3.0000
+v = 3.3541 e^{i -1.1071} = 1.5000 + -3.0000
+i = 1.0000 e^{i 1.5708} = 0.0000 + 1.0000
+-i = 1.0000 e^{i -1.5708} = 0.0000 + -1.0000
+
+----------------- Testing Complex to real Power Stuff -----------------
+dest = -3.0000000 + 4.0000000 i
+dest = -3.0000000 + 4.0000000 i
+dest = -11.0000000 - 2.0000000 i
+dest = -11.0000000 - 2.0000000 i
+dest = 0.9628349 + 1.5578995 i
+dest = -1.5000000 + 3.0000000 i
+
+----------------- Testing Complex to complex Power Stuff -----------------
+dest = 0.0078744 + 0.0073865 i
+
+----------------- Testing The Most Beautiful Equation in Mathematics e^{i \pi} + 1 = 0 -----------------
+e^{i \pi} = dest = -1.0000000 + 0.0000000 i
+
+----------------- Another Beautiful Equation i^i = e^{-\pi/2} -----------------
+e^{-\pi/2} = 0.20788 = dest = 0.2078796 + 0.0000000 i
+
+----------------- Testing Exponential -----------------
+e^{2 + 3i} = dest = -7.3151101 + 1.0427437 i
+dest = -7.3151101 + 1.0427437 i
+e^{-5 + 7i} = dest = 0.0050798 + 0.0044267 i
+dest = 0.0050798 + 0.0044267 i
+e^{i \pi} = dest = -1.0000000 + 0.0000000 i
+
+----------------- Testing Copy and Zero -----------------
+x = -5.0000000 + 7.0000000 i
+dest = -1.0000000 + 0.0000000 i
+dest = -5.0000000 + 7.0000000 i
+dest = 0.0000000 + 0.0000000 i
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testComplexMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,234 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testComplexMath.c 3847 2006-10-11 02:38:21Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+#undef Journal_PrintCmplx
+/** Print a complex number.
+Will use %.5f formatting */
+#define Journal_PrintCmplx( stream, self ) \
+                Journal_Printf( stream, #self " = %.7f %c %.7f i\n", (self)[ REAL_PART ], (self)[ IMAG_PART ] >= 0.0 ? '+' : '-', fabs( (self)[ IMAG_PART ] ) )
+
+#define TESTCOMPLEXMATH_TOL 1e-15
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		Cmplx x = {1, 2};
+		Cmplx y = {-1.5, 3};
+		Cmplx u = {-1.5, -3};
+		Cmplx v = {1.5, -3};
+		Cmplx i = {0, 1};
+		Cmplx minus_i = {0, -1};
+		Cmplx e = {M_E, 0};
+		Cmplx ipi = {0, M_PI};
+		Cmplx dest;
+		double mod, theta;
+		Stream* stream = Journal_Register( InfoStream_Type, "ComplexMath" );
+		
+		Journal_Printf(stream, "\n----------------- Testing Complex Journal Printing Macro -----------------\n" );
+		Journal_PrintCmplx( stream, x );	
+		Journal_PrintCmplx( stream, y );	
+		Journal_PrintCmplx( stream, u );	
+		Journal_PrintCmplx( stream, v );	
+		Journal_PrintCmplx( stream, i );	
+
+		Journal_Printf(stream, "\n----------------- Testing Addition -----------------\n" );
+		Cmplx_Add( x, y, dest );
+		Cmplx_Add( x, y, x );
+		Journal_PrintCmplx( stream, dest );	
+		Journal_PrintCmplx( stream, x );	
+		
+		Journal_Printf(stream, "\n----------------- Testing Subtraction -----------------\n" );
+		Cmplx_Subtract( x, y, x );
+		Cmplx_Subtract( x, y, dest );
+		Journal_PrintCmplx( stream, x );		
+		Journal_PrintCmplx( stream, dest );	
+
+		Journal_Printf(stream, "\n----------------- Testing Multiplication -----------------\n" );
+		Cmplx_Multiply( x, y, dest );
+		Cmplx_Multiply( x, y, y );
+		Journal_PrintCmplx( stream, dest );	
+		Journal_PrintCmplx( stream, y );	
+
+		Journal_Printf(stream, "\n----------------- Testing Division -----------------\n" );
+		Cmplx_Division( y, x, y );
+		Cmplx_Division( x, y, dest );
+		Journal_PrintCmplx( stream, y );	
+		Journal_PrintCmplx( stream, dest );	
+		
+		Journal_Printf(stream, "\n----------------- Testing Real Number Math stuff -----------------\n" );
+		Cmplx_AddReal( y, 2, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_RealMinusCmplx( y, 4, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_RealMultiply( y, 0.1, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_RealDivideByCmplx( y, 1.0, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Multiply( y, dest, dest );
+		/* Test here for tolerances */
+		if (fabs(dest[IMAG_PART]) <= TESTCOMPLEXMATH_TOL ) {
+			Journal_Printf(stream, "Answer within tolerance %g of %.5f + i %.5f\n", 
+				TESTCOMPLEXMATH_TOL,
+				dest[REAL_PART],
+				fabs(0));
+		}
+		else{
+			Journal_Printf(stream, "Answer not within tolerance %g of %.5f + i %.5f\n", 
+				TESTCOMPLEXMATH_TOL,
+				1,
+				0);
+		}
+
+		Journal_Printf(stream, "\n----------------- Testing Conjugate -----------------\n" );
+		Cmplx_Conjugate( x, x );
+		Journal_PrintCmplx( stream, x );	
+		Cmplx_Conjugate( x, x );
+		Journal_PrintCmplx( stream, x );	
+
+		Journal_Printf(stream, "\n----------------- Testing Complex Polar Stuff -----------------\n" );
+		mod = Cmplx_Modulus(x);
+		theta = Cmplx_Argument( x );
+		Journal_Printf(stream, "x = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+		mod = Cmplx_Modulus(y);
+		theta = Cmplx_Argument( y );
+		Journal_Printf(stream, "y = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+		mod = Cmplx_Modulus(u);
+		theta = Cmplx_Argument( u );
+		Journal_Printf(stream, "u = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+		mod = Cmplx_Modulus(v);
+		theta = Cmplx_Argument( v );
+		Journal_Printf(stream, "v = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+		mod = Cmplx_Modulus(i);
+		theta = Cmplx_Argument( i );
+		Journal_Printf(stream, "i = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+		mod = Cmplx_Modulus(minus_i);
+		theta = Cmplx_Argument( minus_i );
+		Journal_Printf(stream, "-i = %2.4lf e^{i %2.4lf} = %2.4lf + %2.4lf\n", mod, theta, mod * cos(theta), mod *sin(theta));
+	
+		Journal_Printf(stream, "\n----------------- Testing Complex to real Power Stuff -----------------\n" );
+		Cmplx_RealPower( x, 2.0, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Multiply( x, x, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Multiply( dest, x, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_RealPower( x, 3.0, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Sqrt( y, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_RealPower( dest, 2.0, dest );
+		Journal_PrintCmplx( stream, dest );	
+		
+		Journal_Printf(stream, "\n----------------- Testing Complex to complex Power Stuff -----------------\n" );
+		Cmplx_CmplxPower( x, y, dest );
+		Journal_PrintCmplx( stream, dest );	
+
+
+		Journal_Printf(stream, "\n----------------- Testing The Most Beautiful Equation in Mathematics e^{i \\pi} + 1 = 0 -----------------\n" );
+		Journal_Printf( stream, "e^{i \\pi} = ");
+		Cmplx_CmplxPower( e, ipi, dest );
+		Journal_PrintCmplx( stream, dest );	
+
+		Journal_Printf(stream, "\n----------------- Another Beautiful Equation i^i = e^{-\\pi/2} -----------------\n" );
+		Cmplx_CmplxPower( i, i, dest );
+		Journal_Printf( stream, "e^{-\\pi/2} = %2.5lf = ", exp( -M_PI * 0.5 ) );
+		Journal_PrintCmplx( stream, dest );	
+
+		Journal_Printf(stream, "\n----------------- Testing Exponential -----------------\n" );
+		Journal_Printf( stream, "e^{2 + 3i} = ");
+		x[ REAL_PART ] = 2.0;
+		x[ IMAG_PART ] = 3.0;
+		Cmplx_Exp( x, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_CmplxPower( e, x, dest );
+		Journal_PrintCmplx( stream, dest );	
+
+		Journal_Printf( stream, "e^{-5 + 7i} = ");
+		x[ REAL_PART ] = -5.0;
+		x[ IMAG_PART ] = 7.0;
+		Cmplx_Exp( x, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_CmplxPower( e, x, dest );
+		Journal_PrintCmplx( stream, dest );	
+
+		Journal_Printf( stream, "e^{i \\pi} = ");
+		Cmplx_Exp( ipi, dest );
+		Journal_PrintCmplx( stream, dest );	
+		
+		Journal_Printf(stream, "\n----------------- Testing Copy and Zero -----------------\n" );
+		Journal_PrintCmplx( stream, x );	
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Copy( x, dest );
+		Journal_PrintCmplx( stream, dest );	
+		Cmplx_Zero( dest );
+		Journal_PrintCmplx( stream, dest );	
+
+	}
+	
+	printf("\n");
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexVectorMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexVectorMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,228 @@
+StGermain Framework revision 3673. Copyright (C) 2003-2005 VPAC.
+Basic tests:
+d = 
+d[0] = 1 + 1 i
+d[1] = 1 + 0 i
+d[2] = 0 + 1 i
+Set Complex Scalar
+d = 
+d[0] = 1 + 0 i
+d[1] = 2 + 1 i
+d[2] = 1.5 + 1 i
+Set c = d
+c = 
+c[0] = 1 + 0 i
+c[1] = 2 + 1 i
+c[2] = 1.5 + 1 i
+b = c + d 
+b = 
+b[0] = 2 + 0 i
+b[1] = 4 + 2 i
+b[2] = 3 + 2 i
+a = b - d 
+a = 
+a[0] = 1 + 0 i
+a[1] = 2 + 1 i
+a[2] = 1.5 + 1 i
+d = a x e 
+e = 
+e[0] = 1 + 0 i
+e[1] = 2 + 2 i
+e[2] = -3 - 1 i
+d = 
+d[0] = -6 - 10 i
+d[1] = 4.5 + 2 i
+d[2] = 0 + 1 i
+value = a . e 
+value = -0.5 + 1.5 i
+b = 
+b[0] = 2 + 0 i
+b[1] = 4 + 2 i
+b[2] = 3 + 2 i
+b = (2 + i) * b 
+b = 
+b[0] = 4 + 2 i
+b[1] = 6 + 8 i
+b[2] = 4 + 7 i
+b = 3 * b 
+b = 
+b[0] = 12 + 6 i
+b[1] = 18 + 24 i
+b[2] = 12 + 21 i
+b = 
+b[0] = 0 + 1 i
+b[1] = 1 + 1 i
+b[2] = 0 + 1 i
+|b| = 2
+d = proj a onto b 
+d = 
+d[0] = -2.75 + 0 i
+d[1] = -2.75 + 2.75 i
+d[2] = -2.75 + 0 i
+e = a / value 
+value = 2 + 1 i
+e = 
+e[0] = 0.4 - 0.2 i
+e[1] = 1 + 0 i
+e[2] = 0.8 + 0.1 i
+b = 
+b[0] = 0 + 1 i
+b[1] = 1 + 1 i
+b[2] = 0 + 1 i
+Norm(b) = 
+b[0] = 0 + 0.5 i
+b[1] = 0.5 + 0.5 i
+b[2] = 0 + 0.5 i
+|b| = 1
+a  = 
+a[0] = 1 + 0 i
+a[1] = 2 + 1 i
+a[2] = 1.5 + 1 i
+swizzle(a)(k, i, j) = 
+a[0] = 1.5 + 1 i
+a[1] = 1 + 0 i
+a[2] = 2 + 1 i
+
+****************************
+Vectors - A, B, C, and D
+A - {7.4 + i 1, 2 + i 0, 5 + i 1, 1 + i 0, 3 + i 2, -42 + i 0}
+B - {4 + i 2, 2.3 + i 0, 5.8 + i 0, 6 + i 0, -12 + i 0, 39289 + i 0}
+C - {23 + i 0, 5 + i 0, -14 + i 0, 32 + i 0, -21 + i 1, 78 + i 0}
+D - {23 + i 0, 5 + i 0, -14 + i 0, 32 + i 0, -21 + i 0, 78 + i 0}
+
+****************************
+i - {1 + i 0, 0 + i 0, 0 + i 0}
+j - {0 + i 0, 1 + i 0, 0 + i 0}
+k - {0 + i 0, 0 + i 0, 1 + i 0}
+Axis Rotation
+K Rotated 1.5708 radians around I axis - 
+Answer within tolerance 1e-16 of expected result: j - {0 + i 0, 1 + i 0, 0 + i 0}
+Angle Rotation
+K Rotated 1.5708 radians around I axis - 
+Answer within tolerance 1e-16 of expected result: j - {0 + i 0, 1 + i 0, 0 + i 0}
+Axis Rotation
+I Rotated 1.5708 radians around J axis - 
+Answer within tolerance 1e-16 of expected result: k - {0 + i 0, 0 + i 0, 1 + i 0}
+Angle Rotation
+I Rotated 1.5708 radians around J axis - 
+Answer within tolerance 1e-16 of expected result: k - {0 + i 0, 0 + i 0, 1 + i 0}
+Axis Rotation
+J Rotated 1.5708 radians around K axis - 
+Answer within tolerance 1e-16 of expected result: i - {1 + i 0, 0 + i 0, 0 + i 0}
+Angle Rotation
+J Rotated 1.5708 radians around K axis - 
+Answer within tolerance 1e-16 of expected result: i - {1 + i 0, 0 + i 0, 0 + i 0}
+I Rotated 0.785398 radians around J axis and 0.785398 radians around K axis: 
+vector - {0.5 + i 0, -0.707107 + i 0, 0.5 + i 0}
+J Rotated 0.785398 radians around I axis and 0.785398 radians around K axis: 
+vector - {0.707107 + i 0, 0.5 + i 0, -0.5 + i 0}
+K Rotated 0.785398 radians around I axis and 0.785398 radians around J axis: 
+vector - {-0.707107 + i 0, 0.5 + i 0, 0.5 + i 0}
+
+****************************
+vector = A + B
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {11.4 + i 3}
+vector - {11.4 + i 3, 4.3 + i 0}
+vector - {11.4 + i 3, 4.3 + i 0, 10.8 + i 1}
+vector - {11.4 + i 3, 4.3 + i 0, 10.8 + i 1, 7 + i 0}
+vector - {11.4 + i 3, 4.3 + i 0, 10.8 + i 1, 7 + i 0, -9 + i 2}
+vector - {11.4 + i 3, 4.3 + i 0, 10.8 + i 1, 7 + i 0, -9 + i 2, 39247 + i 0}
+
+****************************
+vector = A - B
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {3.4 + i -1}
+vector - {3.4 + i -1, -0.3 + i 0}
+vector - {3.4 + i -1, -0.3 + i 0, -0.8 + i 1}
+vector - {3.4 + i -1, -0.3 + i 0, -0.8 + i 1, -5 + i 0}
+vector - {3.4 + i -1, -0.3 + i 0, -0.8 + i 1, -5 + i 0, 15 + i 2}
+vector - {3.4 + i -1, -0.3 + i 0, -0.8 + i 1, -5 + i 0, 15 + i 2, -39331 + i 0}
+
+****************************
+Check Magnitude Function
+dim = 0 magnitude A = 0.000
+dim = 0 magnitude B = 0.000
+dim = 1 magnitude A = 7.467
+dim = 1 magnitude B = 4.472
+dim = 2 magnitude A = 7.722
+dim = 2 magnitude B = 4.854
+dim = 3 magnitude A = 9.243
+dim = 3 magnitude B = 7.306
+dim = 4 magnitude A = 9.295
+dim = 4 magnitude B = 9.402
+dim = 5 magnitude A = 9.755
+dim = 5 magnitude B = 15.215
+dim = 6 magnitude A = 43.036
+dim = 6 magnitude B = 39289.003
+
+****************************
+Check Dot Product Function
+value = A . B 
+dim = 0 dot product = 0.000 + 0.000 i
+dim = 1 dot product = 27.600 + 18.800 i
+dim = 2 dot product = 32.200 + 18.800 i
+dim = 3 dot product = 61.200 + 24.600 i
+dim = 4 dot product = 67.200 + 24.600 i
+dim = 5 dot product = 31.200 + 0.600 i
+dim = 6 dot product = -1650106.800 + 0.600 i
+
+****************************
+Check Cross Product Function
+ A x B in 3-D
+vector - {0.1 + i -2.3, -24.92 + i 8.2, 9.02 + i -1.7}
+
+****************************
+Checking centroid function
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {11.4667 + i 1}
+vector - {11.4667 + i 1, 3.1 + i 0}
+vector - {11.4667 + i 1, 3.1 + i 0, -1.06667 + i 0.333333}
+vector - {11.4667 + i 1, 3.1 + i 0, -1.06667 + i 0.333333, 13 + i 0}
+vector - {11.4667 + i 1, 3.1 + i 0, -1.06667 + i 0.333333, 13 + i 0, -10 + i 1}
+vector - {11.4667 + i 1, 3.1 + i 0, -1.06667 + i 0.333333, 13 + i 0, -10 + i 1, 13108.3 + i 0}
+
+****************************
+Check Normalisation Function
+2-D
+
+A - {7.4 + i 1, 2 + i 0}
+A - {0.958328 + i 0.129504, 0.259007 + i 0}
+mag = 1.000
+3-D
+
+B - {4 + i 2, 2.3 + i 0, 5.8 + i 0}
+B - {0.547462 + i 0.273731, 0.314791 + i 0, 0.79382 + i 0}
+mag = 1.000
+5-D
+
+C - {23 + i 0, 5 + i 0, -14 + i 0, 32 + i 0, -21 + i 1}
+C - {0.488765 + i 0, 0.106253 + i 0, -0.297509 + i 0, 0.680021 + i 0, -0.446264 + i 0.0212506}
+mag = 1.000
+
+****************************
+Check StGermain_ComplexVectorCrossProductMagnitude
+A - {1 + i 1, 2 + i 0, 3 + i 0}
+B - {4 + i 0, 5 + i 0, 6 + i 3}
+mag = 7.6 + -7.37 i (2D)
+mag = 22.4 + -18.6 i (3D)
+
+****************************
+Check StGermain_ComplexScalarTripleProduct 
+matrix[0] - {1 + i 1, 2 + i 0, 3 + i 2}
+matrix[1] - {4 + i 0, 5 + i 3, 6 + i 0}
+matrix[2] - {7 + i 1, 8 + i 0, 11 + i 1}
+scalar triple product: value = 14 - 32 i
+scalar triple product: value = 14 - 32 i
+scalar triple product: value = 14 - 32 i
+
+****************************
+Check Vector_ToComplexVector function 
+realVector - {1.000000, 2.000000, 3.000000}
+matrix[0] - {1 + i 0, 2 + i 0, 3 + i 0}
+
+****************************
+Check ComplexVector_ToVector function 
+matrix[0] - {5 + i 0, 6 + i 0, 7 + i 0}
+realVector - {5.000000, 6.000000, 7.000000}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexVectorMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexVectorMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testComplexVectorMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testComplexVectorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testComplexVectorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,531 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testVectorMath.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Stream* stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register( Info_Type, "ComplexVectorMath" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		CoordC	a, b, c;
+		CoordC	d = { {1.0, 1.0}, {1.0, 0.0}, {0.0, 1.0} };
+		CoordC	e = { {1.0, 0.0}, {2.0, 2.0}, {-3.0, -1.0} };
+		Cmplx value = {1.0, 1.0}; 
+		Cmplx c1 = {1.0, 0.0};
+		Cmplx c2 = {2.0, 1.0};
+		Cmplx c3 = {1.5, 1.0};
+		
+		Journal_Printf( stream,  "Basic tests:\n" );
+		Journal_Printf( stream, "d = \n");
+		Journal_PrintCmplx( stream, d[0]);
+		Journal_PrintCmplx( stream, d[1]);
+		Journal_PrintCmplx( stream, d[2]);
+		 
+		Journal_Printf( stream, "Set Complex Scalar\n");
+		ComplexVector_SetScalar( c1, c2, c3, d );
+		Journal_Printf( stream, "d = \n");
+		Journal_PrintCmplx( stream, d[0]);
+		Journal_PrintCmplx( stream, d[1]);
+		Journal_PrintCmplx( stream, d[2]);
+
+		Journal_Printf( stream, "Set c = d\n");
+		ComplexVector_Set( d, c );
+		Journal_Printf( stream, "c = \n");
+		Journal_PrintCmplx( stream, c[0]);
+		Journal_PrintCmplx( stream, c[1]);
+		Journal_PrintCmplx( stream, c[2]);
+
+		ComplexVector_Add(c, d, b );
+		Journal_Printf( stream,  "b = c + d \n");
+		Journal_Printf( stream, "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);
+
+		ComplexVector_Sub( b, d, a );
+		Journal_Printf( stream,  "a = b - d \n");
+		Journal_Printf( stream, "a = \n");
+		Journal_PrintCmplx( stream, a[0]);
+		Journal_PrintCmplx( stream, a[1]);
+		Journal_PrintCmplx( stream, a[2]);
+
+		ComplexVector_Cross( a, e, d );		
+		Journal_Printf( stream,  "d = a x e \n");
+		Journal_Printf( stream, "e = \n");
+		Journal_PrintCmplx( stream, e[0]);
+		Journal_PrintCmplx( stream, e[1]);
+		Journal_PrintCmplx( stream, e[2]);		
+		Journal_Printf( stream, "d = \n");
+		Journal_PrintCmplx( stream, d[0]);
+		Journal_PrintCmplx( stream, d[1]);
+		Journal_PrintCmplx( stream, d[2]);
+		
+		ComplexVector_Dot( a, e, value );
+		Journal_Printf( stream,  "value = a . e \n");
+		Journal_PrintCmplx( stream, value);
+		
+		value[REAL_PART] = 2.0;
+		value[IMAG_PART] = 1.0;
+		Journal_Printf( stream, "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);		
+		ComplexVector_Mult( b, value, b);
+		Journal_Printf( stream,  "b = (2 + i) * b \n");
+		Journal_Printf( stream, "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);
+		
+		ComplexVector_MultReal(b, 3.0, b);
+		Journal_Printf( stream,  "b = 3 * b \n");
+		Journal_Printf( stream, "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);	
+
+		b[0][REAL_PART] = 0.0; b[0][IMAG_PART] = 1.0; 
+		b[1][REAL_PART] = 1.0; b[1][IMAG_PART] = 1.0;
+		b[2][REAL_PART] = 0.0; b[2][IMAG_PART] = 1.0;
+		
+		Journal_Printf( stream,  "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);
+
+		Journal_Printf( stream,  "|b| = %g\n", ComplexVector_Mag(b));
+				
+		ComplexVector_Proj(a, b, d);
+		Journal_Printf( stream,  "d = proj a onto b \n");
+		Journal_Printf( stream, "d = \n");
+		Journal_PrintCmplx( stream, d[0]);
+		Journal_PrintCmplx( stream, d[1]);
+		Journal_PrintCmplx( stream, d[2]);			
+		
+		ComplexVector_Div(a, value, e);
+		Journal_Printf( stream,  "e = a / value \n");
+		Journal_PrintCmplx( stream, value);
+		Journal_Printf( stream, "e = \n");
+		Journal_PrintCmplx( stream, e[0]);
+		Journal_PrintCmplx( stream, e[1]);
+		Journal_PrintCmplx( stream, e[2]);
+
+		Journal_Printf( stream, "b = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);
+		ComplexVector_Norm( b, b );
+		Journal_Printf( stream,  "Norm(b) = \n");
+		Journal_PrintCmplx( stream, b[0]);
+		Journal_PrintCmplx( stream, b[1]);
+		Journal_PrintCmplx( stream, b[2]);
+	
+
+		Journal_Printf( stream,  "|b| = %g\n", ComplexVector_Mag(b));
+		
+		Journal_Printf( stream,  "a  = \n");
+		Journal_PrintCmplx( stream, a[0]);
+		Journal_PrintCmplx( stream, a[1]);
+		Journal_PrintCmplx( stream, a[2]);
+		
+		ComplexVector_Swizzle(a, K_AXIS, I_AXIS, J_AXIS, a);
+		Journal_Printf( stream,  "swizzle(a)(k, i, j) = \n");
+		Journal_PrintCmplx( stream, a[0]);
+		Journal_PrintCmplx( stream, a[1]);
+		Journal_PrintCmplx( stream, a[2]);
+		
+
+	}
+	if( rank == procToWatch ) {
+		#define STG_COMPLEXVECTOR_TOL 1e-16;
+		
+		Cmplx i[] = {{1.00000000, 0.000000000},{0.00000000, 0.000000000},{0.000000000, 0.00000000}};
+		Cmplx j[] = {{0.00000000, 0.00000000},{1.0000000, 0.00000000},{0.00000000, 0.0000000}};
+		Cmplx k[] = {{0.00000000, 0.000000000},{0.00000000, 0.000000000},{1.000000000, 0.000000000}};
+		Cmplx A[] = {{7.4, 1.0}, {  2, 0.0}, {  5, 1.0}, { 1, 0.0}, {  3, 2.0}, {  -42, 0.0}};
+		Cmplx B[] = {{  4, 2.0}, {2.3, 0.0}, {5.8, 0.0}, { 6, 0.0}, {-12, 0.0}, {39289, 0.0}};
+		Cmplx C[] = {{23, 0.0}, {  5, 0.0}, {-14, 0.0}, {32, 0.0}, {-21, 1.0}, {	78, 0.0}};
+		Cmplx D[] = {{23, 0.0}, {  5, 0.0}, {-14, 0.0}, {32, 0.0}, {-21, 0.0}, {   78, 0.0}};
+		double angle;
+		Cmplx **matrix;
+		Cmplx vector[6], differenceVector[6];
+		Cmplx *coordList[4];
+		int d;
+		double realVector[3], tolerance;
+		Cmplx dotProductResult;
+		Cmplx value;
+		
+		tolerance = STG_COMPLEXVECTOR_TOL;
+		
+		coordList[0] = A;
+		coordList[1] = B;
+		coordList[2] = C;
+		coordList[3] = D;
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf(stream, "Vectors - A, B, C, and D\n");
+		
+		StGermain_PrintNamedComplexVector( stream, A, 6 );
+		StGermain_PrintNamedComplexVector( stream, B, 6 );
+		StGermain_PrintNamedComplexVector( stream, C, 6 );
+		StGermain_PrintNamedComplexVector( stream, D, 6 );
+
+		/* Check Rotation functions */
+		Journal_Printf( stream, "\n****************************\n");
+
+		StGermain_PrintNamedComplexVector( stream, i, 3 );
+		StGermain_PrintNamedComplexVector( stream, j, 3 );
+		StGermain_PrintNamedComplexVector( stream, k, 3 );
+
+		
+		angle = M_PI / 2.0;
+	
+		
+		Journal_Printf(stream, "Axis Rotation\n");				
+		StGermain_RotateCoordinateAxisComplex( k, I_AXIS, angle, vector ) ;
+		Journal_Printf( stream, "K Rotated %g radians around I axis - \n", angle);
+		Cmplx_Subtract(vector[0], j[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], j[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], j[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, j, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, j, 3);
+		}
+		
+		Journal_Printf(stream, "Angle Rotation\n");		
+		StGermain_RotateComplexVector(k, angle,0.0, 0.0, vector);
+		Journal_Printf( stream, "K Rotated %g radians around I axis - \n", angle); 
+		Cmplx_Subtract(vector[0], j[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], j[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], j[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, j, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, j, 3);
+		}
+		
+		Journal_Printf(stream, "Axis Rotation\n");		
+		StGermain_RotateCoordinateAxisComplex( i, J_AXIS, angle, vector );
+		Journal_Printf( stream, "I Rotated %g radians around J axis - \n", angle); 
+		Cmplx_Subtract(vector[0], k[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], k[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], k[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, k, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, k, 3);
+		}
+
+		
+		Journal_Printf(stream, "Angle Rotation\n");
+		StGermain_RotateComplexVector(i, 0.0, angle, 0.0, vector );
+		Journal_Printf( stream, "I Rotated %g radians around J axis - \n", angle); 
+		Cmplx_Subtract(vector[0], k[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], k[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], k[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, k, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, k, 3);
+		}
+		
+		Journal_Printf(stream, "Axis Rotation\n");		
+		StGermain_RotateCoordinateAxisComplex( j, K_AXIS, angle, vector );
+		Journal_Printf( stream, "J Rotated %g radians around K axis - \n", angle); 
+		Cmplx_Subtract(vector[0], i[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], i[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], i[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, i, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, i, 3);
+		}
+
+		
+		Journal_Printf(stream, "Angle Rotation\n");
+		StGermain_RotateComplexVector( j, 0.0, 0.0, angle, vector );
+		Journal_Printf( stream, "J Rotated %g radians around K axis - \n", angle); 
+		Cmplx_Subtract(vector[0], i[0], differenceVector[0]);
+		Cmplx_Subtract(vector[1], i[1], differenceVector[1]);
+		Cmplx_Subtract(vector[2], i[2], differenceVector[2]);
+		
+		if ( (Cmplx_Modulus(differenceVector[0]) < tolerance) && 
+			 (Cmplx_Modulus(differenceVector[1]) < tolerance) &&
+			 (Cmplx_Modulus(differenceVector[2]) < tolerance) ) {
+			Journal_Printf( stream, "Answer within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, i, 3);
+		}
+		else {
+			Journal_Printf( stream, "Answer not within tolerance %g of expected result: ", tolerance);
+			StGermain_PrintNamedComplexVector( stream, i, 3);
+		}
+
+	
+		angle = M_PI / 4.0;
+
+		StGermain_RotateComplexVector(i, 0.0, angle, angle, vector );
+		Journal_Printf( stream, "I Rotated %g radians around J axis "
+		"and %2g radians around K axis: \n", angle, angle);
+		StGermain_PrintNamedComplexVector( stream, vector, 3 );
+
+		StGermain_RotateComplexVector(j, angle, 0.0, angle, vector );
+		Journal_Printf( stream, "J Rotated %g radians around I axis "
+		"and %g radians around K axis: \n", angle, angle); 
+		StGermain_PrintNamedComplexVector( stream, vector, 3 );
+
+		StGermain_RotateComplexVector(k, angle, angle, 0.0, vector );
+		Journal_Printf( stream, "K Rotated %g radians around I axis "
+		"and %g radians around J axis: \n", angle, angle); 
+		StGermain_PrintNamedComplexVector( stream, vector, 3 );
+
+
+		/* Check addition function */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "vector = A + B\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			StGermain_ComplexVectorAddition( vector, A, B, d );
+			StGermain_PrintNamedComplexVector( stream, vector, d );
+		}
+
+		/* Check subtraction function */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "vector = A - B\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			StGermain_ComplexVectorSubtraction( vector, A, B, d );
+			StGermain_PrintNamedComplexVector( stream, vector, d );
+		}
+	
+		/* Check Magnitude Function */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check Magnitude Function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			Journal_Printf( stream, "dim = %d magnitude A = %2.3f\n", d, StGermain_ComplexVectorMagnitude( A, d ) );
+			Journal_Printf( stream, "dim = %d magnitude B = %2.3f\n", d, StGermain_ComplexVectorMagnitude( B, d ) );
+		}
+
+		/* Check Dot Product */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check Dot Product Function\n");
+		Journal_Printf( stream, "value = A . B \n");
+		
+		for (d = 0; d <=6; d++) {
+		StGermain_ComplexVectorDotProduct(A, B, d, dotProductResult);			
+		Journal_Printf( stream, "dim = %d dot product = %2.3f + %2.3f i\n",
+			d, dotProductResult[0], dotProductResult[1] );
+		}
+		
+
+		/* Check Cross Product */
+		/* Tested against http://www.engplanet.com/redirect.html?3859 */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check Cross Product Function\n");
+		Journal_Printf( stream, " A x B in 3-D\n");
+		StGermain_ComplexVectorCrossProduct( vector, A, B );
+		StGermain_PrintNamedComplexVector( stream, vector, 3 );
+
+
+		/* Checking centroid function */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Checking centroid function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			StGermain_ComplexTriangleCentroid( vector, A, B, C, d );
+			StGermain_PrintNamedComplexVector( stream, vector, d );
+		}
+
+
+		/* Check Normalisation Function */
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check Normalisation Function\n");
+		
+		Journal_Printf( stream, "2-D\n\n");
+		d = 2;
+		StGermain_PrintNamedComplexVector( stream, A, d );
+		StGermain_ComplexVectorNormalise( A, d );
+		StGermain_PrintNamedComplexVector( stream, A, d);
+		Journal_Printf( stream, "mag = %2.3f\n", StGermain_ComplexVectorMagnitude( A, d ) );
+
+		Journal_Printf( stream, "3-D\n\n");
+		d = 3;
+		StGermain_PrintNamedComplexVector( stream, B, d );
+		StGermain_ComplexVectorNormalise( B, d );
+		StGermain_PrintNamedComplexVector( stream, B, d);
+		Journal_Printf( stream, "mag = %2.3f\n", StGermain_ComplexVectorMagnitude( B, d ) );
+
+		Journal_Printf( stream, "5-D\n\n");
+		d = 5;
+		StGermain_PrintNamedComplexVector( stream, C, d );
+		StGermain_ComplexVectorNormalise( C, d );
+		StGermain_PrintNamedComplexVector( stream, C, d);
+		Journal_Printf( stream, "mag = %2.3f\n", StGermain_ComplexVectorMagnitude( C, d ) );
+
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check StGermain_ComplexVectorCrossProductMagnitude\n");
+		A[0][REAL_PART] = 1.0; A[0][IMAG_PART] = 1.0; 
+		A[1][REAL_PART] = 2.0; A[1][IMAG_PART] = 0.0;
+		A[2][REAL_PART] = 3.0; A[2][IMAG_PART] = 0.0;
+		B[0][REAL_PART] = 4.0; B[0][IMAG_PART] = 0.0;
+		B[1][REAL_PART] = 5.0; B[1][IMAG_PART] = 0.0;
+		B[2][REAL_PART] = 6.0; B[2][IMAG_PART] = 3.0;
+		StGermain_PrintNamedComplexVector( stream, A, 3);
+		StGermain_PrintNamedComplexVector( stream, B, 3);
+		
+		StGermain_ComplexVectorCrossProductMagnitude(A, B, 2, value ) ;
+		Journal_Printf( stream, "mag = %2.3g + %2.3g i (2D)\n", value[REAL_PART], value[IMAG_PART] );
+		
+		StGermain_ComplexVectorCrossProductMagnitude(A, B, 3, value ) ;
+		Journal_Printf( stream, "mag = %2.3g + %2.3g i (3D)\n", value[REAL_PART], value[IMAG_PART] );
+
+
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check StGermain_ComplexScalarTripleProduct \n");
+		
+		matrix = Memory_Alloc_2DArray( Cmplx, 3, 3, "matrix" );
+		
+		matrix[0][0][REAL_PART] = 1.0; 	matrix[0][0][IMAG_PART] = 1.0;
+		matrix[0][1][REAL_PART] = 2.0; 	matrix[0][1][IMAG_PART] = 0.0; 
+		matrix[0][2][REAL_PART] = 3.0; 	matrix[0][2][IMAG_PART] = 2.0;
+		matrix[1][0][REAL_PART] = 4.0; 	matrix[1][0][IMAG_PART] = 0.0;
+		matrix[1][1][REAL_PART] = 5.0; 	matrix[1][1][IMAG_PART] = 3.0; 
+		matrix[1][2][REAL_PART] = 6.0; 	matrix[1][2][IMAG_PART] = 0.0;
+		matrix[2][0][REAL_PART] = 7.0; 	matrix[2][0][IMAG_PART] = 1.0;
+		matrix[2][1][REAL_PART] = 8.0; 	matrix[2][1][IMAG_PART] = 0.0;
+		matrix[2][2][REAL_PART] = 11.0; matrix[2][2][IMAG_PART] = 1.0;
+		StGermain_PrintNamedComplexVector( stream, matrix[0], 3);
+		StGermain_PrintNamedComplexVector( stream, matrix[1], 3);
+		StGermain_PrintNamedComplexVector( stream, matrix[2], 3);
+
+		StGermain_ComplexScalarTripleProduct( matrix[0], matrix[1], matrix[2], value );
+		Journal_Printf( stream, "scalar triple product: ");
+		Journal_PrintCmplx( stream, value );
+		
+		StGermain_ComplexScalarTripleProduct( matrix[2], matrix[0], matrix[1], value );
+		Journal_Printf( stream, "scalar triple product: ");
+		Journal_PrintCmplx( stream, value );
+		StGermain_ComplexScalarTripleProduct( matrix[1], matrix[2], matrix[0], value );
+		Journal_Printf( stream, "scalar triple product: ");
+		Journal_PrintCmplx( stream, value );
+		
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check Vector_ToComplexVector function \n");
+		
+		realVector[0] = 1.0; realVector[1] = 2.0; realVector[2] = 3.0;
+		
+		StGermain_PrintNamedVector(stream, realVector, 3);
+		Vector_ToComplexVector(realVector, 3, matrix[0]) ;
+		StGermain_PrintNamedComplexVector( stream, matrix[0], 3);
+
+		Journal_Printf( stream, "\n****************************\n");
+		Journal_Printf( stream, "Check ComplexVector_ToVector function \n");	
+		
+		matrix[0][0][REAL_PART] = 5.0; 	matrix[0][0][IMAG_PART] = 0.0;
+		matrix[0][1][REAL_PART] = 6.0; 	matrix[0][1][IMAG_PART] = 0.0; 
+		matrix[0][2][REAL_PART] = 7.0; 	matrix[0][2][IMAG_PART] = 0.0;
+		
+		StGermain_PrintNamedComplexVector( stream, matrix[0], 3);
+		ComplexVector_ToVector(matrix[0], 3, realVector) ;
+		StGermain_PrintNamedVector(stream, realVector, 3);
+
+		
+		Memory_Free( matrix );
+
+
+	}
+	
+	Journal_Printf( stream, "\n");
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDelaunay.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDelaunay.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+StGermain Framework revision 3470. Copyright (C) 2003-2005 VPAC.
+Testing triangulation of a regular mesh:
+Regular mesh triangulation test passed..
+
+Testing triangulation of irregular point-sets:
+Irregular point-set triangulation test passed..
+
+Testing triangulation of regular polygons:
+Regular polygon triangulation test passed..
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDelaunay.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDelaunay.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDelaunay small.txt" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDelaunay.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDelaunay.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,271 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testEdge.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+
+typedef enum pointsType_t{
+	Irregular,
+	Regular,
+	Polygon
+}pointsType;
+
+#define PI 3.1415926535897932384626
+
+void generatePoints( CoordF *sites, int numSites, pointsType *p )
+{
+	int num, i, j;
+	
+	assert( sites );
+
+	num = numSites;
+	
+	if( *p == Irregular ){
+		for( i=0; i<num; i++ ){
+			sites[i][0] = drand48();
+			sites[i][1] = drand48();
+		}
+	}
+	else if (*p == Regular){
+		int count = 0;
+		num = sqrt((float)num);
+		for( i=0; i<num; i++ ){
+			for( j=0; j<num; j++ ){
+				sites[count][0] = ((float)i)*(1/((float)num));
+				sites[count][1] = ((float)j)*(1/((float)num));
+
+				count++;
+			}
+		}
+	}
+	else if( *p == Polygon ){
+		for( i=0; i<num-1; i++ ){
+			sites[i][0] = cos( ((float)i)*2.0*PI/((float)(num-1)) );
+			sites[i][1] = sin( ((float)i)*2.0*PI/((float)(num-1)) );
+		}
+	}
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Delaunay *d = NULL;
+		DelaunayAttributes attr;
+		CoordF *sites;
+		int i = 0, j = 0;
+		pointsType p;
+		Dictionary *dictionary = Dictionary_New();
+		
+		attr.BuildBoundingTriangle = 0;
+		attr.BuildTriangleIndices = 1;
+		attr.BuildTriangleNeighbours = 1;
+		attr.CreateVoronoiVertices = 1;
+		attr.CalculateVoronoiSides = 1;
+		attr.CalculateVoronoiSurfaceArea = 1;
+		attr.FindNeighbours = 1;
+
+		/* Testing regular point-set */
+		printf( "Testing triangulation of a regular mesh:\n" );
+		{
+			int pass = 1, k = 0;
+			float sqroot = 0, area = 0;
+			
+			int array[10] = { 16, 25, 36, 49, 64, 81, 100, 121, 144, 269 };
+			
+			#define epsilon 0.001
+			
+			for( j=0; j<10; j++ ){
+			
+				i = array[j];
+				
+				p = Regular;
+
+				sites = Memory_Alloc_Array(  CoordF, i, "TestDelauney_CoordF_pointSet" );
+				memset( sites, 0, sizeof( CoordF ) * i );
+		
+				generatePoints( sites, i, &p );
+			
+				d = Delaunay_New( "Delaunay", dictionary, sites, i, 0, &attr );
+		
+				Stg_Component_Build( d, NULL, True );
+
+				sqroot = sqrt( (float)i );
+
+				area = (1.0f/sqroot) * (1.0f/sqroot);
+				
+				for( k=0; k<i; k++ ){
+					if( d->hull[k] ) continue;
+					
+					if( (k > 0) && (k< sqrt((float)k)) )
+						if( FABS( area - d->voronoiArea[k] ) > epsilon ) pass = 0;
+				}
+
+				Stg_Class_Delete( d );
+
+				Memory_Free( sites );
+			}
+
+			printf( "Regular mesh triangulation test %s\n\n", pass?"passed..":"failed..!" );
+			
+		}
+
+		
+		/* Testing irregular point-set */
+		printf( "Testing triangulation of irregular point-sets:\n" );
+		{
+			int pass = 1;
+			
+			for( i=10; i<210; i++ ){
+			
+				p = Irregular;
+				
+				sites = Memory_Alloc_Array( CoordF, i, "TestDelauney_CoordF_irregPointSet" );
+				memset( sites, 0, sizeof( CoordF ) * i );
+		
+				generatePoints( sites, i, &p );
+			
+				d = Delaunay_New( "Delaunay", dictionary, sites, i, 0, &attr );
+		
+				Stg_Component_Build( d, NULL, True );
+
+				if( d->numFaces !=  (d->numEdges - d->numSites+2) ){
+					pass = 0;
+				}
+
+				Stg_Class_Delete( d );
+
+				Memory_Free( sites );
+			}
+
+			printf( "Irregular point-set triangulation test %s\n\n", pass?"passed..":"failed..!" );
+			
+		}
+		
+		
+		/* Testing regular polygons with a single node at the centre. */
+		printf( "Testing triangulation of regular polygons:\n" );
+		{
+			float theta = 0.0, area = 0.0, a = 0.0;
+			float side = 0.0, voronoiArea = 0.0;
+			#define epsilon 0.001
+			int pass = 1;
+			
+			do{
+				FILE *f = NULL;
+				p = Polygon;
+				if( argc < 3 ){
+					printf( "Expects file name. Aborting..\n" );
+					exit(0);
+				}
+	
+				if( ( f = fopen(argv[2], "r+") ) == NULL ){
+					printf( "Failed to open %s. Aborting..\n", argv[1] );
+					exit(0);
+				}
+	
+				fscanf( f, "%d", &i );
+				/*printf( "reading %d points from %s..\n", i, argv[1] );*/
+			
+				theta = 2*PI/((float)(i-1));
+				
+				sites = Memory_Alloc_Array(CoordF, i, "TestDelauney_CoordF_regPolygon" );
+				memset( sites, 0, sizeof( CoordF ) * i );
+
+				j = 0;
+				while( fscanf( f, "%f %f", &(sites[j][0]), &(sites[j][1]) ) != EOF ){
+					j++;
+				}
+			
+				d = Delaunay_New( "Delaunay", dictionary, sites, i, 0, &attr );
+		
+				Stg_Component_Build( d, NULL, True );
+				
+				for( j=0; j<i; j++ ){
+					if( (sites[j][0] == 0.0) && (sites[j][1] == 0.0) ){
+						side = d->voronoiSides[j][0];
+						voronoiArea = d->voronoiArea[j];
+						break;
+					}
+				}
+				
+				a = ( (side/2.0f)/sin(theta/2.0f) );
+				area = (0.5 * a * a * sin( theta )) * ((float)(i-1));
+
+				if( FABS(area - voronoiArea) > epsilon ){
+					pass = 0;
+				}
+			
+				fclose( f );
+				Stg_Class_Delete( d );
+
+				Memory_Free( sites );
+			}while(0);
+
+			printf( "Regular polygon triangulation test %s\n", pass?"passed..":"failed..!" );
+		}
+		Stg_Class_Delete( dictionary );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDimensionMacros.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDimensionMacros.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,141 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
++++ 1D Tests +++
+
+(3,0,0) in mesh sized 8*0*0 -> index 3
+which maps back to (3,0,0)
+(0,3,0) in mesh sized 0*8*0 -> index 3
+which maps back to (0,3,0)
+(0,0,3) in mesh sized 0*0*8 -> index 3
+which maps back to (0,0,3)
+
++++ 2D Tests +++
+
+(3,4,0) in mesh sized 8*8*0 -> index 35
+which maps back to (3,4,0)
+(3,0,4) in mesh sized 8*0*8 -> index 35
+which maps back to (3,0,4)
+(0,3,4) in mesh sized 0*8*8 -> index 35
+which maps back to (0,3,4)
+
++++ 3D Tests +++
+
+(0,0,0) in mesh sized 3*4*5 -> index 0
+which maps back to (0,0,0)
+(1,0,0) in mesh sized 3*4*5 -> index 1
+which maps back to (1,0,0)
+(2,0,0) in mesh sized 3*4*5 -> index 2
+which maps back to (2,0,0)
+(0,1,0) in mesh sized 3*4*5 -> index 3
+which maps back to (0,1,0)
+(1,1,0) in mesh sized 3*4*5 -> index 4
+which maps back to (1,1,0)
+(2,1,0) in mesh sized 3*4*5 -> index 5
+which maps back to (2,1,0)
+(0,2,0) in mesh sized 3*4*5 -> index 6
+which maps back to (0,2,0)
+(1,2,0) in mesh sized 3*4*5 -> index 7
+which maps back to (1,2,0)
+(2,2,0) in mesh sized 3*4*5 -> index 8
+which maps back to (2,2,0)
+(0,3,0) in mesh sized 3*4*5 -> index 9
+which maps back to (0,3,0)
+(1,3,0) in mesh sized 3*4*5 -> index 10
+which maps back to (1,3,0)
+(2,3,0) in mesh sized 3*4*5 -> index 11
+which maps back to (2,3,0)
+(0,0,1) in mesh sized 3*4*5 -> index 12
+which maps back to (0,0,1)
+(1,0,1) in mesh sized 3*4*5 -> index 13
+which maps back to (1,0,1)
+(2,0,1) in mesh sized 3*4*5 -> index 14
+which maps back to (2,0,1)
+(0,1,1) in mesh sized 3*4*5 -> index 15
+which maps back to (0,1,1)
+(1,1,1) in mesh sized 3*4*5 -> index 16
+which maps back to (1,1,1)
+(2,1,1) in mesh sized 3*4*5 -> index 17
+which maps back to (2,1,1)
+(0,2,1) in mesh sized 3*4*5 -> index 18
+which maps back to (0,2,1)
+(1,2,1) in mesh sized 3*4*5 -> index 19
+which maps back to (1,2,1)
+(2,2,1) in mesh sized 3*4*5 -> index 20
+which maps back to (2,2,1)
+(0,3,1) in mesh sized 3*4*5 -> index 21
+which maps back to (0,3,1)
+(1,3,1) in mesh sized 3*4*5 -> index 22
+which maps back to (1,3,1)
+(2,3,1) in mesh sized 3*4*5 -> index 23
+which maps back to (2,3,1)
+(0,0,2) in mesh sized 3*4*5 -> index 24
+which maps back to (0,0,2)
+(1,0,2) in mesh sized 3*4*5 -> index 25
+which maps back to (1,0,2)
+(2,0,2) in mesh sized 3*4*5 -> index 26
+which maps back to (2,0,2)
+(0,1,2) in mesh sized 3*4*5 -> index 27
+which maps back to (0,1,2)
+(1,1,2) in mesh sized 3*4*5 -> index 28
+which maps back to (1,1,2)
+(2,1,2) in mesh sized 3*4*5 -> index 29
+which maps back to (2,1,2)
+(0,2,2) in mesh sized 3*4*5 -> index 30
+which maps back to (0,2,2)
+(1,2,2) in mesh sized 3*4*5 -> index 31
+which maps back to (1,2,2)
+(2,2,2) in mesh sized 3*4*5 -> index 32
+which maps back to (2,2,2)
+(0,3,2) in mesh sized 3*4*5 -> index 33
+which maps back to (0,3,2)
+(1,3,2) in mesh sized 3*4*5 -> index 34
+which maps back to (1,3,2)
+(2,3,2) in mesh sized 3*4*5 -> index 35
+which maps back to (2,3,2)
+(0,0,3) in mesh sized 3*4*5 -> index 36
+which maps back to (0,0,3)
+(1,0,3) in mesh sized 3*4*5 -> index 37
+which maps back to (1,0,3)
+(2,0,3) in mesh sized 3*4*5 -> index 38
+which maps back to (2,0,3)
+(0,1,3) in mesh sized 3*4*5 -> index 39
+which maps back to (0,1,3)
+(1,1,3) in mesh sized 3*4*5 -> index 40
+which maps back to (1,1,3)
+(2,1,3) in mesh sized 3*4*5 -> index 41
+which maps back to (2,1,3)
+(0,2,3) in mesh sized 3*4*5 -> index 42
+which maps back to (0,2,3)
+(1,2,3) in mesh sized 3*4*5 -> index 43
+which maps back to (1,2,3)
+(2,2,3) in mesh sized 3*4*5 -> index 44
+which maps back to (2,2,3)
+(0,3,3) in mesh sized 3*4*5 -> index 45
+which maps back to (0,3,3)
+(1,3,3) in mesh sized 3*4*5 -> index 46
+which maps back to (1,3,3)
+(2,3,3) in mesh sized 3*4*5 -> index 47
+which maps back to (2,3,3)
+(0,0,4) in mesh sized 3*4*5 -> index 48
+which maps back to (0,0,4)
+(1,0,4) in mesh sized 3*4*5 -> index 49
+which maps back to (1,0,4)
+(2,0,4) in mesh sized 3*4*5 -> index 50
+which maps back to (2,0,4)
+(0,1,4) in mesh sized 3*4*5 -> index 51
+which maps back to (0,1,4)
+(1,1,4) in mesh sized 3*4*5 -> index 52
+which maps back to (1,1,4)
+(2,1,4) in mesh sized 3*4*5 -> index 53
+which maps back to (2,1,4)
+(0,2,4) in mesh sized 3*4*5 -> index 54
+which maps back to (0,2,4)
+(1,2,4) in mesh sized 3*4*5 -> index 55
+which maps back to (1,2,4)
+(2,2,4) in mesh sized 3*4*5 -> index 56
+which maps back to (2,2,4)
+(0,3,4) in mesh sized 3*4*5 -> index 57
+which maps back to (0,3,4)
+(1,3,4) in mesh sized 3*4*5 -> index 58
+which maps back to (1,3,4)
+(2,3,4) in mesh sized 3*4*5 -> index 59
+which maps back to (2,3,4)
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDimensionMacros.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDimensionMacros.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDimensionMacros " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testDimensionMacros.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testDimensionMacros.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDimensionMacros.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+void testDimensionMacros_DoOneTest( IJK coord, IJK meshSize );
+
+int main( int argc, char* argv[] ) {
+	IJK coord;
+	IJK meshSize;
+	Index i, j, k;
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	printf( "+++ 1D Tests +++\n\n" );
+	coord[I_AXIS] = 3; coord[J_AXIS] = 0; coord[K_AXIS] = 0;
+	meshSize[I_AXIS] = 8; meshSize[J_AXIS] = 0; meshSize[K_AXIS] = 0;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+	
+	coord[I_AXIS] = 0; coord[J_AXIS] = 3; coord[K_AXIS] = 0;
+	meshSize[I_AXIS] = 0; meshSize[J_AXIS] = 8; meshSize[K_AXIS] = 0;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+	
+	coord[I_AXIS] = 0; coord[J_AXIS] = 0; coord[K_AXIS] = 3;
+	meshSize[I_AXIS] = 0; meshSize[J_AXIS] = 0; meshSize[K_AXIS] = 8;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+
+	printf( "\n+++ 2D Tests +++\n\n" );
+	coord[I_AXIS] = 3; coord[J_AXIS] = 4; coord[K_AXIS] = 0;
+	meshSize[I_AXIS] = 8; meshSize[J_AXIS] = 8; meshSize[K_AXIS] = 0;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+	
+	coord[I_AXIS] = 3; coord[J_AXIS] = 0; coord[K_AXIS] = 4;
+	meshSize[I_AXIS] = 8; meshSize[J_AXIS] = 0; meshSize[K_AXIS] = 8;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+	
+	coord[I_AXIS] = 0; coord[J_AXIS] = 3; coord[K_AXIS] = 4;
+	meshSize[I_AXIS] = 0; meshSize[J_AXIS] = 8; meshSize[K_AXIS] = 8;
+	testDimensionMacros_DoOneTest( coord, meshSize );
+	
+	printf( "\n+++ 3D Tests +++\n\n" );
+	meshSize[I_AXIS] = 3; meshSize[J_AXIS] = 4; meshSize[K_AXIS] = 5;
+	for ( k=0; k < meshSize[K_AXIS]; k++ ) {
+		for ( j=0; j < meshSize[J_AXIS]; j++ ) {
+			for ( i=0; i < meshSize[I_AXIS]; i++ ) {
+				coord[I_AXIS] = i; coord[J_AXIS] = j; coord[K_AXIS] = k;
+				testDimensionMacros_DoOneTest( coord, meshSize );
+			}
+		}
+	}	
+	
+	StgDomainGeometry_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}
+
+void testDimensionMacros_DoOneTest( IJK coord, IJK meshSize ) {
+	IJK newCoord;
+	Index element_I;
+	
+	printf( "(%d,%d,%d) in mesh sized %d*%d*%d -> ",
+		coord[0], coord[1], coord[2],
+		meshSize[0], meshSize[1], meshSize[2] );
+	
+	Dimension_3DTo1D( coord, meshSize, &element_I );
+	printf( "index %d\n", element_I );
+	Dimension_1DTo3D( element_I, meshSize, newCoord );
+	printf( "which maps back to (%d,%d,%d)\n", 
+		newCoord[0], newCoord[1], newCoord[2] );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testEdge.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testEdge.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,202 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Edge: 0, points: { 0, 1 }, faces: { 0, 100 }
+Edge: 1, points: { 1, 2 }, faces: { 0, 1 }
+Edge: 2, points: { 2, 0 }, faces: { 0, 100 }
+Edge: 3, points: { 1, 3 }, faces: { 1, 100 }
+Edge: 4, points: { 3, 2 }, faces: { 1, 2 }
+Edge: 5, points: { 3, 4 }, faces: { 2, 3 }
+Edge: 6, points: { 4, 2 }, faces: { 2, 100 }
+Edge: 7, points: { 3, 5 }, faces: { 3, 100 }
+Edge: 8, points: { 5, 4 }, faces: { 3, 4 }
+Edge: 9, points: { 5, 6 }, faces: { 4, 5 }
+Edge: 10, points: { 6, 4 }, faces: { 4, 100 }
+Edge: 11, points: { 5, 7 }, faces: { 5, 100 }
+Edge: 12, points: { 7, 6 }, faces: { 5, 6 }
+Edge: 13, points: { 7, 8 }, faces: { 6, 7 }
+Edge: 14, points: { 8, 6 }, faces: { 6, 100 }
+Edge: 15, points: { 7, 9 }, faces: { 7, 100 }
+Edge: 16, points: { 9, 8 }, faces: { 7, 8 }
+Edge: 17, points: { 9, 10 }, faces: { 8, 9 }
+Edge: 18, points: { 10, 8 }, faces: { 8, 100 }
+Edge: 19, points: { 9, 11 }, faces: { 9, 100 }
+Edge: 20, points: { 11, 10 }, faces: { 9, 10 }
+Edge: 21, points: { 11, 12 }, faces: { 10, 11 }
+Edge: 22, points: { 12, 10 }, faces: { 10, 100 }
+Edge: 23, points: { 11, 13 }, faces: { 11, 100 }
+Edge: 24, points: { 13, 12 }, faces: { 11, 12 }
+Edge: 25, points: { 13, 14 }, faces: { 12, 13 }
+Edge: 26, points: { 14, 12 }, faces: { 12, 100 }
+Edge: 27, points: { 13, 15 }, faces: { 13, 100 }
+Edge: 28, points: { 15, 14 }, faces: { 13, 14 }
+Edge: 29, points: { 15, 16 }, faces: { 14, 15 }
+Edge: 30, points: { 16, 14 }, faces: { 14, 100 }
+Edge: 31, points: { 15, 17 }, faces: { 15, 100 }
+Edge: 32, points: { 17, 16 }, faces: { 15, 16 }
+Edge: 33, points: { 17, 18 }, faces: { 16, 17 }
+Edge: 34, points: { 18, 16 }, faces: { 16, 100 }
+Edge: 35, points: { 17, 19 }, faces: { 17, 100 }
+Edge: 36, points: { 19, 18 }, faces: { 17, 18 }
+Edge: 37, points: { 19, 20 }, faces: { 18, 19 }
+Edge: 38, points: { 20, 18 }, faces: { 18, 100 }
+Edge: 39, points: { 19, 21 }, faces: { 19, 100 }
+Edge: 40, points: { 21, 20 }, faces: { 19, 20 }
+Edge: 41, points: { 21, 22 }, faces: { 20, 21 }
+Edge: 42, points: { 22, 20 }, faces: { 20, 100 }
+Edge: 43, points: { 21, 23 }, faces: { 21, 100 }
+Edge: 44, points: { 23, 22 }, faces: { 21, 22 }
+Edge: 45, points: { 23, 24 }, faces: { 22, 23 }
+Edge: 46, points: { 24, 22 }, faces: { 22, 100 }
+Edge: 47, points: { 23, 25 }, faces: { 23, 100 }
+Edge: 48, points: { 25, 24 }, faces: { 23, 24 }
+Edge: 49, points: { 25, 26 }, faces: { 24, 25 }
+Edge: 50, points: { 26, 24 }, faces: { 24, 100 }
+Edge: 51, points: { 25, 27 }, faces: { 25, 100 }
+Edge: 52, points: { 27, 26 }, faces: { 25, 26 }
+Edge: 53, points: { 27, 28 }, faces: { 26, 27 }
+Edge: 54, points: { 28, 26 }, faces: { 26, 100 }
+Edge: 55, points: { 27, 29 }, faces: { 27, 100 }
+Edge: 56, points: { 29, 28 }, faces: { 27, 28 }
+Edge: 57, points: { 29, 30 }, faces: { 28, 29 }
+Edge: 58, points: { 30, 28 }, faces: { 28, 100 }
+Edge: 59, points: { 29, 31 }, faces: { 29, 100 }
+Edge: 60, points: { 31, 30 }, faces: { 29, 30 }
+Edge: 61, points: { 31, 32 }, faces: { 30, 31 }
+Edge: 62, points: { 32, 30 }, faces: { 30, 100 }
+Edge: 63, points: { 31, 33 }, faces: { 31, 100 }
+Edge: 64, points: { 33, 32 }, faces: { 31, 32 }
+Edge: 65, points: { 33, 34 }, faces: { 32, 33 }
+Edge: 66, points: { 34, 32 }, faces: { 32, 100 }
+Edge: 67, points: { 33, 35 }, faces: { 33, 100 }
+Edge: 68, points: { 35, 34 }, faces: { 33, 34 }
+Edge: 69, points: { 35, 36 }, faces: { 34, 35 }
+Edge: 70, points: { 36, 34 }, faces: { 34, 100 }
+Edge: 71, points: { 35, 37 }, faces: { 35, 100 }
+Edge: 72, points: { 37, 36 }, faces: { 35, 36 }
+Edge: 73, points: { 37, 38 }, faces: { 36, 37 }
+Edge: 74, points: { 38, 36 }, faces: { 36, 100 }
+Edge: 75, points: { 37, 39 }, faces: { 37, 100 }
+Edge: 76, points: { 39, 38 }, faces: { 37, 38 }
+Edge: 77, points: { 39, 40 }, faces: { 38, 39 }
+Edge: 78, points: { 40, 38 }, faces: { 38, 100 }
+Edge: 79, points: { 39, 41 }, faces: { 39, 100 }
+Edge: 80, points: { 41, 40 }, faces: { 39, 40 }
+Edge: 81, points: { 41, 42 }, faces: { 40, 41 }
+Edge: 82, points: { 42, 40 }, faces: { 40, 100 }
+Edge: 83, points: { 41, 43 }, faces: { 41, 100 }
+Edge: 84, points: { 43, 42 }, faces: { 41, 42 }
+Edge: 85, points: { 43, 44 }, faces: { 42, 43 }
+Edge: 86, points: { 44, 42 }, faces: { 42, 100 }
+Edge: 87, points: { 43, 45 }, faces: { 43, 100 }
+Edge: 88, points: { 45, 44 }, faces: { 43, 44 }
+Edge: 89, points: { 45, 46 }, faces: { 44, 45 }
+Edge: 90, points: { 46, 44 }, faces: { 44, 100 }
+Edge: 91, points: { 45, 47 }, faces: { 45, 100 }
+Edge: 92, points: { 47, 46 }, faces: { 45, 46 }
+Edge: 93, points: { 47, 48 }, faces: { 46, 47 }
+Edge: 94, points: { 48, 46 }, faces: { 46, 100 }
+Edge: 95, points: { 47, 49 }, faces: { 47, 100 }
+Edge: 96, points: { 49, 48 }, faces: { 47, 48 }
+Edge: 97, points: { 49, 50 }, faces: { 48, 49 }
+Edge: 98, points: { 50, 48 }, faces: { 48, 100 }
+Edge: 99, points: { 49, 51 }, faces: { 49, 100 }
+Edge: 100, points: { 51, 50 }, faces: { 49, 50 }
+Edge: 101, points: { 51, 52 }, faces: { 50, 51 }
+Edge: 102, points: { 52, 50 }, faces: { 50, 100 }
+Edge: 103, points: { 51, 53 }, faces: { 51, 100 }
+Edge: 104, points: { 53, 52 }, faces: { 51, 52 }
+Edge: 105, points: { 53, 54 }, faces: { 52, 53 }
+Edge: 106, points: { 54, 52 }, faces: { 52, 100 }
+Edge: 107, points: { 53, 55 }, faces: { 53, 100 }
+Edge: 108, points: { 55, 54 }, faces: { 53, 54 }
+Edge: 109, points: { 55, 56 }, faces: { 54, 55 }
+Edge: 110, points: { 56, 54 }, faces: { 54, 100 }
+Edge: 111, points: { 55, 57 }, faces: { 55, 100 }
+Edge: 112, points: { 57, 56 }, faces: { 55, 56 }
+Edge: 113, points: { 57, 58 }, faces: { 56, 57 }
+Edge: 114, points: { 58, 56 }, faces: { 56, 100 }
+Edge: 115, points: { 57, 59 }, faces: { 57, 100 }
+Edge: 116, points: { 59, 58 }, faces: { 57, 58 }
+Edge: 117, points: { 59, 60 }, faces: { 58, 59 }
+Edge: 118, points: { 60, 58 }, faces: { 58, 100 }
+Edge: 119, points: { 59, 61 }, faces: { 59, 100 }
+Edge: 120, points: { 61, 60 }, faces: { 59, 60 }
+Edge: 121, points: { 61, 62 }, faces: { 60, 61 }
+Edge: 122, points: { 62, 60 }, faces: { 60, 100 }
+Edge: 123, points: { 61, 63 }, faces: { 61, 100 }
+Edge: 124, points: { 63, 62 }, faces: { 61, 62 }
+Edge: 125, points: { 63, 64 }, faces: { 62, 63 }
+Edge: 126, points: { 64, 62 }, faces: { 62, 100 }
+Edge: 127, points: { 63, 65 }, faces: { 63, 100 }
+Edge: 128, points: { 65, 64 }, faces: { 63, 64 }
+Edge: 129, points: { 65, 66 }, faces: { 64, 65 }
+Edge: 130, points: { 66, 64 }, faces: { 64, 100 }
+Edge: 131, points: { 65, 67 }, faces: { 65, 100 }
+Edge: 132, points: { 67, 66 }, faces: { 65, 66 }
+Edge: 133, points: { 67, 68 }, faces: { 66, 67 }
+Edge: 134, points: { 68, 66 }, faces: { 66, 100 }
+Edge: 135, points: { 67, 69 }, faces: { 67, 100 }
+Edge: 136, points: { 69, 68 }, faces: { 67, 68 }
+Edge: 137, points: { 69, 70 }, faces: { 68, 69 }
+Edge: 138, points: { 70, 68 }, faces: { 68, 100 }
+Edge: 139, points: { 69, 71 }, faces: { 69, 100 }
+Edge: 140, points: { 71, 70 }, faces: { 69, 70 }
+Edge: 141, points: { 71, 72 }, faces: { 70, 71 }
+Edge: 142, points: { 72, 70 }, faces: { 70, 100 }
+Edge: 143, points: { 71, 73 }, faces: { 71, 100 }
+Edge: 144, points: { 73, 72 }, faces: { 71, 72 }
+Edge: 145, points: { 73, 74 }, faces: { 72, 73 }
+Edge: 146, points: { 74, 72 }, faces: { 72, 100 }
+Edge: 147, points: { 73, 75 }, faces: { 73, 100 }
+Edge: 148, points: { 75, 74 }, faces: { 73, 74 }
+Edge: 149, points: { 75, 76 }, faces: { 74, 75 }
+Edge: 150, points: { 76, 74 }, faces: { 74, 100 }
+Edge: 151, points: { 75, 77 }, faces: { 75, 100 }
+Edge: 152, points: { 77, 76 }, faces: { 75, 76 }
+Edge: 153, points: { 77, 78 }, faces: { 76, 77 }
+Edge: 154, points: { 78, 76 }, faces: { 76, 100 }
+Edge: 155, points: { 77, 79 }, faces: { 77, 100 }
+Edge: 156, points: { 79, 78 }, faces: { 77, 78 }
+Edge: 157, points: { 79, 80 }, faces: { 78, 79 }
+Edge: 158, points: { 80, 78 }, faces: { 78, 100 }
+Edge: 159, points: { 79, 81 }, faces: { 79, 100 }
+Edge: 160, points: { 81, 80 }, faces: { 79, 80 }
+Edge: 161, points: { 81, 82 }, faces: { 80, 81 }
+Edge: 162, points: { 82, 80 }, faces: { 80, 100 }
+Edge: 163, points: { 81, 83 }, faces: { 81, 100 }
+Edge: 164, points: { 83, 82 }, faces: { 81, 82 }
+Edge: 165, points: { 83, 84 }, faces: { 82, 83 }
+Edge: 166, points: { 84, 82 }, faces: { 82, 100 }
+Edge: 167, points: { 83, 85 }, faces: { 83, 100 }
+Edge: 168, points: { 85, 84 }, faces: { 83, 84 }
+Edge: 169, points: { 85, 86 }, faces: { 84, 85 }
+Edge: 170, points: { 86, 84 }, faces: { 84, 100 }
+Edge: 171, points: { 85, 87 }, faces: { 85, 100 }
+Edge: 172, points: { 87, 86 }, faces: { 85, 86 }
+Edge: 173, points: { 87, 88 }, faces: { 86, 87 }
+Edge: 174, points: { 88, 86 }, faces: { 86, 100 }
+Edge: 175, points: { 87, 89 }, faces: { 87, 100 }
+Edge: 176, points: { 89, 88 }, faces: { 87, 88 }
+Edge: 177, points: { 89, 90 }, faces: { 88, 89 }
+Edge: 178, points: { 90, 88 }, faces: { 88, 100 }
+Edge: 179, points: { 89, 91 }, faces: { 89, 100 }
+Edge: 180, points: { 91, 90 }, faces: { 89, 90 }
+Edge: 181, points: { 91, 92 }, faces: { 90, 91 }
+Edge: 182, points: { 92, 90 }, faces: { 90, 100 }
+Edge: 183, points: { 91, 93 }, faces: { 91, 100 }
+Edge: 184, points: { 93, 92 }, faces: { 91, 92 }
+Edge: 185, points: { 93, 94 }, faces: { 92, 93 }
+Edge: 186, points: { 94, 92 }, faces: { 92, 100 }
+Edge: 187, points: { 93, 95 }, faces: { 93, 100 }
+Edge: 188, points: { 95, 94 }, faces: { 93, 94 }
+Edge: 189, points: { 95, 96 }, faces: { 94, 95 }
+Edge: 190, points: { 96, 94 }, faces: { 94, 100 }
+Edge: 191, points: { 95, 97 }, faces: { 95, 100 }
+Edge: 192, points: { 97, 96 }, faces: { 95, 96 }
+Edge: 193, points: { 97, 98 }, faces: { 96, 97 }
+Edge: 194, points: { 98, 96 }, faces: { 96, 100 }
+Edge: 195, points: { 97, 99 }, faces: { 97, 100 }
+Edge: 196, points: { 99, 98 }, faces: { 97, 98 }
+Edge: 197, points: { 99, 100 }, faces: { 98, 99 }
+Edge: 198, points: { 100, 98 }, faces: { 98, 100 }
+Edge: 199, points: { 99, 101 }, faces: { 99, 100 }
+Edge: 200, points: { 101, 100 }, faces: { 99, 100 }
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testEdge.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testEdge.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testEdge " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testEdge.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testEdge.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,100 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testEdge.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Triangle	tri[100];
+		Triangle_Index	triCount = 100;
+		Edge_Index	edgeCount;
+		Edge_List	edge;
+		EdgeFaces_List	edgeFace;
+		Triangle_Index	tri_I;
+		Edge_Index	edge_I;
+
+		tri[0][0] = 0;
+		tri[0][1] = 1;
+		tri[0][2] = 2;
+		for( tri_I = 1; tri_I < triCount; tri_I++ )
+		{
+			tri[tri_I][0] = tri[tri_I - 1][0] + 1;
+			tri[tri_I][1] = tri[tri_I - 1][2] + 1;
+			tri[tri_I][2] = tri[tri_I - 1][1] + 1;
+		}
+
+		edgeCount = Edge_BuildList_FromTriangles( tri, triCount, &edge, &edgeFace );
+
+		for( edge_I = 0; edge_I < edgeCount; edge_I++ )
+		{
+			printf( "Edge: %u, points: { %u, %u }, ", edge_I, edge[edge_I][0], edge[edge_I][1] );
+			printf( "faces: { %u, %u }\n", edgeFace[edge_I][0], edgeFace[edge_I][1] );
+		}
+
+		if( edge ) Memory_Free( edge );
+		if( edgeFace ) Memory_Free( edgeFace );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,261 @@
+
+/*******************    Test Eigenvector 1   ************************/
+Symmetric 2D Case from Kresig, p. 371f
+
+Matrix to solve for eigenvectors is:
+tensorArray - 
+     -5           2     
+      2          -2     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -1 + 0 i
+eigenvectorListCompare[1].eigenvalue = -6 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.447214 + i 0, -0.894427 + i 0}
+eigenvectorListCompare[1].vector - {-0.894427 + i 0, 0.447214 + i 0}
+
+/*******************    Test Eigenvector 2   ************************/
+Symmetric 3D Case - tested against:
+http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm - 3/11/04.
+Matrix to solve for eigenvectors is:
+tensorArray - 
+      2           7          11     
+      7           3          13     
+     11          13           5     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -4.4597 + 0 i
+eigenvectorListCompare[1].eigenvalue = -9.9685 + 0 i
+eigenvectorListCompare[2].eigenvalue = 24.428 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.786471 + i 0, 0.61348 + i 0, 0.0714557 + i 0}
+eigenvectorListCompare[1].vector - {-0.364102 + i 0, -0.553977 + i 0, 0.748692 + i 0}
+eigenvectorListCompare[2].vector - {-0.498892 + i 0, -0.562807 + i 0, -0.659056 + i 0}
+
+/*******************    Test Eigenvector 3   ************************/
+Non-Symmetric test for 2-D
+
+tensorArray - 
+      4           4     
+      3           5     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 0 i
+eigenvectorListCompare[1].eigenvalue = 8 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.8 + i 0, 0.6 + i 0}
+eigenvectorListCompare[1].vector - {-0.707107 + i 0, -0.707107 + i 0}
+
+
+/*******************    Test Eigenvector 4   ************************/
+Non-Symmetric Test for 3-D
+
+tensorArray - 
+      4           0           3     
+      0           5           0     
+      2           5           6     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 2.3542 + 0 i
+eigenvectorListCompare[1].eigenvalue = 5 + 0 i
+eigenvectorListCompare[2].eigenvalue = 7.6458 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.87674 + i 0, 0 + i 0, 0.480965 + i 0}
+eigenvectorListCompare[1].vector - {-0.867472 + i 0, 0.40482 + i 0, -0.289157 + i 0}
+eigenvectorListCompare[2].vector - {-0.635406 + i 0, 0 + i 0, -0.772178 + i 0}
+
+
+/*******************    Test Eigenvector 5   ************************/
+Non-Symmetric test with zero entries for 2-D
+
+tensorArray - 
+      4           0     
+      1           5     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 4 + 0 i
+eigenvectorListCompare[1].eigenvalue = 5 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.707107 + i 0, -0.707107 + i 0}
+eigenvectorListCompare[1].vector - {0 + i 0, 1 + i 0}
+
+
+/*******************    Test Eigenvector 6   ************************/
+Non-Symmetric test with complex eigenvalues for 2-D
+
+Tested against Soluions in:
+Elementary Differential Equations and Boundary Value Problems, 6th Ed
+By William E. Boyce and Richard C. DiPrima
+Problem: ch 7.3, question 16
+
+tensorArray - 
+      3          -2     
+      4          -1     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 2 i
+eigenvectorListCompare[1].eigenvalue = 1 - 2 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.408248 + i 0.408248, 0.816497 + i 0}
+eigenvectorListCompare[1].vector - {0.408248 + i -0.408248, 0.816497 + i 0}
+
+/*******************    Test Eigenvector 7   ************************/
+Non-Symmetric test with complex eigenvalues for 3-D
+Tested against Soluions in:
+Elementary Differential Equations and Boundary Value Problems, 6th Ed
+By William E. Boyce and Richard C. DiPrima
+Problem: ch 7.3, question 21
+
+tensorArray - 
+      1           0           0     
+      2           1          -2     
+      3           2           1     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 0 i
+eigenvectorListCompare[1].eigenvalue = 1 + 2 i
+eigenvectorListCompare[2].eigenvalue = 1 - 2 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.485071 + i 0, -0.727607 + i 0, 0.485071 + i 0}
+eigenvectorListCompare[1].vector - {0 + i 0, 0.707107 + i 0, 0 + i -0.707107}
+eigenvectorListCompare[2].vector - {0 + i 0, 0.707107 + i 0, 0 + i 0.707107}
+
+
+/*******************    Eigenvector Test  8  ************************/
+Test Calc eigenvectors function with repeated roots
+
+Tested against Solutions in:
+Elementary Differential Equations and Boundary Value Problems, 6th Ed
+By William E. Boyce and Richard C. DiPrima
+Problem: ch 7.3, question 24
+
+tensorArray - 
+      3           2           4     
+      2           0           2     
+      4           2           3     
+
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -1 + 0 i
+eigenvectorListCompare[1].eigenvalue = -1 + 0 i
+eigenvectorListCompare[2].eigenvalue = 8 + 0 i
+
+Non-repeated Eigenvector within tolerance, 1e-06,
+And Repeated Eigenvectors follow pattern:
+2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, 1e-06 of:
+One set of correct eigenvectors: 
+eigenvectorListCompare[0].vector - {0 + i 0, -0.894427 + i 0, 0.447214 + i 0}
+eigenvectorListCompare[1].vector - {-0.719905 + i 0, 0.519697 + i 0, 0.460056 + i 0}
+eigenvectorListCompare[2].vector - {0.666667 + i 0, 0.333333 + i 0, 0.666667 + i 0}
+
+For repeated eigenvalues with non-degenerate eigenvectors, 
+eigenvectors have to be in same plane as solution vectors 
+rather than exactly the same, as eigenvectors can be arbitrarily set
+based on the specific tensor array equation.
+For this problem, solution for repeated eigenvectors collapses to:
+2 * x_1 + x_2 + 2 * x_3 = 0
+Eigenvectors are then set based on what x_1, x_2 and x_3 are set to equal.
+
+/*******************    Test  10  ************************/
+Test print ComplexTensorArray function
+
+2-D
+complexTensorArray - 
+      4 +       0 i      4 +       1 i
+      3 +    0.33 i      5 +     100 i
+3-D
+complexTensorArray - 
+      1 +     0.5 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       1 i      6 +       2 i
+      7 +       0 i      8 +       0 i      9 +      30 i
+
+/*******************    Test  11  ************************/
+Test print ComplexMatrix function
+
+2-D
+complexMatrix - 
+      1 +       0 i      2 +       1 i
+      3 +    0.33 i      5 +     100 i
+3-D
+complexMatrix - 
+      1 +       0 i      2 +       1 i      4 +       1 i
+      3 +    0.33 i      5 +     100 i      5 +    10.5 i
+     30 +    0.33 i    0.5 +     100 i    5.5 +    10.5 i
+
+/*******************    Test  12  ************************/
+Test TensorArray to ComplexTensorArray conversion function
+
+2-D conversion
+tensorArray - 
+      1           3     
+      4           5     
+complexTensorArray - 
+      1 +       0 i      3 +       0 i
+      4 +       0 i      5 +       0 i
+3-D conversion
+tensorArray - 
+      1           3           4     
+      5           7           8     
+      9          11          12     
+complexTensorArray - 
+      1 +       0 i      3 +       0 i      4 +       0 i
+      5 +       0 i      7 +       0 i      8 +       0 i
+      9 +       0 i     11 +       0 i     12 +       0 i
+
+/*******************    Test  13  ************************/
+Test ComplexTensorArray to ComplexMatrix conversion function
+
+2-D conversion
+complexTensorArray - 
+      1 +     0.5 i      2 +       0 i
+      3 +       0 i      4 +       0 i
+complexMatrix - 
+      1 +     0.5 i      2 +       0 i
+      3 +       0 i      4 +       0 i
+3-D conversion
+complexTensorArray - 
+      1 +     0.5 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       1 i      6 +       2 i
+      7 +       0 i      8 +       0 i      9 +      30 i
+complexMatrix - 
+      1 +     0.5 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       1 i      6 +       2 i
+      7 +       0 i      8 +       0 i      9 +      30 i
+
+/*******************    Test  14  ************************/
+Test ComplexTensorArray to TensorArray conversion function
+
+2-D conversion
+complexTensorArray - 
+      1 +       0 i      2 +       0 i
+      3 +       0 i      4 +       0 i
+tensorArray - 
+      1           2     
+      3           4     
+3-D conversion
+complexTensorArray - 
+      1 +       0 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       0 i      6 +       0 i
+      7 +       0 i     88 +       0 i    9.5 +       0 i
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7          88         9.5     
+Failing conversion
+complexTensorArray - 
+      1 +       1 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       0 i      6 +       0 i
+      7 +       0 i     88 +       0 i    9.5 +       0 i
+Cannot convert to real matrix:
+Indicee 0 in complexTensorArray is complex value.
+complexTensorArray - 
+      1 +       1 i      2 +       0 i      3 +       0 i
+      4 +       0 i      5 +       0 i      6 +       0 i
+      7 +       0 i     88 +       0 i    9.5 +       0 i
+In func 'ComplexTensorArray_ToTensorArray'. Cannot convert ComplexTensor to Real Tensor 
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testFullTensorMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testFullTensorMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1 @@
+StGermain Framework revision 3651. Copyright (C) 2003-2005 VPAC.
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testFullTensorMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testFullTensorMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testFullTensorMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testFullTensorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testFullTensorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,920 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testTensorMath.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Stream*  stream = Journal_Register( InfoStream_Type, "FullTensorMath" );
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	stJournal->firewallProducesAssert = False;
+	Stream_RedirectFile(Journal_Register( Error_Type, "FullTensorMath"), "FullTensorMath.txt");
+	Stream_RedirectFile(stream, "FullTensorMath.txt");
+	
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		double **tensor = Memory_Alloc_2DArray( double, 5, 5, "Tensor" );
+		TensorArray     tensorArray;
+		ComplexTensorArray complexTensorArray;
+		ComplexEigenvector eigenvectorList[3], eigenvectorListCompare[3], eigenvectorListDiffs[3];
+		Cmplx **complexMatrix;
+		double errorTolerance;
+		Cmplx dummy1, dummy2, dummy3;
+		int eigenCount;
+		#define STG_FULLTENSORTEST_ERROR 1.0e-6;
+		
+		errorTolerance = STG_FULLTENSORTEST_ERROR;
+		complexMatrix = Memory_Alloc_2DArray(Cmplx, 3, 3, "complexMatrix" );
+		
+		tensor[0][0] = 3;  tensor[0][1] = 21;   tensor[0][2] = -1; tensor[0][3] = -99; tensor[0][4] = 9;
+		tensor[1][0] = 6;  tensor[1][1] = 5.8;  tensor[1][2] = 32; tensor[1][3] = 3  ; tensor[1][4] = -2.5;
+		tensor[2][0] = 2;  tensor[2][1] = 2;    tensor[2][2] = -7; tensor[2][3] = 2  ; tensor[2][4] = 3.1;
+		tensor[3][0] = -4; tensor[3][1] = 9;    tensor[3][2] = 3 ; tensor[3][3] = 8  ; tensor[3][4] = 6;
+		tensor[4][0] = 3;  tensor[4][1] = 1;    tensor[4][2] = 9 ; tensor[4][3] = 2  ; tensor[4][4] = 12;
+		
+		Journal_Printf(stream, "\n/*******************    Test Eigenvector 1   ************************/\n");
+		Journal_Printf( stream, "Symmetric 2D Case from Kresig, p. 371f\n\n");
+		tensorArray[FT2D_00] = -5;
+		tensorArray[FT2D_11] = -2;
+		tensorArray[FT2D_01] =  2;
+		tensorArray[FT2D_10] =  2;
+
+		Journal_Printf( stream, "Matrix to solve for eigenvectors is:\n");
+		Journal_PrintTensorArray( stream, tensorArray, 2 );
+
+		TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
+		
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = -1;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = -6;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[0][REAL_PART] = -0.447214;
+		eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[1][REAL_PART] = -0.894427;
+		eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[0][REAL_PART] = -0.894427;
+		eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[1][REAL_PART] = 0.447214;
+		eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) ) 
+		{		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+				/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 2);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 2);		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 2   ************************/\n");
+		Journal_Printf( stream, "Symmetric 3D Case - tested against:\n");
+		Journal_Printf( stream, "http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm - 3/11/04.\n");
+		tensorArray[FT3D_00] = 2;
+		tensorArray[FT3D_11] = 3;
+		tensorArray[FT3D_22] = 5;
+		tensorArray[FT3D_01] = 7;
+		tensorArray[FT3D_02] = 11;
+		tensorArray[FT3D_12] = 13;
+		tensorArray[FT3D_10] = 7;
+		tensorArray[FT3D_20] = 11;
+		tensorArray[FT3D_21] = 13;		
+
+		Journal_Printf( stream, "Matrix to solve for eigenvectors is:\n");
+		Journal_PrintTensorArray( stream, tensorArray, 3 );
+
+		TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
+
+	/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = -4.45970173;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = -9.96854402;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[2].eigenvalue[REAL_PART] = 24.42824575;
+		eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+	
+		dummy1[IMAG_PART] = 0;
+		dummy2[IMAG_PART] = 0;
+		dummy3[IMAG_PART] = 0;
+
+		dummy1[REAL_PART] = -0.786471; 
+		dummy2[REAL_PART] =  0.61348; 	
+		dummy3[REAL_PART] =  0.0714557; 			
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[0].vector );
+		dummy1[REAL_PART] = -0.364102; 
+		dummy2[REAL_PART] = -0.553977; 
+		dummy3[REAL_PART] =  0.748692; 
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[1].vector );
+		dummy1[REAL_PART] = -0.498892; 
+		dummy2[REAL_PART] = -0.562807; 
+		dummy3[REAL_PART] = -0.659056; 								
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[2].vector );
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue, 
+						eigenvectorListDiffs[2].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+		
+		/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 3);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 3);		
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[2].vector, 
+				eigenvectorListCompare[2].vector,
+				eigenvectorList[2].vector, 3);
+		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);
+		
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 3   ************************/\n");
+		Journal_Printf( stream, "Non-Symmetric test for 2-D\n\n");
+		
+		tensorArray[FT2D_00] = 4;
+		tensorArray[FT2D_01] = 4;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 5;
+							
+		Journal_PrintTensorArray(stream, tensorArray, 2);
+		TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
+		
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = 8;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[0][REAL_PART] = -0.8 ;
+		eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[1][REAL_PART] = 0.6;
+		eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[0][REAL_PART] = -0.707107 ;
+		eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[1][REAL_PART] = -0.707107;
+		eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) ) 
+		{		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+				/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 2);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 2);		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
+		Journal_Printf( stream, "\n");
+
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 4   ************************/\n");
+		Journal_Printf( stream, "Non-Symmetric Test for 3-D\n\n");
+		
+		tensorArray[FT3D_00] = 4;
+		tensorArray[FT3D_01] = 0;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 0;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 0;
+		tensorArray[FT3D_20] = 2;		
+		tensorArray[FT3D_21] = 5;
+		tensorArray[FT3D_22] = 6;						
+
+		Journal_PrintTensorArray(stream, tensorArray, 3);
+		TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
+
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = 2.35424868893;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = 5;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[2].eigenvalue[REAL_PART] = 7.645751311;
+		eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+	
+		dummy1[IMAG_PART] = 0;
+		dummy2[IMAG_PART] = 0;
+		dummy3[IMAG_PART] = 0;
+
+		dummy1[REAL_PART] = -0.87674 ; 
+		dummy2[REAL_PART] =  0; 	
+		dummy3[REAL_PART] =  0.480965 ; 			
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[0].vector );
+		dummy1[REAL_PART] = -0.867472 ; 
+		dummy2[REAL_PART] = 0.40482; 
+		dummy3[REAL_PART] =  -0.289157 ; 
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[1].vector );
+		dummy1[REAL_PART] = -0.635406; 
+		dummy2[REAL_PART] = 0; 
+		dummy3[REAL_PART] = -0.772178; 								
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[2].vector );
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue, 
+						eigenvectorListDiffs[2].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+		
+		/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 3);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 3);		
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[2].vector, 
+				eigenvectorListCompare[2].vector,
+				eigenvectorList[2].vector, 3);
+		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);		
+			
+		Journal_Printf( stream, "\n");
+	
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 5   ************************/\n");
+		Journal_Printf( stream, "Non-Symmetric test with zero entries for 2-D\n\n");
+		
+		tensorArray[FT2D_00] = 4;
+		tensorArray[FT2D_01] = 0;
+		tensorArray[FT2D_10] = 1;
+		tensorArray[FT2D_11] = 5;
+							
+		Journal_PrintTensorArray(stream, tensorArray, 2);
+		TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
+
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = 4;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = 5;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[0][REAL_PART] = 0.707107;
+		eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[0].vector[1][REAL_PART] = -0.707107;
+		eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[0][REAL_PART] = 0;
+		eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[1][REAL_PART] = 1;
+		eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) ) 
+		{		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+				
+		/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 2);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 2);		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
+		Journal_Printf( stream, "\n");
+		
+		/* Test for complex answers */
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 6   ************************/\n");
+		Journal_Printf( stream, "Non-Symmetric test with complex eigenvalues for 2-D\n\n");
+		Journal_Printf( stream, "Tested against Soluions in:\n");	
+		Journal_Printf( stream, "Elementary Differential Equations and Boundary Value Problems, 6th Ed\n");
+		Journal_Printf( stream, "By William E. Boyce and Richard C. DiPrima\n");	
+		Journal_Printf( stream, "Problem: ch 7.3, question 16\n\n");
+		tensorArray[FT2D_00] =  3;
+		tensorArray[FT2D_01] = -2;
+		tensorArray[FT2D_10] =  4;
+		tensorArray[FT2D_11] = -1;
+		
+		Journal_PrintTensorArray(stream, tensorArray, 2);
+		TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
+		
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 2;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = -2;
+
+		eigenvectorListCompare[0].vector[0][REAL_PART] = 0.408248;
+		eigenvectorListCompare[0].vector[0][IMAG_PART] = 0.408248;
+
+		eigenvectorListCompare[0].vector[1][REAL_PART] = 0.816497 ;
+		eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+		eigenvectorListCompare[1].vector[0][REAL_PART] = 0.408248;
+		eigenvectorListCompare[1].vector[0][IMAG_PART] = -0.408248;
+
+		eigenvectorListCompare[1].vector[1][REAL_PART] = 0.816497;
+		eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) ) 
+		{		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+				/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 2);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 2);		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+	
+		Journal_Printf( stream, "\n/*******************    Test Eigenvector 7   ************************/\n");
+		Journal_Printf( stream, "Non-Symmetric test with complex eigenvalues for 3-D\n");
+		Journal_Printf( stream, "Tested against Soluions in:\n");	
+		Journal_Printf( stream, "Elementary Differential Equations and Boundary Value Problems, 6th Ed\n");
+		Journal_Printf( stream, "By William E. Boyce and Richard C. DiPrima\n");	
+		Journal_Printf( stream, "Problem: ch 7.3, question 21\n\n");		
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 0;
+		tensorArray[FT3D_02] = 0;
+		tensorArray[FT3D_10] = 2;
+		tensorArray[FT3D_11] = 1;
+		tensorArray[FT3D_12] = -2;
+		tensorArray[FT3D_20] = 3;		
+		tensorArray[FT3D_21] = 2;
+		tensorArray[FT3D_22] = 1;
+		
+		Journal_PrintTensorArray(stream, tensorArray, 3);
+		TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 2;
+		
+		eigenvectorListCompare[2].eigenvalue[REAL_PART] = 1;
+		eigenvectorListCompare[2].eigenvalue[IMAG_PART] = -2;
+		
+		dummy1[REAL_PART] =  0.485071 ; 	dummy1[IMAG_PART] = 0;
+		dummy2[REAL_PART] = -0.727607; 		dummy2[IMAG_PART] = 0;
+		dummy3[REAL_PART] =  0.485071; 		dummy3[IMAG_PART] = 0;
+
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[0].vector );
+
+		dummy1[REAL_PART] = 0; 				dummy1[IMAG_PART] = 0;
+		dummy2[REAL_PART] = 0.707107; 		dummy2[IMAG_PART] = 0;
+		dummy3[REAL_PART] = 0;				dummy3[IMAG_PART] = -0.707107; 
+
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[1].vector );
+
+		dummy1[REAL_PART] = 0; 				dummy1[IMAG_PART] = 0;
+		dummy2[REAL_PART] = 0.707107; 		dummy2[IMAG_PART] = 0;
+		dummy3[REAL_PART] = 0;				dummy3[IMAG_PART] = 0.707107;
+
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[2].vector );
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue, 
+						eigenvectorListDiffs[2].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+		
+		/* Check if eigenvector solutions are within tolerance */
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[0].vector,
+				eigenvectorListCompare[0].vector,
+				eigenvectorList[0].vector, 3);
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[1].vector, 
+				eigenvectorListCompare[1].vector,
+				eigenvectorList[1].vector, 3);		
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[2].vector, 
+				eigenvectorListCompare[2].vector,
+				eigenvectorList[2].vector, 3);
+		
+		
+		if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance); 
+		}
+		/* Print out correct eigenvectors */		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);		
+
+		Journal_Printf( stream, "\n");
+		Journal_Printf( stream, "\n/*******************    Eigenvector Test  8  ************************/\n");
+		Journal_Printf( stream, "Test Calc eigenvectors function with repeated roots\n\n");		
+		Journal_Printf( stream, "Tested against Solutions in:\n");	
+		Journal_Printf( stream, "Elementary Differential Equations and Boundary Value Problems, 6th Ed\n");
+		Journal_Printf( stream, "By William E. Boyce and Richard C. DiPrima\n");	
+		Journal_Printf( stream, "Problem: ch 7.3, question 24\n\n");
+		tensorArray[FT3D_00] = 3;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 4;
+		tensorArray[FT3D_10] = 2;
+		tensorArray[FT3D_11] = 0;
+		tensorArray[FT3D_12] = 2;
+		tensorArray[FT3D_20] = 4;		
+		tensorArray[FT3D_21] = 2;
+		tensorArray[FT3D_22] = 3;
+		
+		Journal_PrintTensorArray(stream, tensorArray, 3);
+		TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
+
+		/* Set comparison eigenvecorList with correct solution */
+		eigenvectorListCompare[0].eigenvalue[REAL_PART] = -1;
+		eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[1].eigenvalue[REAL_PART] = -1;
+		eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+		
+		eigenvectorListCompare[2].eigenvalue[REAL_PART] = 8;
+		eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+
+		dummy1[IMAG_PART] = 0;
+		dummy2[IMAG_PART] = 0;
+		dummy3[IMAG_PART] = 0;
+
+		dummy1[REAL_PART] = 0; 
+		dummy2[REAL_PART] = -0.894427; 
+		dummy3[REAL_PART] = 0.447214;
+		
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[0].vector );
+
+		dummy1[REAL_PART] = -0.719905 ; 
+		dummy2[REAL_PART] = 0.519697; 
+		dummy3[REAL_PART] = 0.460056; 								
+		
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[1].vector );
+		dummy1[REAL_PART] = 0.666667; 
+		dummy2[REAL_PART] = 0.333333; 
+		dummy3[REAL_PART] = 0.666667; 								
+		
+		ComplexVector_SetScalar( dummy1, dummy2, dummy3, 
+								eigenvectorListCompare[2].vector );
+		
+		/*Check if eigenvalue solution is within tolerance */
+		Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue, 
+						eigenvectorListDiffs[0].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue, 
+						eigenvectorListDiffs[1].eigenvalue);
+		Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue, 
+						eigenvectorListDiffs[2].eigenvalue);
+
+		if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) && 
+			(Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {		
+			Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance); 
+		}
+		else {
+			Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance); 
+		}
+		
+		/* Print correct eigenvalues */
+		Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+		Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+		
+		/* Check if non-repeated eigenvector solution is within tolerance */
+
+		StGermain_ComplexVectorSubtraction(	eigenvectorListDiffs[2].vector, 
+				eigenvectorListCompare[2].vector,
+				eigenvectorList[2].vector, 3);
+		
+		/* Check if repeated eigenvectors follow correct Pattern */
+		for (eigenCount = 0; eigenCount < 2; eigenCount++) {
+			Cmplx_RealMultiply(eigenvectorList[eigenCount].vector[0], 2.0, dummy1 );
+			Cmplx_RealMultiply(eigenvectorList[eigenCount].vector[2], 2.0, dummy2 );
+			Cmplx_Add( eigenvectorList[eigenCount].vector[1], dummy1, dummy3 ) ;
+			Cmplx_Add( dummy3, dummy2, eigenvectorListDiffs[eigenCount].vector[0]);
+		}
+		
+		if ( ((Cmplx_Modulus(eigenvectorListDiffs[0].vector[0])) <= errorTolerance ) &&
+			((Cmplx_Modulus(eigenvectorListDiffs[1].vector[0])) <= errorTolerance ) &&
+			(StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+		{ 
+				
+			Journal_Printf(stream, "\nNon-repeated Eigenvector within tolerance, %g,\n", errorTolerance);
+			Journal_Printf(stream, "And Repeated Eigenvectors follow pattern:\n");
+			Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, %g of:\n", errorTolerance);
+					
+		}
+		else {
+			Journal_Printf(stream, "\nEither Non-repeated Eigenvector not within tolerance, %g,\n", errorTolerance);
+			Journal_Printf(stream, "Or Repeated Eigenvectors do not follow pattern:\n");
+			Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, %g.\n", errorTolerance);
+			Journal_Printf(stream, "Calculated solution:\n");
+			StGermain_PrintNamedComplexVector( stream,eigenvectorList[0].vector ,3);
+			StGermain_PrintNamedComplexVector( stream,eigenvectorList[1].vector ,3);
+			StGermain_PrintNamedComplexVector( stream,eigenvectorList[2].vector ,3);				
+		}
+		/* Print out correct eigenvectors */
+		Journal_Printf(stream, "One set of correct eigenvectors: \n");		
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+		StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);		
+			
+		Journal_Printf(stream, "\nFor repeated eigenvalues with non-degenerate eigenvectors, \n");
+		Journal_Printf(stream, "eigenvectors have to be in same plane as solution vectors \n");
+		Journal_Printf(stream, "rather than exactly the same, as eigenvectors can be arbitrarily set\n");
+		Journal_Printf(stream, "based on the specific tensor array equation.\n");
+		Journal_Printf(stream, "For this problem, solution for repeated eigenvectors collapses to:\n");
+		Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0\n");
+		Journal_Printf(stream, "Eigenvectors are then set based on what x_1, x_2 and x_3 are set to equal.\n");
+	
+		
+		
+		/* Test solve complex system functions */
+		Journal_Printf( stream, "\n/*******************    Test  10  ************************/\n");
+		Journal_Printf( stream, "Test print ComplexTensorArray function\n\n");		
+		Journal_Printf( stream, "2-D\n");
+		complexTensorArray[FT2D_00][REAL_PART] = 4;		complexTensorArray[FT2D_00][IMAG_PART] = 0;
+		complexTensorArray[FT2D_01][REAL_PART] = 4;		complexTensorArray[FT2D_01][IMAG_PART] = 1;
+		complexTensorArray[FT2D_10][REAL_PART] = 3;		complexTensorArray[FT2D_10][IMAG_PART] = 0.33;
+		complexTensorArray[FT2D_11][REAL_PART] = 5;		complexTensorArray[FT2D_11][IMAG_PART] = 100;
+		
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		complexTensorArray[FT3D_00][REAL_PART] = 1;		complexTensorArray[FT3D_00][IMAG_PART] = 0.5;
+		complexTensorArray[FT3D_01][REAL_PART] = 2;		complexTensorArray[FT3D_01][IMAG_PART] = 0;
+		complexTensorArray[FT3D_02][REAL_PART] = 3;		complexTensorArray[FT3D_02][IMAG_PART] = 0;
+		complexTensorArray[FT3D_10][REAL_PART] = 4;		complexTensorArray[FT3D_10][IMAG_PART] = 0;
+		complexTensorArray[FT3D_11][REAL_PART] = 5;		complexTensorArray[FT3D_11][IMAG_PART] = 1;
+		complexTensorArray[FT3D_12][REAL_PART] = 6;		complexTensorArray[FT3D_12][IMAG_PART] = 2;
+		complexTensorArray[FT3D_20][REAL_PART] = 7;		complexTensorArray[FT3D_20][IMAG_PART] = 0;
+		complexTensorArray[FT3D_21][REAL_PART] = 8;		complexTensorArray[FT3D_21][IMAG_PART] = 0;
+		complexTensorArray[FT3D_22][REAL_PART] = 9;		complexTensorArray[FT3D_22][IMAG_PART] = 30;	
+		
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 3);		
+
+		Journal_Printf( stream, "\n/*******************    Test  11  ************************/\n");
+		Journal_Printf( stream, "Test print ComplexMatrix function\n\n");		
+		Journal_Printf( stream, "2-D\n");
+		complexMatrix[0][0][REAL_PART] = 1;		complexMatrix[0][0][IMAG_PART] = 0;
+		complexMatrix[0][1][REAL_PART] = 2;		complexMatrix[0][1][IMAG_PART] = 1;
+		complexMatrix[0][2][REAL_PART] = 4;		complexMatrix[0][2][IMAG_PART] = 1;
+		
+		complexMatrix[1][0][REAL_PART] = 3;		complexMatrix[1][0][IMAG_PART] = 0.33;
+		complexMatrix[1][1][REAL_PART] = 5;		complexMatrix[1][1][IMAG_PART] = 100;
+		complexMatrix[1][2][REAL_PART] = 5;		complexMatrix[1][2][IMAG_PART] = 10.5;
+		
+		complexMatrix[2][0][REAL_PART] = 30;	complexMatrix[2][0][IMAG_PART] = 0.33;
+		complexMatrix[2][1][REAL_PART] = 0.5;	complexMatrix[2][1][IMAG_PART] = 100;
+		complexMatrix[2][2][REAL_PART] = 5.5;	complexMatrix[2][2][IMAG_PART] = 10.5;		
+		
+		Journal_PrintComplexMatrix(stream, complexMatrix, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		Journal_PrintComplexMatrix(stream, complexMatrix, 3);
+
+		Journal_Printf( stream, "\n/*******************    Test  12  ************************/\n");
+		Journal_Printf( stream, "Test TensorArray to ComplexTensorArray conversion function\n\n");
+		tensorArray[0] = 1 ; 	tensorArray[3] = 5 ;	tensorArray[6] = 9 ; 	
+		tensorArray[1] = 3 ;	tensorArray[4] = 7 ;	tensorArray[7] = 11 ;	
+		tensorArray[2] = 4 ;	tensorArray[5] = 8 ;	tensorArray[8] = 12 ;	
+		
+		Journal_Printf(stream, "2-D conversion\n");
+		Journal_PrintTensorArray(stream, tensorArray, 2);
+		TensorArray_ToComplexTensorArray(tensorArray, complexTensorArray, 2);
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 2);		
+
+		Journal_Printf(stream, "3-D conversion\n");
+		Journal_PrintTensorArray(stream, tensorArray, 3);
+		TensorArray_ToComplexTensorArray(tensorArray, complexTensorArray, 3);
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 3);
+
+		Journal_Printf( stream, "\n/*******************    Test  13  ************************/\n");
+		Journal_Printf( stream, "Test ComplexTensorArray to ComplexMatrix conversion function\n\n");
+		complexTensorArray[FT3D_00][REAL_PART] = 1;		complexTensorArray[FT3D_00][IMAG_PART] = 0.5;
+		complexTensorArray[FT3D_01][REAL_PART] = 2;		complexTensorArray[FT3D_01][IMAG_PART] = 0;
+		complexTensorArray[FT3D_02][REAL_PART] = 3;		complexTensorArray[FT3D_02][IMAG_PART] = 0;
+		complexTensorArray[FT3D_10][REAL_PART] = 4;		complexTensorArray[FT3D_10][IMAG_PART] = 0;
+		complexTensorArray[FT3D_11][REAL_PART] = 5;		complexTensorArray[FT3D_11][IMAG_PART] = 1;
+		complexTensorArray[FT3D_12][REAL_PART] = 6;		complexTensorArray[FT3D_12][IMAG_PART] = 2;
+		complexTensorArray[FT3D_20][REAL_PART] = 7;		complexTensorArray[FT3D_20][IMAG_PART] = 0;
+		complexTensorArray[FT3D_21][REAL_PART] = 8;		complexTensorArray[FT3D_21][IMAG_PART] = 0;
+		complexTensorArray[FT3D_22][REAL_PART] = 9;		complexTensorArray[FT3D_22][IMAG_PART] = 30;	
+		
+		Journal_Printf(stream, "2-D conversion\n");
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 2);
+		ComplexTensorArray_ToComplexMatrix(complexTensorArray, 2, complexMatrix ) ;
+		Journal_PrintComplexMatrix(stream, complexMatrix, 2);		
+
+		Journal_Printf(stream, "3-D conversion\n");
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 3);
+		ComplexTensorArray_ToComplexMatrix(complexTensorArray, 3, complexMatrix ) ;
+		Journal_PrintComplexMatrix(stream, complexMatrix, 3);	
+		
+		Memory_Free(complexMatrix);
+
+		Journal_Printf( stream, "\n/*******************    Test  14  ************************/\n");
+		Journal_Printf( stream, "Test ComplexTensorArray to TensorArray conversion function\n\n");
+		complexTensorArray[ 0][REAL_PART]  = 1;		complexTensorArray[ 0][IMAG_PART] = 0;	
+		complexTensorArray[ 1][REAL_PART]  = 2;		complexTensorArray[ 1][IMAG_PART] = 0;	
+		complexTensorArray[ 2][REAL_PART]  = 3;		complexTensorArray[ 2][IMAG_PART] = 0;	
+		complexTensorArray[ 3][REAL_PART]  = 4;		complexTensorArray[ 3][IMAG_PART] = 0;	
+		complexTensorArray[ 4][REAL_PART]  = 5;		complexTensorArray[ 4][IMAG_PART] = 0;	
+		complexTensorArray[ 5][REAL_PART]  = 6;		complexTensorArray[ 5][IMAG_PART] = 0;	
+		complexTensorArray[ 6][REAL_PART]  = 7;		complexTensorArray[ 6][IMAG_PART] = 0;	
+		complexTensorArray[ 7][REAL_PART]  = 88;	complexTensorArray[ 7][IMAG_PART] = 0;	
+		complexTensorArray[ 8][REAL_PART]  = 9.5;	complexTensorArray[ 8][IMAG_PART] = 0;	
+		
+		Journal_Printf(stream, "2-D conversion\n");
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 2);		
+		ComplexTensorArray_ToTensorArray(complexTensorArray, tensorArray, 2);
+		Journal_PrintTensorArray(stream, tensorArray, 2);
+
+		Journal_Printf(stream, "3-D conversion\n");
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 3);		
+		ComplexTensorArray_ToTensorArray(complexTensorArray, tensorArray, 3);
+		Journal_PrintTensorArray(stream, tensorArray, 3);
+		
+
+		/*Note: This has to be the last test! As it will have an error and cleanly
+		exit the test program.*/
+		Journal_Printf(stream, "Failing conversion\n");
+		complexTensorArray[0][IMAG_PART] = 1;		
+		Journal_PrintComplexTensorArray(stream, complexTensorArray, 3);		
+		ComplexTensorArray_ToTensorArray(complexTensorArray, tensorArray, 3);
+		
+		
+		Memory_Free( tensor );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK26Topology.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK26Topology.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,7035 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
++++++++++++++ 1D Tests +++++++++++++
+
+topology:{ 1, 1, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [0] = {}
+		Full:
+			|(  0  )|
+	
+topology:{ 1, 1, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [0] = {}
+		Full:
+			|(  0  )|
+	
+topology:{ 2, 1, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [1] = {0, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+	
+topology:{ 2, 1, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [2] = {1, 1, }
+		Full:
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [2] = {0, 0, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+	
+topology:{ 3, 1, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [2] = {0, 2, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+	
+topology:{ 3, 1, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [2] = {2, 1, }
+		Full:
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [2] = {0, 2, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [2] = {1, 0, }
+		Full:
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+	
+topology:{ 1, 2, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+	Item at (0,1,0)->1:
+		Dyn: [1] = {0, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+	
+topology:{ 1, 2, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [2] = {1, 1, }
+		Full:
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+	Item at (0,1,0)->1:
+		Dyn: [2] = {0, 0, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+	
+topology:{ 1, 3, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+	Item at (0,1,0)->1:
+		Dyn: [2] = {0, 2, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+	Item at (0,2,0)->2:
+		Dyn: [1] = {1, }
+		Full:
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+	
+topology:{ 1, 3, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [2] = {2, 1, }
+		Full:
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+	Item at (0,1,0)->1:
+		Dyn: [2] = {0, 2, }
+		Full:
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+	Item at (0,2,0)->2:
+		Dyn: [2] = {1, 0, }
+		Full:
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+	
++++++++++++++ 2D Tests +++++++++++++
+
+topology:{ 2, 2, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [3] = {1, 2, 3, }
+		Full:
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [3] = {0, 2, 3, }
+		Full:
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [3] = {0, 1, 3, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   X   |(  2  )|   3   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [3] = {0, 1, 2, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   2   |(  3  )|   X   |
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+	
+topology:{ 2, 2, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {1, 1, 3, 2, 3, }
+		Full:
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 0, 2, 3, 2, }
+		Full:
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [5] = {1, 0, 1, 3, 3, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   3   |(  2  )|   3   |
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [5] = {0, 1, 0, 2, 2, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   2   |(  3  )|   2   |
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+	
+topology:{ 2, 2, 1, } - isPeriodic = { False, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {2, 3, 1, 2, 3, }
+		Full:
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {2, 3, 0, 2, 3, }
+		Full:
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [5] = {0, 1, 3, 0, 1, }
+		Full:
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+			|   X   |(  2  )|   3   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [5] = {0, 1, 2, 0, 1, }
+		Full:
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+			|   2   |(  3  )|   X   |
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+	
+topology:{ 2, 2, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [8] = {3, 2, 3, 1, 1, 3, 2, 3, }
+		Full:
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {2, 3, 2, 0, 0, 2, 3, 2, }
+		Full:
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [8] = {1, 0, 1, 3, 3, 1, 0, 1, }
+		Full:
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+			|   3   |(  2  )|   3   |
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [8] = {0, 1, 0, 2, 2, 0, 1, 0, }
+		Full:
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+			|   2   |(  3  )|   2   |
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+	
+topology:{ 3, 2, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [3] = {1, 3, 4, }
+		Full:
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [3] = {1, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [3] = {0, 1, 4, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   X   |(  3  )|   4   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [5] = {0, 1, 2, 3, 5, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [3] = {1, 2, 4, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+	
+topology:{ 3, 2, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {2, 1, 5, 3, 4, }
+		Full:
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [5] = {1, 0, 4, 5, 3, }
+		Full:
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [5] = {2, 0, 1, 5, 4, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   5   |(  3  )|   4   |
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [5] = {0, 1, 2, 3, 5, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [5] = {1, 2, 0, 4, 3, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   4   |(  5  )|   3   |
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+	
+topology:{ 3, 2, 1, } - isPeriodic = { False, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {3, 4, 1, 3, 4, }
+		Full:
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {3, 4, 5, 0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [5] = {4, 5, 1, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [5] = {0, 1, 4, 0, 1, }
+		Full:
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+			|   X   |(  3  )|   4   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 0, 1, 2, }
+		Full:
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [5] = {1, 2, 4, 1, 2, }
+		Full:
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+	
+topology:{ 3, 2, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [8] = {5, 3, 4, 2, 1, 5, 3, 4, }
+		Full:
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {3, 4, 5, 0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [8] = {4, 5, 3, 1, 0, 4, 5, 3, }
+		Full:
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [8] = {2, 0, 1, 5, 4, 2, 0, 1, }
+		Full:
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+			|   5   |(  3  )|   4   |
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 0, 1, 2, }
+		Full:
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [8] = {1, 2, 0, 4, 3, 1, 2, 0, }
+		Full:
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+			|   4   |(  5  )|   3   |
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+	
+topology:{ 2, 3, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [3] = {1, 2, 3, }
+		Full:
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [3] = {0, 2, 3, }
+		Full:
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [5] = {0, 1, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   X   |   4   |   5   |
+			-------------------------
+			|   X   |(  2  )|   3   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [5] = {0, 1, 2, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   2   |(  3  )|   X   |
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+	Item at (0,2,0)->4:
+		Dyn: [3] = {2, 3, 5, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   X   |(  4  )|   5   |
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+	Item at (1,2,0)->5:
+		Dyn: [3] = {2, 3, 4, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+	
+topology:{ 2, 3, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {1, 1, 3, 2, 3, }
+		Full:
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 0, 2, 3, 2, }
+		Full:
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [8] = {1, 0, 1, 3, 3, 5, 4, 5, }
+		Full:
+			-------------------------
+			|   5   |   4   |   5   |
+			-------------------------
+			|   3   |(  2  )|   3   |
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [8] = {0, 1, 0, 2, 2, 4, 5, 4, }
+		Full:
+			-------------------------
+			|   4   |   5   |   4   |
+			-------------------------
+			|   2   |(  3  )|   2   |
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+	Item at (0,2,0)->4:
+		Dyn: [5] = {3, 2, 3, 5, 5, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   5   |(  4  )|   5   |
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+	Item at (1,2,0)->5:
+		Dyn: [5] = {2, 3, 2, 4, 4, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   4   |(  5  )|   4   |
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+	
+topology:{ 2, 3, 1, } - isPeriodic = { False, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {4, 5, 1, 2, 3, }
+		Full:
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   4   |   5   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {4, 5, 0, 2, 3, }
+		Full:
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+			|   0   |(  1  )|   X   |
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [5] = {0, 1, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   X   |   4   |   5   |
+			-------------------------
+			|   X   |(  2  )|   3   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [5] = {0, 1, 2, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   2   |(  3  )|   X   |
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+	Item at (0,2,0)->4:
+		Dyn: [5] = {2, 3, 5, 0, 1, }
+		Full:
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+			|   X   |(  4  )|   5   |
+			-------------------------
+			|   X   |   2   |   3   |
+			-------------------------
+	Item at (1,2,0)->5:
+		Dyn: [5] = {2, 3, 4, 0, 1, }
+		Full:
+			-------------------------
+			|   0   |   1   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   2   |   3   |   X   |
+			-------------------------
+	
+topology:{ 2, 3, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [8] = {5, 4, 5, 1, 1, 3, 2, 3, }
+		Full:
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+			|   1   |(  0  )|   1   |
+			-------------------------
+			|   5   |   4   |   5   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {4, 5, 4, 0, 0, 2, 3, 2, }
+		Full:
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+			|   0   |(  1  )|   0   |
+			-------------------------
+			|   4   |   5   |   4   |
+			-------------------------
+	Item at (0,1,0)->2:
+		Dyn: [8] = {1, 0, 1, 3, 3, 5, 4, 5, }
+		Full:
+			-------------------------
+			|   5   |   4   |   5   |
+			-------------------------
+			|   3   |(  2  )|   3   |
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->3:
+		Dyn: [8] = {0, 1, 0, 2, 2, 4, 5, 4, }
+		Full:
+			-------------------------
+			|   4   |   5   |   4   |
+			-------------------------
+			|   2   |(  3  )|   2   |
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+	Item at (0,2,0)->4:
+		Dyn: [8] = {3, 2, 3, 5, 5, 1, 0, 1, }
+		Full:
+			-------------------------
+			|   1   |   0   |   1   |
+			-------------------------
+			|   5   |(  4  )|   5   |
+			-------------------------
+			|   3   |   2   |   3   |
+			-------------------------
+	Item at (1,2,0)->5:
+		Dyn: [8] = {2, 3, 2, 4, 4, 0, 1, 0, }
+		Full:
+			-------------------------
+			|   0   |   1   |   0   |
+			-------------------------
+			|   4   |(  5  )|   4   |
+			-------------------------
+			|   2   |   3   |   2   |
+			-------------------------
+	
+topology:{ 3, 3, 1, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [3] = {1, 3, 4, }
+		Full:
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [3] = {1, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [5] = {0, 1, 4, 6, 7, }
+		Full:
+			-------------------------
+			|   X   |   6   |   7   |
+			-------------------------
+			|   X   |(  3  )|   4   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 6, 7, 8, }
+		Full:
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [5] = {1, 2, 4, 7, 8, }
+		Full:
+			-------------------------
+			|   7   |   8   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [3] = {3, 4, 7, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   X   |(  6  )|   7   |
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [5] = {3, 4, 5, 6, 8, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   6   |(  7  )|   8   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [3] = {4, 5, 7, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   7   |(  8  )|   X   |
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+	
+topology:{ 3, 3, 1, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {2, 1, 5, 3, 4, }
+		Full:
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [5] = {0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [5] = {1, 0, 4, 5, 3, }
+		Full:
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [8] = {2, 0, 1, 5, 4, 8, 6, 7, }
+		Full:
+			-------------------------
+			|   8   |   6   |   7   |
+			-------------------------
+			|   5   |(  3  )|   4   |
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 6, 7, 8, }
+		Full:
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [8] = {1, 2, 0, 4, 3, 7, 8, 6, }
+		Full:
+			-------------------------
+			|   7   |   8   |   6   |
+			-------------------------
+			|   4   |(  5  )|   3   |
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [5] = {5, 3, 4, 8, 7, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   8   |(  6  )|   7   |
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [5] = {3, 4, 5, 6, 8, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   6   |(  7  )|   8   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [5] = {4, 5, 3, 7, 6, }
+		Full:
+			-------------------------
+			|   X   |   X   |   X   |
+			-------------------------
+			|   7   |(  8  )|   6   |
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+	
+topology:{ 3, 3, 1, } - isPeriodic = { False, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [5] = {6, 7, 1, 3, 4, }
+		Full:
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+			|   X   |(  0  )|   1   |
+			-------------------------
+			|   X   |   6   |   7   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {6, 7, 8, 0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [5] = {7, 8, 1, 4, 5, }
+		Full:
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+			|   1   |(  2  )|   X   |
+			-------------------------
+			|   7   |   8   |   X   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [5] = {0, 1, 4, 6, 7, }
+		Full:
+			-------------------------
+			|   X   |   6   |   7   |
+			-------------------------
+			|   X   |(  3  )|   4   |
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 6, 7, 8, }
+		Full:
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [5] = {1, 2, 4, 7, 8, }
+		Full:
+			-------------------------
+			|   7   |   8   |   X   |
+			-------------------------
+			|   4   |(  5  )|   X   |
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [5] = {3, 4, 7, 0, 1, }
+		Full:
+			-------------------------
+			|   X   |   0   |   1   |
+			-------------------------
+			|   X   |(  6  )|   7   |
+			-------------------------
+			|   X   |   3   |   4   |
+			-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [8] = {3, 4, 5, 6, 8, 0, 1, 2, }
+		Full:
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+			|   6   |(  7  )|   8   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [5] = {4, 5, 7, 1, 2, }
+		Full:
+			-------------------------
+			|   1   |   2   |   X   |
+			-------------------------
+			|   7   |(  8  )|   X   |
+			-------------------------
+			|   4   |   5   |   X   |
+			-------------------------
+	
+topology:{ 3, 3, 1, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [8] = {8, 6, 7, 2, 1, 5, 3, 4, }
+		Full:
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+			|   2   |(  0  )|   1   |
+			-------------------------
+			|   8   |   6   |   7   |
+			-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [8] = {6, 7, 8, 0, 2, 3, 4, 5, }
+		Full:
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+			|   0   |(  1  )|   2   |
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [8] = {7, 8, 6, 1, 0, 4, 5, 3, }
+		Full:
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+			|   1   |(  2  )|   0   |
+			-------------------------
+			|   7   |   8   |   6   |
+			-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [8] = {2, 0, 1, 5, 4, 8, 6, 7, }
+		Full:
+			-------------------------
+			|   8   |   6   |   7   |
+			-------------------------
+			|   5   |(  3  )|   4   |
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [8] = {0, 1, 2, 3, 5, 6, 7, 8, }
+		Full:
+			-------------------------
+			|   6   |   7   |   8   |
+			-------------------------
+			|   3   |(  4  )|   5   |
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [8] = {1, 2, 0, 4, 3, 7, 8, 6, }
+		Full:
+			-------------------------
+			|   7   |   8   |   6   |
+			-------------------------
+			|   4   |(  5  )|   3   |
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [8] = {5, 3, 4, 8, 7, 2, 0, 1, }
+		Full:
+			-------------------------
+			|   2   |   0   |   1   |
+			-------------------------
+			|   8   |(  6  )|   7   |
+			-------------------------
+			|   5   |   3   |   4   |
+			-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [8] = {3, 4, 5, 6, 8, 0, 1, 2, }
+		Full:
+			-------------------------
+			|   0   |   1   |   2   |
+			-------------------------
+			|   6   |(  7  )|   8   |
+			-------------------------
+			|   3   |   4   |   5   |
+			-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [8] = {4, 5, 3, 7, 6, 1, 2, 0, }
+		Full:
+			-------------------------
+			|   1   |   2   |   0   |
+			-------------------------
+			|   7   |(  8  )|   6   |
+			-------------------------
+			|   4   |   5   |   3   |
+			-------------------------
+	
++++++++++++++ 3D Tests +++++++++++++
+
+topology:{ 3, 3, 3, } - isPeriodic = { False, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [7] = {1, 3, 4, 9, 10, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |(  0  )|   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [11] = {0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [7] = {1, 4, 5, 10, 11, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |(  2  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [11] = {0, 1, 4, 6, 7, 9, 10, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |(  3  )|   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [17] = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [11] = {1, 2, 4, 7, 8, 10, 11, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |(  5  )|   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [7] = {3, 4, 7, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |(  6  )|   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [11] = {3, 4, 5, 6, 8, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [7] = {4, 5, 7, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |(  8  )|   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [11] = {0, 1, 3, 4, 10, 12, 13, 18, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |(  9  )|  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [17] = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [11] = {1, 2, 4, 5, 10, 13, 14, 19, 20, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |( 11  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [17] = {0, 1, 3, 4, 6, 7, 9, 10, 13, 15, 16, 18, 19, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |( 12  )|  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [17] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 16, 17, 19, 20, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |( 14  )|   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [11] = {3, 4, 6, 7, 12, 13, 16, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |( 15  )|  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [17] = {3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 17, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [11] = {4, 5, 7, 8, 13, 14, 16, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |( 17  )|   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [7] = {9, 10, 12, 13, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |( 18  )|  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [11] = {9, 10, 11, 12, 13, 14, 18, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [7] = {10, 11, 13, 14, 19, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |( 20  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [11] = {9, 10, 12, 13, 15, 16, 18, 19, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |( 21  )|  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [11] = {10, 11, 13, 14, 16, 17, 19, 20, 22, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |( 23  )|   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [7] = {12, 13, 15, 16, 21, 22, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |( 24  )|  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [11] = {12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [7] = {13, 14, 16, 17, 22, 23, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |( 26  )|   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { True, False, False, }
+	Item at (0,0,0)->0:
+		Dyn: [11] = {2, 1, 5, 3, 4, 11, 9, 10, 14, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |(  0  )|   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [11] = {0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [11] = {1, 0, 4, 5, 3, 10, 11, 9, 13, 14, 12, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |(  2  )|   0   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [17] = {2, 0, 1, 5, 4, 8, 6, 7, 11, 9, 10, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |(  3  )|   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [17] = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [17] = {1, 2, 0, 4, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |(  5  )|   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [11] = {5, 3, 4, 8, 7, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   8   |(  6  )|   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [11] = {3, 4, 5, 6, 8, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [11] = {4, 5, 3, 7, 6, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |(  8  )|   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [17] = {2, 0, 1, 5, 3, 4, 11, 10, 14, 12, 13, 20, 18, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |(  9  )|  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [17] = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [17] = {1, 2, 0, 4, 5, 3, 10, 9, 13, 14, 12, 19, 20, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |( 11  )|   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [26] = {2, 0, 1, 5, 3, 4, 8, 6, 7, 11, 9, 10, 14, 13, 17, 15, 16, 20, 18, 19, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |( 12  )|  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [26] = {1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 12, 16, 17, 15, 19, 20, 18, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |( 14  )|  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [17] = {5, 3, 4, 8, 6, 7, 14, 12, 13, 17, 16, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |( 15  )|  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [17] = {3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 17, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [17] = {4, 5, 3, 7, 8, 6, 13, 14, 12, 16, 15, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |( 17  )|  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [11] = {11, 9, 10, 14, 12, 13, 20, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |( 18  )|  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [11] = {9, 10, 11, 12, 13, 14, 18, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [11] = {10, 11, 9, 13, 14, 12, 19, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |( 20  )|  18   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [17] = {11, 9, 10, 14, 12, 13, 17, 15, 16, 20, 18, 19, 23, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |( 21  )|  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [17] = {10, 11, 9, 13, 14, 12, 16, 17, 15, 19, 20, 18, 22, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |( 23  )|  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [11] = {14, 12, 13, 17, 15, 16, 23, 21, 22, 26, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  26   |( 24  )|  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [11] = {12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [11] = {13, 14, 12, 16, 17, 15, 22, 23, 21, 25, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |( 26  )|  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { False, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [11] = {6, 7, 1, 3, 4, 15, 16, 9, 10, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |(  0  )|   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [17] = {6, 7, 8, 0, 2, 3, 4, 5, 15, 16, 17, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [11] = {7, 8, 1, 4, 5, 16, 17, 10, 11, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |(  2  )|   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [11] = {0, 1, 4, 6, 7, 9, 10, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |(  3  )|   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [17] = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [11] = {1, 2, 4, 7, 8, 10, 11, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |(  5  )|   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [11] = {3, 4, 7, 0, 1, 12, 13, 15, 16, 9, 10, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |(  6  )|   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [17] = {3, 4, 5, 6, 8, 0, 1, 2, 12, 13, 14, 15, 16, 17, 9, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [11] = {4, 5, 7, 1, 2, 13, 14, 16, 17, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |(  8  )|   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [17] = {6, 7, 0, 1, 3, 4, 15, 16, 10, 12, 13, 24, 25, 18, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |(  9  )|  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [26] = {6, 7, 8, 0, 1, 2, 3, 4, 5, 15, 16, 17, 9, 11, 12, 13, 14, 24, 25, 26, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [17] = {7, 8, 1, 2, 4, 5, 16, 17, 10, 13, 14, 25, 26, 19, 20, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |( 11  )|   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [17] = {0, 1, 3, 4, 6, 7, 9, 10, 13, 15, 16, 18, 19, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |( 12  )|  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [17] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 16, 17, 19, 20, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |( 14  )|   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [17] = {3, 4, 6, 7, 0, 1, 12, 13, 16, 9, 10, 21, 22, 24, 25, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |( 15  )|  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [26] = {3, 4, 5, 6, 7, 8, 0, 1, 2, 12, 13, 14, 15, 17, 9, 10, 11, 21, 22, 23, 24, 25, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [17] = {4, 5, 7, 8, 1, 2, 13, 14, 16, 10, 11, 22, 23, 25, 26, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |( 17  )|   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [11] = {15, 16, 9, 10, 12, 13, 24, 25, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |( 18  )|  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [17] = {15, 16, 17, 9, 10, 11, 12, 13, 14, 24, 25, 26, 18, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [11] = {16, 17, 10, 11, 13, 14, 25, 26, 19, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |( 20  )|   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [11] = {9, 10, 12, 13, 15, 16, 18, 19, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |( 21  )|  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [11] = {10, 11, 13, 14, 16, 17, 19, 20, 22, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |( 23  )|   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [11] = {12, 13, 15, 16, 9, 10, 21, 22, 25, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |( 24  )|  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [17] = {12, 13, 14, 15, 16, 17, 9, 10, 11, 21, 22, 23, 24, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [11] = {13, 14, 16, 17, 10, 11, 22, 23, 25, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |( 26  )|   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { True, True, False, }
+	Item at (0,0,0)->0:
+		Dyn: [17] = {8, 6, 7, 2, 1, 5, 3, 4, 17, 15, 16, 11, 9, 10, 14, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |(  0  )|   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [17] = {6, 7, 8, 0, 2, 3, 4, 5, 15, 16, 17, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [17] = {7, 8, 6, 1, 0, 4, 5, 3, 16, 17, 15, 10, 11, 9, 13, 14, 12, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |(  2  )|   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [17] = {2, 0, 1, 5, 4, 8, 6, 7, 11, 9, 10, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |(  3  )|   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [17] = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [17] = {1, 2, 0, 4, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |(  5  )|   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [17] = {5, 3, 4, 8, 7, 2, 0, 1, 14, 12, 13, 17, 15, 16, 11, 9, 10, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |(  6  )|   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [17] = {3, 4, 5, 6, 8, 0, 1, 2, 12, 13, 14, 15, 16, 17, 9, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [17] = {4, 5, 3, 7, 6, 1, 2, 0, 13, 14, 12, 16, 17, 15, 10, 11, 9, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |(  8  )|   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [26] = {8, 6, 7, 2, 0, 1, 5, 3, 4, 17, 15, 16, 11, 10, 14, 12, 13, 26, 24, 25, 20, 18, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |(  9  )|  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [26] = {6, 7, 8, 0, 1, 2, 3, 4, 5, 15, 16, 17, 9, 11, 12, 13, 14, 24, 25, 26, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [26] = {7, 8, 6, 1, 2, 0, 4, 5, 3, 16, 17, 15, 10, 9, 13, 14, 12, 25, 26, 24, 19, 20, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |( 11  )|   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [26] = {2, 0, 1, 5, 3, 4, 8, 6, 7, 11, 9, 10, 14, 13, 17, 15, 16, 20, 18, 19, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |( 12  )|  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [26] = {1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 12, 16, 17, 15, 19, 20, 18, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |( 14  )|  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [26] = {5, 3, 4, 8, 6, 7, 2, 0, 1, 14, 12, 13, 17, 16, 11, 9, 10, 23, 21, 22, 26, 24, 25, 20, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |( 15  )|  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [26] = {3, 4, 5, 6, 7, 8, 0, 1, 2, 12, 13, 14, 15, 17, 9, 10, 11, 21, 22, 23, 24, 25, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [26] = {4, 5, 3, 7, 8, 6, 1, 2, 0, 13, 14, 12, 16, 15, 10, 11, 9, 22, 23, 21, 25, 26, 24, 19, 20, 18, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |( 17  )|  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [17] = {17, 15, 16, 11, 9, 10, 14, 12, 13, 26, 24, 25, 20, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |( 18  )|  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [17] = {15, 16, 17, 9, 10, 11, 12, 13, 14, 24, 25, 26, 18, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [17] = {16, 17, 15, 10, 11, 9, 13, 14, 12, 25, 26, 24, 19, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |( 20  )|  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [17] = {11, 9, 10, 14, 12, 13, 17, 15, 16, 20, 18, 19, 23, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |( 21  )|  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [17] = {10, 11, 9, 13, 14, 12, 16, 17, 15, 19, 20, 18, 22, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |( 23  )|  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [17] = {14, 12, 13, 17, 15, 16, 11, 9, 10, 23, 21, 22, 26, 25, 20, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |( 24  )|  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [17] = {12, 13, 14, 15, 16, 17, 9, 10, 11, 21, 22, 23, 24, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [17] = {13, 14, 12, 16, 17, 15, 10, 11, 9, 22, 23, 21, 25, 24, 19, 20, 18, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |( 26  )|  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { False, False, True, }
+	Item at (0,0,0)->0:
+		Dyn: [11] = {18, 19, 21, 22, 1, 3, 4, 9, 10, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |(  0  )|   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [17] = {18, 19, 20, 21, 22, 23, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [11] = {19, 20, 22, 23, 1, 4, 5, 10, 11, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |(  2  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [17] = {18, 19, 21, 22, 24, 25, 0, 1, 4, 6, 7, 9, 10, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |(  3  )|   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [26] = {18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [17] = {19, 20, 22, 23, 25, 26, 1, 2, 4, 7, 8, 10, 11, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |(  5  )|   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [11] = {21, 22, 24, 25, 3, 4, 7, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |(  6  )|   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [17] = {21, 22, 23, 24, 25, 26, 3, 4, 5, 6, 8, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [11] = {22, 23, 25, 26, 4, 5, 7, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |(  8  )|   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [11] = {0, 1, 3, 4, 10, 12, 13, 18, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |(  9  )|  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [17] = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [11] = {1, 2, 4, 5, 10, 13, 14, 19, 20, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |( 11  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [17] = {0, 1, 3, 4, 6, 7, 9, 10, 13, 15, 16, 18, 19, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |( 12  )|  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [17] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 16, 17, 19, 20, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |( 14  )|   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [11] = {3, 4, 6, 7, 12, 13, 16, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |( 15  )|  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [17] = {3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 17, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [11] = {4, 5, 7, 8, 13, 14, 16, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |( 17  )|   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [11] = {9, 10, 12, 13, 19, 21, 22, 0, 1, 3, 4, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |( 18  )|  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 18, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [11] = {10, 11, 13, 14, 19, 22, 23, 1, 2, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |( 20  )|   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [17] = {9, 10, 12, 13, 15, 16, 18, 19, 22, 24, 25, 0, 1, 3, 4, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |( 21  )|  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [26] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [17] = {10, 11, 13, 14, 16, 17, 19, 20, 22, 25, 26, 1, 2, 4, 5, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |( 23  )|   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [11] = {12, 13, 15, 16, 21, 22, 25, 3, 4, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |( 24  )|  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [17] = {12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 26, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [11] = {13, 14, 16, 17, 22, 23, 25, 4, 5, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |( 26  )|   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { True, False, True, }
+	Item at (0,0,0)->0:
+		Dyn: [17] = {20, 18, 19, 23, 21, 22, 2, 1, 5, 3, 4, 11, 9, 10, 14, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |(  0  )|   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [17] = {18, 19, 20, 21, 22, 23, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [17] = {19, 20, 18, 22, 23, 21, 1, 0, 4, 5, 3, 10, 11, 9, 13, 14, 12, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |(  2  )|   0   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [26] = {20, 18, 19, 23, 21, 22, 26, 24, 25, 2, 0, 1, 5, 4, 8, 6, 7, 11, 9, 10, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |(  3  )|   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [26] = {18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [26] = {19, 20, 18, 22, 23, 21, 25, 26, 24, 1, 2, 0, 4, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |(  5  )|   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [17] = {23, 21, 22, 26, 24, 25, 5, 3, 4, 8, 7, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   8   |(  6  )|   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [17] = {21, 22, 23, 24, 25, 26, 3, 4, 5, 6, 8, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [17] = {22, 23, 21, 25, 26, 24, 4, 5, 3, 7, 6, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |(  8  )|   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [17] = {2, 0, 1, 5, 3, 4, 11, 10, 14, 12, 13, 20, 18, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |(  9  )|  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [17] = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [17] = {1, 2, 0, 4, 5, 3, 10, 9, 13, 14, 12, 19, 20, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |( 11  )|   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [26] = {2, 0, 1, 5, 3, 4, 8, 6, 7, 11, 9, 10, 14, 13, 17, 15, 16, 20, 18, 19, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |( 12  )|  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [26] = {1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 12, 16, 17, 15, 19, 20, 18, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |( 14  )|  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [17] = {5, 3, 4, 8, 6, 7, 14, 12, 13, 17, 16, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |( 15  )|  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [17] = {3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 17, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [17] = {4, 5, 3, 7, 8, 6, 13, 14, 12, 16, 15, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |( 17  )|  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [17] = {11, 9, 10, 14, 12, 13, 20, 19, 23, 21, 22, 2, 0, 1, 5, 3, 4, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |( 18  )|  19   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [17] = {9, 10, 11, 12, 13, 14, 18, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [17] = {10, 11, 9, 13, 14, 12, 19, 18, 22, 23, 21, 1, 2, 0, 4, 5, 3, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |( 20  )|  18   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [26] = {11, 9, 10, 14, 12, 13, 17, 15, 16, 20, 18, 19, 23, 22, 26, 24, 25, 2, 0, 1, 5, 3, 4, 8, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |( 21  )|  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [26] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [26] = {10, 11, 9, 13, 14, 12, 16, 17, 15, 19, 20, 18, 22, 21, 25, 26, 24, 1, 2, 0, 4, 5, 3, 7, 8, 6, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |( 23  )|  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [17] = {14, 12, 13, 17, 15, 16, 23, 21, 22, 26, 25, 5, 3, 4, 8, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  26   |( 24  )|  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [17] = {12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 26, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [17] = {13, 14, 12, 16, 17, 15, 22, 23, 21, 25, 24, 4, 5, 3, 7, 8, 6, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|  25   |( 26  )|  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   X   |   X   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { False, True, True, }
+	Item at (0,0,0)->0:
+		Dyn: [17] = {24, 25, 18, 19, 21, 22, 6, 7, 1, 3, 4, 15, 16, 9, 10, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |(  0  )|   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [26] = {24, 25, 26, 18, 19, 20, 21, 22, 23, 6, 7, 8, 0, 2, 3, 4, 5, 15, 16, 17, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [17] = {25, 26, 19, 20, 22, 23, 7, 8, 1, 4, 5, 16, 17, 10, 11, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |(  2  )|   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [17] = {18, 19, 21, 22, 24, 25, 0, 1, 4, 6, 7, 9, 10, 12, 13, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |(  3  )|   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [26] = {18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [17] = {19, 20, 22, 23, 25, 26, 1, 2, 4, 7, 8, 10, 11, 13, 14, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |(  5  )|   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [17] = {21, 22, 24, 25, 18, 19, 3, 4, 7, 0, 1, 12, 13, 15, 16, 9, 10, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |(  6  )|   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [26] = {21, 22, 23, 24, 25, 26, 18, 19, 20, 3, 4, 5, 6, 8, 0, 1, 2, 12, 13, 14, 15, 16, 17, 9, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [17] = {22, 23, 25, 26, 19, 20, 4, 5, 7, 1, 2, 13, 14, 16, 17, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |(  8  )|   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [17] = {6, 7, 0, 1, 3, 4, 15, 16, 10, 12, 13, 24, 25, 18, 19, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |(  9  )|  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [26] = {6, 7, 8, 0, 1, 2, 3, 4, 5, 15, 16, 17, 9, 11, 12, 13, 14, 24, 25, 26, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [17] = {7, 8, 1, 2, 4, 5, 16, 17, 10, 13, 14, 25, 26, 19, 20, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |( 11  )|   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [17] = {0, 1, 3, 4, 6, 7, 9, 10, 13, 15, 16, 18, 19, 21, 22, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |( 12  )|  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [17] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 16, 17, 19, 20, 22, 23, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |( 14  )|   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [17] = {3, 4, 6, 7, 0, 1, 12, 13, 16, 9, 10, 21, 22, 24, 25, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |( 15  )|  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [26] = {3, 4, 5, 6, 7, 8, 0, 1, 2, 12, 13, 14, 15, 17, 9, 10, 11, 21, 22, 23, 24, 25, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [17] = {4, 5, 7, 8, 1, 2, 13, 14, 16, 10, 11, 22, 23, 25, 26, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |( 17  )|   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [17] = {15, 16, 9, 10, 12, 13, 24, 25, 19, 21, 22, 6, 7, 0, 1, 3, 4, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+				|   X   |( 18  )|  19   |
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [26] = {15, 16, 17, 9, 10, 11, 12, 13, 14, 24, 25, 26, 18, 20, 21, 22, 23, 6, 7, 8, 0, 1, 2, 3, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [17] = {16, 17, 10, 11, 13, 14, 25, 26, 19, 22, 23, 7, 8, 1, 2, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+				|  19   |( 20  )|   X   |
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [17] = {9, 10, 12, 13, 15, 16, 18, 19, 22, 24, 25, 0, 1, 3, 4, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  24   |  25   |
+				-------------------------
+				|   X   |( 21  )|  22   |
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [26] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [17] = {10, 11, 13, 14, 16, 17, 19, 20, 22, 25, 26, 1, 2, 4, 5, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |   X   |
+				-------------------------
+				|  22   |( 23  )|   X   |
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [17] = {12, 13, 15, 16, 9, 10, 21, 22, 25, 18, 19, 3, 4, 6, 7, 0, 1, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   X   |   9   |  10   |
+				-------------------------
+				|   X   |  15   |  16   |
+				-------------------------
+				|   X   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   X   |  18   |  19   |
+				-------------------------
+				|   X   |( 24  )|  25   |
+				-------------------------
+				|   X   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   X   |   0   |   1   |
+				-------------------------
+				|   X   |   6   |   7   |
+				-------------------------
+				|   X   |   3   |   4   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [26] = {12, 13, 14, 15, 16, 17, 9, 10, 11, 21, 22, 23, 24, 26, 18, 19, 20, 3, 4, 5, 6, 7, 8, 0, 1, 2, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [17] = {13, 14, 16, 17, 10, 11, 22, 23, 25, 19, 20, 4, 5, 7, 8, 1, 2, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  10   |  11   |   X   |
+				-------------------------
+				|  16   |  17   |   X   |
+				-------------------------
+				|  13   |  14   |   X   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  19   |  20   |   X   |
+				-------------------------
+				|  25   |( 26  )|   X   |
+				-------------------------
+				|  22   |  23   |   X   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   1   |   2   |   X   |
+				-------------------------
+				|   7   |   8   |   X   |
+				-------------------------
+				|   4   |   5   |   X   |
+				-------------------------
+	
+topology:{ 3, 3, 3, } - isPeriodic = { True, True, True, }
+	Item at (0,0,0)->0:
+		Dyn: [26] = {26, 24, 25, 20, 18, 19, 23, 21, 22, 8, 6, 7, 2, 1, 5, 3, 4, 17, 15, 16, 11, 9, 10, 14, 12, 13, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |(  0  )|   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+	Item at (1,0,0)->1:
+		Dyn: [26] = {24, 25, 26, 18, 19, 20, 21, 22, 23, 6, 7, 8, 0, 2, 3, 4, 5, 15, 16, 17, 9, 10, 11, 12, 13, 14, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |(  1  )|   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+	Item at (2,0,0)->2:
+		Dyn: [26] = {25, 26, 24, 19, 20, 18, 22, 23, 21, 7, 8, 6, 1, 0, 4, 5, 3, 16, 17, 15, 10, 11, 9, 13, 14, 12, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |(  2  )|   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+	Item at (0,1,0)->3:
+		Dyn: [26] = {20, 18, 19, 23, 21, 22, 26, 24, 25, 2, 0, 1, 5, 4, 8, 6, 7, 11, 9, 10, 14, 12, 13, 17, 15, 16, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |(  3  )|   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+	Item at (1,1,0)->4:
+		Dyn: [26] = {18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |(  4  )|   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+	Item at (2,1,0)->5:
+		Dyn: [26] = {19, 20, 18, 22, 23, 21, 25, 26, 24, 1, 2, 0, 4, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |(  5  )|   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+	Item at (0,2,0)->6:
+		Dyn: [26] = {23, 21, 22, 26, 24, 25, 20, 18, 19, 5, 3, 4, 8, 7, 2, 0, 1, 14, 12, 13, 17, 15, 16, 11, 9, 10, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |(  6  )|   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+	Item at (1,2,0)->7:
+		Dyn: [26] = {21, 22, 23, 24, 25, 26, 18, 19, 20, 3, 4, 5, 6, 8, 0, 1, 2, 12, 13, 14, 15, 16, 17, 9, 10, 11, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |(  7  )|   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+	Item at (2,2,0)->8:
+		Dyn: [26] = {22, 23, 21, 25, 26, 24, 19, 20, 18, 4, 5, 3, 7, 6, 1, 2, 0, 13, 14, 12, 16, 17, 15, 10, 11, 9, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |(  8  )|   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+	Item at (0,0,1)->9:
+		Dyn: [26] = {8, 6, 7, 2, 0, 1, 5, 3, 4, 17, 15, 16, 11, 10, 14, 12, 13, 26, 24, 25, 20, 18, 19, 23, 21, 22, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |(  9  )|  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+	Item at (1,0,1)->10:
+		Dyn: [26] = {6, 7, 8, 0, 1, 2, 3, 4, 5, 15, 16, 17, 9, 11, 12, 13, 14, 24, 25, 26, 18, 19, 20, 21, 22, 23, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |( 10  )|  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+	Item at (2,0,1)->11:
+		Dyn: [26] = {7, 8, 6, 1, 2, 0, 4, 5, 3, 16, 17, 15, 10, 9, 13, 14, 12, 25, 26, 24, 19, 20, 18, 22, 23, 21, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |( 11  )|   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+	Item at (0,1,1)->12:
+		Dyn: [26] = {2, 0, 1, 5, 3, 4, 8, 6, 7, 11, 9, 10, 14, 13, 17, 15, 16, 20, 18, 19, 23, 21, 22, 26, 24, 25, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |( 12  )|  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+	Item at (1,1,1)->13:
+		Dyn: [26] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |( 13  )|  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+	Item at (2,1,1)->14:
+		Dyn: [26] = {1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 12, 16, 17, 15, 19, 20, 18, 22, 23, 21, 25, 26, 24, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |( 14  )|  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+	Item at (0,2,1)->15:
+		Dyn: [26] = {5, 3, 4, 8, 6, 7, 2, 0, 1, 14, 12, 13, 17, 16, 11, 9, 10, 23, 21, 22, 26, 24, 25, 20, 18, 19, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |( 15  )|  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+	Item at (1,2,1)->16:
+		Dyn: [26] = {3, 4, 5, 6, 7, 8, 0, 1, 2, 12, 13, 14, 15, 17, 9, 10, 11, 21, 22, 23, 24, 25, 26, 18, 19, 20, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |( 16  )|  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+	Item at (2,2,1)->17:
+		Dyn: [26] = {4, 5, 3, 7, 8, 6, 1, 2, 0, 13, 14, 12, 16, 15, 10, 11, 9, 22, 23, 21, 25, 26, 24, 19, 20, 18, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |( 17  )|  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+	Item at (0,0,2)->18:
+		Dyn: [26] = {17, 15, 16, 11, 9, 10, 14, 12, 13, 26, 24, 25, 20, 19, 23, 21, 22, 8, 6, 7, 2, 0, 1, 5, 3, 4, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+				|  20   |( 18  )|  19   |
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+	Item at (1,0,2)->19:
+		Dyn: [26] = {15, 16, 17, 9, 10, 11, 12, 13, 14, 24, 25, 26, 18, 20, 21, 22, 23, 6, 7, 8, 0, 1, 2, 3, 4, 5, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+				|  18   |( 19  )|  20   |
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+	Item at (2,0,2)->20:
+		Dyn: [26] = {16, 17, 15, 10, 11, 9, 13, 14, 12, 25, 26, 24, 19, 18, 22, 23, 21, 7, 8, 6, 1, 2, 0, 4, 5, 3, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+				|  19   |( 20  )|  18   |
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+	Item at (0,1,2)->21:
+		Dyn: [26] = {11, 9, 10, 14, 12, 13, 17, 15, 16, 20, 18, 19, 23, 22, 26, 24, 25, 2, 0, 1, 5, 3, 4, 8, 6, 7, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  26   |  24   |  25   |
+				-------------------------
+				|  23   |( 21  )|  22   |
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+	Item at (1,1,2)->22:
+		Dyn: [26] = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 0, 1, 2, 3, 4, 5, 6, 7, 8, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  24   |  25   |  26   |
+				-------------------------
+				|  21   |( 22  )|  23   |
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+	Item at (2,1,2)->23:
+		Dyn: [26] = {10, 11, 9, 13, 14, 12, 16, 17, 15, 19, 20, 18, 22, 21, 25, 26, 24, 1, 2, 0, 4, 5, 3, 7, 8, 6, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  25   |  26   |  24   |
+				-------------------------
+				|  22   |( 23  )|  21   |
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+	Item at (0,2,2)->24:
+		Dyn: [26] = {14, 12, 13, 17, 15, 16, 11, 9, 10, 23, 21, 22, 26, 25, 20, 18, 19, 5, 3, 4, 8, 6, 7, 2, 0, 1, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  11   |   9   |  10   |
+				-------------------------
+				|  17   |  15   |  16   |
+				-------------------------
+				|  14   |  12   |  13   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  20   |  18   |  19   |
+				-------------------------
+				|  26   |( 24  )|  25   |
+				-------------------------
+				|  23   |  21   |  22   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   2   |   0   |   1   |
+				-------------------------
+				|   8   |   6   |   7   |
+				-------------------------
+				|   5   |   3   |   4   |
+				-------------------------
+	Item at (1,2,2)->25:
+		Dyn: [26] = {12, 13, 14, 15, 16, 17, 9, 10, 11, 21, 22, 23, 24, 26, 18, 19, 20, 3, 4, 5, 6, 7, 8, 0, 1, 2, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|   9   |  10   |  11   |
+				-------------------------
+				|  15   |  16   |  17   |
+				-------------------------
+				|  12   |  13   |  14   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  18   |  19   |  20   |
+				-------------------------
+				|  24   |( 25  )|  26   |
+				-------------------------
+				|  21   |  22   |  23   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   0   |   1   |   2   |
+				-------------------------
+				|   6   |   7   |   8   |
+				-------------------------
+				|   3   |   4   |   5   |
+				-------------------------
+	Item at (2,2,2)->26:
+		Dyn: [26] = {13, 14, 12, 16, 17, 15, 10, 11, 9, 22, 23, 21, 25, 24, 19, 20, 18, 4, 5, 3, 7, 8, 6, 1, 2, 0, }
+		Full:
+			-1 in 3rd dim plane
+				-------------------------
+				|  10   |  11   |   9   |
+				-------------------------
+				|  16   |  17   |  15   |
+				-------------------------
+				|  13   |  14   |  12   |
+				-------------------------
+			ref item's plane in 3rd dim
+				-------------------------
+				|  19   |  20   |  18   |
+				-------------------------
+				|  25   |( 26  )|  24   |
+				-------------------------
+				|  22   |  23   |  21   |
+				-------------------------
+			+1 3rd dim
+				-------------------------
+				|   1   |   2   |   0   |
+				-------------------------
+				|   7   |   8   |   6   |
+				-------------------------
+				|   4   |   5   |   3   |
+				-------------------------
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK26Topology.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK26Topology.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testIJK26Topology " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK26Topology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK26Topology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,190 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testIJK26Topology.c 3583 2006-05-16 10:06:22Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+void Test_TestTopologyOfSize( Dictionary* dictionary, IJK ijkSize, Bool periodic[3], Stream* stream ) {	
+	IJK26Topology*	topology;
+	Index		i,j,k;
+	Index elNum;
+	Index           sizeI, sizeJ, sizeK;
+
+	sizeI = ijkSize[I_AXIS];
+	sizeJ = ijkSize[J_AXIS];
+	sizeK = ijkSize[K_AXIS];
+
+	topology = IJK26Topology_New_All( "Topology", NULL, ijkSize, periodic );
+	Journal_Printf( stream, "topology:{ " );
+	for ( i=0; i < 3; i++ ) {
+		Journal_Printf( stream, "%d, ", topology->size[i] );
+	}
+	Journal_Printf( stream, "}" );
+
+	Journal_Printf( stream, " - isPeriodic = { " );
+	for ( i=0; i < 3; i++ ) {
+		Journal_Printf( stream, "%s, ", StG_BoolToStringMap[topology->isPeriodic[i]] );
+	}
+	Journal_Printf( stream, "}\n" );
+
+	Stream_Indent( stream );
+
+	for ( k=0; k < sizeK; k++ ) {
+		for ( j=0; j < sizeJ; j++ ) {
+			for ( i=0; i < sizeI; i++ ) {
+				IJK_3DTo1D_3( topology, i, j, k, &elNum );
+				Journal_Printf( stream, "Item at (%d,%d,%d)->%d:\n", 
+					i, j, k, elNum );
+				Stream_Indent( stream );
+				Journal_Printf( stream, "Dyn: " );
+				topology->dynamicSizes = True;
+				IJK26Topology_PrintNeighboursOfIndex( topology, elNum, stream );
+				Journal_Printf( stream, "Full:\n" );
+				Stream_Indent( stream );
+				topology->dynamicSizes = False;
+				IJK26Topology_PrintNeighboursOfIndex( topology, elNum, stream );
+				Stream_UnIndent( stream );
+				Stream_UnIndent( stream );
+			}
+		}	
+	}
+	Journal_Printf( stream, "\n" );
+
+	Stream_UnIndent( stream );
+
+	Stg_Class_Delete( topology );
+}	
+
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	Bool            periodic[3] = { False, False, False };
+	unsigned int    ii, jj, kk;
+	Stream*         stream;
+	IJK             ijkSize;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	stream = Journal_Register( Info_Type, argv[0] );
+	Stream_Enable( stream, True );
+
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+
+	Journal_Printf( stream, "+++++++++++++ 1D Tests +++++++++++++\n\n" );
+	ijkSize[I_AXIS] = 1;
+	ijkSize[J_AXIS] = 1;
+	ijkSize[K_AXIS] = 1;
+	periodic[I_AXIS] = False;
+	periodic[J_AXIS] = False;
+	periodic[K_AXIS] = False;
+	for ( ijkSize[I_AXIS] = 1; ijkSize[I_AXIS] <= 3; ijkSize[I_AXIS]++ ) {
+		for ( ii=False; ii < 2; ii++ ) {
+			periodic[I_AXIS] = ii;
+			Test_TestTopologyOfSize( dictionary, ijkSize, periodic, stream );
+		}	
+	}
+	ijkSize[I_AXIS] = 1;
+	periodic[I_AXIS] = True;	/* Leave this on just to make sure it has no effect on J axis */
+	for ( ijkSize[J_AXIS] = 2; ijkSize[J_AXIS] <= 3; ijkSize[J_AXIS]++ ) {
+		for ( ii=False; ii < 2; ii++ ) {
+			periodic[J_AXIS] = ii;
+			Test_TestTopologyOfSize( dictionary, ijkSize, periodic, stream );
+		}	
+	}
+
+	Journal_Printf( stream, "+++++++++++++ 2D Tests +++++++++++++\n\n" );
+	ijkSize[I_AXIS] = 1;
+	ijkSize[J_AXIS] = 1;
+	ijkSize[K_AXIS] = 1;
+	periodic[I_AXIS] = False;
+	periodic[J_AXIS] = False;
+	periodic[K_AXIS] = False;
+	for ( ijkSize[J_AXIS] = 2; ijkSize[J_AXIS] <= 3; ijkSize[J_AXIS]++ ) {
+		for ( ijkSize[I_AXIS] = 2; ijkSize[I_AXIS] <= 3; ijkSize[I_AXIS]++ ) {
+			for ( jj=False; jj < 2; jj++ ) {
+				periodic[J_AXIS] = jj;
+				for ( ii=False; ii < 2; ii++ ) {
+					periodic[I_AXIS] = ii;
+					Test_TestTopologyOfSize( dictionary, ijkSize, periodic, stream );
+				}
+			}
+		}
+	}
+
+	Journal_Printf( stream, "+++++++++++++ 3D Tests +++++++++++++\n\n" );
+	ijkSize[I_AXIS] = 3;
+	ijkSize[J_AXIS] = 3;
+	ijkSize[K_AXIS] = 3;
+	periodic[I_AXIS] = False;
+	periodic[J_AXIS] = False;
+	periodic[K_AXIS] = False;
+	for ( kk=False; kk < 2; kk++ ) {
+		periodic[K_AXIS] = kk;
+
+		for ( jj=False; jj < 2; jj++ ) {
+			periodic[J_AXIS] = jj;
+
+			for ( ii=False; ii < 2; ii++ ) {
+				periodic[I_AXIS] = ii;
+				Test_TestTopologyOfSize( dictionary, ijkSize, periodic, stream );
+			}
+		}
+	}	
+
+	Stg_Class_Delete( dictionary );
+		
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK6Topology.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK6Topology.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,334 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
++++ 1D Tests +++
+
+*** Construction test ***
+topology->size[0-2] = { 3, 1, 1, }
+
+*** Topology_NeighbourCount() and BuildNeighbour() tests. ***
+
+Reference object, loc (0,0,0) (0)
+Dynamic:
+	ElNbrs[0-0] = {1, }
+Non-Dynamic
+	ElNbrs[0-1] = {1, 3(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-1] = {1, 2, }
+
+Reference object, loc (1,0,0) (1)
+Dynamic:
+	ElNbrs[0-1] = {2, 0, }
+Non-Dynamic
+	ElNbrs[0-1] = {2, 0, }
+Non-Dynamic, Periodic
+	ElNbrs[0-1] = {2, 0, }
+
+Reference object, loc (2,0,0) (2)
+Dynamic:
+	ElNbrs[0-0] = {1, }
+Non-Dynamic
+	ElNbrs[0-1] = {3(Inv), 1, }
+Non-Dynamic, Periodic
+	ElNbrs[0-1] = {0, 1, }
+
++++ 2D Tests +++
+
+*** Construction test ***
+topology->size[0-2] = { 3, 3, 1, }
+
+*** Topology_NeighbourCount() and BuildNeighbour() tests. ***
+
+Reference object, loc (0,0,0) (0)
+Dynamic:
+	ElNbrs[0-1] = {1, 3, }
+Non-Dynamic
+	ElNbrs[0-3] = {1, 3, 9(Inv), 9(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {1, 3, 2, 6, }
+
+Reference object, loc (1,0,0) (1)
+Dynamic:
+	ElNbrs[0-2] = {2, 4, 0, }
+Non-Dynamic
+	ElNbrs[0-3] = {2, 4, 0, 9(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {2, 4, 0, 7, }
+
+Reference object, loc (2,0,0) (2)
+Dynamic:
+	ElNbrs[0-1] = {5, 1, }
+Non-Dynamic
+	ElNbrs[0-3] = {9(Inv), 5, 1, 9(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {0, 5, 1, 8, }
+
+Reference object, loc (0,1,0) (3)
+Dynamic:
+	ElNbrs[0-2] = {4, 6, 0, }
+Non-Dynamic
+	ElNbrs[0-3] = {4, 6, 9(Inv), 0, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {4, 6, 5, 0, }
+
+Reference object, loc (1,1,0) (4)
+Dynamic:
+	ElNbrs[0-3] = {5, 7, 3, 1, }
+Non-Dynamic
+	ElNbrs[0-3] = {5, 7, 3, 1, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {5, 7, 3, 1, }
+
+Reference object, loc (2,1,0) (5)
+Dynamic:
+	ElNbrs[0-2] = {8, 4, 2, }
+Non-Dynamic
+	ElNbrs[0-3] = {9(Inv), 8, 4, 2, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {3, 8, 4, 2, }
+
+Reference object, loc (0,2,0) (6)
+Dynamic:
+	ElNbrs[0-1] = {7, 3, }
+Non-Dynamic
+	ElNbrs[0-3] = {7, 9(Inv), 9(Inv), 3, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {7, 0, 8, 3, }
+
+Reference object, loc (1,2,0) (7)
+Dynamic:
+	ElNbrs[0-2] = {8, 6, 4, }
+Non-Dynamic
+	ElNbrs[0-3] = {8, 9(Inv), 6, 4, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {8, 1, 6, 4, }
+
+Reference object, loc (2,2,0) (8)
+Dynamic:
+	ElNbrs[0-1] = {7, 5, }
+Non-Dynamic
+	ElNbrs[0-3] = {9(Inv), 9(Inv), 7, 5, }
+Non-Dynamic, Periodic
+	ElNbrs[0-3] = {6, 2, 7, 5, }
+
++++ 3D Tests +++
+
+*** Construction test ***
+topology->size[0-2] = { 3, 3, 3, }
+
+*** Topology_NeighbourCount() and BuildNeighbour() tests. ***
+
+Reference object, loc (0,0,0) (0)
+Dynamic:
+	ElNbrs[0-2] = {1, 3, 9, }
+Non-Dynamic
+	ElNbrs[0-5] = {1, 3, 9, 27(Inv), 27(Inv), 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {1, 3, 9, 2, 6, 18, }
+
+Reference object, loc (1,0,0) (1)
+Dynamic:
+	ElNbrs[0-3] = {2, 4, 10, 0, }
+Non-Dynamic
+	ElNbrs[0-5] = {2, 4, 10, 0, 27(Inv), 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {2, 4, 10, 0, 7, 19, }
+
+Reference object, loc (2,0,0) (2)
+Dynamic:
+	ElNbrs[0-2] = {5, 11, 1, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 5, 11, 1, 27(Inv), 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {0, 5, 11, 1, 8, 20, }
+
+Reference object, loc (0,1,0) (3)
+Dynamic:
+	ElNbrs[0-3] = {4, 6, 12, 0, }
+Non-Dynamic
+	ElNbrs[0-5] = {4, 6, 12, 27(Inv), 0, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {4, 6, 12, 5, 0, 21, }
+
+Reference object, loc (1,1,0) (4)
+Dynamic:
+	ElNbrs[0-4] = {5, 7, 13, 3, 1, }
+Non-Dynamic
+	ElNbrs[0-5] = {5, 7, 13, 3, 1, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {5, 7, 13, 3, 1, 22, }
+
+Reference object, loc (2,1,0) (5)
+Dynamic:
+	ElNbrs[0-3] = {8, 14, 4, 2, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 8, 14, 4, 2, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {3, 8, 14, 4, 2, 23, }
+
+Reference object, loc (0,2,0) (6)
+Dynamic:
+	ElNbrs[0-2] = {7, 15, 3, }
+Non-Dynamic
+	ElNbrs[0-5] = {7, 27(Inv), 15, 27(Inv), 3, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {7, 0, 15, 8, 3, 24, }
+
+Reference object, loc (1,2,0) (7)
+Dynamic:
+	ElNbrs[0-3] = {8, 16, 6, 4, }
+Non-Dynamic
+	ElNbrs[0-5] = {8, 27(Inv), 16, 6, 4, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {8, 1, 16, 6, 4, 25, }
+
+Reference object, loc (2,2,0) (8)
+Dynamic:
+	ElNbrs[0-2] = {17, 7, 5, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 27(Inv), 17, 7, 5, 27(Inv), }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {6, 2, 17, 7, 5, 26, }
+
+Reference object, loc (0,0,1) (9)
+Dynamic:
+	ElNbrs[0-3] = {10, 12, 18, 0, }
+Non-Dynamic
+	ElNbrs[0-5] = {10, 12, 18, 27(Inv), 27(Inv), 0, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {10, 12, 18, 11, 15, 0, }
+
+Reference object, loc (1,0,1) (10)
+Dynamic:
+	ElNbrs[0-4] = {11, 13, 19, 9, 1, }
+Non-Dynamic
+	ElNbrs[0-5] = {11, 13, 19, 9, 27(Inv), 1, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {11, 13, 19, 9, 16, 1, }
+
+Reference object, loc (2,0,1) (11)
+Dynamic:
+	ElNbrs[0-3] = {14, 20, 10, 2, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 14, 20, 10, 27(Inv), 2, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {9, 14, 20, 10, 17, 2, }
+
+Reference object, loc (0,1,1) (12)
+Dynamic:
+	ElNbrs[0-4] = {13, 15, 21, 9, 3, }
+Non-Dynamic
+	ElNbrs[0-5] = {13, 15, 21, 27(Inv), 9, 3, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {13, 15, 21, 14, 9, 3, }
+
+Reference object, loc (1,1,1) (13)
+Dynamic:
+	ElNbrs[0-5] = {14, 16, 22, 12, 10, 4, }
+Non-Dynamic
+	ElNbrs[0-5] = {14, 16, 22, 12, 10, 4, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {14, 16, 22, 12, 10, 4, }
+
+Reference object, loc (2,1,1) (14)
+Dynamic:
+	ElNbrs[0-4] = {17, 23, 13, 11, 5, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 17, 23, 13, 11, 5, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {12, 17, 23, 13, 11, 5, }
+
+Reference object, loc (0,2,1) (15)
+Dynamic:
+	ElNbrs[0-3] = {16, 24, 12, 6, }
+Non-Dynamic
+	ElNbrs[0-5] = {16, 27(Inv), 24, 27(Inv), 12, 6, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {16, 9, 24, 17, 12, 6, }
+
+Reference object, loc (1,2,1) (16)
+Dynamic:
+	ElNbrs[0-4] = {17, 25, 15, 13, 7, }
+Non-Dynamic
+	ElNbrs[0-5] = {17, 27(Inv), 25, 15, 13, 7, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {17, 10, 25, 15, 13, 7, }
+
+Reference object, loc (2,2,1) (17)
+Dynamic:
+	ElNbrs[0-3] = {26, 16, 14, 8, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 27(Inv), 26, 16, 14, 8, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {15, 11, 26, 16, 14, 8, }
+
+Reference object, loc (0,0,2) (18)
+Dynamic:
+	ElNbrs[0-2] = {19, 21, 9, }
+Non-Dynamic
+	ElNbrs[0-5] = {19, 21, 27(Inv), 27(Inv), 27(Inv), 9, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {19, 21, 0, 20, 24, 9, }
+
+Reference object, loc (1,0,2) (19)
+Dynamic:
+	ElNbrs[0-3] = {20, 22, 18, 10, }
+Non-Dynamic
+	ElNbrs[0-5] = {20, 22, 27(Inv), 18, 27(Inv), 10, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {20, 22, 1, 18, 25, 10, }
+
+Reference object, loc (2,0,2) (20)
+Dynamic:
+	ElNbrs[0-2] = {23, 19, 11, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 23, 27(Inv), 19, 27(Inv), 11, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {18, 23, 2, 19, 26, 11, }
+
+Reference object, loc (0,1,2) (21)
+Dynamic:
+	ElNbrs[0-3] = {22, 24, 18, 12, }
+Non-Dynamic
+	ElNbrs[0-5] = {22, 24, 27(Inv), 27(Inv), 18, 12, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {22, 24, 3, 23, 18, 12, }
+
+Reference object, loc (1,1,2) (22)
+Dynamic:
+	ElNbrs[0-4] = {23, 25, 21, 19, 13, }
+Non-Dynamic
+	ElNbrs[0-5] = {23, 25, 27(Inv), 21, 19, 13, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {23, 25, 4, 21, 19, 13, }
+
+Reference object, loc (2,1,2) (23)
+Dynamic:
+	ElNbrs[0-3] = {26, 22, 20, 14, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 26, 27(Inv), 22, 20, 14, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {21, 26, 5, 22, 20, 14, }
+
+Reference object, loc (0,2,2) (24)
+Dynamic:
+	ElNbrs[0-2] = {25, 21, 15, }
+Non-Dynamic
+	ElNbrs[0-5] = {25, 27(Inv), 27(Inv), 27(Inv), 21, 15, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {25, 18, 6, 26, 21, 15, }
+
+Reference object, loc (1,2,2) (25)
+Dynamic:
+	ElNbrs[0-3] = {26, 24, 22, 16, }
+Non-Dynamic
+	ElNbrs[0-5] = {26, 27(Inv), 27(Inv), 24, 22, 16, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {26, 19, 7, 24, 22, 16, }
+
+Reference object, loc (2,2,2) (26)
+Dynamic:
+	ElNbrs[0-2] = {25, 23, 17, }
+Non-Dynamic
+	ElNbrs[0-5] = {27(Inv), 27(Inv), 27(Inv), 25, 23, 17, }
+Non-Dynamic, Periodic
+	ElNbrs[0-5] = {24, 20, 8, 25, 23, 17, }
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK6Topology.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK6Topology.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testIJK6Topology " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIJK6Topology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIJK6Topology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,150 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testIJK6Topology.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+void Test_PrintNeighbours( IJK6Topology* topology, Index i, Index j, Index k, Bool dynamicSizes ) {
+	Index elNum;
+	NeighbourIndex nbrCount;
+	NeighbourIndex* elNbrs;
+	char* dynStr;
+
+	topology->dynamicSizes = dynamicSizes;
+	if ( dynamicSizes ) {
+		dynStr = "on";
+	} 
+	else {
+		dynStr = "off";
+	}
+	
+	IJK_3DTo1D_3( topology, i, j, k, &elNum );
+	nbrCount = Topology_NeighbourCount( topology, elNum );
+	elNbrs = Memory_Alloc_Array( NeighbourIndex, nbrCount, "elNbrs" );
+	Topology_BuildNeighbours( topology, elNum, elNbrs );
+	printf( "\tElNbrs[0-%d] = {", nbrCount-1 );
+	for ( i=0; i < nbrCount; i++ ) {
+		printf( "%d", elNbrs[i] );
+		if ( elNbrs[i] == Topology_Invalid( topology ) ) {
+			printf( "(Inv)");
+		}
+		printf( ", ");
+	}
+	printf( "}\n" );
+	Memory_Free( elNbrs );
+}	
+
+
+void Test_TestTopologyOfSize( Dictionary* dictionary, Index sizeI, Index sizeJ, Index sizeK ) {	
+	IJK6Topology*	topology;
+	Index		i,j,k;
+	Index elNum;
+
+	Dictionary_Set( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( sizeI ) );
+	Dictionary_Set( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( sizeJ ) );
+	Dictionary_Set( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( sizeK ) );
+
+	printf( "*** Construction test ***\n" );
+	topology = IJK6Topology_New( "topology", dictionary );
+	printf( "topology->size[0-2] = { " );
+	for ( i=0; i < 3; i++ ) {
+		printf( "%d, ", topology->size[i] );
+	}
+	printf( "}\n\n" );
+
+	printf( "*** Topology_NeighbourCount() and BuildNeighbour() tests. ***\n\n" );
+	for ( k=0; k < sizeK; k++ ) {
+		for ( j=0; j < sizeJ; j++ ) {
+			for ( i=0; i < sizeI; i++ ) {
+				IJK_3DTo1D_3( topology, i, j, k, &elNum );
+				printf( "Reference object, loc (%d,%d,%d) (%d)\n", 
+					i, j, k, elNum );
+				printf( "Dynamic:\n" );
+				Test_PrintNeighbours( topology, i, j, k, True );
+				printf( "Non-Dynamic\n" );
+				Test_PrintNeighbours( topology, i, j, k, False );
+				printf( "Non-Dynamic, Periodic\n" );
+				topology->isPeriodic[I_AXIS] = True;
+				topology->isPeriodic[J_AXIS] = True;
+				topology->isPeriodic[K_AXIS] = True;
+				Test_PrintNeighbours( topology, i, j, k, False );
+				topology->isPeriodic[I_AXIS] = False;
+				topology->isPeriodic[J_AXIS] = False;
+				topology->isPeriodic[K_AXIS] = False;
+				printf( "\n" );
+			}
+		}	
+	}
+
+	Stg_Class_Delete( topology );
+}	
+
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	int		rank;
+	int		numProcessors;
+	MPI_Comm	CommWorld;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+
+	printf( "+++ 1D Tests +++\n\n" );
+	Test_TestTopologyOfSize( dictionary, 3, 1, 1 );
+	printf( "+++ 2D Tests +++\n\n" );
+	Test_TestTopologyOfSize( dictionary, 3, 3, 1 );
+	printf( "+++ 3D Tests +++\n\n" );
+	Test_TestTopologyOfSize( dictionary, 3, 3, 3 );
+
+	Stg_Class_Delete( dictionary );
+		
+	StgDomainGeometry_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	
+	return 0;
+}	
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIrregGeometry.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIrregGeometry.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Individual point test:
+	Point 0 : { 0.2, 0.9, 0.1 }
+	Point 1 : { 0.1, 0.7, 0 }
+	Point 2 : { 0.2, 0.5, 0.08 }
+	Point 3 : { 0.3, 0.3, 0.1 }
+	Point 4 : { 0.2, 0.1, 0.1 }
+	Point 5 : { 0.3, 0.9, 0.3 }
+	Point 6 : { 0.2, 0.7, 0.2 }
+	Point 7 : { 0.3, 0.5, 0.28 }
+	Point 8 : { 0.4, 0.3, 0.3 }
+	Point 9 : { 0.3, 0.1, 0.3 }
+	Point 10 : { 0.5, 0.9, 0.5 }
+	Point 11 : { 0.4, 0.7, 0.4 }
+	Point 12 : { 0.5, 0.5, 0.48 }
+	Point 13 : { 0.6, 0.3, 0.4 }
+	Point 14 : { 0.5, 0.1, 0.4 }
+	Point 15 : { 0.7, 0.9, 0.7 }
+	Point 16 : { 0.6, 0.7, 0.6 }
+	Point 17 : { 0.7, 0.5, 0.68 }
+	Point 18 : { 0.8, 0.3, 0.7 }
+	Point 19 : { 0.7, 0.1, 0.7 }
+	Point 20 : { 0.8, 0.9, 0.9 }
+	Point 21 : { 0.7, 0.7, 0.8 }
+	Point 22 : { 0.8, 0.5, 0.88 }
+	Point 23 : { 0.9, 0.3, 0.9 }
+	Point 24 : { 0.8, 0.1, 0.9 }
+
+Total point test:
+	Point 0 : { 0.2, 0.9, 0.1 }
+	Point 1 : { 0.1, 0.7, 0 }
+	Point 2 : { 0.2, 0.5, 0.08 }
+	Point 3 : { 0.3, 0.3, 0.1 }
+	Point 4 : { 0.2, 0.1, 0.1 }
+	Point 5 : { 0.3, 0.9, 0.3 }
+	Point 6 : { 0.2, 0.7, 0.2 }
+	Point 7 : { 0.3, 0.5, 0.28 }
+	Point 8 : { 0.4, 0.3, 0.3 }
+	Point 9 : { 0.3, 0.1, 0.3 }
+	Point 10 : { 0.5, 0.9, 0.5 }
+	Point 11 : { 0.4, 0.7, 0.4 }
+	Point 12 : { 0.5, 0.5, 0.48 }
+	Point 13 : { 0.6, 0.3, 0.4 }
+	Point 14 : { 0.5, 0.1, 0.4 }
+	Point 15 : { 0.7, 0.9, 0.7 }
+	Point 16 : { 0.6, 0.7, 0.6 }
+	Point 17 : { 0.7, 0.5, 0.68 }
+	Point 18 : { 0.8, 0.3, 0.7 }
+	Point 19 : { 0.7, 0.1, 0.7 }
+	Point 20 : { 0.8, 0.9, 0.9 }
+	Point 21 : { 0.7, 0.7, 0.8 }
+	Point 22 : { 0.8, 0.5, 0.88 }
+	Point 23 : { 0.9, 0.3, 0.9 }
+	Point 24 : { 0.8, 0.1, 0.9 }
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIrregGeometry.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIrregGeometry.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testIrregGeometry " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testIrregGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testIrregGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,94 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testIrregGeometry.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	Geometry*	geometry;
+	Coord_List	points;
+	Index		i;
+	XML_IO_Handler*	io_handler;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+
+	StGermain_Init( &argc, &argv );
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	io_handler = XML_IO_Handler_New();
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile( io_handler, "data/points.xml", dictionary );
+	
+	geometry = (Geometry*)IrregGeometry_New( "irregGeometry", dictionary, "pointList");
+	
+	printf( "Individual point test:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, point );
+		printf( "{ %g, %g, %g }\n", point[0], point[1], point[2] );
+	}
+	printf( "\n" );
+	
+	printf( "Total point test:\n" );
+	points = Memory_Alloc_Array( Coord, geometry->pointCount, "points" );
+	geometry->buildPoints( geometry, points );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, points[i] );
+		printf( "{ %g, %g, %g }\n", points[i][0], points[i][1], points[i][2] );
+	}
+	printf( "\n" );
+	if( points )
+		Memory_Free( points );
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( io_handler );
+	
+	StgDomainGeometry_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testLine.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testLine.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+True
+True
+True
+False
+True
+True
+True
+True
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testLine.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testLine.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testLine " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testLine.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testLine.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,83 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testLine.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	Coord		points[4] = { { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 0.5, 0.9, 0.5 }, { 1.2, 0.7, 0.8 } };
+	Coord		insidePoint = { 0.7, 0.3, 0.0 };
+	Coord		outsidePoint = { -0.2, 0.3, 0.0 };
+	Stg_Line		lines[4];
+	Index		i;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	/*
+	** When lines are to be used as boundaries (ie. determining whether other points lay
+	** to the left or right of the line), points must be specified from left to right, where
+	** the region in front of the line is considered the 'inside'.
+	*/
+	Stg_Line_CalcFromPoints( lines[0], points[0], points[1] );
+	Stg_Line_CalcFromPoints( lines[1], points[2], points[0] );
+	Stg_Line_CalcFromPoints( lines[2], points[1], points[3] );
+	Stg_Line_CalcFromPoints( lines[3], points[3], points[2] );
+	
+	for( i = 0; i < 4; i++ ) {
+		printf( "%s\n", Stg_Line_PointIsInside( lines[i], insidePoint ) ? "True" : "False" );
+		printf( "%s\n", Stg_Line_PointIsInside( lines[i], outsidePoint ) ? "True" : "False" );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testParallelDelaunay.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testParallelDelaunay.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+StGermain Framework revision 3667. Copyright (C) 2003-2005 VPAC.
+
+Testing irregular parallel triangulation..
+
+
+	Running Parallel Triangulator on 100 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 400 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 900 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 1600 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+Testing regular parallel triangulation..
+
+
+	Running Parallel Triangulator on 100 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 400 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 900 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 1600 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testParallelDelaunay.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testParallelDelaunay.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testParallelDelaunay " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testParallelDelaunay.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testParallelDelaunay.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+StGermain Framework revision 3667. Copyright (C) 2003-2005 VPAC.
+
+Testing irregular parallel triangulation..
+
+
+	Running Parallel Triangulator on 100 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 400 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 900 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 1600 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+Testing regular parallel triangulation..
+
+
+	Running Parallel Triangulator on 100 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 400 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 900 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
+
+	Running Parallel Triangulator on 1600 nodes
+
+		Parallel Voronoi Area test: passed
+		Parallel Voronoi Sides test: passed
+		Parallel Triangle count test: passed
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testParallelDelaunay.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testParallelDelaunay.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testParallelDelaunay " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testParallelDelaunay.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testParallelDelaunay.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,277 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testEdge.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+
+typedef enum pointsType_t{
+	Irregular,
+	Regular,
+	Polygon
+}pointsType;
+
+#define PI 3.1415926535897932384626
+
+void generatePoints( CoordF *sites, int numSites, pointsType *p )
+{
+	int num, i, j;
+	
+	assert( sites );
+
+	num = numSites;
+	
+	if( *p == Irregular ){
+		for( i=0; i<num; i++ ){
+			sites[i][0] = drand48();
+			sites[i][1] = drand48();
+		}
+	}
+	else if (*p == Regular){
+		int count = 0;
+		num = sqrt((float)num);
+		for( i=0; i<num; i++ ){
+			for( j=0; j<num; j++ ){
+				sites[count][0] = ((float)i)*(1/((float)num));
+				sites[count][1] = ((float)j)*(1/((float)num));
+
+				count++;
+			}
+		}
+	}
+	else if( *p == Polygon ){
+		for( i=0; i<num-1; i++ ){
+			sites[i][0] = cos( ((float)i)*2.0*PI/((float)(num-1)) );
+			sites[i][1] = sin( ((float)i)*2.0*PI/((float)(num-1)) );
+		}
+	}
+}
+
+int compareFunction( const void *a, const void *b )
+{
+	int *p, *q;
+
+	p = (int*)a;
+	q = (int*)b;
+
+	if( *p > *q ){
+		return 1;
+	}
+	else if ( *p < *q ){
+		return -1;
+	}
+	else{
+		return 0;
+	}
+}
+
+#define MAX_NEIGH 100
+#define TOLERANCE 0.0001
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	Delaunay *d = NULL;
+	ParallelDelaunay *pd = NULL;
+	DelaunayAttributes attr;
+	CoordF *sites;
+	int i = 0, j = 0, k = 0, m = 0;
+	pointsType p;
+	int numSites = 0;
+	int dNeighbours[MAX_NEIGH];
+	int pdNeighbours[MAX_NEIGH];
+	int numNeighboursTest = 0;
+	int voronoiSidesTest = 0;
+	int voronoiAreaTest = 0;
+	int triangleCountTest = 0;
+	int numSitesArray[4] = { 100, 400, 900, 1600 };
+
+	Dictionary *dictionary = NULL;
+	
+	attr.BuildBoundingTriangle = 0;
+	attr.BuildTriangleIndices = 1;
+	attr.BuildTriangleNeighbours= 1;
+	attr.CreateVoronoiVertices = 1;
+	attr.CalculateVoronoiSides = 1;
+	attr.CalculateVoronoiSurfaceArea = 1;
+	attr.FindNeighbours = 1;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	dictionary = Dictionary_New();
+
+	/* Testing parallel triangulation on irregular poit sets first and then
+	 * on regular point sets */
+	
+	p = Irregular;
+	
+label:	numNeighboursTest = 1;
+	voronoiAreaTest = 1;
+	voronoiSidesTest = 1;
+	triangleCountTest = 1;
+	
+	if (rank == 0){
+		if( p == Irregular ){
+			printf( "\nTesting irregular parallel triangulation..\n\n" );
+		}
+		else if ( p == Regular ){
+			printf( "\nTesting regular parallel triangulation..\n\n" );
+		}
+	}
+	
+	for( i=0; i<4; i++ ){
+
+		numSites = numSitesArray[i];
+		
+		sites = NULL;
+		if( rank == 0 ){
+			sites = Memory_Alloc_Array(CoordF, numSites, "TestParallelDelauney_CoordF" );
+			memset( sites, 0, sizeof( CoordF ) * numSites );
+		
+			generatePoints( sites, numSites, &p );
+		}
+		
+		pd = ParallelDelaunay_New( "Delaunay", dictionary, sites, numSites, rank, numProcessors, &CommWorld, &attr );
+		Stg_Component_Build( pd, NULL, True );
+		Stg_Component_Execute( pd, NULL, True );
+
+		ParallelDelaunay_GatherTriangulation( pd );
+		MPI_Barrier( CommWorld );
+		
+		if( rank == 0 ){
+
+			d = Delaunay_New( "Delaunay", dictionary, sites, numSites, 0, &attr );
+			Stg_Component_Build( d, NULL, True );
+
+			for( j=0; j<numSites; j++ ){
+				
+				/* Checking for parity between voronoiArea generated by the serial and parallel
+				 * triangulations */
+
+				if( fabs(d->voronoiArea[j] - pd->voronoiArea[j]) > TOLERANCE ){
+					printf( "voronoi area %f of node %d not within tolerance\n", pd->voronoiArea[j], j );
+					voronoiAreaTest = 0;
+				}
+				
+				//assert( pd->numNeighbours[j] == d->numNeighbours[j] );
+				if( dNeighbours[k] != pdNeighbours[k] ) continue;
+			
+				memset( dNeighbours, 0, sizeof( dNeighbours ) );
+				memset( pdNeighbours, 0, sizeof( pdNeighbours ) );
+
+				memcpy( dNeighbours, d->neighbours[j], sizeof( int ) * d->numNeighbours[j] );
+				memcpy( pdNeighbours, pd->neighbours[j], sizeof( int ) * pd->numNeighbours[j] );
+				
+				/* The order of the neighbour nodes of each node in a serial triangulation is
+				 * different to that of in a parallel triangulation. Hence we need to sort the
+				 * neighbour nodes to check for parity */
+				
+				qsort( dNeighbours, d->numNeighbours[j], sizeof( int ), compareFunction );
+				qsort( pdNeighbours, pd->numNeighbours[j], sizeof( int ), compareFunction );
+	
+				
+				/* Checking for parity between the length of the voronoi sides generated by 
+				 * the serial and parallel triangulations */
+
+				for( k=0; k<d->numNeighbours[j]; k++ ){
+					//assert( dNeighbours[k] == pdNeighbours[k] );
+					if( dNeighbours[k] != pdNeighbours[k] ) continue;
+
+					for( m=0; m<d->numNeighbours[j]; m++ ){
+						if( d->neighbours[j][k] == pd->neighbours[j][m] ){
+							if( fabs(d->voronoiSides[j][k] - pd->voronoiSides[j][m]) > TOLERANCE ){
+								printf( "voronoi side %f of node %d not within tolerance\n", pd->voronoiSides[j][m], j );
+								voronoiSidesTest = 0;
+							}
+						}
+					}
+				}
+			}
+			
+			if( d->numTriangles != pd->numTriangles ){
+				triangleCountTest = 0;
+			}
+			
+			Stg_Class_Delete( d );
+		}
+
+		Stg_Class_Delete( pd );
+		
+		if( rank == 0 ){
+			Memory_Free( sites );
+		}
+		
+		if (rank == 0){
+
+			printf( "\n\tRunning Parallel Triangulator on %d nodes\n\n", numSites );
+	
+			if( voronoiAreaTest ){
+				printf( "\t\tParallel Voronoi Area test: passed\n" );
+			}
+	
+			if( voronoiSidesTest ){
+				printf( "\t\tParallel Voronoi Sides test: passed\n" );
+			}
+		
+			if( triangleCountTest ){
+				printf( "\t\tParallel Triangle count test: passed\n" );
+			}
+		}
+	}
+	
+	if(p == Irregular){
+		p = Regular;
+		goto label;
+	}
+	
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testPlane.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testPlane.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Plane: 0x + -0y + 1z = 2
+Distance to point: 4
+In front A: True
+In front B: False
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testPlane.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testPlane.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testPlane " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testPlane.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testPlane.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,94 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testPlane.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Coord	axisA = { 1.0, 0.3, 0.0 };
+		Coord	axisB = { -0.3, 1.0, 0.0 };
+		Coord	point1 = { 0.0, 0.0, 2.0 };
+		Coord	point2 = { 20.0, 100.0, 6.0 };
+		Coord	point3 = { 20.0, 100.0, -60.0 };
+		Plane	a;
+
+		Plane_CalcFromVec( a, axisA, axisB, point1 );
+		printf( "Plane: %gx + %gy + %gz = %g\n", a[0], a[1], a[2], a[3] );
+		printf( "Distance to point: %g\n", Plane_DistanceToPoint( a, point2 ) );
+
+		printf( "In front A: " );
+		if( Plane_PointIsInFront( a, point2 ) )
+			printf( "True\n" );
+		else
+			printf( "False\n" );
+
+		printf( "In front B: " );
+		if( Plane_PointIsInFront( a, point3 ) )
+			printf( "True\n" );
+		else
+			printf( "False\n" );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testRMatrix.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testRMatrix.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,106 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testRMatrix.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+void RMatrix_Print( RMatrix mat );
+
+
+int main( int argc, char* argv[] ) {
+	RMatrix		matrix;
+	Coord		xz = { 1.0, 0.0, 1.0 };
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	RMatrix_LoadIdentity( matrix );
+	printf( "\n" ); RMatrix_Print( matrix );
+	RMatrix_ApplyRotationX( matrix, M_PI / 2.0 );
+	printf( "\n" ); RMatrix_Print( matrix );
+	RMatrix_VectorMult( xz, matrix, xz );
+	printf( "\n\t%g, %g, %g\n", xz[0], xz[1], xz[2] );
+	
+	RMatrix_LoadIdentity( matrix );
+	RMatrix_ApplyRotationY( matrix, M_PI / 2.0 );
+	printf( "\n" ); RMatrix_Print( matrix );
+	RMatrix_VectorMult( xz, matrix, xz );
+	printf( "\n\t%g, %g, %g\n", xz[0], xz[1], xz[2] );
+	
+	RMatrix_LoadIdentity( matrix );
+	RMatrix_ApplyRotationZ( matrix, M_PI / 2.0 );
+	printf( "\n" ); RMatrix_Print( matrix );
+	RMatrix_VectorMult( xz, matrix, xz );
+	printf( "\n\t%g, %g, %g\n", xz[0], xz[1], xz[2] );
+	
+	RMatrix_LoadIdentity( matrix );
+	RMatrix_ApplyRotationX( matrix, M_PI / 2.0 );
+	RMatrix_ApplyRotationY( matrix, M_PI / 2.0 );
+	RMatrix_ApplyRotationZ( matrix, M_PI / 2.0 );
+	printf( "\n" ); RMatrix_Print( matrix );
+	RMatrix_VectorMult( xz, matrix, xz );
+	printf( "\n\t%g, %g, %g\n", xz[0], xz[1], xz[2] );
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}
+
+
+void RMatrix_Print( RMatrix mat ) {
+	unsigned		i, j;
+	
+	for( j = 0; j < 3; j++ ) {
+		for( i = 0; i < 3; i++ )
+			printf( "\t%g", mat[j * 3 + i] );
+		printf( "\n" );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testRefinedRegionsGeometry.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testRefinedRegionsGeometry.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,115 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Total point test:
+	Point 0 : { 0, 0, 0 }
+	Point 1 : { 0.05, 0, 0 }
+	Point 2 : { 0.1, 0, 0 }
+	Point 3 : { 0.2125, 0, 0 }
+	Point 4 : { 0.325, 0, 0 }
+	Point 5 : { 0.4375, 0, 0 }
+	Point 6 : { 0.55, 0, 0 }
+	Point 7 : { 0.6625, 0, 0 }
+	Point 8 : { 0.775, 0, 0 }
+	Point 9 : { 0.8875, 0, 0 }
+	Point 10 : { 1, 0, 0 }
+	Point 11 : { 0, 0.375, 0 }
+	Point 12 : { 0.05, 0.375, 0 }
+	Point 13 : { 0.1, 0.375, 0 }
+	Point 14 : { 0.2125, 0.375, 0 }
+	Point 15 : { 0.325, 0.375, 0 }
+	Point 16 : { 0.4375, 0.375, 0 }
+	Point 17 : { 0.55, 0.375, 0 }
+	Point 18 : { 0.6625, 0.375, 0 }
+	Point 19 : { 0.775, 0.375, 0 }
+	Point 20 : { 0.8875, 0.375, 0 }
+	Point 21 : { 1, 0.375, 0 }
+	Point 22 : { 0, 0.75, 0 }
+	Point 23 : { 0.05, 0.75, 0 }
+	Point 24 : { 0.1, 0.75, 0 }
+	Point 25 : { 0.2125, 0.75, 0 }
+	Point 26 : { 0.325, 0.75, 0 }
+	Point 27 : { 0.4375, 0.75, 0 }
+	Point 28 : { 0.55, 0.75, 0 }
+	Point 29 : { 0.6625, 0.75, 0 }
+	Point 30 : { 0.775, 0.75, 0 }
+	Point 31 : { 0.8875, 0.75, 0 }
+	Point 32 : { 1, 0.75, 0 }
+	Point 33 : { 0, 0.875, 0 }
+	Point 34 : { 0.05, 0.875, 0 }
+	Point 35 : { 0.1, 0.875, 0 }
+	Point 36 : { 0.2125, 0.875, 0 }
+	Point 37 : { 0.325, 0.875, 0 }
+	Point 38 : { 0.4375, 0.875, 0 }
+	Point 39 : { 0.55, 0.875, 0 }
+	Point 40 : { 0.6625, 0.875, 0 }
+	Point 41 : { 0.775, 0.875, 0 }
+	Point 42 : { 0.8875, 0.875, 0 }
+	Point 43 : { 1, 0.875, 0 }
+	Point 44 : { 0, 1, 0 }
+	Point 45 : { 0.05, 1, 0 }
+	Point 46 : { 0.1, 1, 0 }
+	Point 47 : { 0.2125, 1, 0 }
+	Point 48 : { 0.325, 1, 0 }
+	Point 49 : { 0.4375, 1, 0 }
+	Point 50 : { 0.55, 1, 0 }
+	Point 51 : { 0.6625, 1, 0 }
+	Point 52 : { 0.775, 1, 0 }
+	Point 53 : { 0.8875, 1, 0 }
+	Point 54 : { 1, 1, 0 }
+
+Individual point test:
+	Point 0 : { 0, 0, 0 }
+	Point 1 : { 0.05, 0, 0 }
+	Point 2 : { 0.1, 0, 0 }
+	Point 3 : { 0.2125, 0, 0 }
+	Point 4 : { 0.325, 0, 0 }
+	Point 5 : { 0.4375, 0, 0 }
+	Point 6 : { 0.55, 0, 0 }
+	Point 7 : { 0.6625, 0, 0 }
+	Point 8 : { 0.775, 0, 0 }
+	Point 9 : { 0.8875, 0, 0 }
+	Point 10 : { 1, 0, 0 }
+	Point 11 : { 0, 0.375, 0 }
+	Point 12 : { 0.05, 0.375, 0 }
+	Point 13 : { 0.1, 0.375, 0 }
+	Point 14 : { 0.2125, 0.375, 0 }
+	Point 15 : { 0.325, 0.375, 0 }
+	Point 16 : { 0.4375, 0.375, 0 }
+	Point 17 : { 0.55, 0.375, 0 }
+	Point 18 : { 0.6625, 0.375, 0 }
+	Point 19 : { 0.775, 0.375, 0 }
+	Point 20 : { 0.8875, 0.375, 0 }
+	Point 21 : { 1, 0.375, 0 }
+	Point 22 : { 0, 0.75, 0 }
+	Point 23 : { 0.05, 0.75, 0 }
+	Point 24 : { 0.1, 0.75, 0 }
+	Point 25 : { 0.2125, 0.75, 0 }
+	Point 26 : { 0.325, 0.75, 0 }
+	Point 27 : { 0.4375, 0.75, 0 }
+	Point 28 : { 0.55, 0.75, 0 }
+	Point 29 : { 0.6625, 0.75, 0 }
+	Point 30 : { 0.775, 0.75, 0 }
+	Point 31 : { 0.8875, 0.75, 0 }
+	Point 32 : { 1, 0.75, 0 }
+	Point 33 : { 0, 0.875, 0 }
+	Point 34 : { 0.05, 0.875, 0 }
+	Point 35 : { 0.1, 0.875, 0 }
+	Point 36 : { 0.2125, 0.875, 0 }
+	Point 37 : { 0.325, 0.875, 0 }
+	Point 38 : { 0.4375, 0.875, 0 }
+	Point 39 : { 0.55, 0.875, 0 }
+	Point 40 : { 0.6625, 0.875, 0 }
+	Point 41 : { 0.775, 0.875, 0 }
+	Point 42 : { 0.8875, 0.875, 0 }
+	Point 43 : { 1, 0.875, 0 }
+	Point 44 : { 0, 1, 0 }
+	Point 45 : { 0.05, 1, 0 }
+	Point 46 : { 0.1, 1, 0 }
+	Point 47 : { 0.2125, 1, 0 }
+	Point 48 : { 0.325, 1, 0 }
+	Point 49 : { 0.4375, 1, 0 }
+	Point 50 : { 0.55, 1, 0 }
+	Point 51 : { 0.6625, 1, 0 }
+	Point 52 : { 0.775, 1, 0 }
+	Point 53 : { 0.8875, 1, 0 }
+	Point 54 : { 1, 1, 0 }
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testRefinedRegionsGeometry.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testRefinedRegionsGeometry.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testRefinedRegionsGeometry " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testRefinedRegionsGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testRefinedRegionsGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,115 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testRefinedRegionsGeometry.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	RefinedRegionsGeometry*	geometry;
+	Coord_List	points;
+	Index		i;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	Dictionary_Entry_Value*	refinedRegion;
+	Dictionary_Entry_Value*	refinedRegions;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 11 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	refinedRegions = Dictionary_Entry_Value_NewList();
+	Dictionary_Add( dictionary, "RefinedRegions", refinedRegions ); 
+	refinedRegion = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( refinedRegion, "dim", Dictionary_Entry_Value_FromUnsignedInt( 0 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "regionStart", Dictionary_Entry_Value_FromDouble( 0.0 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "regionEnd", Dictionary_Entry_Value_FromDouble( 0.1 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "refinementFactor", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Entry_Value_AddElement( refinedRegions, refinedRegion );
+	refinedRegion = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( refinedRegion, "dim", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "regionStart", Dictionary_Entry_Value_FromDouble( 0.75 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "regionEnd", Dictionary_Entry_Value_FromDouble( 1.0 ) );
+	Dictionary_Entry_Value_AddMember( refinedRegion, "refinementFactor", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Entry_Value_AddElement( refinedRegions, refinedRegion );
+
+	
+	geometry = RefinedRegionsGeometry_New( "refinedRegionsGeometry", dictionary );
+
+	printf( "Total point test:\n" );
+	points = Memory_Alloc_Array( Coord, geometry->pointCount, "points" );
+	geometry->buildPoints( geometry, points );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		printf( "\tPoint %u : ", i );
+		printf( "{ %g, %g, %g }\n", points[i][0], points[i][1], points[i][2] );
+	}
+	printf( "\n" );
+
+	printf( "Individual point test:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, point );
+		printf( "{ %g, %g, %g }\n", point[0], point[1], point[2] );
+	}
+	printf( "\n" );
+	
+	if( points )
+		Memory_Free( points );
+	
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testShellGeometry.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testShellGeometry.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,133 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Individual point test:
+	Point 0 : { -0.216506, 0.375, -0.25 }
+	Point 1 : { -0.0751919, 0.426434, -0.25 }
+	Point 2 : { 0.0751919, 0.426434, -0.25 }
+	Point 3 : { 0.216506, 0.375, -0.25 }
+	Point 4 : { -0.246202, 0.426434, -0.0868241 }
+	Point 5 : { -0.085505, 0.484923, -0.0868241 }
+	Point 6 : { 0.085505, 0.484923, -0.0868241 }
+	Point 7 : { 0.246202, 0.426434, -0.0868241 }
+	Point 8 : { -0.246202, 0.426434, 0.0868241 }
+	Point 9 : { -0.085505, 0.484923, 0.0868241 }
+	Point 10 : { 0.085505, 0.484923, 0.0868241 }
+	Point 11 : { 0.246202, 0.426434, 0.0868241 }
+	Point 12 : { -0.216506, 0.375, 0.25 }
+	Point 13 : { -0.0751919, 0.426434, 0.25 }
+	Point 14 : { 0.0751919, 0.426434, 0.25 }
+	Point 15 : { 0.216506, 0.375, 0.25 }
+	Point 16 : { -0.288675, 0.5, -0.333333 }
+	Point 17 : { -0.100256, 0.568579, -0.333333 }
+	Point 18 : { 0.100256, 0.568579, -0.333333 }
+	Point 19 : { 0.288675, 0.5, -0.333333 }
+	Point 20 : { -0.328269, 0.568579, -0.115765 }
+	Point 21 : { -0.114007, 0.646564, -0.115765 }
+	Point 22 : { 0.114007, 0.646564, -0.115765 }
+	Point 23 : { 0.328269, 0.568579, -0.115765 }
+	Point 24 : { -0.328269, 0.568579, 0.115765 }
+	Point 25 : { -0.114007, 0.646564, 0.115765 }
+	Point 26 : { 0.114007, 0.646564, 0.115765 }
+	Point 27 : { 0.328269, 0.568579, 0.115765 }
+	Point 28 : { -0.288675, 0.5, 0.333333 }
+	Point 29 : { -0.100256, 0.568579, 0.333333 }
+	Point 30 : { 0.100256, 0.568579, 0.333333 }
+	Point 31 : { 0.288675, 0.5, 0.333333 }
+	Point 32 : { -0.360844, 0.625, -0.416667 }
+	Point 33 : { -0.12532, 0.710724, -0.416667 }
+	Point 34 : { 0.12532, 0.710724, -0.416667 }
+	Point 35 : { 0.360844, 0.625, -0.416667 }
+	Point 36 : { -0.410337, 0.710724, -0.144707 }
+	Point 37 : { -0.142508, 0.808205, -0.144707 }
+	Point 38 : { 0.142508, 0.808205, -0.144707 }
+	Point 39 : { 0.410337, 0.710724, -0.144707 }
+	Point 40 : { -0.410337, 0.710724, 0.144707 }
+	Point 41 : { -0.142508, 0.808205, 0.144707 }
+	Point 42 : { 0.142508, 0.808205, 0.144707 }
+	Point 43 : { 0.410337, 0.710724, 0.144707 }
+	Point 44 : { -0.360844, 0.625, 0.416667 }
+	Point 45 : { -0.12532, 0.710724, 0.416667 }
+	Point 46 : { 0.12532, 0.710724, 0.416667 }
+	Point 47 : { 0.360844, 0.625, 0.416667 }
+	Point 48 : { -0.433013, 0.75, -0.5 }
+	Point 49 : { -0.150384, 0.852869, -0.5 }
+	Point 50 : { 0.150384, 0.852869, -0.5 }
+	Point 51 : { 0.433013, 0.75, -0.5 }
+	Point 52 : { -0.492404, 0.852869, -0.173648 }
+	Point 53 : { -0.17101, 0.969846, -0.173648 }
+	Point 54 : { 0.17101, 0.969846, -0.173648 }
+	Point 55 : { 0.492404, 0.852869, -0.173648 }
+	Point 56 : { -0.492404, 0.852869, 0.173648 }
+	Point 57 : { -0.17101, 0.969846, 0.173648 }
+	Point 58 : { 0.17101, 0.969846, 0.173648 }
+	Point 59 : { 0.492404, 0.852869, 0.173648 }
+	Point 60 : { -0.433013, 0.75, 0.5 }
+	Point 61 : { -0.150384, 0.852869, 0.5 }
+	Point 62 : { 0.150384, 0.852869, 0.5 }
+	Point 63 : { 0.433013, 0.75, 0.5 }
+
+Total point test:
+	Point 0 : { -0.216506, 0.375, -0.25 }
+	Point 1 : { -0.0751919, 0.426434, -0.25 }
+	Point 2 : { 0.0751919, 0.426434, -0.25 }
+	Point 3 : { 0.216506, 0.375, -0.25 }
+	Point 4 : { -0.246202, 0.426434, -0.0868241 }
+	Point 5 : { -0.085505, 0.484923, -0.0868241 }
+	Point 6 : { 0.085505, 0.484923, -0.0868241 }
+	Point 7 : { 0.246202, 0.426434, -0.0868241 }
+	Point 8 : { -0.246202, 0.426434, 0.0868241 }
+	Point 9 : { -0.085505, 0.484923, 0.0868241 }
+	Point 10 : { 0.085505, 0.484923, 0.0868241 }
+	Point 11 : { 0.246202, 0.426434, 0.0868241 }
+	Point 12 : { -0.216506, 0.375, 0.25 }
+	Point 13 : { -0.0751919, 0.426434, 0.25 }
+	Point 14 : { 0.0751919, 0.426434, 0.25 }
+	Point 15 : { 0.216506, 0.375, 0.25 }
+	Point 16 : { -0.288675, 0.5, -0.333333 }
+	Point 17 : { -0.100256, 0.568579, -0.333333 }
+	Point 18 : { 0.100256, 0.568579, -0.333333 }
+	Point 19 : { 0.288675, 0.5, -0.333333 }
+	Point 20 : { -0.328269, 0.568579, -0.115765 }
+	Point 21 : { -0.114007, 0.646564, -0.115765 }
+	Point 22 : { 0.114007, 0.646564, -0.115765 }
+	Point 23 : { 0.328269, 0.568579, -0.115765 }
+	Point 24 : { -0.328269, 0.568579, 0.115765 }
+	Point 25 : { -0.114007, 0.646564, 0.115765 }
+	Point 26 : { 0.114007, 0.646564, 0.115765 }
+	Point 27 : { 0.328269, 0.568579, 0.115765 }
+	Point 28 : { -0.288675, 0.5, 0.333333 }
+	Point 29 : { -0.100256, 0.568579, 0.333333 }
+	Point 30 : { 0.100256, 0.568579, 0.333333 }
+	Point 31 : { 0.288675, 0.5, 0.333333 }
+	Point 32 : { -0.360844, 0.625, -0.416667 }
+	Point 33 : { -0.12532, 0.710724, -0.416667 }
+	Point 34 : { 0.12532, 0.710724, -0.416667 }
+	Point 35 : { 0.360844, 0.625, -0.416667 }
+	Point 36 : { -0.410337, 0.710724, -0.144707 }
+	Point 37 : { -0.142508, 0.808205, -0.144707 }
+	Point 38 : { 0.142508, 0.808205, -0.144707 }
+	Point 39 : { 0.410337, 0.710724, -0.144707 }
+	Point 40 : { -0.410337, 0.710724, 0.144707 }
+	Point 41 : { -0.142508, 0.808205, 0.144707 }
+	Point 42 : { 0.142508, 0.808205, 0.144707 }
+	Point 43 : { 0.410337, 0.710724, 0.144707 }
+	Point 44 : { -0.360844, 0.625, 0.416667 }
+	Point 45 : { -0.12532, 0.710724, 0.416667 }
+	Point 46 : { 0.12532, 0.710724, 0.416667 }
+	Point 47 : { 0.360844, 0.625, 0.416667 }
+	Point 48 : { -0.433013, 0.75, -0.5 }
+	Point 49 : { -0.150384, 0.852869, -0.5 }
+	Point 50 : { 0.150384, 0.852869, -0.5 }
+	Point 51 : { 0.433013, 0.75, -0.5 }
+	Point 52 : { -0.492404, 0.852869, -0.173648 }
+	Point 53 : { -0.17101, 0.969846, -0.173648 }
+	Point 54 : { 0.17101, 0.969846, -0.173648 }
+	Point 55 : { 0.492404, 0.852869, -0.173648 }
+	Point 56 : { -0.492404, 0.852869, 0.173648 }
+	Point 57 : { -0.17101, 0.969846, 0.173648 }
+	Point 58 : { 0.17101, 0.969846, 0.173648 }
+	Point 59 : { 0.492404, 0.852869, 0.173648 }
+	Point 60 : { -0.433013, 0.75, 0.5 }
+	Point 61 : { -0.150384, 0.852869, 0.5 }
+	Point 62 : { 0.150384, 0.852869, 0.5 }
+	Point 63 : { 0.433013, 0.75, 0.5 }
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testShellGeometry.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testShellGeometry.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testShellGeometry " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testShellGeometry.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testShellGeometry.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,104 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testShellGeometry.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+int main( int argc, char* argv[] ) {
+	Dictionary*	dictionary;
+	Geometry*	geometry;
+	Coord_List	points;
+	Index		i;
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		numProcessors;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "minX", Dictionary_Entry_Value_FromDouble( 3.0 * M_PI / 4.0 ) );
+	Dictionary_Add( dictionary, "minY", Dictionary_Entry_Value_FromDouble( 3.0 * M_PI / 4.0 ) );
+	Dictionary_Add( dictionary, "minZ", Dictionary_Entry_Value_FromDouble( 0.5 ) );
+	Dictionary_Add( dictionary, "maxX", Dictionary_Entry_Value_FromDouble( M_PI / 4.0 ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( M_PI / 4.0 ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 1.0 ) );
+	
+	geometry = (Geometry*)ShellGeometry_New( "shellGeometry", dictionary );
+	
+	printf( "Individual point test:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, point );
+		printf( "{ %g, %g, %g }\n", point[0], point[1], point[2] );
+	}
+	printf( "\n" );
+	
+	printf( "Total point test:\n" );
+	points = Memory_Alloc_Array( Coord, geometry->pointCount, "points" );
+	geometry->buildPoints( geometry, points );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		printf( "\tPoint %u : ", i );
+		geometry->pointAt( geometry, i, points[i] );
+		printf( "{ %g, %g, %g }\n", points[i][0], points[i][1], points[i][2] );
+	}
+	printf( "\n" );
+	if( points )
+		Memory_Free( points );
+	
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,330 @@
+StGermain Framework revision 3750. Copyright (C) 2003-2005 VPAC.
+
+****************************************
+Check StGermain_nSymmetricTensorVectorComponents function
+Number of unique components of symmetric tensor of dimension 2 is 3
+Number of unique components of symmetric tensor of dimension 3 is 6
+
+****************************************
+Testing Journal_PrintTensorArray
+tensorArray - 
+      3          21          -1     
+      6         5.8          32     
+      2           2          -7     
+
+/*******************************************/
+Test Symmetric Tensor to Tensor Array function
+
+2-D
+Symmetric Tensor
+      1           7     
+      7           8     
+Tensor Array - 2D
+      1           7     
+      7           8     
+Tensor Array 
+      1           7     
+      7           8     
+3-D
+Symmetric Tensor
+      1           7           0     
+      7           8           3     
+      0           3           5     
+Tensor Array - 3D
+      1           7           0     
+      7           8           3     
+      0           3           5     
+Tensor Array 
+      1           7           0     
+      7           8           3     
+      0           3           5     
+
+****************************************
+Testing TensorArray_ToMatrix
+2-D
+tensorArray - 
+      1           3     
+      2         6.8     
+tensor - 
+      1           3     
+      2         6.8     
+3-D
+tensorArray - 
+     30          27         -24     
+     29        26.8          23     
+     28          25       -0.22     
+tensor - 
+     30          27         -24     
+     29        26.8          23     
+     28          25       -0.22     
+
+****************************************
+Testing SymmetricTensor_ToMatrix
+2-D
+symmTensor - 
+      7          11     
+     11         9.8     
+tensor - 
+      7          11     
+     11         9.8     
+3-D
+symmTensor - 
+      0          12        -100     
+     12         0.8        20.3     
+   -100        20.3        -7.5     
+tensor - 
+      0          12        -100     
+     12         0.8        20.3     
+   -100        20.3        -7.5     
+
+****************************************
+Testing GetAntisymmetricPart
+dim = 2
+tensor2 - 
+      0         7.5     
+   -7.5           0     
+dim = 3
+tensor2 - 
+      0         7.5        -1.5     
+   -7.5           0          15     
+    1.5         -15           0     
+
+****************************************
+Testing GetSymmetricPart
+dim = 2
+symmTensor - 
+      3        13.5     
+   13.5         5.8     
+dim = 3
+symmTensor - 
+      3        13.5         0.5     
+   13.5         5.8          17     
+    0.5          17          -7     
+
+****************************************
+Testing 2ndInvariant
+dim = 2
+inv = 16.119
+inv = 14.268
+dim = 3
+inv = 28.299
+inv = 22.745
+
+****************************************
+Testing StGermain_VectorTensorVector
+dim = 2 - a_i u_ij b_j = -154.2000
+dim = 3 - a_i u_ij b_j = -43.0000
+
+****************************************
+Testing ZeroTensor
+tensor2 - 
+      0           0     
+      0           0     
+tensor2 - 
+      0           0           0     
+      0           0           0     
+      0           0           0     
+symmTensor - 
+      0           0     
+      0           0     
+symmTensor - 
+      0           0           0     
+      0           0           0     
+      0           0           0     
+
+****************************************
+Testing StGermain_MatrixDeterminant
+ 1 is determinant of matrix : tensor - 
+      1     
+-3 is determinant of matrix : tensor - 
+      1           2     
+      4           5     
+-6 is determinant of matrix : tensor - 
+      1           2           3     
+      4           5           6     
+      7           8          11     
+-6 is determinant of matrix : tensor - 
+      1           2           3     
+      4           5           6     
+      7           8          11     
+-10 is determinant of matrix :
+ 1 	  3
+ 7 	 11
+
+****************************************
+Testing Cubic Solver
+
+Trying to solve 2.0000 x^3 + 0.0000 x^2 + -2.0000 x + 0.0000 = 0
+Found root 1.0000: Passed.
+Found root -1.0000: Passed.
+Found root -0.0000: Passed.
+
+Trying to solve 1.0000 x^3 + -4.0000 x^2 + 5.0000 x + -2.0000 = 0
+Found root 2.0000: Passed.
+Found root 1.0000: Passed.
+Found root 1.0000: Passed.
+
+Trying to solve 1.0000 x^3 + 4.0000 x^2 + -11.0000 x + -30.0000 = 0
+Found root 3.0000: Passed.
+Found root -5.0000: Passed.
+Found root -2.0000: Passed.
+
+/****************************************/
+Test Mapping functions
+
+2-D
+The full tensor:
+tensorArray - 
+    0.5          10     
+     20          30     
+The tensor Mapping using enumerated types:
+tensorArray[FT2D_00] = 0.5
+tensorArray[FT2D_01] = 10
+ ---
+tensorArray[FT2D_10] = 20
+tensorArray[FT2D_11] = 30
+The symmetric tensor:
+symmTensor - 
+     40          60     
+     60          50     
+The symmetric tensor Mapping using enumerated types:
+symmTensor[ST2D_00] = 40
+symmTensor[ST2D_01] = 60
+ ---
+symmTensor[ST2D_11] = 50
+Test Mapping functions for Full Tensor using TensorArray_TensorMap
+
+(0,0): 0  = 0	(0,1): 1  = 1
+(1,0): 2  = 2	(1,1): 3  = 3
+Test Mapping functions for Symmetric Tensor using SymmetricTensor_TensorMap
+
+(0,0): 0  = 0	(0,1): 2  = 2
+(1,0): 2  = 2	(1,1): 1  = 1
+3-D
+The full tensor:
+tensorArray - 
+      0           1           2     
+      3           4           5     
+      6           7           8     
+The tensor Mapping using enumerated types:
+tensorArray[FT3D_00] = 0
+tensorArray[FT3D_01] = 1
+tensorArray[FT3D_02] = 2
+ ---
+tensorArray[FT3D_10] = 3
+tensorArray[FT3D_11] = 4
+tensorArray[FT3D_12] = 5
+ ---
+tensorArray[FT3D_20] = 6
+tensorArray[FT3D_21] = 7
+tensorArray[FT3D_22] = 8
+The symmetric tensor:
+symmTensor - 
+     90         120         130     
+    120         100         140     
+    130         140         110     
+The symmetric tensor Mapping using enumerated types:
+symmTensor[ST3D_00] = 90
+symmTensor[ST3D_01] = 120
+symmTensor[ST3D_02] = 130
+ ---
+symmTensor[ST3D_11] = 100
+symmTensor[ST3D_12] = 140
+ ---
+symmTensor[ST3D_22] = 110
+Test Mapping functions for Full Tensor using TensorArray_TensorMap
+
+(0,0): 0  = 0	(0,1): 1  = 1	(0,2): 2  = 2
+(1,0): 3  = 3	(1,1): 4  = 4	(1,2): 5  = 5
+(2,0): 6  = 6	(2,1): 7  = 7	(2,2): 8  = 8
+Test Mapping functions for Symmetric Tensor using SymmetricTensor_TensorMap
+
+(0,0): 0  = 0	(0,1): 3  = 3	(0,2): 4  = 4
+(1,0): 3  = 3	(1,1): 1  = 1	(1,2): 5  = 5
+(2,0): 4  = 4	(2,1): 5  = 5	(2,2): 2  = 2
+
+/*************************************/
+Test function EigenvectorList_Sort
+ 3-D
+Unsorted eigenvectorList
+eigenvectorList[0].eigenvalue = 4
+eigenvectorList[1].eigenvalue = -1
+eigenvectorList[2].eigenvalue = 1
+eigenvectorList[0].vector = { 0.577, 0.577, 0.577 }
+eigenvectorList[1].vector = { -0.707, 0, 0.707 }
+eigenvectorList[2].vector = { 0.408, -0.816, 0.408 }
+Sorted eigenvectorList
+eigenvectorList[0].eigenvalue = -1
+eigenvectorList[1].eigenvalue = 1
+eigenvectorList[2].eigenvalue = 4
+eigenvectorList[0].vector = { -0.707, 0, 0.707 }
+eigenvectorList[1].vector = { 0.408, -0.816, 0.408 }
+eigenvectorList[2].vector = { 0.577, 0.577, 0.577 }
+2-D
+Unsorted eigenvectorList
+eigenvectorList[0].eigenvalue = 6
+eigenvectorList[1].eigenvalue = 4
+eigenvectorList[0].vector = { 0.707, 0.707 }
+eigenvectorList[1].vector = { 0.707, -0.707 }
+Sorted eigenvectorList
+eigenvectorList[0].eigenvalue = 4
+eigenvectorList[1].eigenvalue = 6
+eigenvectorList[0].vector = { 0.707, -0.707 }
+eigenvectorList[1].vector = { 0.707, 0.707 }
+
+/****************    Test Eigenvector 1   *********************/
+2D Case from Kresig, p. 371f
+
+Matrix to solve for eigenvectors is:
+symmTensor - 
+     -5           2     
+      2          -2     
+eigenvectorList[0].eigenvalue = -6
+eigenvectorList[1].eigenvalue = -1
+eigenvectorList[0].vector = { 0.89443, -0.44721 }
+eigenvectorList[1].vector = { 0.44721, 0.89443 }
+
+/****************    Test Eigenvector 2 	**********************/
+Same test as above - but using Numerical Recipies function
+
+eigenvectorList[0].eigenvalue = -6
+eigenvectorList[1].eigenvalue = -1
+eigenvectorList[0].vector = { 0.89443, -0.44721 }
+eigenvectorList[1].vector = { 0.44721, 0.89443 }
+
+/****************    Test Eigenvector 3   *********************/
+3D Case -tested on 3/11/04, against: 
+http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm
+Matrix to solve for eigenvectors is:
+symmTensor - 
+      2           7          11     
+      7           3          13     
+     11          13           5     
+eigenvectorList[0].eigenvalue = -9.9685
+eigenvectorList[1].eigenvalue = -4.4597
+eigenvectorList[2].eigenvalue = 24.428
+eigenvectorList[0].vector = { 0.3641, 0.55398, -0.74869 }
+eigenvectorList[1].vector = { 0.78647, -0.61348, -0.071456 }
+eigenvectorList[2].vector = { 0.49889, 0.56281, 0.65906 }
+
+/****************    Test Eigenvector 4   *********************/
+Same test as above - but using Numerical Recipies function
+
+eigenvectorList[0].eigenvalue = -9.9685
+eigenvectorList[1].eigenvalue = -4.4597
+eigenvectorList[2].eigenvalue = 24.428
+eigenvectorList[0].vector = { -0.3641, -0.55398, 0.74869 }
+eigenvectorList[1].vector = { 0.78647, -0.61348, -0.071456 }
+eigenvectorList[2].vector = { 0.49889, 0.56281, 0.65906 }
+
+tensorArray - 
+     10          11     
+     12          13     
+rightHandSide = { 24, 35 }
+solution = { 36.5, -31 }
+tensorArray - 
+     10          11          12     
+     13          14          15     
+     16          17          19     
+rightHandSide = { 24, 35, 45 }
+solution = { 15.333, -10.667, -1 }
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTensorMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,595 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testTensorMath.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+void testCubic( double a3, double a2, double a1, double a0, Stream* stream ) {
+	double rootList[3];
+	Index  root_I;
+
+	Journal_Printf( stream, "\nTrying to solve %.4f x^3 + %.4f x^2 + %.4f x + %.4f = 0\n", a3, a2, a1, a0 );
+
+	CubicSolver_OnlyRealRoots( a2/a3, a1/a3, a0/a3, rootList );
+
+	for ( root_I = 0 ; root_I < 3 ; root_I++ ) {
+		double root =  rootList[ root_I ];
+		Journal_Printf( stream, "Found root %.4f: ", root );
+
+		if (  fabs( a3*root*root*root + a2*root*root + a1 * root + a0 ) > 1.0e-5 )
+			Journal_Printf( stream, "Failed root test - %.4f x^3 + %.4f x^2 + %.4f x + %.4f = %.4f\n", a3, a2, a1, a0, a3*root*root*root + a2*root*root + a1 * root + a0 );
+		else 
+			Journal_Printf( stream, "Passed.\n" );
+	}
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		double **tensor = Memory_Alloc_2DArray( double , 5, 5, "Tensor" );
+		SymmetricTensor symmTensor;
+		TensorArray     tensorArray;
+		TensorArray     tensor2;
+		Stream*         stream = Journal_Register( InfoStream_Type, "TensorMath" );
+		int             dim;
+		double a[] = {2,3,6,-2,9.1};
+		double b[] = {1,-3,2.6,-2.2,-1.91};
+		double determinant;
+		XYZ    rightHandSide;
+		XYZ    solution;
+		Eigenvector eigenvectorList[3];
+		
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Check StGermain_nSymmetricTensorVectorComponents function\n");
+		
+		dim = 2;
+		Journal_Printf( stream, "Number of unique components of symmetric tensor of dimension %d is %d\n", dim, StGermain_nSymmetricTensorVectorComponents( dim ) );
+		dim = 3;
+		Journal_Printf( stream, "Number of unique components of symmetric tensor of dimension %d is %d\n", dim, StGermain_nSymmetricTensorVectorComponents( dim ) );
+		
+		tensor[0][0] = 3;  tensor[0][1] = 21;   tensor[0][2] = -1; tensor[0][3] = -99; tensor[0][4] = 9;
+		tensor[1][0] = 6;  tensor[1][1] = 5.8;  tensor[1][2] = 32; tensor[1][3] = 3  ; tensor[1][4] = -2.5;
+		tensor[2][0] = 2;  tensor[2][1] = 2;    tensor[2][2] = -7; tensor[2][3] = 2  ; tensor[2][4] = 3.1;
+		tensor[3][0] = -4; tensor[3][1] = 9;    tensor[3][2] = 3 ; tensor[3][3] = 8  ; tensor[3][4] = 6;
+		tensor[4][0] = 3;  tensor[4][1] = 1;    tensor[4][2] = 9 ; tensor[4][3] = 2  ; tensor[4][4] = 12;
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing Journal_PrintTensorArray\n");
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, 3 );
+		Journal_PrintTensorArray( stream, tensorArray, 3 );
+
+		/* Test Conversion of Symmetric Tensor to Full Tensor */
+		Journal_Printf( stream, "\n/*******************************************/\n");
+		Journal_Printf( stream, "Test Symmetric Tensor to Tensor Array function\n\n");
+
+		Journal_Printf( stream, "2-D\n");
+		Journal_Printf( stream, "Symmetric Tensor\n");
+		symmTensor[ST2D_00] = 1; symmTensor[ST2D_11] = 8;
+		symmTensor[ST2D_01] = 7;
+		Journal_PrintSymmetricTensor_Unnamed(stream, symmTensor, 2);
+		
+		StGermain_SymmetricTensor_ToTensorArray2D(symmTensor, tensorArray);
+		Journal_Printf( stream, "Tensor Array - 2D\n");
+		Journal_PrintTensorArray_Unnamed(stream, tensorArray, 2);
+		
+		Journal_Printf( stream, "Tensor Array \n");
+		StGermain_SymmetricTensor_ToTensorArray(symmTensor, 2, tensorArray);
+		Journal_PrintTensorArray_Unnamed(stream, tensorArray, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		Journal_Printf( stream, "Symmetric Tensor\n");
+		symmTensor[ST3D_00] = 1; symmTensor[ST3D_11] = 8; symmTensor[ST3D_22] = 5;
+		symmTensor[ST3D_01] = 7; symmTensor[ST3D_02] = 0; symmTensor[ST3D_12] = 3;
+		
+		Journal_PrintSymmetricTensor_Unnamed(stream, symmTensor, 3);
+		
+		StGermain_SymmetricTensor_ToTensorArray3D(symmTensor, tensorArray);
+		Journal_Printf( stream, "Tensor Array - 3D\n");
+		Journal_PrintTensorArray_Unnamed(stream, tensorArray, 3);	
+		
+		Journal_Printf( stream, "Tensor Array \n");
+		StGermain_SymmetricTensor_ToTensorArray(symmTensor, 3, tensorArray);
+		Journal_PrintTensorArray_Unnamed(stream, tensorArray, 3);
+
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing TensorArray_ToMatrix\n");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;  tensorArray[FT2D_01] = 3;  
+		tensorArray[FT2D_10] = 2;  tensorArray[FT2D_11] = 6.8;
+		
+		Journal_PrintTensorArray( stream, tensorArray,2);
+		TensorArray_ToMatrix(tensorArray, 2, tensor );	
+		Journal_PrintSquareArray( stream, tensor, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 30;  tensorArray[FT3D_01] = 27;  tensorArray[FT3D_02] = -24; 
+		tensorArray[FT3D_10] = 29;  tensorArray[FT3D_11] = 26.8; tensorArray[FT3D_12] = 23;
+		tensorArray[FT3D_20] = 28;  tensorArray[FT3D_21] = 25;   tensorArray[FT3D_22] = -0.22; 				
+
+		Journal_PrintTensorArray( stream, tensorArray,3);
+		TensorArray_ToMatrix(tensorArray, 3, tensor );	
+		Journal_PrintSquareArray( stream, tensor, 3);
+		
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing SymmetricTensor_ToMatrix\n");
+		
+		Journal_Printf( stream, "2-D\n");
+		symmTensor[ST2D_00] = 7;  symmTensor[ST2D_01] = 11;  
+		symmTensor[ST2D_11] = 9.8;
+		
+		Journal_PrintSymmetricTensor( stream, symmTensor,2);
+		SymmetricTensor_ToMatrix(symmTensor, 2, tensor );	
+		Journal_PrintSquareArray( stream, tensor, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		symmTensor[ST3D_00] = 0;  	symmTensor[ST3D_01] = 12;  symmTensor[ST3D_02] = -100; 
+		symmTensor[ST3D_11] = 0.8; symmTensor[ST3D_12] = 20.3;
+	  	symmTensor[ST3D_22] = -7.5; 				
+
+		Journal_PrintSymmetricTensor( stream, symmTensor,3);
+		SymmetricTensor_ToMatrix(symmTensor, 3, tensor );	
+		Journal_PrintSquareArray( stream, tensor, 3);
+		
+		/* Reset tensor matrix for rest of code */
+		tensor[0][0] = 3;  tensor[0][1] = 21;   tensor[0][2] = -1; tensor[0][3] = -99; tensor[0][4] = 9;
+		tensor[1][0] = 6;  tensor[1][1] = 5.8;  tensor[1][2] = 32; tensor[1][3] = 3  ; tensor[1][4] = -2.5;
+		tensor[2][0] = 2;  tensor[2][1] = 2;    tensor[2][2] = -7; tensor[2][3] = 2  ; tensor[2][4] = 3.1;
+		tensor[3][0] = -4; tensor[3][1] = 9;    tensor[3][2] = 3 ; tensor[3][3] = 8  ; tensor[3][4] = 6;
+		tensor[4][0] = 3;  tensor[4][1] = 1;    tensor[4][2] = 9 ; tensor[4][3] = 2  ; tensor[4][4] = 12;
+
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing GetAntisymmetricPart\n");
+		dim = 2;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		TensorArray_GetAntisymmetricPart( tensorArray, dim, tensor2 );
+		Journal_PrintTensorArray( stream, tensor2, dim );
+
+		dim = 3;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		TensorArray_GetAntisymmetricPart( tensorArray, dim, tensor2 );
+		Journal_PrintTensorArray( stream, tensor2, dim );
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing GetSymmetricPart\n");
+		dim = 2;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		TensorArray_GetSymmetricPart( tensorArray, dim, symmTensor );
+		Journal_PrintSymmetricTensor( stream, symmTensor, dim );
+
+		dim = 3;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		TensorArray_GetSymmetricPart( tensorArray, dim, symmTensor );
+		Journal_PrintSymmetricTensor( stream, symmTensor, dim );
+		
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing 2ndInvariant\n");
+		dim = 2;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		Journal_Printf( stream, "inv = %0.5g\n", TensorArray_2ndInvariant( tensorArray, dim ));
+		TensorArray_GetSymmetricPart( tensorArray, dim, symmTensor );
+		Journal_Printf( stream, "inv = %0.5g\n", SymmetricTensor_2ndInvariant( symmTensor, dim ));
+
+		dim = 3;
+		Journal_Printf( stream, "dim = %d\n", dim);
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		Journal_Printf( stream, "inv = %0.5g\n", TensorArray_2ndInvariant( tensorArray, dim ));
+		TensorArray_GetSymmetricPart( tensorArray, dim, symmTensor );
+		Journal_Printf( stream, "inv = %0.5g\n", SymmetricTensor_2ndInvariant( symmTensor, dim ));
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing StGermain_VectorTensorVector\n");
+		dim = 2;
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		Journal_Printf( stream, "dim = %d - a_i u_ij b_j = %2.4lf\n", dim, TensorArray_MultiplyByVectors( tensorArray, a, b,dim));	
+		dim = 3;
+		TensorArray_SetFromDoubleArray( tensorArray, tensor, dim );
+		Journal_Printf( stream, "dim = %d - a_i u_ij b_j = %2.4lf\n", dim, TensorArray_MultiplyByVectors( tensorArray, a, b,dim));	
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing ZeroTensor\n");
+		TensorArray_Zero( tensor2 );
+		Journal_PrintTensorArray( stream, tensor2, 2 );
+		Journal_PrintTensorArray( stream, tensor2, 3 );
+		SymmetricTensor_Zero( symmTensor );
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2 );
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3 );
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing StGermain_MatrixDeterminant\n");
+		tensor[0][0] = 1.0; tensor[0][1] = 2.0; tensor[0][2] = 3.0;
+		tensor[1][0] = 4.0; tensor[1][1] = 5.0; tensor[1][2] = 6.0;
+		tensor[2][0] = 7.0; tensor[2][1] = 8.0; tensor[2][2] = 11.0;
+
+		determinant = StGermain_MatrixDeterminant( tensor, 1 );
+		Journal_Printf( stream, "%2.4g is determinant of matrix : " , determinant );
+		Journal_PrintSquareArray( stream, tensor, 1 );
+		
+		determinant = StGermain_MatrixDeterminant( tensor, 2 );
+		Journal_Printf( stream, "%2.4g is determinant of matrix : " , determinant );
+		Journal_PrintSquareArray( stream, tensor, 2 );
+		
+		determinant = StGermain_MatrixDeterminant( tensor, 3 );
+		Journal_Printf( stream, "%2.4g is determinant of matrix : " , determinant );
+		Journal_PrintSquareArray( stream, tensor, 3 );
+		
+		determinant = StGermain_MatrixDeterminant( tensor, 3 );
+		Journal_Printf( stream, "%2.4g is determinant of matrix : " , determinant );
+		Journal_PrintSquareArray( stream, tensor, 3 );
+		
+		determinant = StGermain_MatrixDeterminant_AxisIndependent( tensor, 2, I_AXIS, K_AXIS, J_AXIS );
+		Journal_Printf( stream, "%2.4g is determinant of matrix :\n" , determinant );
+		Journal_Printf( stream, "%2.4g \t %2.4g\n", tensor[I_AXIS][I_AXIS], tensor[I_AXIS][K_AXIS] );
+		Journal_Printf( stream, "%2.4g \t %2.4g\n", tensor[K_AXIS][I_AXIS], tensor[K_AXIS][K_AXIS] );
+
+		Journal_Printf( stream, "\n****************************************\n");
+		Journal_Printf( stream, "Testing Cubic Solver\n");
+		testCubic( 2.0, 0.0, -2.0,0.0, stream );
+		testCubic( 1.0, -4.0, 5.0, -2.0, stream );
+		testCubic( 1.0, 4.0, -11.0, -30.0, stream );
+
+		/*Test mapping functions */
+		Journal_Printf(stream, "\n/****************************************/\n");		
+		Journal_Printf( stream, "Test Mapping functions\n\n");
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[0] =  0.5;
+		tensorArray[1] =  10;
+		tensorArray[2] =  20;
+		tensorArray[3] =  30;
+		symmTensor[0] = 40;
+		symmTensor[1] = 50;
+		symmTensor[2] = 60;
+		
+		Journal_Printf( stream, "The full tensor:\n");
+		Journal_PrintTensorArray( stream, tensorArray, 2 );
+		
+		Journal_Printf( stream, "The tensor Mapping using enumerated types:\n");
+		Journal_PrintValue( stream, tensorArray[FT2D_00]);
+		Journal_PrintValue( stream, tensorArray[FT2D_01]);
+		Journal_Printf( stream, " ---\n");		
+		Journal_PrintValue( stream, tensorArray[FT2D_10]);
+		Journal_PrintValue( stream, tensorArray[FT2D_11]);
+
+		Journal_Printf( stream, "The symmetric tensor:\n");
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2 );
+		
+		Journal_Printf( stream, "The symmetric tensor Mapping using enumerated types:\n");
+		Journal_PrintValue( stream, symmTensor[ST2D_00]);
+		Journal_PrintValue( stream, symmTensor[ST2D_01]);
+		Journal_Printf( stream, " ---\n");		
+		Journal_PrintValue( stream, symmTensor[ST2D_11]);
+		
+		Journal_Printf( stream, "Test Mapping functions for Full Tensor ");
+		Journal_Printf( stream, "using TensorArray_TensorMap\n\n");
+		Journal_Printf( stream, "(0,0): %d  = %d	",	FT2D_00, TensorArray_TensorMap(0,0,2));
+		Journal_Printf( stream, "(0,1): %d  = %d\n", 	FT2D_01, TensorArray_TensorMap(0,1,2));
+		Journal_Printf( stream, "(1,0): %d  = %d	",	FT2D_10, TensorArray_TensorMap(1,0,2));
+		Journal_Printf( stream, "(1,1): %d  = %d\n", 	FT2D_11, TensorArray_TensorMap(1,1,2));
+		
+		Journal_Printf( stream, "Test Mapping functions for Symmetric Tensor ");
+		Journal_Printf( stream, "using SymmetricTensor_TensorMap\n\n");
+		Journal_Printf( stream, "(0,0): %d  = %d	",	ST2D_00, SymmetricTensor_TensorMap(0,0,2));
+		Journal_Printf( stream, "(0,1): %d  = %d\n", 	ST2D_01, SymmetricTensor_TensorMap(0,1,2));
+		Journal_Printf( stream, "(1,0): %d  = %d	", 	ST2D_01, SymmetricTensor_TensorMap(1,0,2));
+		Journal_Printf( stream, "(1,1): %d  = %d\n", 	ST2D_11, SymmetricTensor_TensorMap(1,1,2));
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[0] =  0;
+		tensorArray[1] =  1;
+		tensorArray[2] =  2;
+		tensorArray[3] =  3;
+		tensorArray[4] =  4;
+		tensorArray[5] =  5;
+		tensorArray[6] =  6;
+		tensorArray[7] =  7;
+		tensorArray[8] =  8;
+		
+		symmTensor[0] = 90;
+		symmTensor[1] = 100;
+		symmTensor[2] = 110;
+		symmTensor[3] = 120;
+		symmTensor[4] = 130;
+		symmTensor[5] = 140;
+		
+		Journal_Printf( stream, "The full tensor:\n");
+		Journal_PrintTensorArray( stream, tensorArray, 3 );
+		
+		Journal_Printf( stream, "The tensor Mapping using enumerated types:\n");
+		Journal_PrintValue( stream, tensorArray[FT3D_00]);
+		Journal_PrintValue( stream, tensorArray[FT3D_01]);
+		Journal_PrintValue( stream, tensorArray[FT3D_02]);
+		Journal_Printf( stream, " ---\n");
+		Journal_PrintValue( stream, tensorArray[FT3D_10]);
+		Journal_PrintValue( stream, tensorArray[FT3D_11]);
+		Journal_PrintValue( stream, tensorArray[FT3D_12]);
+		Journal_Printf( stream, " ---\n");
+		Journal_PrintValue( stream, tensorArray[FT3D_20]);
+		Journal_PrintValue( stream, tensorArray[FT3D_21]);
+		Journal_PrintValue( stream, tensorArray[FT3D_22]);		
+
+		Journal_Printf( stream, "The symmetric tensor:\n");
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3 );
+		
+		Journal_Printf( stream, "The symmetric tensor Mapping using enumerated types:\n");
+		Journal_PrintValue( stream, symmTensor[ST3D_00]);
+		Journal_PrintValue( stream, symmTensor[ST3D_01]);
+		Journal_PrintValue( stream, symmTensor[ST3D_02]);
+		Journal_Printf( stream, " ---\n");
+		Journal_PrintValue( stream, symmTensor[ST3D_11]);
+		Journal_PrintValue( stream, symmTensor[ST3D_12]);
+		Journal_Printf( stream, " ---\n");
+		Journal_PrintValue( stream, symmTensor[ST3D_22]);
+
+		Journal_Printf( stream, "Test Mapping functions for Full Tensor ");
+		Journal_Printf( stream, "using TensorArray_TensorMap\n\n");
+		Journal_Printf( stream, "(0,0): %d  = %d	",	FT3D_00, TensorArray_TensorMap(0,0,3));
+		Journal_Printf( stream, "(0,1): %d  = %d	",	FT3D_01, TensorArray_TensorMap(0,1,3));
+		Journal_Printf( stream, "(0,2): %d  = %d\n", 	FT3D_02, TensorArray_TensorMap(0,2,3));
+
+		Journal_Printf( stream, "(1,0): %d  = %d	", 	FT3D_10, TensorArray_TensorMap(1,0,3));
+		Journal_Printf( stream, "(1,1): %d  = %d	", 	FT3D_11, TensorArray_TensorMap(1,1,3));
+		Journal_Printf( stream, "(1,2): %d  = %d\n", 	FT3D_12, TensorArray_TensorMap(1,2,3));
+
+		Journal_Printf( stream, "(2,0): %d  = %d	", 	FT3D_20, TensorArray_TensorMap(2,0,3));
+		Journal_Printf( stream, "(2,1): %d  = %d	", 	FT3D_21, TensorArray_TensorMap(2,1,3));
+		Journal_Printf( stream, "(2,2): %d  = %d\n", 	FT3D_22, TensorArray_TensorMap(2,2,3));
+
+		Journal_Printf( stream, "Test Mapping functions for Symmetric Tensor ");
+		Journal_Printf( stream, "using SymmetricTensor_TensorMap\n\n");
+		Journal_Printf( stream, "(0,0): %d  = %d	",	ST3D_00, SymmetricTensor_TensorMap(0,0,3));
+		Journal_Printf( stream, "(0,1): %d  = %d	", 	ST3D_01, SymmetricTensor_TensorMap(0,1,3));
+		Journal_Printf( stream, "(0,2): %d  = %d\n", 	ST3D_02, SymmetricTensor_TensorMap(0,2,3));
+		
+		Journal_Printf( stream, "(1,0): %d  = %d	",	ST3D_01, SymmetricTensor_TensorMap(1,0,3));
+		Journal_Printf( stream, "(1,1): %d  = %d	", 	ST3D_11, SymmetricTensor_TensorMap(1,1,3));
+		Journal_Printf( stream, "(1,2): %d  = %d\n", 	ST3D_12, SymmetricTensor_TensorMap(1,2,3));
+
+		Journal_Printf( stream, "(2,0): %d  = %d	", 	ST3D_02, SymmetricTensor_TensorMap(2,0,3));
+		Journal_Printf( stream, "(2,1): %d  = %d	", 	ST3D_12, SymmetricTensor_TensorMap(2,1,3));
+		Journal_Printf( stream, "(2,2): %d  = %d\n", 	ST3D_22, SymmetricTensor_TensorMap(2,2,3));
+
+		Journal_Printf(stream, "\n/*************************************/\n");
+		Journal_Printf( stream, "Test function EigenvectorList_Sort\n");
+		/*  Matrix that gives eigenvalues and vectors  */
+		/* | 1.000 1.000 2.000 | */
+		/* | 1.000 2.000 1.000 | */
+		/* | 2.000 1.000 1.000 | */
+		Journal_Printf( stream, " 3-D\n");
+		eigenvectorList[0].eigenvalue = 4;
+		eigenvectorList[1].eigenvalue = -1;
+		eigenvectorList[2].eigenvalue = 1;
+		
+		eigenvectorList[0].vector[0] = 0.577;
+		eigenvectorList[0].vector[1] = 0.577;
+		eigenvectorList[0].vector[2] = 0.577;
+
+		eigenvectorList[1].vector[0] = -0.707;
+		eigenvectorList[1].vector[1] = 0;
+		eigenvectorList[1].vector[2] = 0.707;
+
+		eigenvectorList[2].vector[0] = 0.408;
+		eigenvectorList[2].vector[1] = -0.816;
+		eigenvectorList[2].vector[2] = 0.408;
+		
+		Journal_Printf( stream, "Unsorted eigenvectorList\n");
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[2].eigenvalue );		
+
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[2].vector, 3 );
+
+		EigenvectorList_Sort( eigenvectorList, 3);
+
+		Journal_Printf( stream, "Sorted eigenvectorList\n");
+
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[2].eigenvalue );		
+
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[2].vector, 3 );
+
+		Journal_Printf( stream, "2-D\n");
+		
+		/*  Matrix that gives eigenvalues and vectors  */
+		/* | 5.000 1.000 | */
+		/* | 1.000 5.000 | */
+
+		eigenvectorList[0].eigenvalue = 6;
+		eigenvectorList[1].eigenvalue = 4;
+		
+		eigenvectorList[0].vector[0] = 0.707;
+		eigenvectorList[0].vector[1] = 0.707;
+
+		eigenvectorList[1].vector[0] = 0.707;
+		eigenvectorList[1].vector[1] = -0.707;
+		
+		Journal_Printf( stream, "Unsorted eigenvectorList\n");
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 2 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 2 );
+		
+		EigenvectorList_Sort( eigenvectorList, 2);
+
+		Journal_Printf( stream, "Sorted eigenvectorList\n");
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 2 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 2 );
+		
+		Journal_Printf(stream, "\n/****************    Test Eigenvector 1   *********************/\n");
+		Journal_Printf( stream, "2D Case from Kresig, p. 371f\n\n");
+		symmTensor[0] = -5;
+		symmTensor[1] = -2;
+		symmTensor[2] = 2;
+
+		Journal_Printf( stream, "Matrix to solve for eigenvectors is:\n");
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2 );
+
+		SymmetricTensor_CalcAllEigenvectors( symmTensor, 2, eigenvectorList );
+		
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 2 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 2 );
+
+		Journal_Printf( stream, "\n/****************    Test Eigenvector 2 	**********************/\n");
+		Journal_Printf( stream, "Same test as above - but using Numerical Recipies function\n\n");
+
+		SymmetricTensor_CalcAllEigenvectorsJacobi( symmTensor, 2, eigenvectorList );
+
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 2 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 2 );
+
+		Journal_Printf( stream, "\n/****************    Test Eigenvector 3   *********************/\n");
+		Journal_Printf( stream, "3D Case -tested on 3/11/04, against: \n");
+		Journal_Printf( stream, "http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm\n");
+		symmTensor[0] = 2;
+		symmTensor[1] = 3;
+		symmTensor[2] = 5;
+		symmTensor[3] = 7;
+		symmTensor[4] = 11;
+		symmTensor[5] = 13;
+
+		Journal_Printf( stream, "Matrix to solve for eigenvectors is:\n");
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3 );
+
+		SymmetricTensor_CalcAllEigenvectors( symmTensor, 3, eigenvectorList );
+
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[2].eigenvalue );
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[2].vector, 3 );
+		
+		Journal_Printf( stream, "\n/****************    Test Eigenvector 4   *********************/\n");
+		Journal_Printf( stream, "Same test as above - but using Numerical Recipies function\n\n");
+		
+		SymmetricTensor_CalcAllEigenvectorsJacobi( symmTensor, 3, eigenvectorList );
+
+		Journal_PrintValue( stream, eigenvectorList[0].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[1].eigenvalue );
+		Journal_PrintValue( stream, eigenvectorList[2].eigenvalue );
+		Journal_PrintArray( stream, eigenvectorList[0].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[1].vector, 3 );
+		Journal_PrintArray( stream, eigenvectorList[2].vector, 3 );
+
+		Journal_Printf( stream, "\n");
+
+		/* Test Matrix Solve */
+		dim = 2;
+		tensorArray[ FT2D_00 ] = 10;
+		tensorArray[ FT2D_01 ] = 11;
+		tensorArray[ FT2D_10 ] = 12;
+		tensorArray[ FT2D_11 ] = 13;
+		Journal_PrintTensorArray( stream, tensorArray, dim );
+
+		rightHandSide[0] = 24;
+		rightHandSide[1] = 35;
+		Journal_PrintArray( stream, rightHandSide, dim );
+
+		TensorArray_SolveSystem( tensorArray, solution, rightHandSide, dim );
+		Journal_PrintArray( stream, solution, dim );
+
+		dim = 3;
+		tensorArray[ FT3D_00 ] = 10;
+		tensorArray[ FT3D_01 ] = 11;
+		tensorArray[ FT3D_02 ] = 12;
+		tensorArray[ FT3D_10 ] = 13;
+		tensorArray[ FT3D_11 ] = 14;
+		tensorArray[ FT3D_12 ] = 15;
+		tensorArray[ FT3D_20 ] = 16;
+		tensorArray[ FT3D_21 ] = 17;
+		tensorArray[ FT3D_22 ] = 19;
+		Journal_PrintTensorArray( stream, tensorArray, dim );
+
+		rightHandSide[0] = 24;
+		rightHandSide[1] = 35;
+		rightHandSide[2] = 45;
+		Journal_PrintArray( stream, rightHandSide, dim );
+
+		TensorArray_SolveSystem( tensorArray, solution, rightHandSide, dim );
+		Journal_PrintArray( stream, solution, dim );
+
+		Memory_Free( tensor );
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMultMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMultMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,405 @@
+StGermain Framework revision 3791. Copyright (C) 2003-2005 VPAC.
+1e-14
+/*******************    Test 1   ************************/
+Test TensorArray Identity
+
+2-D
+tensorArray - 
+      1           0     
+      0           1     
+3-D
+tensorArray - 
+      1           0           0     
+      0           1           0     
+      0           0           1     
+
+/*******************    Test 2   ************************/
+Test SymmetricTensor Identity
+
+2-D
+symmTensor - 
+      1           0     
+      0           1     
+3-D
+symmTensor - 
+      1           0           0     
+      0           1           0     
+      0           0           1     
+
+/*******************    Test 3   ************************/
+Test function TensorArray_Transpose 
+
+2-D
+tensorArray - 
+    0.7           1     
+      2           3     
+tensorResult - 
+    0.7           2     
+      1           3     
+3-D
+tensorArray - 
+    0.5          10          20     
+     30          40          50     
+     60          70          80     
+tensorResult - 
+    0.5          30          60     
+     10          40          70     
+     20          50          80     
+
+/*******************    Test 4   ************************/
+Test function TensorArray_Add 
+
+2-D
+tensorArray - 
+    0.5          10     
+     20          30     
+tensorArray2 - 
+      5           6     
+      7           8     
+tensorResult - 
+    5.5          16     
+     27          38     
+3-D
+tensorArray - 
+    0.5          10          20     
+     30          40          50     
+     60          70          80     
+tensorArray2 - 
+      5           1           2     
+      3           4           5     
+      6           7           8     
+tensorResult - 
+    5.5          11          22     
+     33          44          55     
+     66          77          88     
+
+/*******************    Test 5   ************************/
+Test function TensorArray_Subtract 
+
+2-D
+tensorArray - 
+    0.5          10     
+     20          30     
+tensorArray2 - 
+      5           6     
+      7           8     
+tensorResult - 
+   -4.5           4     
+     13          22     
+3-D
+tensorArray - 
+    0.5          10          20     
+     30          40          50     
+     60          70          80     
+tensorArray2 - 
+     50           1           2     
+      3           4           5     
+      6           7           8     
+tensorResult - 
+  -49.5           9          18     
+     27          36          45     
+     54          63          72     
+
+/*******************    Test 6   ************************/
+Test function TensorArray_MultiplyByTensorArray 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+tensorArray2 - 
+      5           6     
+      7           8     
+tensorResult - 
+     19          22     
+     43          50     
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+tensorArray2 - 
+     10          11          12     
+     13          14          15     
+     16          17          18     
+tensorResult - 
+     84          90          96     
+    201         216         231     
+    318         342         366     
+
+/*******************    Test 7   ************************/
+Test function TensorArray_MultiplyByRightTranspose 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+The answer, A * A^T = 
+symmTensorResult - 
+      5          11     
+     11          25     
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+The answer, A * A^T = 
+symmTensorResult - 
+     14          32          50     
+     32          77         122     
+     50         122         194     
+
+/*******************    Test 8   ************************/
+Test function TensorArray_MultiplyByLeftTranspose 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+The answer, A^T * A = 
+symmTensorResult - 
+     10          14     
+     14          20     
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+The answer, A^T * A = 
+symmTensorResult - 
+     66          78          90     
+     78          93         108     
+     90         108         126     
+
+/*******************    Test 9   ************************/
+Test function TensorArray_MultiplyBySymmetricTensor 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+symmTensor - 
+      5           6     
+      6           7     
+tensorResult - 
+     17          20     
+     39          46     
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+symmTensor - 
+     10          11          12     
+     11          13          14     
+     12          14          15     
+tensorResult - 
+     68          79          85     
+    167         193         208     
+    266         307         331     
+
+/*******************    Test 10   ************************/
+Test function TensorArray_MultiplyByLeftVector 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+vector - {5.000000, 6.000000}
+vectorResult - {23.000000, 34.000000}
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+vector - {10.000000, 11.000000, 12.000000}
+vectorResult - {138.000000, 171.000000, 204.000000}
+
+/*******************    Test 11   ************************/
+Test function TensorArray_MultiplyByRightVector 
+
+Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php2-D
+tensorArray - 
+      1           2     
+      3           4     
+vector - {5.000000, 6.000000}
+vectorResult - {17.000000, 39.000000}
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+vector - {10.000000, 11.000000, 12.000000}
+vectorResult - {68.000000, 167.000000, 266.000000}
+
+/*******************    Test 12   ************************/
+Test function TensorArray_CalcDeterminant 
+
+Solutions tested against: http://www.bluebit.gr/matrix-calculator/2-D
+tensorArray - 
+      1           2     
+      3           4     
+Determinant = 
+result = -2
+3-D
+tensorArray - 
+      1           2           3     
+     30          22           4     
+      5           7           9     
+Determinant = 
+result = -30
+
+/*******************    Test 13   ************************/
+Test function TensorArray_CalcInverseWithDeterminant 
+
+2-D
+tensorArray - 
+      1           2     
+      3           4     
+Answer calculated within tolerance 1e-14, for solution:
+Inverse of tensor:
+tensorCompare - 
+     -2           1     
+    1.5        -0.5     
+3-D
+tensorArray - 
+      1           2           3     
+     30          22           4     
+      5           7           9     
+Answer calculated within tolerance 1e-14, for solution:
+Inverse of tensor:
+tensorCompare - 
+-5.6667        -0.1      1.9333     
+ 8.3333         0.2     -2.8667     
+-3.3333        -0.1      1.2667     
+
+/*******************    Test 14   ************************/
+Test function TensorArray_CalcInverse 
+
+Solutions tested against: http://www.bluebit.gr/matrix-calculator/2-D
+tensorArray - 
+      1           2     
+      3           4     
+Answer calculated within tolerance 1e-14, for solution:
+Inverse of tensor:
+tensorCompare - 
+     -2           1     
+    1.5        -0.5     
+3-D
+tensorArray - 
+      1           2           3     
+     30          22           4     
+      5           7           9     
+Answer calculated within tolerance 1e-14, for solution:
+Inverse of tensor:
+tensorCompare - 
+-5.6667        -0.1      1.9333     
+ 8.3333         0.2     -2.8667     
+-3.3333        -0.1      1.2667     
+
+/*******************    Test 15   ************************/
+Test function TensorArray_DoubleContraction 
+
+Hand verified
+2-D
+tensorArray - 
+      1           2     
+      3           4     
+tensorArray2 - 
+      5           6     
+      7           8     
+Double Contraction = 
+result = 70
+3-D
+tensorArray - 
+      1           2           3     
+      4           5           6     
+      7           8           9     
+tensorArray2 - 
+     11          12          13     
+     14          15          16     
+     17          18          19     
+Double Contraction = 
+result = 735
+
+/*******************    Test 16   ************************/
+Test function SymmetricTensor_DoubleContraction 
+
+Hand verified
+2-D
+symmTensor - 
+      1           2     
+      2           4     
+symmTensor2 - 
+     10          20     
+     20          40     
+Double Contraction = 
+result = 250
+3-D
+symmTensor - 
+      1           2           3     
+      2           4           5     
+      3           5           6     
+symmTensor2 - 
+     10          20          30     
+     20          40          50     
+     30          50          60     
+Double Contraction = 
+result = 1290
+
+/*******************    Test 17   ************************/
+Test function Journal_PrintNonSquareMatrix 
+
+nonSquareMatrixA - 
+      0	      1	      2	      3	
+      4	      5	      6	      7	
+      8	      9	     10	     11	
+nonSquareMatrixB - 
+      0	      1	
+      2	      3	
+      4	      5	
+      6	      7	
+
+/*******************    Test 18   ************************/
+Test function NonSquareMatrix_Transpose 
+
+nonSquareMatrixA - 
+      0	      1	      2	      3	
+      4	      5	      6	      7	
+      8	      9	     10	     11	
+nonSquareMatrixAT - 
+      0	      4	      8	
+      1	      5	      9	
+      2	      6	     10	
+      3	      7	     11	
+
+/*******************    Test 19   ************************/
+Test function NonSquareMatrix_MultiplicationByNonSquareMatrix 
+
+nonSquareMatrixA - 
+      0	      1	      2	      3	
+      4	      5	      6	      7	
+      8	      9	     10	     11	
+nonSquareMatrixB - 
+      0	      1	
+      2	      3	
+      4	      5	
+      6	      7	
+nonSquareMatrixResult - 
+     28	     34	
+     76	     98	
+    124	    162	
+
+/*******************    Test 20   ************************/
+Test function NonSquareMatrix_MatrixVectorMultiplication 
+
+Tested against solutions at http://www.uni-bonn.de/~manfear/solve_lineq.php
+
+nonSquareMatrixAT - 
+      0	      4	      8	
+      1	      5	      9	
+      2	      6	     10	
+      3	      7	     11	
+vector - {1.000000, 2.000000, 3.000000}
+SolutionVector within tolerance 1e-05 of solution:
+solutionVectorCompare - {32.000000, 38.000000, 44.000000, 50.000000}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMultMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMultMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTensorMultMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTensorMultMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTensorMultMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,827 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**	Kathleen M. Humble, Computational Scientist, VPAC. (khumble at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testTensorMath.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+#define TENSORMULTMATH_TEST_ERROR 1e-05
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Stream* stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register( InfoStream_Type, "TensorMultMath" );
+	
+	/* stout -> file redirect code */
+	/* stJournal->firewallProducesAssert = False; */
+	/* Stream_RedirectFile(Journal_Register( Error_Type, "TensorMultMath"), "TensorMultMath.txt"); */
+	/* Stream_RedirectFile(stream, "TensorMultMath.txt"); */
+	
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		/* Put in tests here */
+		SymmetricTensor symmTensor, symmTensor2, symmTensorResult;
+		TensorArray     tensorArray, tensorArray2, tensorResult, tensorCompare, tensorDiff;
+		XYZ 	vector, vectorResult;
+		double result, errorValue;
+		Dimension_Index row, col;
+		Bool tensorMultMathTest_Flag;
+		double  **nonSquareMatrixA, **nonSquareMatrixB;
+		double	**nonSquareMatrixResult, **nonSquareMatrixAT;
+		double solutionVector[4], solutionVectorCompare[4];
+		Bool error_flag;
+		#define STG_TENSORMULTMATHTEST_ERROR 1.0e-14;
+		
+		errorValue = STG_TENSORMULTMATHTEST_ERROR;
+		Journal_Printf( stream, "%g", errorValue);
+		Journal_Printf(stream, "\n/*******************    Test 1   ************************/\n");
+		Journal_Printf( stream, "Test TensorArray Identity\n\n");
+		
+		Journal_Printf( stream, "2-D\n");
+		TensorArray_Identity(2, tensorArray );
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		TensorArray_Identity(3, tensorArray );
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 2   ************************/\n");
+		Journal_Printf( stream, "Test SymmetricTensor Identity\n\n");
+				
+		Journal_Printf( stream, "2-D\n");
+		SymmetricTensor_Identity(2, symmTensor );
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		SymmetricTensor_Identity(3, symmTensor );
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 3   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_Transpose \n\n");
+		Journal_Printf( stream, "2-D\n");		
+		tensorArray[FT2D_00] = 0.7;
+		tensorArray[FT2D_01] = 1;
+		tensorArray[FT2D_10] = 2;
+		tensorArray[FT2D_11] = 3;
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		TensorArray_Transpose(tensorArray, 2, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 2);
+
+		Journal_Printf( stream, "3-D\n");		
+		tensorArray[FT3D_00] = 0.5;
+		tensorArray[FT3D_01] = 10;
+		tensorArray[FT3D_02] = 20;
+		tensorArray[FT3D_10] = 30;
+		tensorArray[FT3D_11] = 40;
+		tensorArray[FT3D_12] = 50;
+		tensorArray[FT3D_20] = 60;
+		tensorArray[FT3D_21] = 70;
+		tensorArray[FT3D_22] = 80;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		TensorArray_Transpose(tensorArray, 3, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 4   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_Add \n\n");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray2[FT2D_00] = 5;
+		tensorArray2[FT2D_01] = 6;
+		tensorArray2[FT2D_10] = 7;
+		tensorArray2[FT2D_11] = 8;
+				
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		Journal_PrintTensorArray( stream, tensorArray2, 2);
+		TensorArray_Add(tensorArray, tensorArray2, 2, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray2[FT3D_00] = 5;
+		tensorArray2[FT3D_01] = 1;
+		tensorArray2[FT3D_02] = 2;
+		tensorArray2[FT3D_10] = 3;
+		tensorArray2[FT3D_11] = 4;
+		tensorArray2[FT3D_12] = 5;
+		tensorArray2[FT3D_20] = 6;
+		tensorArray2[FT3D_21] = 7;
+		tensorArray2[FT3D_22] = 8;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		Journal_PrintTensorArray( stream, tensorArray2, 3);
+		TensorArray_Add(tensorArray, tensorArray2, 3, tensorResult);	
+		Journal_PrintTensorArray( stream, tensorResult, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 5   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_Subtract \n\n");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray2[FT2D_00] = 5;
+		tensorArray2[FT2D_01] = 6;
+		tensorArray2[FT2D_10] = 7;
+		tensorArray2[FT2D_11] = 8;
+				
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		Journal_PrintTensorArray( stream, tensorArray2, 2);
+		TensorArray_Subtract(tensorArray, tensorArray2, 2, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray2[FT3D_00] = 50;
+		tensorArray2[FT3D_01] = 1;
+		tensorArray2[FT3D_02] = 2;
+		tensorArray2[FT3D_10] = 3;
+		tensorArray2[FT3D_11] = 4;
+		tensorArray2[FT3D_12] = 5;
+		tensorArray2[FT3D_20] = 6;
+		tensorArray2[FT3D_21] = 7;
+		tensorArray2[FT3D_22] = 8;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		Journal_PrintTensorArray( stream, tensorArray2, 3);
+		TensorArray_Subtract(tensorArray, tensorArray2, 3, tensorResult);	
+		Journal_PrintTensorArray( stream, tensorResult, 3);		
+		
+		Journal_Printf(stream, "\n/*******************    Test 6   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyByTensorArray \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");
+		Journal_Printf( stream, "2-D\n");
+
+
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;								
+		
+		tensorArray2[FT2D_00] = 5;
+		tensorArray2[FT2D_01] = 6;
+		tensorArray2[FT2D_10] = 7;
+		tensorArray2[FT2D_11] = 8;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		Journal_PrintTensorArray( stream, tensorArray2, 2);
+		TensorArray_MultiplyByTensorArray(tensorArray, tensorArray2, 2, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+		
+		tensorArray2[FT3D_00] = 10;
+		tensorArray2[FT3D_01] = 11;
+		tensorArray2[FT3D_02] = 12;
+		tensorArray2[FT3D_10] = 13;
+		tensorArray2[FT3D_11] = 14;
+		tensorArray2[FT3D_12] = 15;
+		tensorArray2[FT3D_20] = 16;
+		tensorArray2[FT3D_21] = 17;
+		tensorArray2[FT3D_22] = 18;		
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		Journal_PrintTensorArray( stream, tensorArray2, 3);
+		TensorArray_MultiplyByTensorArray(tensorArray, tensorArray2, 3, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 3);	
+		
+		Journal_Printf(stream, "\n/*******************    Test 7   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyByRightTranspose \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		TensorArray_MultiplyByRightTranspose(tensorArray, 2, symmTensorResult);
+		Journal_Printf( stream, "The answer, A * A^T = \n");
+		Journal_PrintSymmetricTensor( stream, symmTensorResult, 2);
+
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		TensorArray_MultiplyByRightTranspose(tensorArray, 3, symmTensorResult);
+		Journal_Printf( stream, "The answer, A * A^T = \n");
+		Journal_PrintSymmetricTensor( stream, symmTensorResult, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 8   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyByLeftTranspose \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		TensorArray_MultiplyByLeftTranspose(tensorArray, 2, symmTensorResult);
+		Journal_Printf( stream, "The answer, A^T * A = \n");
+		Journal_PrintSymmetricTensor( stream, symmTensorResult, 2);
+
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		TensorArray_MultiplyByLeftTranspose(tensorArray, 3, symmTensorResult);
+		Journal_Printf( stream, "The answer, A^T * A = \n");
+		Journal_PrintSymmetricTensor( stream, symmTensorResult, 3);		
+		
+		
+		Journal_Printf(stream, "\n/*******************    Test 9   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyBySymmetricTensor \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		symmTensor[ST2D_00] = 5;		
+		symmTensor[ST2D_01] = 6;		
+		symmTensor[ST2D_11] = 7;		
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2);
+		TensorArray_MultiplyBySymmetricTensor(tensorArray, symmTensor, 2, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 2);
+
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+		
+		symmTensor[ST3D_00] = 10;
+		symmTensor[ST3D_01] = 11;
+		symmTensor[ST3D_02] = 12;
+		symmTensor[ST3D_11] = 13;
+		symmTensor[ST3D_12] = 14;
+		symmTensor[ST3D_22] = 15;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3);
+		TensorArray_MultiplyBySymmetricTensor(tensorArray, symmTensor, 3, tensorResult);
+		Journal_PrintTensorArray( stream, tensorResult, 3);
+
+		Journal_Printf(stream, "\n/*******************    Test 10   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyByLeftVector \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");		
+		
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		vector[0] = 5;
+		vector[1] = 6;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		StGermain_PrintNamedVector( stream, vector, 2);
+		TensorArray_MultiplyByLeftVector(tensorArray, vector, 2, vectorResult);
+		StGermain_PrintNamedVector( stream, vectorResult, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+
+		vector[0] = 10;
+		vector[1] = 11;
+		vector[2] = 12;
+
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		StGermain_PrintNamedVector( stream, vector, 3);
+		TensorArray_MultiplyByLeftVector(tensorArray, vector, 3, vectorResult);
+		StGermain_PrintNamedVector( stream, vectorResult, 3);
+		
+		Journal_Printf(stream, "\n/*******************    Test 11   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_MultiplyByRightVector \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.uni-bonn.de/~manfear/matrixcalc.php");		
+
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		vector[0] = 5;
+		vector[1] = 6;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		StGermain_PrintNamedVector( stream, vector, 2);
+		TensorArray_MultiplyByRightVector(tensorArray, vector, 2, vectorResult);
+		StGermain_PrintNamedVector( stream, vectorResult, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+
+		vector[0] = 10;
+		vector[1] = 11;
+		vector[2] = 12;
+
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		StGermain_PrintNamedVector( stream, vector, 3);
+		TensorArray_MultiplyByRightVector(tensorArray, vector, 3, vectorResult);
+		StGermain_PrintNamedVector( stream, vectorResult, 3);
+
+		Journal_Printf(stream, "\n/*******************    Test 12   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_CalcDeterminant \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.bluebit.gr/matrix-calculator/");		
+
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);		
+		result = TensorArray_CalcDeterminant(tensorArray, 2);
+		Journal_Printf( stream, "Determinant = \n");
+		Journal_PrintValue( stream, result);
+
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 30;
+		tensorArray[FT3D_11] = 22;
+		tensorArray[FT3D_12] = 4;
+		tensorArray[FT3D_20] = 5;
+		tensorArray[FT3D_21] = 7;
+		tensorArray[FT3D_22] = 9;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);		
+		result = TensorArray_CalcDeterminant(tensorArray, 3);
+		Journal_Printf( stream, "Determinant = \n");
+		Journal_PrintValue( stream, result);
+
+		Journal_Printf(stream, "\n/*******************    Test 13   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_CalcInverseWithDeterminant \n\n");
+				
+		Journal_Printf( stream, "2-D\n");
+		
+		tensorMultMathTest_Flag = True;
+
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+		
+		tensorCompare[FT2D_00] = -2;
+		tensorCompare[FT2D_01] =  1;
+		tensorCompare[FT2D_10] =  1.5;
+		tensorCompare[FT2D_11] = -0.5;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);
+		result = TensorArray_CalcDeterminant(tensorArray, 2);		
+		TensorArray_CalcInverseWithDeterminant(tensorArray, result, 2, tensorResult);
+		
+		TensorArray_Subtract(tensorResult, tensorCompare, 2, tensorDiff);
+		
+		for (row = 0; row < 2; row++ ){
+			for ( col = 0; col < 2; col++ ){
+				if (fabs(tensorDiff[TensorArray_TensorMap(row, col, 2)]) > errorValue ) {
+					Journal_Printf( stream, "Value, %g at index ( %d, %d) not within tolerance, %g\n", 
+							tensorResult[TensorArray_TensorMap(row, col, 2)],row, col, errorValue);
+					tensorMultMathTest_Flag = False;
+				}
+			}
+		}
+		if (tensorMultMathTest_Flag == True) {
+			Journal_Printf( stream, "Answer calculated within tolerance %g, for solution:\n", errorValue);
+		}
+		else {
+			Journal_Printf( stream, "Answer calculated not within tolerance %g, for solution:\n", errorValue);			
+		}
+		
+		Journal_Printf( stream, "Inverse of tensor:\n");
+		Journal_PrintTensorArray( stream, tensorCompare, 2);
+
+		Journal_Printf( stream, "3-D\n");
+		
+		tensorMultMathTest_Flag = True;
+		
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 30;
+		tensorArray[FT3D_11] = 22;
+		tensorArray[FT3D_12] = 4;
+		tensorArray[FT3D_20] = 5;
+		tensorArray[FT3D_21] = 7;
+		tensorArray[FT3D_22] = 9;
+
+		tensorCompare[FT3D_00] = -5.666666666666667;
+		tensorCompare[FT3D_01] = -0.100000000000000;
+		tensorCompare[FT3D_02] =  1.933333333333333;
+		tensorCompare[FT3D_10] =  8.333333333333333;
+		tensorCompare[FT3D_11] =  0.200000000000000;
+		tensorCompare[FT3D_12] = -2.866666666666667;
+		tensorCompare[FT3D_20] = -3.333333333333333;
+		tensorCompare[FT3D_21] = -0.100000000000000;
+		tensorCompare[FT3D_22] =  1.266666666666667;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);
+		result = TensorArray_CalcDeterminant(tensorArray, 3);		
+		TensorArray_CalcInverseWithDeterminant(tensorArray,result, 3, tensorResult);
+		
+		TensorArray_Subtract(tensorResult, tensorCompare, 3, tensorDiff);
+		
+		for (row = 0; row < 3; row++ ){
+			for ( col = 0; col < 3; col++ ){
+				if (fabs(tensorDiff[TensorArray_TensorMap(row, col, 3)]) > errorValue ) {
+					Journal_Printf( stream, "Value, %g at index ( %d, %d) not within tolerance, %g\n", 
+							tensorResult[TensorArray_TensorMap(row, col, 3)],row, col, errorValue);
+					tensorMultMathTest_Flag = False;
+				}
+			}
+		}
+		if (tensorMultMathTest_Flag == True) {
+			Journal_Printf( stream, "Answer calculated within tolerance %g, for solution:\n", errorValue);
+		}
+		else {
+			Journal_Printf( stream, "Answer calculated not within tolerance %g, for solution:\n", errorValue);			
+		}
+		
+		
+		Journal_Printf( stream, "Inverse of tensor:\n");
+		Journal_PrintTensorArray( stream, tensorCompare, 3);
+
+		Journal_Printf(stream, "\n/*******************    Test 14   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_CalcInverse \n\n");
+		Journal_Printf( stream, "Solutions tested against: http://www.bluebit.gr/matrix-calculator/");		
+
+		Journal_Printf( stream, "2-D\n");
+
+		tensorMultMathTest_Flag = True;		
+		
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+
+		tensorCompare[FT2D_00] = -2;
+		tensorCompare[FT2D_01] =  1;
+		tensorCompare[FT2D_10] =  1.5;
+		tensorCompare[FT2D_11] = -0.5;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);	
+		TensorArray_CalcInverse(tensorArray, 2, tensorResult);
+		
+		TensorArray_Subtract(tensorResult, tensorCompare, 2, tensorDiff);
+		
+		for (row = 0; row < 2; row++ ){
+			for ( col = 0; col < 2; col++ ){
+				if (fabs(tensorDiff[TensorArray_TensorMap(row, col, 2)]) > errorValue ) {
+					Journal_Printf( stream, "Value, %g at index ( %d, %d) not within tolerance, %g\n", 
+							tensorResult[TensorArray_TensorMap(row, col, 2)],row, col, errorValue);
+					tensorMultMathTest_Flag = False;
+				}
+			}
+		}
+		if (tensorMultMathTest_Flag == True) {
+			Journal_Printf( stream, "Answer calculated within tolerance %g, for solution:\n", errorValue);
+		}
+		else {
+			Journal_Printf( stream, "Answer calculated not within tolerance %g, for solution:\n", errorValue);			
+		}
+		
+		
+		Journal_Printf( stream, "Inverse of tensor:\n");
+		Journal_PrintTensorArray( stream, tensorCompare, 2);
+		
+		Journal_Printf( stream, "3-D\n");
+
+		tensorMultMathTest_Flag = True;
+
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 30;
+		tensorArray[FT3D_11] = 22;
+		tensorArray[FT3D_12] = 4;
+		tensorArray[FT3D_20] = 5;
+		tensorArray[FT3D_21] = 7;
+		tensorArray[FT3D_22] = 9;
+
+		tensorCompare[FT3D_00] = -5.666666666666667;
+		tensorCompare[FT3D_01] = -0.1;
+		tensorCompare[FT3D_02] =  1.933333333333333;
+		tensorCompare[FT3D_10] =  8.333333333333333;
+		tensorCompare[FT3D_11] =  0.200000000000;
+		tensorCompare[FT3D_12] = -2.866666666666667;
+		tensorCompare[FT3D_20] = -3.333333333333333;
+		tensorCompare[FT3D_21] = -0.1;
+		tensorCompare[FT3D_22] =  1.266666666666667;
+		
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);	
+		TensorArray_CalcInverse(tensorArray, 3, tensorResult);
+		
+		TensorArray_Subtract(tensorResult, tensorCompare, 3, tensorDiff);
+		
+		for (row = 0; row < 3; row++ ){
+			for ( col = 0; col < 3; col++ ){
+				if (fabs(tensorDiff[TensorArray_TensorMap(row, col, 3)]) > errorValue ) {
+					Journal_Printf( stream, "Value, %g at index ( %d, %d) not within tolerance, %g\n", 
+							tensorResult[TensorArray_TensorMap(row, col, 3)],row, col, errorValue);
+					tensorMultMathTest_Flag = False;
+				}
+			}
+		}
+		
+		if (tensorMultMathTest_Flag == True) {
+			Journal_Printf( stream, "Answer calculated within tolerance %g, for solution:\n", errorValue);
+		}
+		else {
+			Journal_Printf( stream, "Answer calculated not within tolerance %g, for solution:\n", errorValue);			
+		}
+		
+		
+		Journal_Printf( stream, "Inverse of tensor:\n");
+		Journal_PrintTensorArray( stream, tensorCompare, 3);
+
+
+
+
+		Journal_Printf(stream, "\n/*******************    Test 15   ************************/\n");
+		Journal_Printf( stream, "Test function TensorArray_DoubleContraction \n\n");
+		Journal_Printf( stream, "Hand verified\n");
+
+		Journal_Printf( stream, "2-D\n");
+		tensorArray[FT2D_00] = 1;
+		tensorArray[FT2D_01] = 2;
+		tensorArray[FT2D_10] = 3;
+		tensorArray[FT2D_11] = 4;
+
+		tensorArray2[FT2D_00] = 5;
+		tensorArray2[FT2D_01] = 6;
+		tensorArray2[FT2D_10] = 7;
+		tensorArray2[FT2D_11] = 8;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 2);	
+		Journal_PrintTensorArray( stream, tensorArray2, 2);	
+		result = TensorArray_DoubleContraction(tensorArray, tensorArray2, 2);
+		Journal_Printf( stream, "Double Contraction = \n");
+		Journal_PrintValue( stream, result);
+		
+		Journal_Printf( stream, "3-D\n");
+		tensorArray[FT3D_00] = 1;
+		tensorArray[FT3D_01] = 2;
+		tensorArray[FT3D_02] = 3;
+		tensorArray[FT3D_10] = 4;
+		tensorArray[FT3D_11] = 5;
+		tensorArray[FT3D_12] = 6;
+		tensorArray[FT3D_20] = 7;
+		tensorArray[FT3D_21] = 8;
+		tensorArray[FT3D_22] = 9;
+		
+		tensorArray2[FT3D_00] = 11;
+		tensorArray2[FT3D_01] = 12;
+		tensorArray2[FT3D_02] = 13;
+		tensorArray2[FT3D_10] = 14;
+		tensorArray2[FT3D_11] = 15;
+		tensorArray2[FT3D_12] = 16;
+		tensorArray2[FT3D_20] = 17;
+		tensorArray2[FT3D_21] = 18;
+		tensorArray2[FT3D_22] = 19;
+		
+		Journal_PrintTensorArray( stream, tensorArray, 3);	
+		Journal_PrintTensorArray( stream, tensorArray2, 3);	
+		result = TensorArray_DoubleContraction(tensorArray, tensorArray2, 3);
+		Journal_Printf( stream, "Double Contraction = \n");
+		Journal_PrintValue( stream, result);
+		
+		Journal_Printf(stream, "\n/*******************    Test 16   ************************/\n");
+		Journal_Printf( stream, "Test function SymmetricTensor_DoubleContraction \n\n");
+		Journal_Printf( stream, "Hand verified\n");
+		Journal_Printf( stream, "2-D\n");		
+		symmTensor[ST2D_00] = 1;
+		symmTensor[ST2D_01] = 2;
+		symmTensor[ST2D_11] = 4;
+
+		symmTensor2[ST2D_00] = 10;
+		symmTensor2[ST2D_01] = 20;
+		symmTensor2[ST2D_11] = 40;
+
+		Journal_PrintSymmetricTensor( stream, symmTensor, 2);
+		Journal_PrintSymmetricTensor( stream, symmTensor2, 2);
+		result = SymmetricTensor_DoubleContraction(symmTensor,symmTensor2, 2);
+		Journal_Printf( stream, "Double Contraction = \n");
+		Journal_PrintValue( stream, result);
+
+		Journal_Printf( stream, "3-D\n");
+		symmTensor[ST3D_00] = 1;
+		symmTensor[ST3D_01] = 2;
+		symmTensor[ST3D_02] = 3;
+		symmTensor[ST3D_11] = 4;
+		symmTensor[ST3D_12] = 5;
+		symmTensor[ST3D_22] = 6;
+
+		symmTensor2[ST3D_00] = 10;
+		symmTensor2[ST3D_01] = 20;
+		symmTensor2[ST3D_02] = 30;
+		symmTensor2[ST3D_11] = 40;
+		symmTensor2[ST3D_12] = 50;
+		symmTensor2[ST3D_22] = 60;
+		
+		Journal_PrintSymmetricTensor( stream, symmTensor, 3);
+		Journal_PrintSymmetricTensor( stream, symmTensor2, 3);
+		result = SymmetricTensor_DoubleContraction(symmTensor,symmTensor2, 3);
+		Journal_Printf( stream, "Double Contraction = \n");
+		Journal_PrintValue( stream, result);
+
+		Journal_Printf(stream, "\n/*******************    Test 17   ************************/\n");
+		Journal_Printf( stream, "Test function Journal_PrintNonSquareMatrix \n\n");
+
+		nonSquareMatrixA = Memory_Alloc_2DArray(double, 3, 4, "NonSquareMatrixA" );
+		nonSquareMatrixB = Memory_Alloc_2DArray(double, 4, 2, "NonSquareMatrixB" );
+		nonSquareMatrixAT = Memory_Alloc_2DArray(double, 4, 3, "NonSquareMatrixAT" );
+		nonSquareMatrixResult = Memory_Alloc_2DArray(double, 3, 2, "NonSquareMatrixResult" );
+		/* Matrix A */
+		nonSquareMatrixA[0][0] = 0; 	nonSquareMatrixA[1][0] =  4;
+		nonSquareMatrixA[0][1] = 1;		nonSquareMatrixA[1][1] =  5;
+		nonSquareMatrixA[0][2] = 2;		nonSquareMatrixA[1][2] =  6;		
+		nonSquareMatrixA[0][3] = 3;		nonSquareMatrixA[1][3] =  7;
+		
+		nonSquareMatrixA[2][0] = 8;		
+		nonSquareMatrixA[2][1] = 9;
+		nonSquareMatrixA[2][2] = 10;
+		nonSquareMatrixA[2][3] = 11;
+		/* Matrix B */
+		nonSquareMatrixB[0][0] = 0; 	nonSquareMatrixB[1][0] =  2;
+		nonSquareMatrixB[0][1] = 1;		nonSquareMatrixB[1][1] =  3;
+		
+		nonSquareMatrixB[2][0] = 4;		nonSquareMatrixB[3][0] =  6;
+		nonSquareMatrixB[2][1] = 5;		nonSquareMatrixB[3][1] =  7;
+		
+		
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixA, 3, 4);
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixB, 4, 2);
+
+		Journal_Printf(stream, "\n/*******************    Test 18   ************************/\n");
+		Journal_Printf( stream, "Test function NonSquareMatrix_Transpose \n\n");
+
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixA, 3, 4);
+		
+		NonSquareMatrix_Transpose( nonSquareMatrixA, 3, 4, nonSquareMatrixAT);
+		
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixAT, 4, 3);
+
+		Journal_Printf(stream, "\n/*******************    Test 19   ************************/\n");
+		Journal_Printf( stream, "Test function NonSquareMatrix_MultiplicationByNonSquareMatrix \n\n");
+		
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixA, 3, 4);
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixB, 4, 2);
+
+		NonSquareMatrix_MultiplicationByNonSquareMatrix(nonSquareMatrixA, 3, 4, 
+			nonSquareMatrixB, 4,2, nonSquareMatrixResult );
+
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixResult, 3, 2);
+
+		Journal_Printf(stream, "\n/*******************    Test 20   ************************/\n");
+		Journal_Printf( stream, "Test function NonSquareMatrix_MatrixVectorMultiplication \n\n");
+		Journal_Printf( stream, "Tested against solutions at http://www.uni-bonn.de/~manfear/solve_lineq.php\n\n");
+		
+		vector[0] = 1; vector[1] = 2; vector[2] = 3;
+		solutionVectorCompare[0] = 32; solutionVectorCompare[1] = 38;
+		solutionVectorCompare[2] = 44; solutionVectorCompare[3] = 50;
+
+		Journal_PrintNonSquareMatrix(stream, nonSquareMatrixAT, 4, 3);
+		StGermain_PrintNamedVector(stream, vector, 3);
+		
+		NonSquareMatrix_MatrixVectorMultiplication( nonSquareMatrixAT, 4, 3, vector, 3, solutionVector );
+		error_flag = False;
+		for ( row = 0; row < 4; row++ ) {
+			if (fabs(solutionVector[row] - solutionVectorCompare[row]) > TENSORMULTMATH_TEST_ERROR ) {
+				error_flag = True;
+				Journal_Printf(stream, "solutionVector[%d]=%f not within tolerance of solution, %f\n", row, solutionVector[row], solutionVectorCompare[row]);
+			}
+		}
+		if (error_flag == False) {
+			Journal_Printf(stream, "SolutionVector within tolerance %g of solution:\n", TENSORMULTMATH_TEST_ERROR);
+			StGermain_PrintNamedVector(stream, solutionVectorCompare, 4);
+		}
+		else {
+			Journal_Printf(stream, "SolutionVector not within tolerance %g of solution:\n", TENSORMULTMATH_TEST_ERROR);
+			StGermain_PrintNamedVector(stream, solutionVectorCompare, 4);
+		}
+		
+		Memory_Free(nonSquareMatrixA);
+		Memory_Free(nonSquareMatrixB);
+		Memory_Free(nonSquareMatrixAT);
+		Memory_Free(nonSquareMatrixResult);
+
+
+
+	}
+	
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTrigMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTrigMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+
+****************************
+Test angle conversion macros
+39 degrees in radians = 0.698
+2.468 radians in degrees = 141.406
+
+****************************
+Test domain finding function
+Angle 1.500000 is equivalent to 1.500000
+Sine test: 0.997495 = 0.997495
+Angle -1.200000 is equivalent to 5.083185
+Sine test: -0.932039 = -0.932039
+Angle 20.000000 is equivalent to 1.150444
+Sine test: 0.912945 = 0.912945
+
+****************************
+Test quadrant finding function
+Angle 45.000000 degrees is in quadrant 0
+Angle 120.000000 degrees is in quadrant 1
+Angle 195.000000 degrees is in quadrant 2
+Angle 340.000000 degrees is in quadrant 3
+Angle 730.000000 degrees is in quadrant 0
+Angle -135.000000 degrees is in quadrant 2
+
+****************************
+Test coordinate conversion functions 2D
+rectOriginal - {2.400000, 5.000000}
+spherical - {5.546170, 1.123276}
+rectangular - {2.400000, 5.000000}
+
+****************************
+Test coordinate conversion functions 3D
+rectOriginal - {2.400000, 5.000000, -10.000000}
+spherical - {11.435034, 1.123276, 2.635212}
+rectangular - {2.400000, 5.000000, -10.000000}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTrigMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTrigMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTrigMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testTrigMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testTrigMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,134 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testTrigMath.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		double angle;
+		double rectOriginal[] = {2.4,5,-10};
+		double spherical[3];
+		double rectangular[3];
+		Index dim;
+		Stream* stream = Journal_Register( Info_Type, __FILE__ );
+
+
+		printf("\n****************************\n");
+		printf("Test angle conversion macros\n");
+		printf("39 degrees in radians = %2.3f\n", StGermain_DegreeToRadian( 37.0 + 3 ) );
+		printf("2.468 radians in degrees = %2.3f\n", StGermain_RadianToDegree( 1.234 * 2 ) );
+
+		printf("\n****************************\n");
+		printf("Test domain finding function\n");
+		angle = 1.5;
+		printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) );
+		printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) );
+		angle = -1.2;
+		printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) );
+		printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) );
+		angle = 20.0;
+		printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) );
+		printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) );
+
+		printf("\n****************************\n");
+		printf("Test quadrant finding function\n");
+		angle = 45;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		angle = 120;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		angle = 195;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		angle = 340;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		angle = 730;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		angle = -135;
+		printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) ));
+		
+		printf("\n****************************\n");
+		printf("Test coordinate conversion functions 2D\n");
+		dim = 2;
+		StGermain_PrintNamedVector( stream, rectOriginal, dim );
+		StGermain_RectangularToSpherical( spherical, rectOriginal, dim );
+		StGermain_PrintNamedVector( stream, spherical, dim );
+		StGermain_SphericalToRectangular( rectangular, spherical, dim );
+		StGermain_PrintNamedVector( stream, rectangular, dim );
+
+		printf("\n****************************\n");
+		printf("Test coordinate conversion functions 3D\n");
+		dim = 3;
+		StGermain_PrintNamedVector( stream, rectOriginal, dim );
+		StGermain_RectangularToSpherical( spherical, rectOriginal, dim );
+		StGermain_PrintNamedVector( stream, spherical, dim );
+		StGermain_SphericalToRectangular( rectangular, spherical, dim );
+		StGermain_PrintNamedVector( stream, rectangular, dim );
+	}
+	
+	printf("\n");
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testVectorMath.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testVectorMath.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1146 @@
+StGermain Framework revision 3927. Copyright (C) 2003-2005 VPAC.
+Basic tests:
+d = { 1, 1, 1 }
+d = { 2, 0.5, 1.5 }
+c = d = { 2, 0.5, 1.5 }
+b = c + d = {4, 1, 3}
+a = d - b = {-2, -0.5, -1.5}
+d = a x e = {4.5, -7.5, -3.5}
+a . c = -6.5
+b = 2b = { 8, 2, 6 }
+b^ = { 0.784465, 0.196116, 0.588348 }
+Complete test:
+{ 519.615, 519.615, 519.615 }
+{ 450, 450, 225 }
+{ 435.89, 435.89, 145.297 }
+{ 430.842, 430.842, 107.711 }
+{ 428.486, 428.486, 85.6971 }
+{ 427.2, 427.2, 71.2 }
+{ 426.423, 426.423, 60.9176 }
+{ 425.918, 425.918, 53.2398 }
+{ 425.572, 425.572, 47.2857 }
+{ 425.323, 425.323, 42.5323 }
+{ 450, 225, 450 }
+{ 367.423, 183.712, 183.712 }
+{ 350, 175, 116.667 }
+{ 343.693, 171.847, 85.9233 }
+{ 340.735, 170.367, 68.1469 }
+{ 339.116, 169.558, 56.5194 }
+{ 338.137, 169.069, 48.3053 }
+{ 337.5, 168.75, 42.1875 }
+{ 337.062, 168.531, 37.4514 }
+{ 336.749, 168.375, 33.6749 }
+{ 435.89, 145.297, 435.89 }
+{ 350, 116.667, 175 }
+{ 331.662, 110.554, 110.554 }
+{ 325, 108.333, 81.25 }
+{ 321.87, 107.29, 64.3739 }
+{ 320.156, 106.719, 53.3594 }
+{ 319.119, 106.373, 45.5884 }
+{ 318.443, 106.148, 39.8054 }
+{ 317.98, 105.993, 35.3311 }
+{ 317.648, 105.883, 31.7648 }
+{ 430.842, 107.711, 430.842 }
+{ 343.693, 85.9233, 171.847 }
+{ 325, 81.25, 108.333 }
+{ 318.198, 79.5495, 79.5495 }
+{ 315, 78.75, 63 }
+{ 313.249, 78.3123, 52.2082 }
+{ 312.189, 78.0472, 44.5984 }
+{ 311.498, 77.8746, 38.9373 }
+{ 311.024, 77.7561, 34.5583 }
+{ 310.685, 77.6712, 31.0685 }
+{ 428.486, 85.6971, 428.486 }
+{ 340.735, 68.1469, 170.367 }
+{ 321.87, 64.3739, 107.29 }
+{ 315, 63, 78.75 }
+{ 311.769, 62.3538, 62.3538 }
+{ 310, 62, 51.6667 }
+{ 308.928, 61.7857, 44.1326 }
+{ 308.231, 61.6462, 38.5289 }
+{ 307.752, 61.5503, 34.1946 }
+{ 307.409, 61.4817, 30.7409 }
+{ 427.2, 71.2, 427.2 }
+{ 339.116, 56.5194, 169.558 }
+{ 320.156, 53.3594, 106.719 }
+{ 313.249, 52.2082, 78.3123 }
+{ 310, 51.6667, 62 }
+{ 308.221, 51.3701, 51.3701 }
+{ 307.143, 51.1905, 43.8776 }
+{ 306.441, 51.0735, 38.3052 }
+{ 305.959, 50.9932, 33.9955 }
+{ 305.614, 50.9357, 30.5614 }
+{ 426.423, 60.9176, 426.423 }
+{ 338.137, 48.3053, 169.069 }
+{ 319.119, 45.5884, 106.373 }
+{ 312.189, 44.5984, 78.0472 }
+{ 308.928, 44.1326, 61.7857 }
+{ 307.143, 43.8776, 51.1905 }
+{ 306.061, 43.723, 43.723 }
+{ 305.357, 43.6224, 38.1696 }
+{ 304.873, 43.5534, 33.8748 }
+{ 304.527, 43.5039, 30.4527 }
+{ 425.918, 53.2398, 425.918 }
+{ 337.5, 42.1875, 168.75 }
+{ 318.443, 39.8054, 106.148 }
+{ 311.498, 38.9373, 77.8746 }
+{ 308.231, 38.5289, 61.6462 }
+{ 306.441, 38.3052, 51.0735 }
+{ 305.357, 38.1696, 43.6224 }
+{ 304.651, 38.0814, 38.0814 }
+{ 304.167, 38.0208, 33.7963 }
+{ 303.819, 37.9774, 30.3819 }
+{ 425.572, 47.2857, 425.572 }
+{ 337.062, 37.4514, 168.531 }
+{ 317.98, 35.3311, 105.993 }
+{ 311.024, 34.5583, 77.7561 }
+{ 307.752, 34.1946, 61.5503 }
+{ 305.959, 33.9955, 50.9932 }
+{ 304.873, 33.8748, 43.5534 }
+{ 304.167, 33.7963, 38.0208 }
+{ 303.681, 33.7423, 33.7423 }
+{ 303.333, 33.7037, 30.3333 }
+{ 425.323, 42.5323, 425.323 }
+{ 336.749, 33.6749, 168.375 }
+{ 317.648, 31.7648, 105.883 }
+{ 310.685, 31.0685, 77.6712 }
+{ 307.409, 30.7409, 61.4817 }
+{ 305.614, 30.5614, 50.9357 }
+{ 304.527, 30.4527, 43.5039 }
+{ 303.819, 30.3819, 37.9774 }
+{ 303.333, 30.3333, 33.7037 }
+{ 302.985, 30.2985, 30.2985 }
+{ 225, 450, 450 }
+{ 183.712, 367.423, 183.712 }
+{ 175, 350, 116.667 }
+{ 171.847, 343.693, 85.9233 }
+{ 170.367, 340.735, 68.1469 }
+{ 169.558, 339.116, 56.5194 }
+{ 169.069, 338.137, 48.3053 }
+{ 168.75, 337.5, 42.1875 }
+{ 168.531, 337.062, 37.4514 }
+{ 168.375, 336.749, 33.6749 }
+{ 183.712, 183.712, 367.423 }
+{ 129.904, 129.904, 129.904 }
+{ 117.26, 117.26, 78.1736 }
+{ 112.5, 112.5, 56.25 }
+{ 110.227, 110.227, 44.0908 }
+{ 108.972, 108.972, 36.3242 }
+{ 108.209, 108.209, 30.9169 }
+{ 107.711, 107.711, 26.9276 }
+{ 107.367, 107.367, 23.8594 }
+{ 107.121, 107.121, 21.4243 }
+{ 175, 116.667, 350 }
+{ 117.26, 78.1736, 117.26 }
+{ 103.078, 68.7184, 68.7184 }
+{ 97.6281, 65.0854, 48.8141 }
+{ 95, 63.3333, 38 }
+{ 93.5414, 62.361, 31.1805 }
+{ 92.6509, 61.7672, 26.4717 }
+{ 92.0682, 61.3788, 23.0171 }
+{ 91.6667, 61.1111, 20.3704 }
+{ 91.3783, 60.9189, 18.2757 }
+{ 171.847, 85.9233, 343.693 }
+{ 112.5, 56.25, 112.5 }
+{ 97.6281, 48.8141, 65.0854 }
+{ 91.8559, 45.9279, 45.9279 }
+{ 89.0576, 44.5288, 35.623 }
+{ 87.5, 43.75, 29.1667 }
+{ 86.5473, 43.2736, 24.7278 }
+{ 85.9233, 42.9616, 21.4808 }
+{ 85.4929, 42.7464, 18.9984 }
+{ 85.1836, 42.5918, 17.0367 }
+{ 170.367, 68.1469, 340.735 }
+{ 110.227, 44.0908, 110.227 }
+{ 95, 38, 63.3333 }
+{ 89.0576, 35.623, 44.5288 }
+{ 86.1684, 34.4674, 34.4674 }
+{ 84.5577, 33.8231, 28.1859 }
+{ 83.5714, 33.4286, 23.8776 }
+{ 82.925, 33.17, 20.7313 }
+{ 82.479, 32.9916, 18.3287 }
+{ 82.1584, 32.8634, 16.4317 }
+{ 169.558, 56.5194, 339.116 }
+{ 108.972, 36.3242, 108.972 }
+{ 93.5414, 31.1805, 62.361 }
+{ 87.5, 29.1667, 43.75 }
+{ 84.5577, 28.1859, 33.8231 }
+{ 82.9156, 27.6385, 27.6385 }
+{ 81.9096, 27.3032, 23.4027 }
+{ 81.25, 27.0833, 20.3125 }
+{ 80.7947, 26.9316, 17.9544 }
+{ 80.4674, 26.8225, 16.0935 }
+{ 169.069, 48.3053, 338.137 }
+{ 108.209, 30.9169, 108.209 }
+{ 92.6509, 26.4717, 61.7672 }
+{ 86.5473, 24.7278, 43.2736 }
+{ 83.5714, 23.8776, 33.4286 }
+{ 81.9096, 23.4027, 27.3032 }
+{ 80.8911, 23.1117, 23.1117 }
+{ 80.2231, 22.9209, 20.0558 }
+{ 79.7619, 22.7891, 17.7249 }
+{ 79.4304, 22.6944, 15.8861 }
+{ 168.75, 42.1875, 337.5 }
+{ 107.711, 26.9276, 107.711 }
+{ 92.0682, 23.0171, 61.3788 }
+{ 85.9233, 21.4808, 42.9616 }
+{ 82.925, 20.7313, 33.17 }
+{ 81.25, 20.3125, 27.0833 }
+{ 80.2231, 20.0558, 22.9209 }
+{ 79.5495, 19.8874, 19.8874 }
+{ 79.0844, 19.7711, 17.5743 }
+{ 78.75, 19.6875, 15.75 }
+{ 168.531, 37.4514, 337.062 }
+{ 107.367, 23.8594, 107.367 }
+{ 91.6667, 20.3704, 61.1111 }
+{ 85.4929, 18.9984, 42.7464 }
+{ 82.479, 18.3287, 32.9916 }
+{ 80.7947, 17.9544, 26.9316 }
+{ 79.7619, 17.7249, 22.7891 }
+{ 79.0844, 17.5743, 19.7711 }
+{ 78.6165, 17.4703, 17.4703 }
+{ 78.2801, 17.3956, 15.656 }
+{ 168.375, 33.6749, 336.749 }
+{ 107.121, 21.4243, 107.121 }
+{ 91.3783, 18.2757, 60.9189 }
+{ 85.1836, 17.0367, 42.5918 }
+{ 82.1584, 16.4317, 32.8634 }
+{ 80.4674, 16.0935, 26.8225 }
+{ 79.4304, 15.8861, 22.6944 }
+{ 78.75, 15.75, 19.6875 }
+{ 78.2801, 15.656, 17.3956 }
+{ 77.9423, 15.5885, 15.5885 }
+{ 145.297, 435.89, 435.89 }
+{ 116.667, 350, 175 }
+{ 110.554, 331.662, 110.554 }
+{ 108.333, 325, 81.25 }
+{ 107.29, 321.87, 64.3739 }
+{ 106.719, 320.156, 53.3594 }
+{ 106.373, 319.119, 45.5884 }
+{ 106.148, 318.443, 39.8054 }
+{ 105.993, 317.98, 35.3311 }
+{ 105.883, 317.648, 31.7648 }
+{ 116.667, 175, 350 }
+{ 78.1736, 117.26, 117.26 }
+{ 68.7184, 103.078, 68.7184 }
+{ 65.0854, 97.6281, 48.8141 }
+{ 63.3333, 95, 38 }
+{ 62.361, 93.5414, 31.1805 }
+{ 61.7672, 92.6509, 26.4717 }
+{ 61.3788, 92.0682, 23.0171 }
+{ 61.1111, 91.6667, 20.3704 }
+{ 60.9189, 91.3783, 18.2757 }
+{ 110.554, 110.554, 331.662 }
+{ 68.7184, 68.7184, 103.078 }
+{ 57.735, 57.735, 57.735 }
+{ 53.3594, 53.3594, 40.0195 }
+{ 51.2076, 51.2076, 30.7246 }
+{ 50, 50, 25 }
+{ 49.2575, 49.2575, 21.1104 }
+{ 48.7696, 48.7696, 18.2886 }
+{ 48.4322, 48.4322, 16.1441 }
+{ 48.1894, 48.1894, 14.4568 }
+{ 108.333, 81.25, 325 }
+{ 65.0854, 48.8141, 97.6281 }
+{ 53.3594, 40.0195, 53.3594 }
+{ 48.5913, 36.4434, 36.4434 }
+{ 46.2181, 34.6636, 27.7308 }
+{ 44.8764, 33.6573, 22.4382 }
+{ 44.0476, 33.0357, 18.8776 }
+{ 43.5013, 32.626, 16.313 }
+{ 43.1227, 32.342, 14.3742 }
+{ 42.8499, 32.1374, 12.855 }
+{ 107.29, 64.3739, 321.87 }
+{ 63.3333, 38, 95 }
+{ 51.2076, 30.7246, 51.2076 }
+{ 46.2181, 27.7308, 34.6636 }
+{ 43.7163, 26.2298, 26.2298 }
+{ 42.2953, 25.3772, 21.1476 }
+{ 41.4149, 24.8489, 17.7492 }
+{ 40.8333, 24.5, 15.3125 }
+{ 40.4298, 24.2579, 13.4766 }
+{ 40.1386, 24.0832, 12.0416 }
+{ 106.719, 53.3594, 320.156 }
+{ 62.361, 31.1805, 93.5414 }
+{ 50, 25, 50 }
+{ 44.8764, 22.4382, 33.6573 }
+{ 42.2953, 21.1476, 25.3772 }
+{ 40.8248, 20.4124, 20.4124 }
+{ 39.912, 19.956, 17.1052 }
+{ 39.3083, 19.6541, 14.7406 }
+{ 38.8889, 19.4444, 12.963 }
+{ 38.5861, 19.2931, 11.5758 }
+{ 106.373, 45.5884, 319.119 }
+{ 61.7672, 26.4717, 92.6509 }
+{ 49.2575, 21.1104, 49.2575 }
+{ 44.0476, 18.8776, 33.0357 }
+{ 41.4149, 17.7492, 24.8489 }
+{ 39.912, 17.1052, 19.956 }
+{ 38.9779, 16.7048, 16.7048 }
+{ 38.3594, 16.4397, 14.3848 }
+{ 37.9295, 16.2555, 12.6432 }
+{ 37.619, 16.1224, 11.2857 }
+{ 106.148, 39.8054, 318.443 }
+{ 61.3788, 23.0171, 92.0682 }
+{ 48.7696, 18.2886, 48.7696 }
+{ 43.5013, 16.313, 32.626 }
+{ 40.8333, 15.3125, 24.5 }
+{ 39.3083, 14.7406, 19.6541 }
+{ 38.3594, 14.3848, 16.4397 }
+{ 37.7308, 14.149, 14.149 }
+{ 37.2937, 13.9851, 12.4312 }
+{ 36.9778, 13.8667, 11.0934 }
+{ 105.993, 35.3311, 317.98 }
+{ 61.1111, 20.3704, 91.6667 }
+{ 48.4322, 16.1441, 48.4322 }
+{ 43.1227, 14.3742, 32.342 }
+{ 40.4298, 13.4766, 24.2579 }
+{ 38.8889, 12.963, 19.4444 }
+{ 37.9295, 12.6432, 16.2555 }
+{ 37.2937, 12.4312, 13.9851 }
+{ 36.8514, 12.2838, 12.2838 }
+{ 36.5317, 12.1772, 10.9595 }
+{ 105.883, 31.7648, 317.648 }
+{ 60.9189, 18.2757, 91.3783 }
+{ 48.1894, 14.4568, 48.1894 }
+{ 42.8499, 12.855, 32.1374 }
+{ 40.1386, 12.0416, 24.0832 }
+{ 38.5861, 11.5758, 19.2931 }
+{ 37.619, 11.2857, 16.1224 }
+{ 36.9778, 11.0934, 13.8667 }
+{ 36.5317, 10.9595, 12.1772 }
+{ 36.2093, 10.8628, 10.8628 }
+{ 107.711, 430.842, 430.842 }
+{ 85.9233, 343.693, 171.847 }
+{ 81.25, 325, 108.333 }
+{ 79.5495, 318.198, 79.5495 }
+{ 78.75, 315, 63 }
+{ 78.3123, 313.249, 52.2082 }
+{ 78.0472, 312.189, 44.5984 }
+{ 77.8746, 311.498, 38.9373 }
+{ 77.7561, 311.024, 34.5583 }
+{ 77.6712, 310.685, 31.0685 }
+{ 85.9233, 171.847, 343.693 }
+{ 56.25, 112.5, 112.5 }
+{ 48.8141, 97.6281, 65.0854 }
+{ 45.9279, 91.8559, 45.9279 }
+{ 44.5288, 89.0576, 35.623 }
+{ 43.75, 87.5, 29.1667 }
+{ 43.2736, 86.5473, 24.7278 }
+{ 42.9616, 85.9233, 21.4808 }
+{ 42.7464, 85.4929, 18.9984 }
+{ 42.5918, 85.1836, 17.0367 }
+{ 81.25, 108.333, 325 }
+{ 48.8141, 65.0854, 97.6281 }
+{ 40.0195, 53.3594, 53.3594 }
+{ 36.4434, 48.5913, 36.4434 }
+{ 34.6636, 46.2181, 27.7308 }
+{ 33.6573, 44.8764, 22.4382 }
+{ 33.0357, 44.0476, 18.8776 }
+{ 32.626, 43.5013, 16.313 }
+{ 32.342, 43.1227, 14.3742 }
+{ 32.1374, 42.8499, 12.855 }
+{ 79.5495, 79.5495, 318.198 }
+{ 45.9279, 45.9279, 91.8559 }
+{ 36.4434, 36.4434, 48.5913 }
+{ 32.476, 32.476, 32.476 }
+{ 30.4651, 30.4651, 24.3721 }
+{ 29.3151, 29.3151, 19.5434 }
+{ 28.5993, 28.5993, 16.3425 }
+{ 28.125, 28.125, 14.0625 }
+{ 27.7951, 27.7951, 12.3534 }
+{ 27.5568, 27.5568, 11.0227 }
+{ 78.75, 63, 315 }
+{ 44.5288, 35.623, 89.0576 }
+{ 34.6636, 27.7308, 46.2181 }
+{ 30.4651, 24.3721, 30.4651 }
+{ 28.3119, 22.6495, 22.6495 }
+{ 27.0705, 21.6564, 18.047 }
+{ 26.2937, 21.035, 15.025 }
+{ 25.777, 20.6216, 12.8885 }
+{ 25.4167, 20.3333, 11.2963 }
+{ 25.1558, 20.1246, 10.0623 }
+{ 78.3123, 52.2082, 313.249 }
+{ 43.75, 29.1667, 87.5 }
+{ 33.6573, 22.4382, 44.8764 }
+{ 29.3151, 19.5434, 29.3151 }
+{ 27.0705, 18.047, 21.6564 }
+{ 25.7694, 17.1796, 17.1796 }
+{ 24.9521, 16.6347, 14.2584 }
+{ 24.407, 16.2714, 12.2035 }
+{ 24.0262, 16.0174, 10.6783 }
+{ 23.75, 15.8333, 9.5 }
+{ 78.0472, 44.5984, 312.189 }
+{ 43.2736, 24.7278, 86.5473 }
+{ 33.0357, 18.8776, 44.0476 }
+{ 28.5993, 16.3425, 28.5993 }
+{ 26.2937, 15.025, 21.035 }
+{ 24.9521, 14.2584, 16.6347 }
+{ 24.1071, 13.7755, 13.7755 }
+{ 23.5425, 13.4529, 11.7712 }
+{ 23.1474, 13.2271, 10.2877 }
+{ 22.8606, 13.0632, 9.14425 }
+{ 77.8746, 38.9373, 311.498 }
+{ 42.9616, 21.4808, 85.9233 }
+{ 32.626, 16.313, 43.5013 }
+{ 28.125, 14.0625, 28.125 }
+{ 25.777, 12.8885, 20.6216 }
+{ 24.407, 12.2035, 16.2714 }
+{ 23.5425, 11.7712, 13.4529 }
+{ 22.964, 11.482, 11.482 }
+{ 22.5588, 11.2794, 10.0261 }
+{ 22.2644, 11.1322, 8.90576 }
+{ 77.7561, 34.5583, 311.024 }
+{ 42.7464, 18.9984, 85.4929 }
+{ 32.342, 14.3742, 43.1227 }
+{ 27.7951, 12.3534, 27.7951 }
+{ 25.4167, 11.2963, 20.3333 }
+{ 24.0262, 10.6783, 16.0174 }
+{ 23.1474, 10.2877, 13.2271 }
+{ 22.5588, 10.0261, 11.2794 }
+{ 22.1461, 9.84273, 9.84273 }
+{ 21.8462, 9.70943, 8.73848 }
+{ 77.6712, 31.0685, 310.685 }
+{ 42.5918, 17.0367, 85.1836 }
+{ 32.1374, 12.855, 42.8499 }
+{ 27.5568, 11.0227, 27.5568 }
+{ 25.1558, 10.0623, 20.1246 }
+{ 23.75, 9.5, 15.8333 }
+{ 22.8606, 9.14425, 13.0632 }
+{ 22.2644, 8.90576, 11.1322 }
+{ 21.8462, 8.73848, 9.70943 }
+{ 21.5421, 8.61684, 8.61684 }
+{ 85.6971, 428.486, 428.486 }
+{ 68.1469, 340.735, 170.367 }
+{ 64.3739, 321.87, 107.29 }
+{ 63, 315, 78.75 }
+{ 62.3538, 311.769, 62.3538 }
+{ 62, 310, 51.6667 }
+{ 61.7857, 308.928, 44.1326 }
+{ 61.6462, 308.231, 38.5289 }
+{ 61.5503, 307.752, 34.1946 }
+{ 61.4817, 307.409, 30.7409 }
+{ 68.1469, 170.367, 340.735 }
+{ 44.0908, 110.227, 110.227 }
+{ 38, 95, 63.3333 }
+{ 35.623, 89.0576, 44.5288 }
+{ 34.4674, 86.1684, 34.4674 }
+{ 33.8231, 84.5577, 28.1859 }
+{ 33.4286, 83.5714, 23.8776 }
+{ 33.17, 82.925, 20.7313 }
+{ 32.9916, 82.479, 18.3287 }
+{ 32.8634, 82.1584, 16.4317 }
+{ 64.3739, 107.29, 321.87 }
+{ 38, 63.3333, 95 }
+{ 30.7246, 51.2076, 51.2076 }
+{ 27.7308, 46.2181, 34.6636 }
+{ 26.2298, 43.7163, 26.2298 }
+{ 25.3772, 42.2953, 21.1476 }
+{ 24.8489, 41.4149, 17.7492 }
+{ 24.5, 40.8333, 15.3125 }
+{ 24.2579, 40.4298, 13.4766 }
+{ 24.0832, 40.1386, 12.0416 }
+{ 63, 78.75, 315 }
+{ 35.623, 44.5288, 89.0576 }
+{ 27.7308, 34.6636, 46.2181 }
+{ 24.3721, 30.4651, 30.4651 }
+{ 22.6495, 28.3119, 22.6495 }
+{ 21.6564, 27.0705, 18.047 }
+{ 21.035, 26.2937, 15.025 }
+{ 20.6216, 25.777, 12.8885 }
+{ 20.3333, 25.4167, 11.2963 }
+{ 20.1246, 25.1558, 10.0623 }
+{ 62.3538, 62.3538, 311.769 }
+{ 34.4674, 34.4674, 86.1684 }
+{ 26.2298, 26.2298, 43.7163 }
+{ 22.6495, 22.6495, 28.3119 }
+{ 20.7846, 20.7846, 20.7846 }
+{ 19.6977, 19.6977, 16.4148 }
+{ 19.0123, 19.0123, 13.5802 }
+{ 18.554, 18.554, 11.5962 }
+{ 18.2331, 18.2331, 10.1295 }
+{ 18, 18, 9 }
+{ 62, 51.6667, 310 }
+{ 33.8231, 28.1859, 84.5577 }
+{ 25.3772, 21.1476, 42.2953 }
+{ 21.6564, 18.047, 27.0705 }
+{ 19.6977, 16.4148, 19.6977 }
+{ 18.5472, 15.456, 15.456 }
+{ 17.8177, 14.8481, 12.7269 }
+{ 17.3277, 14.4398, 10.8298 }
+{ 16.9837, 14.153, 9.43536 }
+{ 16.7332, 13.9443, 8.3666 }
+{ 61.7857, 44.1326, 308.928 }
+{ 33.4286, 23.8776, 83.5714 }
+{ 24.8489, 17.7492, 41.4149 }
+{ 21.035, 15.025, 26.2937 }
+{ 19.0123, 13.5802, 19.0123 }
+{ 17.8177, 12.7269, 14.8481 }
+{ 17.0569, 12.1835, 12.1835 }
+{ 16.5445, 11.8175, 10.3403 }
+{ 16.1838, 11.5598, 8.99097 }
+{ 15.9207, 11.3719, 7.96036 }
+{ 61.6462, 38.5289, 308.231 }
+{ 33.17, 20.7313, 82.925 }
+{ 24.5, 15.3125, 40.8333 }
+{ 20.6216, 12.8885, 25.777 }
+{ 18.554, 11.5962, 18.554 }
+{ 17.3277, 10.8298, 14.4398 }
+{ 16.5445, 10.3403, 11.8175 }
+{ 16.0156, 10.0098, 10.0098 }
+{ 15.6427, 9.7767, 8.6904 }
+{ 15.3704, 9.60652, 7.68521 }
+{ 61.5503, 34.1946, 307.752 }
+{ 32.9916, 18.3287, 82.479 }
+{ 24.2579, 13.4766, 40.4298 }
+{ 20.3333, 11.2963, 25.4167 }
+{ 18.2331, 10.1295, 18.2331 }
+{ 16.9837, 9.43536, 14.153 }
+{ 16.1838, 8.99097, 11.5598 }
+{ 15.6427, 8.6904, 9.7767 }
+{ 15.2607, 8.47817, 8.47817 }
+{ 14.9815, 8.32304, 7.49074 }
+{ 61.4817, 30.7409, 307.409 }
+{ 32.8634, 16.4317, 82.1584 }
+{ 24.0832, 12.0416, 40.1386 }
+{ 20.1246, 10.0623, 25.1558 }
+{ 18, 9, 18 }
+{ 16.7332, 8.3666, 13.9443 }
+{ 15.9207, 7.96036, 11.3719 }
+{ 15.3704, 7.68521, 9.60652 }
+{ 14.9815, 7.49074, 8.32304 }
+{ 14.6969, 7.34847, 7.34847 }
+{ 71.2, 427.2, 427.2 }
+{ 56.5194, 339.116, 169.558 }
+{ 53.3594, 320.156, 106.719 }
+{ 52.2082, 313.249, 78.3123 }
+{ 51.6667, 310, 62 }
+{ 51.3701, 308.221, 51.3701 }
+{ 51.1905, 307.143, 43.8776 }
+{ 51.0735, 306.441, 38.3052 }
+{ 50.9932, 305.959, 33.9955 }
+{ 50.9357, 305.614, 30.5614 }
+{ 56.5194, 169.558, 339.116 }
+{ 36.3242, 108.972, 108.972 }
+{ 31.1805, 93.5414, 62.361 }
+{ 29.1667, 87.5, 43.75 }
+{ 28.1859, 84.5577, 33.8231 }
+{ 27.6385, 82.9156, 27.6385 }
+{ 27.3032, 81.9096, 23.4027 }
+{ 27.0833, 81.25, 20.3125 }
+{ 26.9316, 80.7947, 17.9544 }
+{ 26.8225, 80.4674, 16.0935 }
+{ 53.3594, 106.719, 320.156 }
+{ 31.1805, 62.361, 93.5414 }
+{ 25, 50, 50 }
+{ 22.4382, 44.8764, 33.6573 }
+{ 21.1476, 42.2953, 25.3772 }
+{ 20.4124, 40.8248, 20.4124 }
+{ 19.956, 39.912, 17.1052 }
+{ 19.6541, 39.3083, 14.7406 }
+{ 19.4444, 38.8889, 12.963 }
+{ 19.2931, 38.5861, 11.5758 }
+{ 52.2082, 78.3123, 313.249 }
+{ 29.1667, 43.75, 87.5 }
+{ 22.4382, 33.6573, 44.8764 }
+{ 19.5434, 29.3151, 29.3151 }
+{ 18.047, 27.0705, 21.6564 }
+{ 17.1796, 25.7694, 17.1796 }
+{ 16.6347, 24.9521, 14.2584 }
+{ 16.2714, 24.407, 12.2035 }
+{ 16.0174, 24.0262, 10.6783 }
+{ 15.8333, 23.75, 9.5 }
+{ 51.6667, 62, 310 }
+{ 28.1859, 33.8231, 84.5577 }
+{ 21.1476, 25.3772, 42.2953 }
+{ 18.047, 21.6564, 27.0705 }
+{ 16.4148, 19.6977, 19.6977 }
+{ 15.456, 18.5472, 15.456 }
+{ 14.8481, 17.8177, 12.7269 }
+{ 14.4398, 17.3277, 10.8298 }
+{ 14.153, 16.9837, 9.43536 }
+{ 13.9443, 16.7332, 8.3666 }
+{ 51.3701, 51.3701, 308.221 }
+{ 27.6385, 27.6385, 82.9156 }
+{ 20.4124, 20.4124, 40.8248 }
+{ 17.1796, 17.1796, 25.7694 }
+{ 15.456, 15.456, 18.5472 }
+{ 14.4338, 14.4338, 14.4338 }
+{ 13.7808, 13.7808, 11.8121 }
+{ 13.3398, 13.3398, 10.0049 }
+{ 13.0289, 13.0289, 8.68596 }
+{ 12.8019, 12.8019, 7.68115 }
+{ 51.1905, 43.8776, 307.143 }
+{ 27.3032, 23.4027, 81.9096 }
+{ 19.956, 17.1052, 39.912 }
+{ 16.6347, 14.2584, 24.9521 }
+{ 14.8481, 12.7269, 17.8177 }
+{ 13.7808, 11.8121, 13.7808 }
+{ 13.0952, 11.2245, 11.2245 }
+{ 12.6304, 10.8261, 9.47281 }
+{ 12.3016, 10.5442, 8.20106 }
+{ 12.0609, 10.3379, 7.23653 }
+{ 51.0735, 38.3052, 306.441 }
+{ 27.0833, 20.3125, 81.25 }
+{ 19.6541, 14.7406, 39.3083 }
+{ 16.2714, 12.2035, 24.407 }
+{ 14.4398, 10.8298, 17.3277 }
+{ 13.3398, 10.0049, 13.3398 }
+{ 12.6304, 9.47281, 10.8261 }
+{ 12.1478, 9.11086, 9.11086 }
+{ 11.8056, 8.85417, 7.87037 }
+{ 11.5545, 8.66589, 6.93271 }
+{ 50.9932, 33.9955, 305.959 }
+{ 26.9316, 17.9544, 80.7947 }
+{ 19.4444, 12.963, 38.8889 }
+{ 16.0174, 10.6783, 24.0262 }
+{ 14.153, 9.43536, 16.9837 }
+{ 13.0289, 8.68596, 13.0289 }
+{ 12.3016, 8.20106, 10.5442 }
+{ 11.8056, 7.87037, 8.85417 }
+{ 11.4531, 7.63538, 7.63538 }
+{ 11.1941, 7.46276, 6.71648 }
+{ 50.9357, 30.5614, 305.614 }
+{ 26.8225, 16.0935, 80.4674 }
+{ 19.2931, 11.5758, 38.5861 }
+{ 15.8333, 9.5, 23.75 }
+{ 13.9443, 8.3666, 16.7332 }
+{ 12.8019, 7.68115, 12.8019 }
+{ 12.0609, 7.23653, 10.3379 }
+{ 11.5545, 6.93271, 8.66589 }
+{ 11.1941, 6.71648, 7.46276 }
+{ 10.9291, 6.55744, 6.55744 }
+{ 60.9176, 426.423, 426.423 }
+{ 48.3053, 338.137, 169.069 }
+{ 45.5884, 319.119, 106.373 }
+{ 44.5984, 312.189, 78.0472 }
+{ 44.1326, 308.928, 61.7857 }
+{ 43.8776, 307.143, 51.1905 }
+{ 43.723, 306.061, 43.723 }
+{ 43.6224, 305.357, 38.1696 }
+{ 43.5534, 304.873, 33.8748 }
+{ 43.5039, 304.527, 30.4527 }
+{ 48.3053, 169.069, 338.137 }
+{ 30.9169, 108.209, 108.209 }
+{ 26.4717, 92.6509, 61.7672 }
+{ 24.7278, 86.5473, 43.2736 }
+{ 23.8776, 83.5714, 33.4286 }
+{ 23.4027, 81.9096, 27.3032 }
+{ 23.1117, 80.8911, 23.1117 }
+{ 22.9209, 80.2231, 20.0558 }
+{ 22.7891, 79.7619, 17.7249 }
+{ 22.6944, 79.4304, 15.8861 }
+{ 45.5884, 106.373, 319.119 }
+{ 26.4717, 61.7672, 92.6509 }
+{ 21.1104, 49.2575, 49.2575 }
+{ 18.8776, 44.0476, 33.0357 }
+{ 17.7492, 41.4149, 24.8489 }
+{ 17.1052, 39.912, 19.956 }
+{ 16.7048, 38.9779, 16.7048 }
+{ 16.4397, 38.3594, 14.3848 }
+{ 16.2555, 37.9295, 12.6432 }
+{ 16.1224, 37.619, 11.2857 }
+{ 44.5984, 78.0472, 312.189 }
+{ 24.7278, 43.2736, 86.5473 }
+{ 18.8776, 33.0357, 44.0476 }
+{ 16.3425, 28.5993, 28.5993 }
+{ 15.025, 26.2937, 21.035 }
+{ 14.2584, 24.9521, 16.6347 }
+{ 13.7755, 24.1071, 13.7755 }
+{ 13.4529, 23.5425, 11.7712 }
+{ 13.2271, 23.1474, 10.2877 }
+{ 13.0632, 22.8606, 9.14425 }
+{ 44.1326, 61.7857, 308.928 }
+{ 23.8776, 33.4286, 83.5714 }
+{ 17.7492, 24.8489, 41.4149 }
+{ 15.025, 21.035, 26.2937 }
+{ 13.5802, 19.0123, 19.0123 }
+{ 12.7269, 17.8177, 14.8481 }
+{ 12.1835, 17.0569, 12.1835 }
+{ 11.8175, 16.5445, 10.3403 }
+{ 11.5598, 16.1838, 8.99097 }
+{ 11.3719, 15.9207, 7.96036 }
+{ 43.8776, 51.1905, 307.143 }
+{ 23.4027, 27.3032, 81.9096 }
+{ 17.1052, 19.956, 39.912 }
+{ 14.2584, 16.6347, 24.9521 }
+{ 12.7269, 14.8481, 17.8177 }
+{ 11.8121, 13.7808, 13.7808 }
+{ 11.2245, 13.0952, 11.2245 }
+{ 10.8261, 12.6304, 9.47281 }
+{ 10.5442, 12.3016, 8.20106 }
+{ 10.3379, 12.0609, 7.23653 }
+{ 43.723, 43.723, 306.061 }
+{ 23.1117, 23.1117, 80.8911 }
+{ 16.7048, 16.7048, 38.9779 }
+{ 13.7755, 13.7755, 24.1071 }
+{ 12.1835, 12.1835, 17.0569 }
+{ 11.2245, 11.2245, 13.0952 }
+{ 10.6044, 10.6044, 10.6044 }
+{ 10.1817, 10.1817, 8.90902 }
+{ 9.88152, 9.88152, 7.68563 }
+{ 9.66106, 9.66106, 6.76274 }
+{ 43.6224, 38.1696, 305.357 }
+{ 22.9209, 20.0558, 80.2231 }
+{ 16.4397, 14.3848, 38.3594 }
+{ 13.4529, 11.7712, 23.5425 }
+{ 11.8175, 10.3403, 16.5445 }
+{ 10.8261, 9.47281, 12.6304 }
+{ 10.1817, 8.90902, 10.1817 }
+{ 9.74076, 8.52316, 8.52316 }
+{ 9.42651, 8.2482, 7.33173 }
+{ 9.19515, 8.04575, 6.4366 }
+{ 43.5534, 33.8748, 304.873 }
+{ 22.7891, 17.7249, 79.7619 }
+{ 16.2555, 12.6432, 37.9295 }
+{ 13.2271, 10.2877, 23.1474 }
+{ 11.5598, 8.99097, 16.1838 }
+{ 10.5442, 8.20106, 12.3016 }
+{ 9.88152, 7.68563, 9.88152 }
+{ 9.42651, 7.33173, 8.2482 }
+{ 9.10142, 7.07888, 7.07888 }
+{ 8.86157, 6.89233, 6.2031 }
+{ 43.5039, 30.4527, 304.527 }
+{ 22.6944, 15.8861, 79.4304 }
+{ 16.1224, 11.2857, 37.619 }
+{ 13.0632, 9.14425, 22.8606 }
+{ 11.3719, 7.96036, 15.9207 }
+{ 10.3379, 7.23653, 12.0609 }
+{ 9.66106, 6.76274, 9.66106 }
+{ 9.19515, 6.4366, 8.04575 }
+{ 8.86157, 6.2031, 6.89233 }
+{ 8.61505, 6.03053, 6.03053 }
+{ 53.2398, 425.918, 425.918 }
+{ 42.1875, 337.5, 168.75 }
+{ 39.8054, 318.443, 106.148 }
+{ 38.9373, 311.498, 77.8746 }
+{ 38.5289, 308.231, 61.6462 }
+{ 38.3052, 306.441, 51.0735 }
+{ 38.1696, 305.357, 43.6224 }
+{ 38.0814, 304.651, 38.0814 }
+{ 38.0208, 304.167, 33.7963 }
+{ 37.9774, 303.819, 30.3819 }
+{ 42.1875, 168.75, 337.5 }
+{ 26.9276, 107.711, 107.711 }
+{ 23.0171, 92.0682, 61.3788 }
+{ 21.4808, 85.9233, 42.9616 }
+{ 20.7313, 82.925, 33.17 }
+{ 20.3125, 81.25, 27.0833 }
+{ 20.0558, 80.2231, 22.9209 }
+{ 19.8874, 79.5495, 19.8874 }
+{ 19.7711, 79.0844, 17.5743 }
+{ 19.6875, 78.75, 15.75 }
+{ 39.8054, 106.148, 318.443 }
+{ 23.0171, 61.3788, 92.0682 }
+{ 18.2886, 48.7696, 48.7696 }
+{ 16.313, 43.5013, 32.626 }
+{ 15.3125, 40.8333, 24.5 }
+{ 14.7406, 39.3083, 19.6541 }
+{ 14.3848, 38.3594, 16.4397 }
+{ 14.149, 37.7308, 14.149 }
+{ 13.9851, 37.2937, 12.4312 }
+{ 13.8667, 36.9778, 11.0934 }
+{ 38.9373, 77.8746, 311.498 }
+{ 21.4808, 42.9616, 85.9233 }
+{ 16.313, 32.626, 43.5013 }
+{ 14.0625, 28.125, 28.125 }
+{ 12.8885, 25.777, 20.6216 }
+{ 12.2035, 24.407, 16.2714 }
+{ 11.7712, 23.5425, 13.4529 }
+{ 11.482, 22.964, 11.482 }
+{ 11.2794, 22.5588, 10.0261 }
+{ 11.1322, 22.2644, 8.90576 }
+{ 38.5289, 61.6462, 308.231 }
+{ 20.7313, 33.17, 82.925 }
+{ 15.3125, 24.5, 40.8333 }
+{ 12.8885, 20.6216, 25.777 }
+{ 11.5962, 18.554, 18.554 }
+{ 10.8298, 17.3277, 14.4398 }
+{ 10.3403, 16.5445, 11.8175 }
+{ 10.0098, 16.0156, 10.0098 }
+{ 9.7767, 15.6427, 8.6904 }
+{ 9.60652, 15.3704, 7.68521 }
+{ 38.3052, 51.0735, 306.441 }
+{ 20.3125, 27.0833, 81.25 }
+{ 14.7406, 19.6541, 39.3083 }
+{ 12.2035, 16.2714, 24.407 }
+{ 10.8298, 14.4398, 17.3277 }
+{ 10.0049, 13.3398, 13.3398 }
+{ 9.47281, 12.6304, 10.8261 }
+{ 9.11086, 12.1478, 9.11086 }
+{ 8.85417, 11.8056, 7.87037 }
+{ 8.66589, 11.5545, 6.93271 }
+{ 38.1696, 43.6224, 305.357 }
+{ 20.0558, 22.9209, 80.2231 }
+{ 14.3848, 16.4397, 38.3594 }
+{ 11.7712, 13.4529, 23.5425 }
+{ 10.3403, 11.8175, 16.5445 }
+{ 9.47281, 10.8261, 12.6304 }
+{ 8.90902, 10.1817, 10.1817 }
+{ 8.52316, 9.74076, 8.52316 }
+{ 8.2482, 9.42651, 7.33173 }
+{ 8.04575, 9.19515, 6.4366 }
+{ 38.0814, 38.0814, 304.651 }
+{ 19.8874, 19.8874, 79.5495 }
+{ 14.149, 14.149, 37.7308 }
+{ 11.482, 11.482, 22.964 }
+{ 10.0098, 10.0098, 16.0156 }
+{ 9.11086, 9.11086, 12.1478 }
+{ 8.52316, 8.52316, 9.74076 }
+{ 8.11899, 8.11899, 8.11899 }
+{ 7.82984, 7.82984, 6.95986 }
+{ 7.61629, 7.61629, 6.09303 }
+{ 38.0208, 33.7963, 304.167 }
+{ 19.7711, 17.5743, 79.0844 }
+{ 13.9851, 12.4312, 37.2937 }
+{ 11.2794, 10.0261, 22.5588 }
+{ 9.7767, 8.6904, 15.6427 }
+{ 8.85417, 7.87037, 11.8056 }
+{ 8.2482, 7.33173, 9.42651 }
+{ 7.82984, 6.95986, 7.82984 }
+{ 7.5296, 6.69298, 6.69298 }
+{ 7.30727, 6.49536, 5.84582 }
+{ 37.9774, 30.3819, 303.819 }
+{ 19.6875, 15.75, 78.75 }
+{ 13.8667, 11.0934, 36.9778 }
+{ 11.1322, 8.90576, 22.2644 }
+{ 9.60652, 7.68521, 15.3704 }
+{ 8.66589, 6.93271, 11.5545 }
+{ 8.04575, 6.4366, 9.19515 }
+{ 7.61629, 6.09303, 7.61629 }
+{ 7.30727, 5.84582, 6.49536 }
+{ 7.07797, 5.66238, 5.66238 }
+{ 47.2857, 425.572, 425.572 }
+{ 37.4514, 337.062, 168.531 }
+{ 35.3311, 317.98, 105.993 }
+{ 34.5583, 311.024, 77.7561 }
+{ 34.1946, 307.752, 61.5503 }
+{ 33.9955, 305.959, 50.9932 }
+{ 33.8748, 304.873, 43.5534 }
+{ 33.7963, 304.167, 38.0208 }
+{ 33.7423, 303.681, 33.7423 }
+{ 33.7037, 303.333, 30.3333 }
+{ 37.4514, 168.531, 337.062 }
+{ 23.8594, 107.367, 107.367 }
+{ 20.3704, 91.6667, 61.1111 }
+{ 18.9984, 85.4929, 42.7464 }
+{ 18.3287, 82.479, 32.9916 }
+{ 17.9544, 80.7947, 26.9316 }
+{ 17.7249, 79.7619, 22.7891 }
+{ 17.5743, 79.0844, 19.7711 }
+{ 17.4703, 78.6165, 17.4703 }
+{ 17.3956, 78.2801, 15.656 }
+{ 35.3311, 105.993, 317.98 }
+{ 20.3704, 61.1111, 91.6667 }
+{ 16.1441, 48.4322, 48.4322 }
+{ 14.3742, 43.1227, 32.342 }
+{ 13.4766, 40.4298, 24.2579 }
+{ 12.963, 38.8889, 19.4444 }
+{ 12.6432, 37.9295, 16.2555 }
+{ 12.4312, 37.2937, 13.9851 }
+{ 12.2838, 36.8514, 12.2838 }
+{ 12.1772, 36.5317, 10.9595 }
+{ 34.5583, 77.7561, 311.024 }
+{ 18.9984, 42.7464, 85.4929 }
+{ 14.3742, 32.342, 43.1227 }
+{ 12.3534, 27.7951, 27.7951 }
+{ 11.2963, 25.4167, 20.3333 }
+{ 10.6783, 24.0262, 16.0174 }
+{ 10.2877, 23.1474, 13.2271 }
+{ 10.0261, 22.5588, 11.2794 }
+{ 9.84273, 22.1461, 9.84273 }
+{ 9.70943, 21.8462, 8.73848 }
+{ 34.1946, 61.5503, 307.752 }
+{ 18.3287, 32.9916, 82.479 }
+{ 13.4766, 24.2579, 40.4298 }
+{ 11.2963, 20.3333, 25.4167 }
+{ 10.1295, 18.2331, 18.2331 }
+{ 9.43536, 16.9837, 14.153 }
+{ 8.99097, 16.1838, 11.5598 }
+{ 8.6904, 15.6427, 9.7767 }
+{ 8.47817, 15.2607, 8.47817 }
+{ 8.32304, 14.9815, 7.49074 }
+{ 33.9955, 50.9932, 305.959 }
+{ 17.9544, 26.9316, 80.7947 }
+{ 12.963, 19.4444, 38.8889 }
+{ 10.6783, 16.0174, 24.0262 }
+{ 9.43536, 14.153, 16.9837 }
+{ 8.68596, 13.0289, 13.0289 }
+{ 8.20106, 12.3016, 10.5442 }
+{ 7.87037, 11.8056, 8.85417 }
+{ 7.63538, 11.4531, 7.63538 }
+{ 7.46276, 11.1941, 6.71648 }
+{ 33.8748, 43.5534, 304.873 }
+{ 17.7249, 22.7891, 79.7619 }
+{ 12.6432, 16.2555, 37.9295 }
+{ 10.2877, 13.2271, 23.1474 }
+{ 8.99097, 11.5598, 16.1838 }
+{ 8.20106, 10.5442, 12.3016 }
+{ 7.68563, 9.88152, 9.88152 }
+{ 7.33173, 9.42651, 8.2482 }
+{ 7.07888, 9.10142, 7.07888 }
+{ 6.89233, 8.86157, 6.2031 }
+{ 33.7963, 38.0208, 304.167 }
+{ 17.5743, 19.7711, 79.0844 }
+{ 12.4312, 13.9851, 37.2937 }
+{ 10.0261, 11.2794, 22.5588 }
+{ 8.6904, 9.7767, 15.6427 }
+{ 7.87037, 8.85417, 11.8056 }
+{ 7.33173, 8.2482, 9.42651 }
+{ 6.95986, 7.82984, 7.82984 }
+{ 6.69298, 7.5296, 6.69298 }
+{ 6.49536, 7.30727, 5.84582 }
+{ 33.7423, 33.7423, 303.681 }
+{ 17.4703, 17.4703, 78.6165 }
+{ 12.2838, 12.2838, 36.8514 }
+{ 9.84273, 9.84273, 22.1461 }
+{ 8.47817, 8.47817, 15.2607 }
+{ 7.63538, 7.63538, 11.4531 }
+{ 7.07888, 7.07888, 9.10142 }
+{ 6.69298, 6.69298, 7.5296 }
+{ 6.415, 6.415, 6.415 }
+{ 6.20854, 6.20854, 5.58768 }
+{ 33.7037, 30.3333, 303.333 }
+{ 17.3956, 15.656, 78.2801 }
+{ 12.1772, 10.9595, 36.5317 }
+{ 9.70943, 8.73848, 21.8462 }
+{ 8.32304, 7.49074, 14.9815 }
+{ 7.46276, 6.71648, 11.1941 }
+{ 6.89233, 6.2031, 8.86157 }
+{ 6.49536, 5.84582, 7.30727 }
+{ 6.20854, 5.58768, 6.20854 }
+{ 5.99497, 5.39547, 5.39547 }
+{ 42.5323, 425.323, 425.323 }
+{ 33.6749, 336.749, 168.375 }
+{ 31.7648, 317.648, 105.883 }
+{ 31.0685, 310.685, 77.6712 }
+{ 30.7409, 307.409, 61.4817 }
+{ 30.5614, 305.614, 50.9357 }
+{ 30.4527, 304.527, 43.5039 }
+{ 30.3819, 303.819, 37.9774 }
+{ 30.3333, 303.333, 33.7037 }
+{ 30.2985, 302.985, 30.2985 }
+{ 33.6749, 168.375, 336.749 }
+{ 21.4243, 107.121, 107.121 }
+{ 18.2757, 91.3783, 60.9189 }
+{ 17.0367, 85.1836, 42.5918 }
+{ 16.4317, 82.1584, 32.8634 }
+{ 16.0935, 80.4674, 26.8225 }
+{ 15.8861, 79.4304, 22.6944 }
+{ 15.75, 78.75, 19.6875 }
+{ 15.656, 78.2801, 17.3956 }
+{ 15.5885, 77.9423, 15.5885 }
+{ 31.7648, 105.883, 317.648 }
+{ 18.2757, 60.9189, 91.3783 }
+{ 14.4568, 48.1894, 48.1894 }
+{ 12.855, 42.8499, 32.1374 }
+{ 12.0416, 40.1386, 24.0832 }
+{ 11.5758, 38.5861, 19.2931 }
+{ 11.2857, 37.619, 16.1224 }
+{ 11.0934, 36.9778, 13.8667 }
+{ 10.9595, 36.5317, 12.1772 }
+{ 10.8628, 36.2093, 10.8628 }
+{ 31.0685, 77.6712, 310.685 }
+{ 17.0367, 42.5918, 85.1836 }
+{ 12.855, 32.1374, 42.8499 }
+{ 11.0227, 27.5568, 27.5568 }
+{ 10.0623, 25.1558, 20.1246 }
+{ 9.5, 23.75, 15.8333 }
+{ 9.14425, 22.8606, 13.0632 }
+{ 8.90576, 22.2644, 11.1322 }
+{ 8.73848, 21.8462, 9.70943 }
+{ 8.61684, 21.5421, 8.61684 }
+{ 30.7409, 61.4817, 307.409 }
+{ 16.4317, 32.8634, 82.1584 }
+{ 12.0416, 24.0832, 40.1386 }
+{ 10.0623, 20.1246, 25.1558 }
+{ 9, 18, 18 }
+{ 8.3666, 16.7332, 13.9443 }
+{ 7.96036, 15.9207, 11.3719 }
+{ 7.68521, 15.3704, 9.60652 }
+{ 7.49074, 14.9815, 8.32304 }
+{ 7.34847, 14.6969, 7.34847 }
+{ 30.5614, 50.9357, 305.614 }
+{ 16.0935, 26.8225, 80.4674 }
+{ 11.5758, 19.2931, 38.5861 }
+{ 9.5, 15.8333, 23.75 }
+{ 8.3666, 13.9443, 16.7332 }
+{ 7.68115, 12.8019, 12.8019 }
+{ 7.23653, 12.0609, 10.3379 }
+{ 6.93271, 11.5545, 8.66589 }
+{ 6.71648, 11.1941, 7.46276 }
+{ 6.55744, 10.9291, 6.55744 }
+{ 30.4527, 43.5039, 304.527 }
+{ 15.8861, 22.6944, 79.4304 }
+{ 11.2857, 16.1224, 37.619 }
+{ 9.14425, 13.0632, 22.8606 }
+{ 7.96036, 11.3719, 15.9207 }
+{ 7.23653, 10.3379, 12.0609 }
+{ 6.76274, 9.66106, 9.66106 }
+{ 6.4366, 9.19515, 8.04575 }
+{ 6.2031, 8.86157, 6.89233 }
+{ 6.03053, 8.61505, 6.03053 }
+{ 30.3819, 37.9774, 303.819 }
+{ 15.75, 19.6875, 78.75 }
+{ 11.0934, 13.8667, 36.9778 }
+{ 8.90576, 11.1322, 22.2644 }
+{ 7.68521, 9.60652, 15.3704 }
+{ 6.93271, 8.66589, 11.5545 }
+{ 6.4366, 8.04575, 9.19515 }
+{ 6.09303, 7.61629, 7.61629 }
+{ 5.84582, 7.30727, 6.49536 }
+{ 5.66238, 7.07797, 5.66238 }
+{ 30.3333, 33.7037, 303.333 }
+{ 15.656, 17.3956, 78.2801 }
+{ 10.9595, 12.1772, 36.5317 }
+{ 8.73848, 9.70943, 21.8462 }
+{ 7.49074, 8.32304, 14.9815 }
+{ 6.71648, 7.46276, 11.1941 }
+{ 6.2031, 6.89233, 8.86157 }
+{ 5.84582, 6.49536, 7.30727 }
+{ 5.58768, 6.20854, 6.20854 }
+{ 5.39547, 5.99497, 5.39547 }
+{ 30.2985, 30.2985, 302.985 }
+{ 15.5885, 15.5885, 77.9423 }
+{ 10.8628, 10.8628, 36.2093 }
+{ 8.61684, 8.61684, 21.5421 }
+{ 7.34847, 7.34847, 14.6969 }
+{ 6.55744, 6.55744, 10.9291 }
+{ 6.03053, 6.03053, 8.61505 }
+{ 5.66238, 5.66238, 7.07797 }
+{ 5.39547, 5.39547, 5.99497 }
+{ 5.19615, 5.19615, 5.19615 }
+2D: { 5, 9 }
+
+****************************
+K Rotated 1.000 degrees around I axis -  0.000 -0.841 0.540
+K Rotated 1.000 degrees around I axis -  0.000 -0.841 0.540
+Angle between vectors = 1.000
+I Rotated 2.300 degrees around J axis -  -0.666 0.000 -0.746
+I Rotated 2.300 degrees around J axis -  -0.666 0.000 -0.746
+Angle between vectors = 2.300
+J Rotated 1.800 degrees around K axis -  -0.974 -0.227 0.000
+J Rotated 1.800 degrees around K axis -  -0.974 -0.227 0.000
+Angle between vectors = 1.800
+
+****************************
+vector = A + B
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {11.400000}
+vector - {11.400000, 4.300000}
+vector - {11.400000, 4.300000, 10.800000}
+vector - {11.400000, 4.300000, 10.800000, 7.000000}
+vector - {11.400000, 4.300000, 10.800000, 7.000000, -9.000000}
+vector - {11.400000, 4.300000, 10.800000, 7.000000, -9.000000, 39247.000000}
+
+****************************
+vector = A - B
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {3.400000}
+vector - {3.400000, -0.300000}
+vector - {3.400000, -0.300000, -0.800000}
+vector - {3.400000, -0.300000, -0.800000, -5.000000}
+vector - {3.400000, -0.300000, -0.800000, -5.000000, 15.000000}
+vector - {3.400000, -0.300000, -0.800000, -5.000000, 15.000000, -39331.000000}
+
+****************************
+Check Magnitude Function
+dim = 0 magnitude = 0.000
+dim = 0 magnitude = 0.000
+dim = 1 magnitude = 7.400
+dim = 1 magnitude = 4.000
+dim = 2 magnitude = 7.666
+dim = 2 magnitude = 4.614
+dim = 3 magnitude = 9.152
+dim = 3 magnitude = 7.411
+dim = 4 magnitude = 9.207
+dim = 4 magnitude = 9.536
+dim = 5 magnitude = 9.683
+dim = 5 magnitude = 15.327
+dim = 6 magnitude = 43.102
+dim = 6 magnitude = 39289.003
+
+****************************
+Check Dot Product Function
+dim = 0 dot product = 0.000
+dim = 1 dot product = 29.600
+dim = 2 dot product = 34.200
+dim = 3 dot product = 63.200
+dim = 4 dot product = 69.200
+dim = 5 dot product = 33.200
+dim = 6 dot product = -1650104.800
+
+****************************
+Check Cross Product Function
+vector - {0.100000, -22.920000, 9.020000}
+
+****************************
+Checking distance between points Function
+dim = 0 distance = 0.000
+dim = 1 distance = 3.400
+dim = 2 distance = 3.413
+dim = 3 distance = 3.506
+dim = 4 distance = 6.107
+dim = 5 distance = 16.195
+dim = 6 distance = 39331.003
+
+****************************
+Checking normal to plane function function
+vector - {-0.147798, -0.951019, -0.271511}
+
+****************************
+Checking centroid function
+vector - {<NON_POSITIVE DIMENSION 0>}
+vector - {11.466667}
+vector - {11.466667, 3.100000}
+vector - {11.466667, 3.100000, -1.066667}
+vector - {11.466667, 3.100000, -1.066667, 13.000000}
+vector - {11.466667, 3.100000, -1.066667, 13.000000, -10.000000}
+vector - {11.466667, 3.100000, -1.066667, 13.000000, -10.000000, 13108.333333}
+
+****************************
+Check Triangle Area Function
+dim = 0 Triangle Area = 0.000
+dim = 1 Triangle Area = 0.000
+dim = 2 Triangle Area = 0.000
+dim = 3 Triangle Area = 27.402
+dim = 4 Triangle Area = 0.000
+dim = 5 Triangle Area = 0.000
+dim = 6 Triangle Area = 0.000
+
+****************************
+Check Normalisation Function
+A - {0.965363, 0.260909}
+mag = 1.000
+B - {0.539703, 0.310329, 0.782570}
+mag = 1.000
+C - {0.488698, 0.106239, -0.297469, 0.679928, -0.446203}
+mag = 1.000
+
+****************************
+Check StGermain_VectorCrossProductMagnitude
+A - {1.000000, 2.000000, 3.000000}
+B - {4.000000, 5.000000, 6.000000}
+mag =  3 (2D)
+mag = 7.35 (3D)
+
+****************************
+Check StGermain_ConvexQuadrilateralArea
+area = 4.8 (2D)
+area = 5.54 (3D)
+
+****************************
+Check StGermain_ScalarTripleProduct 
+scalar triple product = -6
+scalar triple product = -6
+scalar triple product = -6
+scalar triple product = -6
+
+****************************
+Check StGermain_ParallelepipedVolume 
+volume = 2.43
+
+****************************
+Check StGermain_AverageCoord 
+D - {11.666667, 5.300000, 7.033333}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testVectorMath.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testVectorMath.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testVectorMath " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Geometry/tests/testVectorMath.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Geometry/tests/testVectorMath.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,310 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Robert B. Turnbull, Monash Cluster Computing. (Robert.Turnbull at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testVectorMath.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+
+#include <stdio.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Coord	a, b, c;
+		Coord	d = { 1.0, 1.0, 1.0 };
+		Coord	e = { 1.0, 2.0, -3.0 };
+		Index	i;
+
+		printf( "Basic tests:\n" );
+		printf( "d = { %g, %g, %g }\n", d[0], d[1], d[2] );
+		Vec_SetScalar3D( d, 2.0, 0.5, 1.5 );
+		printf( "d = { %g, %g, %g }\n", d[0], d[1], d[2] );
+
+		Vec_Set3D( c, d );
+		printf( "c = d = { %g, %g, %g }\n", c[0], c[1], c[2] );
+
+		Vec_Add3D( b, c, d );
+		printf( "b = c + d = {%g, %g, %g}\n", b[0], b[1], b[2] );
+
+		Vec_Sub3D( a, d, b );
+		printf( "a = d - b = {%g, %g, %g}\n", a[0], a[1], a[2] );
+
+		Vec_Cross3D( d, a, e );
+		printf( "d = a x e = {%g, %g, %g}\n", d[0], d[1], d[2] );
+
+		printf( "a . c = %g\n", Vec_Dot3D( a, c ) );
+
+		Vec_Scale3D( b, b, 2.0 );
+		printf( "b = 2b = { %g, %g, %g }\n", b[0], b[1], b[2] );
+
+		Vec_Norm3D( b, b );
+		printf( "b^ = { %g, %g, %g }\n", b[0], b[1], b[2] );
+
+		printf( "Complete test:\n" );
+		for( i = 1; i <= 10; i++ )
+		{
+			Index	j;
+
+			a[0] = 10.0 / (double)i;
+			b[0] = 30.0 / (double)i;
+
+			for( j = 1; j <= 10; j++ )
+			{
+				Index	k;
+
+				a[1] = 10.0 / (double)j;
+				b[1] = 30.0 / (double)j;
+
+				for( k = 1; k <= 10; k++ )
+				{
+					a[2] = 10.0 / (double)k;
+					b[2] = 30.0 / (double)k;
+
+					Vec_Proj3D( c, a, b );
+
+					printf( "{ %g, %g, %g }\n", c[0], c[1], c[2] );
+				}
+			}
+		}
+		Vec_SetScalar2D( a, 5.0, 9.0);
+		printf( "2D: { %g, %g }\n", a[0], a[1]);
+		
+
+	}
+	if( rank == procToWatch ) {
+		double i[] = {1.0,0.0,0.0};
+		double j[] = {0.0,1.0,0.0};
+		double k[] = {0.0,0.0,1.0};
+		double A[] = { 7.4, 2  ,   5  ,  1,  3 ,   -42};
+		double B[] = { 4  , 2.3,   5.8,  6, -12, 39289};
+		double C[] = {23  , 5  , -14  , 32, -21,    78};
+		double D[] = {23  , 5  , -14  , 32, -21,    78};
+		double angle;
+		double **matrix;
+		double vector[6];
+		double *coordList[4];
+		int d;
+		Stream* stream = Journal_Register( Info_Type, "VectorMath" );
+		
+		coordList[0] = A;
+		coordList[1] = B;
+		coordList[2] = C;
+		coordList[3] = D;
+
+		/* Check Rotation functions */
+		printf("\n****************************\n");
+		angle = 1.0;
+		StGermain_RotateCoordinateAxis( vector, k, I_AXIS, angle );
+		printf("K Rotated %2.3f degrees around I axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		StGermain_RotateVector( vector, k, i, angle );
+		printf("K Rotated %2.3f degrees around I axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		printf("Angle between vectors = %2.3f\n", StGermain_AngleBetweenVectors( vector, k, 3 ));
+
+		angle = 2.3;
+		StGermain_RotateCoordinateAxis( vector, i, J_AXIS, angle );
+		printf("I Rotated %2.3f degrees around J axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		StGermain_RotateVector( vector, i, j, angle );
+		printf("I Rotated %2.3f degrees around J axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		printf("Angle between vectors = %2.3f\n", StGermain_AngleBetweenVectors( vector, i, 3 ));
+
+		angle = 1.8;
+		StGermain_RotateCoordinateAxis( vector, j, K_AXIS, ( angle ) );
+		printf("J Rotated %2.3f degrees around K axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		StGermain_RotateVector( vector, j, k, ( angle ) );
+		printf("J Rotated %2.3f degrees around K axis -  %2.3f %2.3f %2.3f\n", angle, vector[0], vector[1], vector[2] );
+		printf("Angle between vectors = %2.3f\n", StGermain_AngleBetweenVectors( vector, j, 3 ));
+		
+		/* Check addition function */
+		printf("\n****************************\n");
+		printf("vector = A + B\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			StGermain_VectorAddition( vector, A, B, d );
+			StGermain_PrintNamedVector( stream, vector, d );
+		}
+
+		/* Check subtraction function */
+		printf("\n****************************\n");
+		printf("vector = A - B\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			StGermain_VectorSubtraction( vector, A, B, d );
+			StGermain_PrintNamedVector( stream, vector, d );
+		}
+	
+		/* Check Magnitude Function */
+		printf("\n****************************\n");
+		printf("Check Magnitude Function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			printf("dim = %d magnitude = %2.3f\n", d, StGermain_VectorMagnitude( A, d ) );
+			printf("dim = %d magnitude = %2.3f\n", d, StGermain_VectorMagnitude( B, d ) );
+		}
+
+		/* Check Dot Product */
+		printf("\n****************************\n");
+		printf("Check Dot Product Function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) 
+			printf("dim = %d dot product = %2.3f\n", d, StGermain_VectorDotProduct( A, B, d ) );
+
+		/* Check Cross Product */
+		/* Tested against http://www.engplanet.com/redirect.html?3859 */
+		printf("\n****************************\n");
+		printf("Check Cross Product Function\n");
+		StGermain_VectorCrossProduct( vector, A, B );
+		StGermain_PrintNamedVector( stream, vector, 3 );
+
+		/* Checking distance between points function */
+		printf("\n****************************\n");
+		printf("Checking distance between points Function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) 
+			printf("dim = %d distance = %2.3f\n", d, StGermain_DistanceBetweenPoints( A, B, d ) );
+		
+		/* Checking normal to plane function */
+		printf("\n****************************\n");
+		printf("Checking normal to plane function function\n");
+		vector[0] = vector[1] = vector[2] = vector[3] = vector[4] = vector[5] = 0.0;
+		StGermain_NormalToPlane( vector, A, B, C );
+		StGermain_PrintNamedVector( stream, vector, 3 );
+
+		/* Checking centroid function */
+		printf("\n****************************\n");
+		printf("Checking centroid function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) {
+			vector[0] = vector[1] = vector[2] = vector[3] = vector[4] = vector[5] = 0.0;
+			StGermain_TriangleCentroid( vector, A, B, C, d );
+			StGermain_PrintNamedVector( stream, vector, d );
+		}
+
+		/* Check Triangle Area */
+		printf("\n****************************\n");
+		printf("Check Triangle Area Function\n");
+		for ( d = 0 ; d <= 6 ; d++ ) 
+			printf("dim = %d Triangle Area = %2.3f\n", d, StGermain_TriangleArea( A, B, C, d ) );
+
+		/* Check Normalisation Function */
+		printf("\n****************************\n");
+		printf("Check Normalisation Function\n");
+		d = 2;
+		StGermain_VectorNormalise( A, d );
+		StGermain_PrintNamedVector( stream, A, d);
+		printf("mag = %2.3f\n", StGermain_VectorMagnitude( A, d ) );
+
+		d = 3;
+		StGermain_VectorNormalise( B, d );
+		StGermain_PrintNamedVector( stream, B, d);
+		printf("mag = %2.3f\n", StGermain_VectorMagnitude( B, d ) );
+
+		d = 5;
+		StGermain_VectorNormalise( C, d );
+		StGermain_PrintNamedVector( stream, C, d);
+		printf("mag = %2.3f\n", StGermain_VectorMagnitude( C, d ) );
+
+		printf("\n****************************\n");
+		printf("Check StGermain_VectorCrossProductMagnitude\n");
+		A[0] = 1.0; A[1] = 2.0 ; A[2] = 3.0;
+		B[0] = 4.0; B[1] = 5.0 ; B[2] = 6.0;
+		StGermain_PrintNamedVector( stream, A, 3);
+		StGermain_PrintNamedVector( stream, B, 3);
+		printf("mag = %2.3g (2D)\n", StGermain_VectorCrossProductMagnitude( A, B, 2 ) );
+		printf("mag = %2.3g (3D)\n", StGermain_VectorCrossProductMagnitude( A, B, 3 ) );
+
+		printf("\n****************************\n");
+		printf("Check StGermain_ConvexQuadrilateralArea\n");
+		A[0] = 0.0; A[1] = 0.0 ; A[2] = 0.0;
+		B[0] = 0.0; B[1] = 4.0 ; B[2] = 2.3;
+		C[0] = 1.2; C[1] = 4.0 ; C[2] = 2.3;
+		D[0] = 1.2; D[1] = 0.0 ; D[2] = 0.0;
+		printf("area = %2.3g (2D)\n", StGermain_ConvexQuadrilateralArea( A, B, C, D, 2 ) );
+		printf("area = %2.3g (3D)\n", StGermain_ConvexQuadrilateralArea( A, B, C, D, 3 ) );
+		
+		printf("\n****************************\n");
+		printf("Check StGermain_ScalarTripleProduct \n");
+		matrix = Memory_Alloc_2DArray( double, 3, 3, "matrix" );
+		matrix[0][0] = 1.0; matrix[0][1] = 2.0 ; matrix[0][2] = 3.0;
+		matrix[1][0] = 4.0; matrix[1][1] = 5.0 ; matrix[1][2] = 6.0;
+		matrix[2][0] = 7.0; matrix[2][1] = 8.0 ; matrix[2][2] = 11.0;
+		printf("scalar triple product = %2.3g\n", StGermain_ScalarTripleProduct( matrix[0], matrix[1], matrix[2] ));
+		printf("scalar triple product = %2.3g\n", StGermain_ScalarTripleProduct( matrix[2], matrix[0], matrix[1] ));
+		printf("scalar triple product = %2.3g\n", StGermain_ScalarTripleProduct( matrix[1], matrix[2], matrix[0] ));
+		printf("scalar triple product = %2.3g\n", StGermain_MatrixDeterminant( matrix , 3 ));
+		Memory_Free( matrix );
+		
+		printf("\n****************************\n");
+		printf("Check StGermain_ParallelepipedVolume \n");
+		A[0] = 0.0; A[1] = 0.0 ; A[2] = 0.0;
+		B[0] = 1.1; B[1] = 0.0 ; B[2] = 0.0;
+		C[0] = 0.2; C[1] = 1.7 ; C[2] = 0.0;
+		D[0] = 0.0; D[1] = 0.0 ; D[2] = 1.3;
+		printf("volume = %2.3g\n", StGermain_ParallelepipedVolume( A, B, C, D ));
+
+		printf("\n****************************\n");
+		printf("Check StGermain_AverageCoord \n");
+		A[0] = 1.0;  A[1] = 2.2 ; A[2] = 3.2;
+		B[0] = 41.0; B[1] = 5.0 ; B[2] = 6.9;
+		C[0] = -7.0; C[1] = 8.7 ; C[2] = 11.0;
+
+		StGermain_AverageCoord( D, coordList, 3, 3 );
+		StGermain_PrintNamedVector( stream, D, 3);
+
+
+
+	}
+	
+	printf("\n");
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Makefile.system
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.system	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,493 @@
+ifndef WHICH
+	WHICH=/usr/bin/which
+endif
+ifndef UNAME
+	UNAME=/usr/bin/uname
+endif
+ifndef UNAME_M
+	UNAME_M=/usr/bin/uname -m
+endif
+ifndef UNAME_R
+	UNAME_R=/usr/bin/uname -r
+endif
+ifndef MACHINE
+	MACHINE=i686
+endif
+ifndef KERNEL_RELEASE
+	KERNEL_RELEASE=2.6.22-gentoo-r5
+endif
+ifndef UNAME_S
+	UNAME_S=/usr/bin/uname -s
+endif
+ifndef SYSTEM
+	SYSTEM=Linux
+endif
+ifndef MAKE
+	MAKE=/usr/bin/make
+endif
+ifndef SH
+	SH=/bin/sh
+endif
+ifeq (default,$(origin RM))
+	RM=/bin/rm
+endif
+ifndef RM
+	RM=/bin/rm
+endif
+ifndef RM_F
+	RM_F=/bin/rm -rf
+endif
+ifndef CD
+	CD=cd
+endif
+ifndef CP
+	CP=/bin/cp
+endif
+ifndef CP_F
+	CP_F=/bin/cp -f
+endif
+ifndef MV
+	MV=/bin/mv
+endif
+ifndef MV_F
+	MV_F=/bin/mv -f
+endif
+ifndef MKDIR
+	MKDIR=mkdir -p
+endif
+ifndef SED
+	SED=/bin/sed
+endif
+ifndef FIND
+	FIND=/usr/bin/find
+endif
+ifndef LN
+	LN=/bin/ln
+endif
+ifndef LN_S
+	LN_S=/bin/ln -fs
+endif
+ifndef TEE
+	TEE=/usr/bin/tee
+endif
+ifndef NM
+	NM=/usr/bin/nm
+endif
+ifndef LS
+	LS=/bin/ls
+endif
+ifndef GREP
+	GREP=/bin/grep
+endif
+ifndef AR
+	AR=/usr/bin/ar
+endif
+ifndef AR_C
+	AR_C=${AR} -cru
+endif
+ifndef RANLIB
+	RANLIB=/usr/bin/ranlib
+endif
+ifeq (default,$(origin CC))
+	CC=/usr/bin/cc
+endif
+ifndef CC
+	CC=/usr/bin/cc
+endif
+ifndef CC_TYPE
+	CC_TYPE=gnu
+endif
+ifeq (default,$(origin CXX))
+	CXX=/usr/bin/g++
+endif
+ifndef CC_PIPE
+	CC_PIPE=-pipe
+endif
+ifndef CC_64
+	CC_64=-m64
+endif
+ifndef SYSTEM_SIZEOF_LONG
+	SYSTEM_SIZEOF_LONG=4
+endif
+ifndef SYSTEM_64
+	SYSTEM_64=0
+endif
+ifndef SYSTEM_BIG_ENDIAN
+	SYSTEM_BIG_ENDIAN=0
+endif
+ifndef OBJCC
+	OBJCC=/usr/bin/cc -x objective-c
+endif
+ifndef OBJECTIVEC_LIBS
+	OBJECTIVEC_LIBS=-lobjc
+endif
+ifndef CXX_EXT
+	CXX_EXT=cxx
+endif
+ifndef CXX
+	CXX=/usr/bin/g++
+endif
+ifndef CXX_TYPE
+	CXX_TYPE=gnu
+endif
+ifndef CXX_PIPE
+	CXX_PIPE=-pipe
+endif
+ifeq (default,$(origin F77))
+	F77=/usr/bin/f77
+endif
+ifndef F77
+	F77=/usr/bin/f77
+endif
+ifndef F77_TYPE
+	F77_TYPE=gnu
+endif
+ifndef LINKER
+	LINKER=/usr/bin/cc
+endif
+ifndef SO_EXT
+	SO_EXT=so
+endif
+ifndef MODULE_EXT
+	MODULE_EXT=${SO_EXT}
+endif
+ifndef SO_CFLAGS
+	SO_CFLAGS=-fPIC
+endif
+ifndef SO_LFLAGS
+	SO_LFLAGS=-shared
+endif
+ifndef MODULE_LFLAGS
+	MODULE_LFLAGS=${SO_LFLAGS}
+endif
+ifndef RPATH_FLAG
+	RPATH_FLAG=-Xlinker -rpath -Xlinker 
+endif
+ifndef RPATH
+	RPATH=
+endif
+ifndef RPATH_LFLAGS
+	RPATH_LFLAGS=${RPATH_FLAG}${LIB_DIR}
+endif
+ifndef EXPORT_DYNAMIC_LFLAGS
+	EXPORT_DYNAMIC_LFLAGS=-Xlinker -export-dynamic
+endif
+ifndef CC_CXX_LFLAGS
+	CC_CXX_LFLAGS=-lstdc++
+endif
+ifndef FORTRAN_COMPILER_LIBDIR
+	FORTRAN_COMPILER_LIBDIR=/usr/lib
+endif
+ifndef EXTRA_FORTRAN_LIBS
+	EXTRA_FORTRAN_LIBS=-lg2c
+endif
+ifndef CC_FORTRAN_LFLAGS
+	CC_FORTRAN_LFLAGS=-L${FORTRAN_COMPILER_LIBDIR} ${EXTRA_FORTRAN_LIBS}
+endif
+ifndef F77_LIBS
+	F77_LIBS=
+endif
+ifndef F77_SYMBOL_TRANSLATION
+	F77_SYMBOL_TRANSLATION=-DFORTRAN_SINGLE_TRAILINGBAR
+endif
+ifndef CC_WARNINGLEVEL
+	CC_WARNINGLEVEL=-Wall
+endif
+ifndef CC_SYMBOLLEVEL
+	CC_SYMBOLLEVEL=-g
+endif
+ifndef CC_OPTIMISATIONLEVEL
+	CC_OPTIMISATIONLEVEL=
+endif
+ifndef NOSHARED
+	NOSHARED=
+endif
+ifndef DL_DIR
+	DL_DIR=/usr
+endif
+ifndef DL_LIBDIR
+	DL_LIBDIR=/usr/lib
+endif
+ifndef DL_LIBFILES
+	DL_LIBFILES=-ldl
+endif
+ifndef DL_LIBS
+	DL_LIBS=-L${DL_LIBDIR} ${DL_LIBFILES}
+endif
+ifndef DL_INCDIR
+	DL_INCDIR=/usr/include
+endif
+ifndef DL_INCLUDES
+	DL_INCLUDES=-I/usr/include
+endif
+ifndef NOPYTHON
+	NOPYTHON=
+endif
+ifndef DOXYGEN
+	DOXYGEN=/usr/bin/doxygen
+endif
+ifndef SVN
+	SVN=/usr/bin/svn
+endif
+ifndef HAVE_SVN
+	HAVE_SVN=1
+endif
+ifndef CSOAP_DIR
+	CSOAP_DIR=/usr/lib/libcsoap
+endif
+ifndef CSOAP_INCDIR
+	CSOAP_INCDIR=${CSOAP_DIR}/include/libcsoap-1.0
+endif
+ifndef CSOAP_INCLUDES
+	CSOAP_INCLUDES=-I${CSOAP_INCDIR}
+endif
+ifndef CSOAP_LIBDIR
+	CSOAP_LIBDIR=${CSOAP_DIR}/lib
+endif
+ifndef CSOAP_LIBFILES
+	CSOAP_LIBFILES=-lcsoap-1.0
+endif
+ifndef CSOAP_LIBS
+	CSOAP_LIBS=-L${CSOAP_LIBDIR} ${CSOAP_LIBFILES}
+endif
+ifndef NANOHTTP_DIR
+	NANOHTTP_DIR=${CSOAP_DIR}
+endif
+ifndef NANOHTTP_INCDIR
+	NANOHTTP_INCDIR=${NANOHTTP_DIR}/include/nanohttp-1.0
+endif
+ifndef NANOHTTP_INCLUDES
+	NANOHTTP_INCLUDES=-I${NANOHTTP_INCDIR}
+endif
+ifndef NANOHTTP_LIBDIR
+	NANOHTTP_LIBDIR=${NANOHTTP_DIR}/lib
+endif
+ifndef NANOHTTP_LIBFILES
+	NANOHTTP_LIBFILES=-lnanohttp-1.0
+endif
+ifndef NANOHTTP_LIBS
+	NANOHTTP_LIBS=-L${NANOHTTP_LIBDIR} ${NANOHTTP_LIBFILES}
+endif
+ifndef HAVE_SOAP
+	HAVE_SOAP=
+endif
+ifndef REGRESSTOR_URL
+	REGRESSTOR_URL=http://localhost/~alan/cgi-bin/RegresstorServices/Regresstor.cgi
+endif
+ifndef STGERMAIN_DIR
+	STGERMAIN_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build
+endif
+ifndef OPTIONS
+	OPTIONS=
+endif
+ifndef USE_RUN_LONG_TESTS
+	USE_RUN_LONG_TESTS=
+endif
+ifndef PROJ_ROOT
+	PROJ_ROOT=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/StgDomain
+endif
+ifndef BLD_DIR
+	BLD_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build
+endif
+ifndef PREFIX_DIR
+	PREFIX_DIR=
+endif
+ifndef EXPORT_DIR
+	EXPORT_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build
+endif
+ifndef TMP_DIR
+	TMP_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/tmp
+endif
+ifndef BIN_DIR
+	BIN_DIR=${EXPORT_DIR}/bin
+endif
+ifndef LIB_DIR
+	LIB_DIR=${EXPORT_DIR}/lib
+endif
+ifndef INC_DIR
+	INC_DIR=${EXPORT_DIR}/include
+endif
+ifndef TST_DIR
+	TST_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/tests
+endif
+ifndef PYB_DIR
+	PYB_DIR=${EXPORT_DIR}/Python
+endif
+ifndef PYC_DIR
+	PYC_DIR=${EXPORT_DIR}/Python
+endif
+ifndef SHARE_DIR
+	SHARE_DIR=${EXPORT_DIR}/share
+endif
+PROJECT=StgDomain
+ifndef FIND_SUBDIRS
+	FIND_SUBDIRS=/usr/bin/find * -type d -follow -prune ! -name .svn
+endif
+ifndef MAKEFILE_FIND_SUBDIRS
+	MAKEFILE_FIND_SUBDIRS=$(shell ${FIND_SUBDIRS})
+endif
+ifndef GET_MODNAME
+	GET_MODNAME=basename /home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/StGermain
+endif
+ifndef MAKEFILE_GET_MODNAME
+	MAKEFILE_GET_MODNAME=$(shell ${GET_MODNAME})
+endif
+ifndef MAKEFILE_CHECK_DEPENDENCIES
+	MAKEFILE_CHECK_DEPENDENCIES=$(foreach DEP,${DEPENDS},$(shell cd ${LIB_DIR} && if test -z `find . -name ${PROJECT}${DEP}*` ; then echo Compiling dependency: ${DEP} 1>&2 && cd ${PROJ_ROOT}/src && if test ! -z `find . -type d -name ${DEP}` ; then cd `find . -type d -name ${DEP}` && make 1>&2 ; else echo Cannot find dependency: ${DEP} 1>&2 ; fi ; fi ) )
+endif
+ifndef STGERMAIN_DIR
+	STGERMAIN_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build
+endif
+ifndef STGERMAIN_INCDIR
+	STGERMAIN_INCDIR=${STGERMAIN_DIR}/include
+endif
+ifndef STGERMAIN_INCLUDES
+	STGERMAIN_INCLUDES=-I${STGERMAIN_INCDIR}
+endif
+ifndef STGERMAIN_LIBDIR
+	STGERMAIN_LIBDIR=${STGERMAIN_DIR}/lib
+endif
+ifndef STGERMAIN_LIBS
+	STGERMAIN_LIBS=-L${STGERMAIN_LIBDIR} -lStGermain
+endif
+ifndef STGERMAIN_RPATH
+	STGERMAIN_RPATH=-Xlinker -rpath -Xlinker ${STGERMAIN_LIBDIR}
+endif
+ifndef HAVE_STGERMAIN
+	HAVE_STGERMAIN=1
+endif
+ifndef CC_SYMBOLLEVEL
+	CC_SYMBOLLEVEL=-g
+endif
+ifndef CC_WARNINGLEVEL
+	CC_WARNINGLEVEL=-Wall
+endif
+ifndef CC_DEBUGLEVEL
+	CC_DEBUGLEVEL=-DDEBUG -DQUERY_FP
+endif
+ifndef MATH_DIR
+	MATH_DIR=/usr
+endif
+ifndef MATH_INCDIR
+	MATH_INCDIR=/usr/include
+endif
+ifndef MATH_INCLUDES
+	MATH_INCLUDES=-I/usr/include
+endif
+ifndef MATH_LIBDIR
+	MATH_LIBDIR=/usr/lib
+endif
+ifndef MATH_LIBS
+	MATH_LIBS=-L/usr/lib -lm
+endif
+ifndef XML2_CONFIG
+	XML2_CONFIG=/usr/bin/xml2-config
+endif
+ifndef XML_DIR
+	XML_DIR=/usr
+endif
+ifndef XML_CFLAGS
+	XML_CFLAGS=-I/usr/include/libxml2
+endif
+ifndef XML_INCLUDES
+	XML_INCLUDES=-I/usr/include/libxml2
+endif
+ifndef XML_LIBS
+	XML_LIBS=-L/usr/lib -lxml2 -lz -lm
+endif
+ifndef MPI_DIR
+	MPI_DIR=/usr/local/mpich-1.2.6-gcc34-shmem
+endif
+ifndef MPI_BINDIR
+	MPI_BINDIR=/usr/local/mpich-1.2.6-gcc34-shmem/bin
+endif
+ifndef MPI_LIBDIR
+	MPI_LIBDIR=/usr/local/mpich-1.2.6-gcc34-shmem/lib
+endif
+ifndef MPI_INCDIR
+	MPI_INCDIR=/usr/local/mpich-1.2.6-gcc34-shmem/include
+endif
+ifndef MPI_INCLUDES
+	MPI_INCLUDES=-I/usr/local/mpich-1.2.6-gcc34-shmem/include
+endif
+ifndef MPI_IMPLEMENTATION
+	MPI_IMPLEMENTATION=mpich
+endif
+ifndef MPI_LIBFILES
+	MPI_LIBFILES=-lmpich -lpmpich   
+endif
+ifndef MPI_RPATH
+	MPI_RPATH=-Xlinker -rpath -Xlinker /usr/local/mpich-1.2.6-gcc34-shmem/lib
+endif
+ifndef MPI_LIBS
+	MPI_LIBS=-L/usr/local/mpich-1.2.6-gcc34-shmem/lib -lmpich -lpmpich   
+endif
+ifndef MPI_RUN_COMMAND
+	MPI_RUN_COMMAND=mpirun
+endif
+ifndef MPI_RUN
+	MPI_RUN=/usr/local/mpich-1.2.6-gcc34-shmem/bin/mpirun
+endif
+ifndef MPI_NPROC
+	MPI_NPROC=-np
+endif
+HAVE_MPI=1
+ifndef BLASLAPACK_DIR
+	BLASLAPACK_DIR=/usr
+endif
+ifndef BLASLAPACK_LIBDIR
+	BLASLAPACK_LIBDIR=/usr/lib
+endif
+ifndef LAPACK_BLAS_LIBS
+	LAPACK_BLAS_LIBS=-L/usr/lib -llapack -lblas -lg2c
+endif
+ifndef PYTHON_DIR
+	PYTHON_DIR=/usr/
+endif
+ifndef PYTHON_VERSION
+	PYTHON_VERSION=2.4
+endif
+ifndef PYTHON_INCDIR
+	PYTHON_INCDIR=/usr//include/python2.4
+endif
+ifndef PYTHON_INCLUDES
+	PYTHON_INCLUDES=-I/usr//include/python2.4 -DHAVE_PYTHON
+endif
+ifndef PYTHON_BINDIR
+	PYTHON_BINDIR=/usr//bin
+endif
+ifndef PYTHON
+	PYTHON=/usr//bin/python
+endif
+ifndef PYTHON_LIB
+	PYTHON_LIB=python2.4
+endif
+ifndef PYTHON_LIBDIR
+	PYTHON_LIBDIR=/usr//lib
+endif
+ifndef PYTHON_MODDIR
+	PYTHON_MODDIR=/usr//lib/python2.4
+endif
+PYTHON_HAVE_SO_LIB=1
+ifndef PYTHON_COMPILEALL
+	PYTHON_COMPILEALL=/usr//bin/python /usr//lib/python2.4/compileall.py
+endif
+ifndef PYTHON_EXTERNAL_LIBS
+	PYTHON_EXTERNAL_LIBS=-lpthread -ldl -lutil
+endif
+ifndef PYTHON_LIBS
+	PYTHON_LIBS=-L/usr//lib -lpython2.4 -lpthread -ldl -lutil
+endif
+ifndef PYTHON_STATIC_LIB
+	PYTHON_STATIC_LIB=/usr//lib/config/libpython2.4.a
+endif
+ifndef HAVE_PYTHON
+	HAVE_PYTHON=1
+endif
+ifndef APPS_XML_DIR
+	APPS_XML_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/lib/STGDOMAIN
+endif
+	EXPORT_INCLUDE_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/lib/StGermain/StgDomain
+	EXAMPLES_DIR=${EXPORT_DIR}/share/StgDomain
+	STG_INCLUDE_PATH=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/lib/StGermain
+	EXPORT_INCLUDE_DIR=/home/steve/Projects/ComputationalMechanics/ClubStGermain/v0.3-domainRework200709/build/lib/StGermain/StgDomain
diff -r 9f22ec4f42ee -r 5667007f4799 Makefile.vmake
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.vmake	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1 @@
+VMake/Makefile.vmake
\ No newline at end of file
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/Python/Mesh.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/Python/Mesh.py	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Mesh.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import StGermain.Discretisation.Bindings.Mesh as bindings
+import StGermain.Base.IO.Dictionary as Dictionary
+
+def copyright():
+	return "StGermain.Discretisation.Mesh Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+class Mesh:
+	def Print( self ):
+		return bindings.Print( self._handle )
+	
+	def __init__( self, handle ):
+		self._handle = handle
+		self.dictionary = Dictionary.Dictionary( bindings.GetDictionary( self._handle ) )
+		return
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/Python/__init__.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/Python/__init__.py	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def copyright():
+	return "StGermain.Discretisation.Mesh Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/Python/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/Python/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3864 2006-10-16 09:21:03Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+ifdef HAVE_PYTHON
+	subdirs =
+
+	PYTHON_PACKAGE = StgDomain/Mesh
+	pyc = __init__.py Mesh.py
+endif
+
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,41 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+subdirs = src tests Python
+
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CartesianGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CartesianGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1996 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CartesianGenerator.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+#include "Mesh_ElementType.h"
+#include "Mesh_HexType.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "Mesh_Algorithms.h"
+#include "Mesh_RegularAlgorithms.h"
+#include "CartesianGenerator.h"
+
+
+/* Textual name of this class */
+const Type CartesianGenerator_Type = "CartesianGenerator";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+CartesianGenerator* CartesianGenerator_New( Name name ) {
+	return _CartesianGenerator_New( sizeof(CartesianGenerator), 
+					CartesianGenerator_Type, 
+					_CartesianGenerator_Delete, 
+					_CartesianGenerator_Print, 
+					NULL, 
+					(void* (*)(Name))_CartesianGenerator_New, 
+					_CartesianGenerator_Construct, 
+					_CartesianGenerator_Build, 
+					_CartesianGenerator_Initialise, 
+					_CartesianGenerator_Execute, 
+					_CartesianGenerator_Destroy, 
+					name, 
+					NON_GLOBAL, 
+					CartesianGenerator_SetDimSize, 
+					CartesianGenerator_Generate, 
+					_CartesianGenerator_SetTopologyParams, 
+					_CartesianGenerator_GenElements, 
+					_CartesianGenerator_GenFaces, 
+					_CartesianGenerator_GenEdges, 
+					_CartesianGenerator_GenVertices, 
+					_CartesianGenerator_GenElementVertexInc, 
+					_CartesianGenerator_GenVolumeEdgeInc, 
+					_CartesianGenerator_GenVolumeFaceInc, 
+					_CartesianGenerator_GenFaceVertexInc, 
+					_CartesianGenerator_GenFaceEdgeInc, 
+					_CartesianGenerator_GenEdgeVertexInc, 
+					_CartesianGenerator_GenElementTypes );
+}
+
+CartesianGenerator* _CartesianGenerator_New( CARTESIANGENERATOR_DEFARGS ) {
+	CartesianGenerator* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(CartesianGenerator) );
+	self = (CartesianGenerator*)_MeshGenerator_New( MESHGENERATOR_PASSARGS );
+
+	/* Virtual info */
+	self->setTopologyParamsFunc = setTopologyParamsFunc;
+	self->genElementsFunc = genElementsFunc;
+	self->genFacesFunc = genFacesFunc;
+	self->genEdgesFunc = genEdgesFunc;
+	self->genVerticesFunc = genVerticesFunc;
+	self->genElementVertexIncFunc = genElementVertexIncFunc;
+	self->genVolumeEdgeIncFunc = genVolumeEdgeIncFunc;
+	self->genVolumeFaceIncFunc = genVolumeFaceIncFunc;
+	self->genFaceVertexIncFunc = genFaceVertexIncFunc;
+	self->genFaceEdgeIncFunc = genFaceEdgeIncFunc;
+	self->genEdgeVertexIncFunc = genEdgeVertexIncFunc;
+	self->genElementTypesFunc = genElementTypesFunc;
+
+	/* CartesianGenerator info */
+	_CartesianGenerator_Init( self );
+
+	return self;
+}
+
+void _CartesianGenerator_Init( CartesianGenerator* self ) {
+	Stream*	stream;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+
+	stream = Journal_Register( Info_Type, self->type );
+	Stream_SetPrintingRank( stream, 0 );
+
+	self->comm = NULL;
+	self->regular = True;
+	self->maxDecompDims = 0;
+	self->minDecomp = NULL;
+	self->maxDecomp = NULL;
+	self->shadowDepth = 1;
+	self->crdMin = NULL;
+	self->crdMax = NULL;
+
+	self->vertGrid = NULL;
+	self->elGrid = NULL;
+	self->procGrid = NULL;
+	self->origin = NULL;
+	self->range = NULL;
+	self->vertOrigin = NULL;
+	self->vertRange = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CartesianGenerator_Delete( void* meshGenerator ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+
+	CartesianGenerator_Destruct( self );
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _CartesianGenerator_Print( void* meshGenerator, Stream* stream ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshGeneratorStream;
+	meshGeneratorStream = Journal_Register( InfoStream_Type, "CartesianGeneratorStream" );
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+
+	/* Print parent */
+	Journal_Printf( stream, "CartesianGenerator (ptr): (%p)\n", self );
+	_MeshGenerator_Print( self, stream );
+}
+
+void _CartesianGenerator_Construct( void* meshGenerator, Stg_ComponentFactory* cf, void* data ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Dictionary*		dict;
+	Dictionary_Entry_Value*	tmp;
+	char*			rootKey;
+	Dictionary_Entry_Value*	sizeList;
+	Dictionary_Entry_Value	*minList, *maxList;
+	unsigned		maxDecompDims;
+	unsigned		*minDecomp, *maxDecomp;
+	double			*crdMin, *crdMax;
+	unsigned*		size;
+	unsigned		shadowDepth;
+	Stream*			stream;
+	unsigned		d_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( cf );
+
+	/* Call parent construct. */
+	_MeshGenerator_Construct( self, cf, data );
+
+	/* Rip out the components structure as a dictionary. */
+	dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+
+	/* Read the sizes. */
+	sizeList = Dictionary_Get( dict, "size" );
+	assert( sizeList );
+	assert( Dictionary_Entry_Value_GetCount( sizeList ) >= self->nDims );
+	size = Memory_Alloc_Array_Unnamed( unsigned, self->nDims );
+	for( d_i = 0; d_i < self->nDims; d_i++ ) {
+		tmp = Dictionary_Entry_Value_GetElement( sizeList, d_i );
+		rootKey = Dictionary_Entry_Value_AsString( tmp );
+
+		if( !Stg_StringIsNumeric( rootKey ) )
+			tmp = Dictionary_Get( cf->rootDict, rootKey );
+		size[d_i] = Dictionary_Entry_Value_AsUnsignedInt( tmp );
+	}
+
+	/* Read decomposition restrictions. */
+	maxDecompDims = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "maxDecomposedDims", 0 );
+
+	minList = Dictionary_Get( dict, "minDecompositions" );
+	if( minList ) {
+		minDecomp = AllocArray( unsigned, self->nDims );
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+			tmp = Dictionary_Entry_Value_GetElement( minList, d_i );
+			rootKey = Dictionary_Entry_Value_AsString( tmp );
+
+			if( !Stg_StringIsNumeric( rootKey ) )
+				tmp = Dictionary_Get( cf->rootDict, rootKey );
+			minDecomp[d_i] = Dictionary_Entry_Value_AsUnsignedInt( tmp );
+		}
+	}
+	else
+		minDecomp = NULL;
+
+	maxList = Dictionary_Get( dict, "maxDecompositions" );
+	if( maxList ) {
+		maxDecomp = AllocArray( unsigned, self->nDims );
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+			tmp = Dictionary_Entry_Value_GetElement( maxList, d_i );
+			rootKey = Dictionary_Entry_Value_AsString( tmp );
+
+			if( !Stg_StringIsNumeric( rootKey ) )
+				tmp = Dictionary_Get( cf->rootDict, rootKey );
+			maxDecomp[d_i] = Dictionary_Entry_Value_AsUnsignedInt( tmp );
+		}
+	}
+	else
+		maxDecomp = NULL;
+
+	/* Initial setup. */
+	CartesianGenerator_SetTopologyParams( self, size, maxDecompDims, minDecomp, maxDecomp );
+
+	/* Read geometry. */
+	minList = Dictionary_Get( dict, "minCoord" );
+	maxList = Dictionary_Get( dict, "maxCoord" );
+	if( minList && maxList ) {
+		assert( Dictionary_Entry_Value_GetCount( minList ) >= self->nDims );
+		assert( Dictionary_Entry_Value_GetCount( maxList ) >= self->nDims );
+		crdMin = Memory_Alloc_Array_Unnamed( double, self->nDims );
+		crdMax = Memory_Alloc_Array_Unnamed( double, self->nDims );
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+			tmp = Dictionary_Entry_Value_GetElement( minList, d_i );
+			rootKey = Dictionary_Entry_Value_AsString( tmp );
+
+			if( !Stg_StringIsNumeric( rootKey ) )
+				tmp = Dictionary_Get( cf->rootDict, rootKey );
+			crdMin[d_i] = Dictionary_Entry_Value_AsDouble( tmp );
+
+			tmp = Dictionary_Entry_Value_GetElement( maxList, d_i );
+			rootKey = Dictionary_Entry_Value_AsString( tmp );
+
+			if( !Stg_StringIsNumeric( rootKey ) )
+				tmp = Dictionary_Get( cf->rootDict, rootKey );
+			crdMax[d_i] = Dictionary_Entry_Value_AsDouble( tmp );
+		}
+
+		/* Initial setup. */
+		CartesianGenerator_SetGeometryParams( self, crdMin, crdMax );
+
+		/* Free coordinate arrays. */
+		FreeArray( crdMin );
+		FreeArray( crdMax );
+	}
+
+	/* Read and set shadow depth. */
+	shadowDepth = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "shadowDepth", 1 );
+	CartesianGenerator_SetShadowDepth( self, shadowDepth );
+
+	/* Read regular flag. */
+	self->regular = Stg_ComponentFactory_GetBool( cf, self->name, "regular", True );
+
+	/* Read a general dictionary flag for which processor to watch. */
+	stream = Journal_Register( Info_Type, self->type );
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( cf->rootDict, "rankToWatch", 0 ) );
+
+	/* Free stuff. */
+	FreeArray( size );
+	FreeArray( minDecomp );
+	FreeArray( maxDecomp );
+}
+
+void _CartesianGenerator_Build( void* meshGenerator, void* data ) {
+	_MeshGenerator_Build( meshGenerator, data );
+}
+
+void _CartesianGenerator_Initialise( void* meshGenerator, void* data ) {
+}
+
+void _CartesianGenerator_Execute( void* meshGenerator, void* data ) {
+}
+
+void _CartesianGenerator_Destroy( void* meshGenerator, void* data ) {
+}
+
+void CartesianGenerator_SetDimSize( void* meshGenerator, unsigned nDims ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+
+	_MeshGenerator_SetDimSize( self, nDims );
+
+	self->minDecomp = MemRearray( self->minDecomp, unsigned, self->nDims, CartesianGenerator_Type );
+	memset( self->minDecomp, 0, nDims * sizeof(unsigned) );
+	self->maxDecomp = MemRearray( self->maxDecomp, unsigned, self->nDims, CartesianGenerator_Type );
+	memset( self->maxDecomp, 0, nDims * sizeof(unsigned) );
+}
+
+void CartesianGenerator_Generate( void* meshGenerator, void* _mesh ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	Mesh*			mesh = (Mesh*)_mesh;
+	Grid**			grid;
+	unsigned		*localRange, *localOrigin;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->elGrid || mesh );
+
+	Journal_Printf( stream, "Cartesian generator: '%s'\n", self->name );
+	Stream_Indent( stream );
+
+	/* If we havn't been given anything, don't do anything. */
+	if( self->elGrid ) {
+		unsigned	d_i;
+
+		Journal_Printf( stream, "Target mesh: '%s'\n", mesh->name );
+		Journal_Printf( stream, "Global element size: %d", self->elGrid->sizes[0] );
+		for( d_i = 1; d_i < self->elGrid->nDims; d_i++ )
+			Journal_Printf( stream, "x%d", self->elGrid->sizes[d_i] );
+		Journal_Printf( stream, "\n" );
+		Journal_Printf( stream, "Local offset of rank %d: %d", stream->_printingRank, self->origin[0] );
+		for( d_i = 1; d_i < self->elGrid->nDims; d_i++ )
+			Journal_Printf( stream, "x%d", self->origin[d_i] );
+		Journal_Printf( stream, "\n" );
+		Journal_Printf( stream, "Local range of rank %d: %d", stream->_printingRank, self->range[0] );
+		for( d_i = 1; d_i < self->elGrid->nDims; d_i++ )
+			Journal_Printf( stream, "x%d", self->range[d_i] );
+		Journal_Printf( stream, "\n" );
+
+		/* Fill topological values. */
+		MeshTopology_SetComm( mesh->topo, self->comm );
+		MeshTopology_SetNumDims( mesh->topo, self->elGrid->nDims );
+		CartesianGenerator_GenTopo( self, (IGraph*)mesh->topo );
+
+		/* Fill geometric values. */
+		CartesianGenerator_GenGeom( self, mesh );
+
+		/* Fill element types. */
+		CartesianGenerator_GenElementTypes( self, mesh );
+	}
+	else {
+		MeshTopology_SetNumDims( mesh->topo, 0 );
+	}
+
+	/* Add extensions to the mesh and fill with cartesian information. */
+	ExtensionManager_Add( mesh->info, "vertexGrid", sizeof(Grid*) );
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+	*grid = Grid_New();
+	Grid_SetNumDims( *grid, self->vertGrid->nDims );
+	Grid_SetSizes( *grid, self->vertGrid->sizes );
+
+	ExtensionManager_Add( mesh->info, "elementGrid", sizeof(Grid*) );
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "elementGrid" ) );
+	*grid = Grid_New();
+	Grid_SetNumDims( *grid, self->elGrid->nDims );
+	Grid_SetSizes( *grid, self->elGrid->sizes );
+
+	ExtensionManager_AddArray( mesh->info, "localOrigin", sizeof(unsigned), Mesh_GetDimSize( mesh ) );
+	localOrigin = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						       ExtensionManager_GetHandle( mesh->info, "localOrigin" ) );
+	memcpy( localOrigin, self->origin, Mesh_GetDimSize( mesh ) * sizeof(unsigned) );
+
+	ExtensionManager_AddArray( mesh->info, "localRange", sizeof(unsigned), Mesh_GetDimSize( mesh ) );
+	localRange = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						      ExtensionManager_GetHandle( mesh->info, "localRange" ) );
+	memcpy( localRange, self->range, Mesh_GetDimSize( mesh ) * sizeof(unsigned) );
+
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_SetTopologyParams( void* meshGenerator, unsigned* sizes, 
+					    unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp )
+{
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	unsigned		d_i;
+
+	/* Sanity check. */
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( !self->nDims || sizes );
+	assert( self->nDims <= 3 );
+
+	/* Kill everything we have, topologically. */
+	CartesianGenerator_DestructTopology( self );
+
+	/* Don't continue if we have nothing. */
+	if( !self->nDims )
+		return;
+
+	/* Set the parameters. */
+	self->elGrid = Grid_New();
+	Grid_SetNumDims( self->elGrid, self->nDims );
+	Grid_SetSizes( self->elGrid, sizes );
+
+	self->vertGrid = Grid_New();
+	Grid_SetNumDims( self->vertGrid, self->nDims );
+	for( d_i = 0; d_i < self->nDims; d_i++ )
+		sizes[d_i]++;
+	Grid_SetSizes( self->vertGrid, sizes );
+	for( d_i = 0; d_i < self->nDims; d_i++ )
+		sizes[d_i]--;
+
+	if( minDecomp )
+		memcpy( self->minDecomp, minDecomp, self->nDims * sizeof(unsigned) );
+	else
+		memset( self->minDecomp, 0, self->nDims * sizeof(unsigned) );
+	if( maxDecomp )
+		memcpy( self->maxDecomp, maxDecomp, self->nDims * sizeof(unsigned) );
+	else
+		memset( self->maxDecomp, 0, self->nDims * sizeof(unsigned) );
+	self->maxDecompDims = maxDecompDims;
+
+	/* As soon as we know the topology, we can decompose. */
+	CartesianGenerator_BuildDecomp( self );
+}
+
+void _CartesianGenerator_GenElements( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	Grid*			grid;
+	unsigned		nEls;
+	unsigned*		els;
+	unsigned*		dimInds;
+	unsigned		d_i, e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+
+	Journal_Printf( stream, "Generating elements...\n" );
+	Stream_Indent( stream );
+
+	grid = Grid_New();
+	Grid_SetNumDims( grid, self->elGrid->nDims );
+	Grid_SetSizes( grid, self->range );
+
+	nEls = grid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ )
+		nEls *= grid->sizes[d_i];
+	els = Memory_Alloc_Array_Unnamed( unsigned, nEls );
+
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[e_i] = Grid_Project( self->elGrid, dimInds );
+	}
+
+	IGraph_SetLocalElements( topo, grid->nDims, nEls, els );
+	FreeArray( els );
+	FreeArray( dimInds );
+	FreeObject( grid );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenVertices( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		rank;
+	Grid*			globalGrid;
+	Grid*			grid;
+	unsigned		nEls;
+	unsigned		nLocals, *locals;
+	unsigned		nRemotes, *remotes;
+	unsigned		*dstArray, *dstCount;
+	unsigned		*dimInds, *rankInds;
+	unsigned		d_i, e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+
+	Journal_Printf( stream, "Generating vertices...\n" );
+	Stream_Indent( stream );
+
+	MPI_Comm_rank( Comm_GetMPIComm( self->comm ), (int*)&rank );
+
+	globalGrid = self->vertGrid;
+
+	grid = Grid_New();
+	Grid_SetNumDims( grid, self->elGrid->nDims );
+	Grid_SetSizes( grid, self->vertRange );
+
+	nEls = grid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ )
+		nEls *= grid->sizes[d_i];
+	locals = Memory_Alloc_Array_Unnamed( unsigned, nEls );
+/*
+	remotes = Memory_Alloc_Array_Unnamed( unsigned, nEls );
+*/
+
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+	rankInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+	Grid_Lift( self->procGrid, rank, rankInds );
+
+	nLocals = 0;
+	nRemotes = 0;
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+/*
+		for( d_i = 0; d_i < grid->nDims; d_i++ ) {
+			if( dimInds[d_i] == 0 && rankInds[d_i] > 0 )
+				break;
+		}
+		if( d_i < grid->nDims ) {
+			dstArray = remotes;
+			dstCount = &nRemotes;
+		}
+		else {
+*/
+			dstArray = locals;
+			dstCount = &nLocals;
+/*
+		}
+*/
+
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->vertOrigin[d_i];
+
+		dstArray[(*dstCount)++] = Grid_Project( globalGrid, dimInds );
+	}
+
+/*
+	MeshTopology_SetLocalElements( topo, 0, nLocals, locals );
+	MeshTopology_SetRemoteElements( topo, 0, nRemotes, remotes );
+*/
+	IGraph_SetElements( topo, 0, nLocals, locals );
+	FreeArray( locals );
+/*
+	FreeArray( remotes );
+*/
+	FreeArray( dimInds );
+	FreeArray( rankInds );
+	FreeObject( grid );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenEdges( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( self->elGrid->nDims >= 2 );
+	assert( self->elGrid->nDims <= 3 );
+
+	Journal_Printf( stream, "Generating edges...\n" );
+	Stream_Indent( stream );
+
+	if( self->elGrid->nDims == 2 )
+		CartesianGenerator_GenEdges2D( self, topo, grids );
+	else
+		CartesianGenerator_GenEdges3D( self, topo, grids );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenFaces( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	Grid*			globalGrid;
+	unsigned		nGlobalEls[2];
+	Grid*			grid;
+	unsigned		nEls[3];
+	unsigned*		els;
+	unsigned*		dimInds;
+	unsigned		d_i, e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+	assert( self->elGrid->nDims == 3 );
+
+	Journal_Printf( stream, "Generating faces...\n" );
+	Stream_Indent( stream );
+
+	globalGrid = Grid_New();
+	Grid_SetNumDims( globalGrid, self->elGrid->nDims );
+	self->elGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[2]--;
+
+	grid = Grid_New();
+	Grid_SetNumDims( grid, self->elGrid->nDims );
+	self->range[2]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[2]--;
+
+	nEls[0] = grid->sizes[0];
+	nGlobalEls[0] = globalGrid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ ) {
+		nEls[0] *= grid->sizes[d_i];
+		nGlobalEls[0] *= globalGrid->sizes[d_i];
+	}
+	els = Memory_Alloc_Array_Unnamed( unsigned, nEls[0] );
+
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+
+	for( e_i = 0; e_i < nEls[0]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[e_i] = Grid_Project( globalGrid, dimInds );
+	}
+
+	self->elGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[1]--;
+
+	self->range[1]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[1]--;
+
+	nEls[1] = grid->sizes[0];
+	nGlobalEls[1] = globalGrid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ ) {
+		nEls[1] *= grid->sizes[d_i];
+		nGlobalEls[1] *= globalGrid->sizes[d_i];
+	}
+	els = Memory_Realloc_Array( els, unsigned, nEls[0] + nEls[1] );
+
+	for( e_i = 0; e_i < nEls[1]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[nEls[0] + e_i] = nGlobalEls[0] + Grid_Project( globalGrid, dimInds );
+	}
+
+	self->elGrid->sizes[0]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[0]--;
+
+	self->range[0]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[0]--;
+
+	nEls[2] = grid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ )
+		nEls[2] *= grid->sizes[d_i];
+	els = Memory_Realloc_Array( els, unsigned, nEls[0] + nEls[1] + nEls[2] );
+
+	for( e_i = 0; e_i < nEls[2]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[nEls[0] + nEls[1] + e_i] = nGlobalEls[0] + nGlobalEls[1] + Grid_Project( globalGrid, dimInds );
+	}
+
+	IGraph_SetElements( topo, MT_FACE, nEls[0] + nEls[1] + nEls[2], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenElementVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	int			nDomainEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	unsigned		vertsPerEl;
+	const Sync*		sync;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+
+	Journal_Printf( stream, "Generating element-vertex incidence...\n" );
+	Stream_Indent( stream );
+
+	vertsPerEl = (topo->nDims == 1) ? 2 : (topo->nDims == 2) ? 4 : 8;
+
+	sync = IGraph_GetDomain( topo, topo->nDims );
+	nDomainEls = Sync_GetNumDomains( sync );
+	incEls = Memory_Alloc_Array_Unnamed( unsigned, vertsPerEl );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < nDomainEls; e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( sync, e_i );
+		unsigned	curNode = 0;
+
+		Grid_Lift( grids[topo->nDims][0], gInd, dimInds );
+
+		incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+
+		dimInds[0]++;
+		incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+		dimInds[0]--;
+
+		if( topo->nDims >= 2 ) {
+			dimInds[1]++;
+			incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+			dimInds[1]--;
+
+			if( topo->nDims >= 3 ) {
+				dimInds[2]++;
+				incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+
+				dimInds[0]++;
+				incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+				dimInds[0]--;
+
+				dimInds[1]++;
+				incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+
+				dimInds[0]++;
+				incEls[curNode++] = Grid_Project( grids[0][0], dimInds );
+				dimInds[0]--;
+				dimInds[1]--;
+				dimInds[2]--;
+			}
+		}
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 0 ), 
+						vertsPerEl, incEls );
+		IGraph_SetIncidence( topo, topo->nDims, e_i, MT_VERTEX, vertsPerEl, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenVolumeEdgeInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		nIncEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 3 );
+
+	Journal_Printf( stream, "Generating volume-edge incidence...\n" );
+	Stream_Indent( stream );
+
+	incEls = Memory_Alloc_Array_Unnamed( unsigned, 12 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->remotes[3]->nDomains; e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( topo->remotes[3], e_i );
+
+		nIncEls = 12;
+		Grid_Lift( grids[topo->nDims][0], gInd, dimInds );
+
+		incEls[0] = Grid_Project( grids[1][0], dimInds );
+
+		dimInds[1]++;
+		incEls[1] = Grid_Project( grids[1][0], dimInds );
+		dimInds[1]--;
+
+		incEls[2] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+		dimInds[0]++;
+		incEls[3] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+		dimInds[0]--;
+
+		dimInds[2]++;
+		incEls[4] = Grid_Project( grids[1][0], dimInds );
+
+		dimInds[1]++;
+		incEls[5] = Grid_Project( grids[1][0], dimInds );
+		dimInds[1]--;
+
+		incEls[6] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+		dimInds[0]++;
+		incEls[7] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+		dimInds[0]--;
+		dimInds[2]--;
+
+		incEls[8] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+		dimInds[0]++;
+		incEls[9] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+		dimInds[0]--;
+
+		dimInds[1]++;
+		incEls[10] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+		dimInds[0]++;
+		incEls[11] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+		dimInds[0]--;
+		dimInds[1]--;
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 1 ), 
+						nIncEls, incEls );
+		IGraph_SetIncidence( topo, topo->nDims, e_i, 1, nIncEls, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenVolumeFaceInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		nIncEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 3 );
+
+	Journal_Printf( stream, "Generating volume-face incidence...\n" );
+	Stream_Indent( stream );
+
+	incEls = Memory_Alloc_Array_Unnamed( unsigned, 6 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->remotes[MT_VOLUME]->nDomains; e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( topo->remotes[MT_VOLUME], e_i );
+
+		nIncEls = 6;
+		Grid_Lift( grids[topo->nDims][0], gInd, dimInds );
+
+		incEls[0] = Grid_Project( grids[2][0], dimInds );
+
+		dimInds[2]++;
+		incEls[1] = Grid_Project( grids[2][0], dimInds );
+		dimInds[2]--;
+
+		incEls[2] = Grid_Project( grids[2][1], dimInds ) + grids[2][0]->nPoints;
+
+		dimInds[1]++;
+		incEls[3] = Grid_Project( grids[2][1], dimInds ) + grids[2][0]->nPoints;
+		dimInds[1]--;
+
+		incEls[4] = Grid_Project( grids[2][2], dimInds ) + grids[2][0]->nPoints + grids[2][1]->nPoints;
+
+		dimInds[0]++;
+		incEls[5] = Grid_Project( grids[2][2], dimInds ) + grids[2][0]->nPoints + grids[2][1]->nPoints;
+		dimInds[0]--;
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 2 ), 
+						nIncEls, incEls );
+		IGraph_SetIncidence( topo, topo->nDims, e_i, 2, nIncEls, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenFaceVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		nIncEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 2 );
+
+	Journal_Printf( stream, "Generating face-vertex incidence...\n" );
+	Stream_Indent( stream );
+
+	incEls = Memory_Alloc_Array_Unnamed( unsigned, 4 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->remotes[MT_FACE]->nDomains; e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( topo->remotes[MT_FACE], e_i );
+
+		nIncEls = 4;
+
+		if( gInd < grids[2][0]->nPoints ) {
+			Grid_Lift( grids[2][0], gInd, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+
+			dimInds[1]++;
+			incEls[2] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[3] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+			dimInds[1]--;
+		}
+		else if( gInd < grids[2][0]->nPoints + grids[2][1]->nPoints ) {
+			assert( topo->nDims >= 3 );
+
+			Grid_Lift( grids[2][1], gInd - grids[2][0]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+
+			dimInds[2]++;
+			incEls[2] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[3] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+			dimInds[2]--;
+		}
+		else {
+			assert( gInd < grids[2][0]->nPoints + grids[2][1]->nPoints + grids[2][2]->nPoints );
+			assert( topo->nDims >= 3 );
+
+			Grid_Lift( grids[2][2], gInd - grids[2][0]->nPoints - grids[2][1]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[1]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[1]--;
+
+			dimInds[2]++;
+			incEls[2] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[1]++;
+			incEls[3] = Grid_Project( grids[0][0], dimInds );
+			dimInds[1]--;
+			dimInds[2]--;
+		}
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 0 ), 
+						nIncEls, incEls );
+		IGraph_SetIncidence( topo, 2, e_i, 0, nIncEls, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenFaceEdgeInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		nIncEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 2 );
+
+	Journal_Printf( stream, "Generating face-edge incidence...\n" );
+	Stream_Indent( stream );
+
+	incEls = Memory_Alloc_Array_Unnamed( unsigned, 4 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->remotes[MT_FACE]->nDomains; e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( topo->remotes[MT_FACE], e_i );
+
+		nIncEls = 4;
+
+		if( gInd < grids[2][0]->nPoints ) {
+			Grid_Lift( grids[2][0], gInd, dimInds );
+
+			incEls[0] = Grid_Project( grids[1][0], dimInds );
+
+			dimInds[1]++;
+			incEls[1] = Grid_Project( grids[1][0], dimInds );
+			dimInds[1]--;
+
+			incEls[2] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+			dimInds[0]++;
+			incEls[3] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+			dimInds[0]--;
+		}
+		else if( gInd < grids[2][0]->nPoints + grids[2][1]->nPoints ) {
+			assert( topo->nDims >= 3 );
+
+			Grid_Lift( grids[2][1], gInd - grids[2][0]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[1][0], dimInds );
+
+			dimInds[2]++;
+			incEls[1] = Grid_Project( grids[1][0], dimInds );
+			dimInds[2]--;
+
+			incEls[2] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+			dimInds[0]++;
+			incEls[3] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+			dimInds[0]--;
+		}
+		else {
+			assert( gInd < grids[2][0]->nPoints + grids[2][1]->nPoints + grids[2][2]->nPoints );
+			assert( topo->nDims >= 3 );
+
+			Grid_Lift( grids[2][2], gInd - grids[2][0]->nPoints - grids[2][1]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+			dimInds[2]++;
+			incEls[1] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+			dimInds[2]--;
+
+			incEls[2] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+			dimInds[1]++;
+			incEls[3] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+			dimInds[1]--;
+		}
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 1 ), 
+						nIncEls, incEls );
+		IGraph_SetIncidence( topo, 2, e_i, 1, nIncEls, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenEdgeVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	unsigned		nIncEls;
+	unsigned*		incEls;
+	unsigned*		dimInds;
+	Sync*			sync;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+	assert( topo );
+	assert( grids );
+
+	Journal_Printf( stream, "Generating edge-vertex incidence...\n" );
+	Stream_Indent( stream );
+
+	sync = IGraph_GetDomain( topo, 1 );
+	incEls = MemArray( unsigned, 2, CartesianGenerator_Type );
+	dimInds = MemArray( unsigned, topo->nDims, CartesianGenerator_Type );
+	for( e_i = 0; e_i < Sync_GetNumDomains( sync ); e_i++ ) {
+		unsigned	gInd = Sync_DomainToGlobal( sync, e_i );
+
+		nIncEls = 2;
+
+		if( gInd < grids[1][0]->nPoints ) {
+			Grid_Lift( grids[1][0], gInd, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+		}
+		else if( gInd < grids[1][0]->nPoints + grids[1][1]->nPoints ) {
+			assert( topo->nDims >= 2 );
+
+			Grid_Lift( grids[1][1], gInd - grids[1][0]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[1]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[1]--;
+		}
+		else {
+			assert( gInd < grids[1][0]->nPoints + grids[1][1]->nPoints + grids[1][2]->nPoints );
+			assert( topo->nDims >= 3 );
+
+			Grid_Lift( grids[1][2], gInd - grids[1][0]->nPoints - grids[1][1]->nPoints, dimInds );
+
+			incEls[0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[2]++;
+			incEls[1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[2]--;
+		}
+
+		CartesianGenerator_MapToDomain( self, (Sync*)IGraph_GetDomain( topo, 0 ), 
+						nIncEls, incEls );
+		IGraph_SetIncidence( topo, MT_EDGE, e_i, MT_VERTEX, nIncEls, incEls );
+	}
+
+	FreeArray( incEls );
+	FreeArray( dimInds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void _CartesianGenerator_GenElementTypes( void* meshGenerator, Mesh* mesh ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+	Stream*			stream;
+	unsigned		nDomainEls;
+	unsigned		e_i;
+
+	assert( self && Stg_CheckType( self, CartesianGenerator ) );
+
+	stream = Journal_Register( Info_Type, self->type );
+	Journal_Printf( stream, "Generating element types...\n" );
+	Stream_Indent( stream );
+
+	mesh->nElTypes = 1;
+	mesh->elTypes = Memory_Alloc_Array( Mesh_ElementType*, mesh->nElTypes, "Mesh::elTypes" );
+	mesh->elTypes[0] = (Mesh_ElementType*)Mesh_HexType_New();
+	Mesh_ElementType_SetMesh( mesh->elTypes[0], mesh );
+	nDomainEls = Mesh_GetDomainSize( mesh, Mesh_GetDimSize( mesh ) );
+	mesh->elTypeMap = Memory_Alloc_Array( unsigned, nDomainEls, "Mesh::elTypeMap" );
+	for( e_i = 0; e_i < nDomainEls; e_i++ )
+		mesh->elTypeMap[e_i] = 0;
+
+	if( self->regular )
+		Mesh_SetAlgorithms( mesh, Mesh_RegularAlgorithms_New( "" ) );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... element types are '%s',\n", mesh->elTypes[0]->type );
+	Journal_Printf( stream, "... mesh algorithm type is '%s',\n", mesh->algorithms->type );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void CartesianGenerator_SetGeometryParams( void* meshGenerator, double* min, double* max ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->elGrid->nDims || (min && max) );
+
+	/* Kill everything we have, geometrically. */
+	KillArray( self->crdMin );
+	KillArray( self->crdMax );
+
+	/* Set the parameters. */
+	if( self->elGrid->nDims ) {
+		self->crdMin = Memory_Alloc_Array( double, self->elGrid->nDims, "CartesianGenerator::min" );
+		self->crdMax = Memory_Alloc_Array( double, self->elGrid->nDims, "CartesianGenerator::max" );
+		memcpy( self->crdMin, min, self->elGrid->nDims * sizeof(double) );
+		memcpy( self->crdMax, max, self->elGrid->nDims * sizeof(double) );
+	}
+}
+
+void CartesianGenerator_SetShadowDepth( void* meshGenerator, unsigned depth ) {
+	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
+
+	/* Sanity check. */
+	assert( self );
+
+	self->shadowDepth = depth;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void CartesianGenerator_BuildDecomp( CartesianGenerator* self ) {
+	unsigned	nProcs, rank;
+	unsigned	nPos = 0;
+	unsigned**	posNSubDomains = NULL;
+	unsigned*	tmpSubDomains;
+	double		bestRatio;
+	unsigned	bestPos;
+	unsigned	*myRankInds, *rankInds;
+	unsigned	nNbrs, *nbrs;
+	unsigned	p_i, d_i, r_i;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* Collect information regarding parallel configuration. */
+	MPI_Comm_size( self->mpiComm, (int*)&nProcs );
+	MPI_Comm_rank( self->mpiComm, (int*)&rank );
+
+	/* Allocate for possible sub-domains. */
+	tmpSubDomains = Memory_Alloc_Array( unsigned, self->elGrid->nDims, "" );
+
+	/* Build a list of all acceptable decompositions. */
+	CartesianGenerator_RecurseDecomps( self, 0, nProcs, 
+					   tmpSubDomains, &nPos, &posNSubDomains );
+	assert( nPos );
+
+	/* Free unneeded memory. */
+	FreeArray( tmpSubDomains );
+
+	/* Now check for the best ratio. */
+	bestRatio = HUGE_VAL;
+	bestPos = -1;
+	for( p_i = 0; p_i < nPos; p_i++ ) {
+		double		curRatio = 0.0;
+		unsigned	decompDims = 0;
+
+		/* If decomposed in more dimensions than allowed, skip. */
+		for( d_i = 0; d_i < self->elGrid->nDims; d_i++ )
+			decompDims += (posNSubDomains[p_i][d_i] > 1) ? 1 : 0;
+		if( self->maxDecompDims && decompDims > self->maxDecompDims )
+			continue;
+
+		/* Evaluate ratios. */
+		for( d_i = 0; d_i < self->elGrid->nDims; d_i++ ) {
+			double		nI = (double)self->elGrid->sizes[d_i] / (double)posNSubDomains[p_i][d_i];
+			unsigned	d_j;
+
+			for( d_j = d_i + 1; d_j < self->elGrid->nDims; d_j++ ) {
+				double	nJ = (double)self->elGrid->sizes[d_j] / (double)posNSubDomains[p_i][d_j];
+
+				curRatio += (nI > nJ) ? nI / nJ : nJ / nI;
+			}
+		}
+
+		/* Better than best? */
+		if( curRatio < bestRatio ) {
+			bestRatio = curRatio;
+			bestPos = p_i;
+		}
+	}
+	assert( bestPos != -1 );
+
+	/* Allocate for results. */
+	self->origin = Memory_Alloc_Array( unsigned, self->elGrid->nDims, "CartesianGenerator::origin" );
+	self->range = Memory_Alloc_Array( unsigned, self->elGrid->nDims, "CartesianGenerator::range" );
+
+	/* Build a sub-domain grid. */
+	self->procGrid = Grid_New();
+	Grid_SetNumDims( self->procGrid, self->elGrid->nDims );
+	Grid_SetSizes( self->procGrid, posNSubDomains[bestPos] );
+
+	/* Free unneeded space. */
+	FreeArray( posNSubDomains );
+
+	/* Lift the rank to a parameterised offset. */
+	Grid_Lift( self->procGrid, rank, self->origin );
+	for( d_i = 0; d_i < self->elGrid->nDims; d_i++ ) {
+		unsigned	base = self->elGrid->sizes[d_i] / self->procGrid->sizes[d_i];
+		unsigned	mod = self->elGrid->sizes[d_i] % self->procGrid->sizes[d_i];
+		unsigned	origin = self->origin[d_i];
+
+		self->origin[d_i] *= base;
+		self->range[d_i] = base;
+		if( origin < mod ) {
+			self->origin[d_i] += origin;
+			self->range[d_i]++;
+		}
+		else
+			self->origin[d_i] += mod;
+	}
+
+	/* Copy to the vertex equivalents. */
+	self->vertOrigin = AllocArray( unsigned, self->elGrid->nDims );
+	self->vertRange = AllocArray( unsigned, self->elGrid->nDims );
+	for( d_i = 0; d_i < self->elGrid->nDims; d_i++ ) {
+		self->vertOrigin[d_i] = self->origin[d_i];
+		self->vertRange[d_i] = self->range[d_i] + 1;
+	}
+
+	/* Build the comm topology. */
+	myRankInds = AllocArray( unsigned, Grid_GetNumDims( self->procGrid ) );
+	rankInds = AllocArray( unsigned, Grid_GetNumDims( self->procGrid ) );
+	Grid_Lift( self->procGrid, rank, myRankInds );
+	nNbrs = 0;
+	nbrs = NULL;
+	for( r_i = 0; r_i < Grid_GetNumPoints( self->procGrid ); r_i++ ) {
+		if( r_i == rank )
+			continue;
+
+		Grid_Lift( self->procGrid, r_i, rankInds );
+		for( d_i = 0; d_i < Grid_GetNumDims( self->procGrid ); d_i++ ) {
+			if( (myRankInds[d_i] > 0 && rankInds[d_i] < myRankInds[d_i] - 1) || 
+			    (myRankInds[d_i] < self->procGrid->sizes[d_i] - 1 && rankInds[d_i] > myRankInds[d_i] + 1) )
+			{
+				break;
+			}
+		}
+		if( d_i == Grid_GetNumDims( self->procGrid ) ) {
+			nbrs = ReallocArray( nbrs, unsigned, nNbrs + 1 );
+			nbrs[nNbrs++] = r_i;
+		}
+	}
+
+	FreeArray( myRankInds );
+	FreeArray( rankInds );
+
+	NewClass_RemoveRef( self->comm );
+	self->comm = Comm_New();
+	NewClass_AddRef( self->comm );
+	Comm_SetMPIComm( self->comm, self->mpiComm );
+	Comm_SetNeighbours( self->comm, nNbrs, nbrs );
+	FreeArray( nbrs );
+}
+
+void CartesianGenerator_RecurseDecomps( CartesianGenerator* self, 
+					unsigned dim, unsigned max, 
+					unsigned* nSubDomains, 
+					unsigned* nPos, unsigned*** posNSubDomains )
+{
+	unsigned	nProcs;
+	unsigned	nSDs = 1;
+	unsigned	d_i;
+
+	MPI_Comm_size( self->mpiComm, (int*)&nProcs );
+
+	/* If we're over the limit, return immediately. */
+	for( d_i = 0; d_i < dim; d_i++ )
+		nSDs *= nSubDomains[d_i];
+	if( nSDs > nProcs )
+		return;
+
+	/* Where are we up to? */
+	if( dim == self->elGrid->nDims ) {
+		/* If this covers all processors, store it. */
+		if( nSDs == nProcs ) {
+			/* If we havn't already allocated do it now. */
+			if( !*posNSubDomains ) {
+				*nPos = 1;
+				*posNSubDomains = Memory_Alloc_2DArray_Unnamed( unsigned, 2, self->elGrid->nDims );
+			}
+			else {
+				/* Reallocate the arrays. */
+				(*nPos)++;
+				if( *nPos != 2 ) {
+					*posNSubDomains = Memory_Realloc_2DArray( *posNSubDomains, unsigned, 
+										  *nPos, self->elGrid->nDims );
+				}
+			}
+
+			/* Store status. */
+			memcpy( (*posNSubDomains)[(*nPos) - 1], nSubDomains, self->elGrid->nDims * sizeof(unsigned) );
+		}
+	}
+	else {
+		unsigned	p_i;
+
+		/* Loop over all remaining */
+		for( p_i = 0; p_i < max; p_i++ ) {
+			/* Don't try and decompose more than this dimension allows. */
+			if( p_i >= self->elGrid->sizes[dim] || 
+			    (self->maxDecomp[dim] && p_i >= self->maxDecomp[dim]) )
+			{
+				break;
+			}
+
+			/* If we have a minimum decomp, skip until we reach it. */
+			if( self->minDecomp[dim] && p_i < self->minDecomp[dim] - 1 )
+				continue;
+
+			/* Set the number of sub-domains. */
+			nSubDomains[dim] = p_i + 1;
+
+			/* Try this combination. */
+			CartesianGenerator_RecurseDecomps( self, dim + 1, max - nSDs + 1, nSubDomains, 
+							   nPos, posNSubDomains );
+		}
+	}
+}
+
+void CartesianGenerator_GenTopo( CartesianGenerator* self, IGraph* topo ) {
+	Grid***		grids;
+	Comm*		comm;
+	unsigned	d_i, d_j;
+
+	assert( self );
+	assert( topo );
+
+	MeshTopology_SetNumDims( topo, self->elGrid->nDims );
+
+	/* Build additional grids for use in numbering. */
+	grids = Memory_Alloc_2DArray_Unnamed( Grid*, topo->nTDims, topo->nTDims );
+	for( d_i = 0; d_i < topo->nTDims; d_i++ )
+		memset( grids[d_i], 0, topo->nTDims * sizeof(Grid*) );
+
+	grids[topo->nDims][0] = self->elGrid;
+	grids[0][0] = self->vertGrid;
+
+	if( topo->nDims >= 2 ) {
+		grids[1][0] = Grid_New();
+		Grid_SetNumDims( grids[1][0], topo->nDims );
+		for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+			if( d_i == 0 ) continue;
+			grids[topo->nDims][0]->sizes[d_i]++;
+		}
+		Grid_SetSizes( grids[1][0], grids[topo->nDims][0]->sizes );
+		for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+			if( d_i == 0 ) continue;
+			grids[topo->nDims][0]->sizes[d_i]--;
+		}
+
+		grids[1][1] = Grid_New();
+		Grid_SetNumDims( grids[1][1], topo->nDims );
+		for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+			if( d_i == 1 ) continue;
+			grids[topo->nDims][0]->sizes[d_i]++;
+		}
+		Grid_SetSizes( grids[1][1], grids[topo->nDims][0]->sizes );
+		for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+			if( d_i == 1 ) continue;
+			grids[topo->nDims][0]->sizes[d_i]--;
+		}
+
+		if( topo->nDims >= 3 ) {
+			grids[1][2] = Grid_New();
+			Grid_SetNumDims( grids[1][2], topo->nDims );
+			for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+				if( d_i == 2 ) continue;
+				grids[topo->nDims][0]->sizes[d_i]++;
+			}
+			Grid_SetSizes( grids[1][2], grids[topo->nDims][0]->sizes );
+			for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+				if( d_i == 2 ) continue;
+				grids[topo->nDims][0]->sizes[d_i]--;
+			}
+
+			grids[2][0] = Grid_New();
+			Grid_SetNumDims( grids[2][0], topo->nDims );
+			grids[topo->nDims][0]->sizes[2]++;
+			Grid_SetSizes( grids[2][0], grids[topo->nDims][0]->sizes );
+			grids[topo->nDims][0]->sizes[2]--;
+
+			grids[2][1] = Grid_New();
+			Grid_SetNumDims( grids[2][1], topo->nDims );
+			grids[topo->nDims][0]->sizes[1]++;
+			Grid_SetSizes( grids[2][1], grids[topo->nDims][0]->sizes );
+			grids[topo->nDims][0]->sizes[1]--;
+
+			grids[2][2] = Grid_New();
+			Grid_SetNumDims( grids[2][2], topo->nDims );
+			grids[topo->nDims][0]->sizes[0]++;
+			Grid_SetSizes( grids[2][2], grids[topo->nDims][0]->sizes );
+			grids[topo->nDims][0]->sizes[0]--;
+		}
+	}
+
+	/* Generate topological elements. */
+	if( self->enabledDims[0] )
+		CartesianGenerator_GenVertices( self, topo, grids );
+	if( self->enabledDims[self->nDims] )
+		CartesianGenerator_GenElements( self, topo, grids );
+	if( topo->nDims >= 2 ) {
+		if( self->enabledDims[1] )
+			CartesianGenerator_GenEdges( self, topo, grids );
+		if( topo->nDims >= 3 ) {
+			if( self->enabledDims[2] )
+				CartesianGenerator_GenFaces( self, topo, grids );
+		}
+	}
+
+	/* Generate topological incidence. */
+	if( self->enabledInc[self->nDims][0] )
+		CartesianGenerator_GenElementVertexInc( self, topo, grids );
+	if( topo->nDims >= 2 ) {
+		if( self->enabledInc[2][1] )
+			CartesianGenerator_GenFaceEdgeInc( self, topo, grids );
+		if( self->enabledInc[1][0] )
+			CartesianGenerator_GenEdgeVertexInc( self, topo, grids );
+		if( topo->nDims >= 3 ) {
+			if( self->enabledInc[2][0] )
+				CartesianGenerator_GenFaceVertexInc( self, topo, grids );
+			if( self->enabledInc[3][1] )
+				CartesianGenerator_GenVolumeEdgeInc( self, topo, grids );
+			if( self->enabledInc[3][2] )
+				CartesianGenerator_GenVolumeFaceInc( self, topo, grids );
+		}
+	}
+
+	/* Set the shadow depth and correct incidence. */
+	comm = MeshTopology_GetComm( topo );
+	if( self->shadowDepth && Comm_GetNumNeighbours( comm ) > 0 ) {
+		/* Build enough incidence to set shadow depth. */
+		IGraph_InvertIncidence( topo, MT_VERTEX, topo->nDims );
+		IGraph_ExpandIncidence( topo, topo->nDims );
+
+		/* Set the shadow depth. */
+		MeshTopology_SetShadowDepth( topo, self->shadowDepth );
+
+		/* Kill up relations and neighbours. */
+		IGraph_RemoveIncidence( topo, topo->nDims, topo->nDims );
+		IGraph_RemoveIncidence( topo, 0, topo->nDims );
+	}
+
+	/* Complete all required relations. */
+	for( d_i = 0; d_i < self->nDims; d_i++ ) {
+		for( d_j = d_i + 1; d_j <= self->nDims; d_j++ ) {
+			if( !self->enabledInc[d_i][d_j] )
+				continue;
+
+			IGraph_InvertIncidence( topo, d_i, d_j );
+		}
+	}
+	for( d_i = 0; d_i <= self->nDims; d_i++ ) {
+		if( self->enabledInc[d_i][d_i] ) {
+			if( d_i == 0 )
+				CartesianGenerator_CompleteVertexNeighbours( self, topo, grids );
+			else {
+				IGraph_ExpandIncidence( topo, d_i );
+			}
+		}
+	}
+
+	/* Generate any boundary elements required. */
+	CartesianGenerator_GenBndVerts( self, topo, grids );
+
+	/* Free allocated grids. */
+	grids[topo->nDims][0] = NULL;
+	for( d_i = 1; d_i < topo->nDims; d_i++ ) {
+		unsigned	d_j;
+
+		for( d_j = 0; d_j < topo->nTDims; d_j++ )
+			FreeObject( grids[d_i][d_j] );
+	}
+	FreeArray( grids );
+}
+
+void CartesianGenerator_GenEdges2D( CartesianGenerator* self, IGraph* topo, Grid*** grids ) {
+	Grid*		globalGrid;
+	unsigned	nGlobalEls;
+	Grid*		grid;
+	unsigned	nEls[2];
+	unsigned*	els;
+	unsigned*	dimInds;
+	unsigned	d_i, e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+	assert( self->elGrid->nDims == 2 );
+
+	globalGrid = Grid_New();
+	Grid_SetNumDims( globalGrid, self->elGrid->nDims );
+	self->elGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[1]--;
+
+	grid = Grid_New();
+	Grid_SetNumDims( grid, self->elGrid->nDims );
+	self->range[1]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[1]--;
+
+	nEls[0] = grid->sizes[0];
+	nGlobalEls = globalGrid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ ) {
+		nEls[0] *= grid->sizes[d_i];
+		nGlobalEls *= globalGrid->sizes[d_i];
+	}
+	els = Memory_Alloc_Array_Unnamed( unsigned, nEls[0] );
+
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+
+	for( e_i = 0; e_i < nEls[0]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[e_i] = Grid_Project( globalGrid, dimInds );
+	}
+
+	self->elGrid->sizes[0]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[0]--;
+
+	self->range[0]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[0]--;
+
+	nEls[1] = grid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ )
+		nEls[1] *= grid->sizes[d_i];
+	els = Memory_Realloc_Array( els, unsigned, nEls[0] + nEls[1] );
+
+	for( e_i = 0; e_i < nEls[1]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[nEls[0] + e_i] = nGlobalEls + Grid_Project( globalGrid, dimInds );
+	}
+
+	IGraph_SetElements( topo, MT_EDGE, nEls[0] + nEls[1], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenEdges3D( CartesianGenerator* self, IGraph* topo, Grid*** grids ) {
+	Grid*		globalGrid;
+	unsigned	nGlobalEls[2];
+	Grid*		grid;
+	unsigned	nEls[3];
+	unsigned*	els;
+	unsigned*	dimInds;
+	unsigned	d_i, e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+	assert( self->elGrid->nDims == 3 );
+
+	globalGrid = Grid_New();
+	Grid_SetNumDims( globalGrid, self->elGrid->nDims );
+	self->elGrid->sizes[1]++;
+	self->elGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[1]--;
+	self->elGrid->sizes[2]--;
+
+	grid = Grid_New();
+	Grid_SetNumDims( grid, self->elGrid->nDims );
+	self->range[1]++;
+	self->range[2]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[1]--;
+	self->range[2]--;
+
+	nEls[0] = grid->sizes[0];
+	nGlobalEls[0] = globalGrid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ ) {
+		nEls[0] *= grid->sizes[d_i];
+		nGlobalEls[0] *= globalGrid->sizes[d_i];
+	}
+	els = Memory_Alloc_Array_Unnamed( unsigned, nEls[0] );
+
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, self->elGrid->nDims );
+
+	for( e_i = 0; e_i < nEls[0]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[e_i] = Grid_Project( globalGrid, dimInds );
+	}
+
+	self->elGrid->sizes[0]++;
+	self->elGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[0]--;
+	self->elGrid->sizes[2]--;
+
+	self->range[0]++;
+	self->range[2]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[0]--;
+	self->range[2]--;
+
+	nEls[1] = grid->sizes[0];
+	nGlobalEls[1] = globalGrid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ ) {
+		nEls[1] *= grid->sizes[d_i];
+		nGlobalEls[1] *= globalGrid->sizes[d_i];
+	}
+	els = Memory_Realloc_Array( els, unsigned, nEls[0] + nEls[1] );
+
+	for( e_i = 0; e_i < nEls[1]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[nEls[0] + e_i] = nGlobalEls[0] + Grid_Project( globalGrid, dimInds );
+	}
+
+	self->elGrid->sizes[0]++;
+	self->elGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->elGrid->sizes );
+	self->elGrid->sizes[0]--;
+	self->elGrid->sizes[1]--;
+
+	self->range[0]++;
+	self->range[1]++;
+	Grid_SetSizes( grid, self->range );
+	self->range[0]--;
+	self->range[1]--;
+
+	nEls[2] = grid->sizes[0];
+	for( d_i = 1; d_i < grid->nDims; d_i++ )
+		nEls[2] *= grid->sizes[d_i];
+	els = Memory_Realloc_Array( els, unsigned, nEls[0] + nEls[1] + nEls[2] );
+
+	for( e_i = 0; e_i < nEls[2]; e_i++ ) {
+		Grid_Lift( grid, e_i, dimInds );
+		for( d_i = 0; d_i < grid->nDims; d_i++ )
+			dimInds[d_i] += self->origin[d_i];
+		els[nEls[0] + nEls[1] + e_i] = nGlobalEls[0] + nGlobalEls[1] + Grid_Project( globalGrid, dimInds );
+	}
+
+	IGraph_SetElements( topo, MT_EDGE, nEls[0] + nEls[1] + nEls[2], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenBndVerts( CartesianGenerator* self, IGraph* topo, Grid*** grids ) {
+	IArray bndElsObj, *bndEls = &bndElsObj;
+	int nDims, nVerts, nBndEls;
+	const int* ptr;
+	int global;
+	int* inds;
+	const Sync* sync;
+	int v_i, d_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	nDims = MeshTopology_GetNumDims( topo );
+	inds = Class_Array( self, int, nDims );
+	IArray_Construct( bndEls );
+	sync = IGraph_GetDomain( topo, 0 );
+	nVerts = Sync_GetNumDomains( sync );
+	for( v_i = 0; v_i < nVerts; v_i++ ) {
+		global = Sync_DomainToGlobal( sync, v_i );
+		Grid_Lift( grids[0][0], global, inds );
+		for( d_i = 0; d_i < nDims; d_i++ ) {
+			if( inds[d_i] == 0 || inds[d_i] == grids[0][0]->sizes[d_i] - 1 )
+				break;
+		}
+		if( d_i < nDims )
+			IArray_Append( bndEls, v_i );
+	}
+	Class_Free( self, inds );
+
+	IArray_GetArray( bndEls, &nBndEls, &ptr );
+	IGraph_SetBoundaryElements( topo, 0, nBndEls, ptr );
+	IArray_Destruct( bndEls );
+}
+
+void CartesianGenerator_CompleteVertexNeighbours( CartesianGenerator* self, IGraph* topo, Grid*** grids ) {
+	Stream*		stream = Journal_Register( Info_Type, self->type );
+	Sync*		sync;
+	unsigned	nDims;
+	unsigned	nVerts;
+	unsigned*	inds;
+	unsigned	*nNbrs, **nbrs;
+	unsigned	domain, global;
+	unsigned	v_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	Journal_Printf( stream, "Generating vertex neighbours...\n" );
+	Stream_Indent( stream );
+
+	nDims = topo->nDims;
+	sync = IGraph_GetDomain( topo, MT_VERTEX );
+	nVerts = Sync_GetNumDomains( sync );
+	inds = AllocArray( unsigned, nDims );
+	nNbrs = AllocArray( unsigned, nVerts );
+	nbrs = AllocArray2D( unsigned, nVerts, (nDims == 3) ? 6 : (nDims == 2) ? 4 : 2 );
+	for( v_i = 0; v_i < nVerts; v_i++ ) {
+		nNbrs[v_i] = 0;
+		global = Sync_DomainToGlobal( sync, v_i );
+		Grid_Lift( grids[0][0], global, inds );
+
+		if( inds[0] > 0 ) {
+			inds[0]--;
+			domain = Grid_Project( grids[0][0], inds );
+			if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+				nbrs[v_i][nNbrs[v_i]] = domain;
+				nNbrs[v_i]++;
+			}
+			inds[0]++;
+		}
+
+		if( inds[0] < grids[0][0]->sizes[0] - 1 ) {
+			inds[0]++;
+			domain = Grid_Project( grids[0][0], inds );
+			if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+				nbrs[v_i][nNbrs[v_i]] = domain;
+				nNbrs[v_i]++;
+			}
+			inds[0]--;
+		}
+
+		if( nDims >= 2 ) {
+			if( inds[1] > 0 ) {
+				inds[1]--;
+				domain = Grid_Project( grids[0][0], inds );
+				if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+					nbrs[v_i][nNbrs[v_i]] = domain;
+					nNbrs[v_i]++;
+				}
+				inds[1]++;
+			}
+
+			if( inds[1] < grids[0][0]->sizes[1] - 1 ) {
+				inds[1]++;
+				domain = Grid_Project( grids[0][0], inds );
+				if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+					nbrs[v_i][nNbrs[v_i]] = domain;
+					nNbrs[v_i]++;
+				}
+				inds[1]--;
+			}
+
+			if( nDims == 3 ) {
+				if( inds[2] > 0 ) {
+					inds[2]--;
+					domain = Grid_Project( grids[0][0], inds );
+					if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+						nbrs[v_i][nNbrs[v_i]] = domain;
+						nNbrs[v_i]++;
+					}
+					inds[2]++;
+				}
+
+				if( inds[2] < grids[0][0]->sizes[2] - 1 ) {
+					inds[2]++;
+					domain = Grid_Project( grids[0][0], inds );
+					if( Sync_TryGlobalToDomain( sync, domain, &domain ) ) {
+						nbrs[v_i][nNbrs[v_i]] = domain;
+						nNbrs[v_i]++;
+					}
+					inds[2]--;
+				}
+			}
+		}
+
+		IGraph_SetIncidence( topo, MT_VERTEX, v_i, MT_VERTEX, nNbrs[v_i], nbrs[v_i] );
+	}
+
+	FreeArray( nNbrs );
+	FreeArray( nbrs );
+	FreeArray( inds );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void CartesianGenerator_MapToDomain( CartesianGenerator* self, Sync* sync, 
+				     unsigned nIncEls, unsigned* incEls )
+{
+	unsigned	inc_i;
+
+	assert( self );
+	assert( sync );
+	assert( nIncEls );
+	assert( incEls );
+
+	for( inc_i = 0; inc_i < nIncEls; inc_i++ )
+		incEls[inc_i] = Sync_GlobalToDomain( sync, incEls[inc_i] );
+}
+
+void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh ) {
+	Stream*		stream = Journal_Register( Info_Type, self->type );
+	Sync*		sync;
+	Grid*		grid;
+	unsigned*	inds;
+	double*		steps;
+	unsigned	n_i, d_i;
+
+	assert( self );
+	assert( mesh );
+
+	Journal_Printf( stream, "Generating geometry...\n" );
+	Stream_Indent( stream );
+
+	/* Build grid and space for indices. */
+	grid = self->vertGrid;
+	inds = Memory_Alloc_Array_Unnamed( unsigned, mesh->topo->nDims );
+
+	/* Calculate steps. */
+	steps = Memory_Alloc_Array_Unnamed( double, mesh->topo->nDims );
+	for( d_i = 0; d_i < mesh->topo->nDims; d_i++ )
+		steps[d_i] = self->crdMax[d_i] - self->crdMin[d_i];
+
+	/* Allocate for coordinates. */
+	sync = (Sync*)IGraph_GetDomain( (IGraph*)mesh->topo, 0 );
+	mesh->verts = AllocNamedArray2D( double, Sync_GetNumDomains( sync ), 
+					 mesh->topo->nDims, 
+					 "Mesh::verts" );
+
+	/* Loop over domain nodes. */
+	for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
+		double*		vert;
+		unsigned	gNode;
+
+		gNode = Sync_DomainToGlobal( sync, n_i );
+		Grid_Lift( grid, gNode, inds );
+		vert = Mesh_GetVertex( mesh, n_i );
+
+		/* Calculate coordinate. */
+		for( d_i = 0; d_i < mesh->topo->nDims; d_i++ ) {
+			vert[d_i] = self->crdMin[d_i] + 
+				((double)inds[d_i] / (double)(grid->sizes[d_i] - 1)) * steps[d_i];
+		}
+	}
+
+	/* Free resources. */
+	FreeArray( inds );
+	FreeArray( steps );
+
+	MPI_Barrier( self->mpiComm );
+	Journal_Printf( stream, "... done.\n" );
+	Stream_UnIndent( stream );
+}
+
+void CartesianGenerator_Destruct( CartesianGenerator* self ) {
+	assert( self );
+
+	CartesianGenerator_DestructTopology( self );
+	CartesianGenerator_DestructGeometry( self );
+	KillArray( self->minDecomp );
+	KillArray( self->maxDecomp );
+	NewClass_RemoveRef( self->comm );
+}
+
+void CartesianGenerator_DestructTopology( CartesianGenerator* self ) {
+	assert( self );
+
+	self->maxDecompDims = 0;
+	memset( self->minDecomp, 0, self->nDims * sizeof(unsigned) );
+	memset( self->maxDecomp, 0, self->nDims * sizeof(unsigned) );
+	KillObject( self->vertGrid );
+	KillObject( self->elGrid );
+	KillObject( self->procGrid );
+	KillArray( self->origin );
+	KillArray( self->range );
+	KillArray( self->vertOrigin );
+	KillArray( self->vertRange );
+}
+
+void CartesianGenerator_DestructGeometry( CartesianGenerator* self ) {
+	assert( self );
+
+	FreeArray( self->crdMin );
+	FreeArray( self->crdMax );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CartesianGenerator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CartesianGenerator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,220 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: CartesianGenerator.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_CartesianGenerator_h__
+#define __Domain_Mesh_CartesianGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type CartesianGenerator_Type;
+
+	/** Virtual function types */
+	typedef void (CartesianGenerator_SetTopologyParamsFunc)( void* meshGenerator, unsigned* sizes, 
+								 unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp );
+	typedef void (CartesianGenerator_GenElementsFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenFacesFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenEdgesFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenVerticesFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenElementVertexIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenVolumeEdgeIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenVolumeFaceIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenFaceVertexIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenFaceEdgeIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenEdgeVertexIncFunc)( void* meshGenerator, IGraph* topo, Grid*** grids );
+	typedef void (CartesianGenerator_GenElementTypesFunc)( void* meshGenerator, Mesh* mesh );
+
+	/** CartesianGenerator class contents */
+	#define __CartesianGenerator								\
+		/* General info */								\
+		__MeshGenerator									\
+												\
+		/* Virtual info */								\
+		CartesianGenerator_SetTopologyParamsFunc*	setTopologyParamsFunc;		\
+		CartesianGenerator_GenElementsFunc*		genElementsFunc;		\
+		CartesianGenerator_GenFacesFunc*		genFacesFunc;			\
+		CartesianGenerator_GenEdgesFunc*		genEdgesFunc;			\
+		CartesianGenerator_GenVerticesFunc*		genVerticesFunc;		\
+		CartesianGenerator_GenElementVertexIncFunc*	genElementVertexIncFunc;	\
+		CartesianGenerator_GenVolumeEdgeIncFunc*	genVolumeEdgeIncFunc;		\
+		CartesianGenerator_GenVolumeFaceIncFunc*	genVolumeFaceIncFunc;		\
+		CartesianGenerator_GenFaceVertexIncFunc*	genFaceVertexIncFunc;		\
+		CartesianGenerator_GenFaceEdgeIncFunc*		genFaceEdgeIncFunc;		\
+		CartesianGenerator_GenEdgeVertexIncFunc*	genEdgeVertexIncFunc;		\
+		CartesianGenerator_GenElementTypesFunc*		genElementTypesFunc;		\
+												\
+		/* CartesianGenerator info */							\
+		Comm*		comm;								\
+		Bool		regular;							\
+		unsigned	maxDecompDims;							\
+		unsigned*	minDecomp;							\
+		unsigned*	maxDecomp;							\
+		unsigned	shadowDepth;							\
+		double*		crdMin;								\
+		double*		crdMax;								\
+												\
+		Grid*		vertGrid;							\
+		Grid*		elGrid;								\
+		Grid*		procGrid;							\
+		unsigned*	origin;								\
+		unsigned*	range;								\
+		unsigned*	vertOrigin;							\
+		unsigned*	vertRange;
+
+	struct CartesianGenerator { __CartesianGenerator };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define CARTESIANGENERATOR_DEFARGS							\
+		MESHGENERATOR_DEFARGS,								\
+		CartesianGenerator_SetTopologyParamsFunc*	setTopologyParamsFunc, 		\
+		CartesianGenerator_GenElementsFunc*		genElementsFunc, 		\
+		CartesianGenerator_GenFacesFunc*		genFacesFunc, 			\
+		CartesianGenerator_GenEdgesFunc*		genEdgesFunc, 			\
+		CartesianGenerator_GenVerticesFunc*		genVerticesFunc, 		\
+		CartesianGenerator_GenElementVertexIncFunc*	genElementVertexIncFunc, 	\
+		CartesianGenerator_GenVolumeEdgeIncFunc*	genVolumeEdgeIncFunc, 		\
+		CartesianGenerator_GenVolumeFaceIncFunc*	genVolumeFaceIncFunc, 		\
+		CartesianGenerator_GenFaceVertexIncFunc*	genFaceVertexIncFunc, 		\
+		CartesianGenerator_GenFaceEdgeIncFunc*		genFaceEdgeIncFunc, 		\
+		CartesianGenerator_GenEdgeVertexIncFunc*	genEdgeVertexIncFunc,		\
+		CartesianGenerator_GenElementTypesFunc*		genElementTypesFunc
+
+	#define CARTESIANGENERATOR_PASSARGS	\
+		MESHGENERATOR_PASSARGS, 	\
+		setTopologyParamsFunc, 		\
+		genElementsFunc, 		\
+		genFacesFunc, 			\
+		genEdgesFunc, 			\
+		genVerticesFunc, 		\
+		genElementVertexIncFunc, 	\
+		genVolumeEdgeIncFunc, 		\
+		genVolumeFaceIncFunc, 		\
+		genFaceVertexIncFunc, 		\
+		genFaceEdgeIncFunc, 		\
+		genEdgeVertexIncFunc,		\
+		genElementTypesFunc
+
+	CartesianGenerator* CartesianGenerator_New( Name name );
+	CartesianGenerator* _CartesianGenerator_New( CARTESIANGENERATOR_DEFARGS );
+	void _CartesianGenerator_Init( CartesianGenerator* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CartesianGenerator_Delete( void* meshGenerator );
+	void _CartesianGenerator_Print( void* meshGenerator, Stream* stream );
+	void _CartesianGenerator_Construct( void* meshGenerator, Stg_ComponentFactory* cf, void* data );
+	void _CartesianGenerator_Build( void* meshGenerator, void* data );
+	void _CartesianGenerator_Initialise( void* meshGenerator, void* data );
+	void _CartesianGenerator_Execute( void* meshGenerator, void* data );
+	void _CartesianGenerator_Destroy( void* meshGenerator, void* data );
+
+	void CartesianGenerator_SetDimSize( void* meshGenerator, unsigned nDims );
+	void CartesianGenerator_Generate( void* meshGenerator, void* mesh );
+	void _CartesianGenerator_SetTopologyParams( void* meshGenerator, unsigned* sizes, 
+						    unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp );
+	void _CartesianGenerator_GenElements( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenFaces( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenEdges( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenVertices( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenElementVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenVolumeEdgeInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenVolumeFaceInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenFaceVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenFaceEdgeInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenEdgeVertexInc( void* meshGenerator, IGraph* topo, Grid*** grids );
+	void _CartesianGenerator_GenElementTypes( void* meshGenerator, Mesh* mesh );
+
+	#define CartesianGenerator_SetTopologyParams( self, sizes, maxDecompDims, minDecomp, maxDecomp )	\
+		VirtualCall( self, setTopologyParamsFunc, self, sizes, maxDecompDims, minDecomp, maxDecomp )
+	#define CartesianGenerator_GenElements( self, topo, grids )						\
+		VirtualCall( self, genElementsFunc, self, topo, grids )
+	#define CartesianGenerator_GenFaces( self, topo, grids )						\
+		VirtualCall( self, genFacesFunc, self, topo, grids )
+	#define CartesianGenerator_GenEdges( self, topo, grids )						\
+		VirtualCall( self, genEdgesFunc, self, topo, grids )
+	#define CartesianGenerator_GenVertices( self, topo, grids )						\
+		VirtualCall( self, genVerticesFunc, self, topo, grids )
+	#define CartesianGenerator_GenElementVertexInc( self, topo, grids )					\
+		VirtualCall( self, genElementVertexIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenVolumeEdgeInc( self, topo, grids )					\
+		VirtualCall( self, genVolumeEdgeIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenVolumeFaceInc( self, topo, grids )					\
+		VirtualCall( self, genVolumeFaceIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenFaceVertexInc( self, topo, grids )					\
+		VirtualCall( self, genFaceVertexIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenFaceEdgeInc( self, topo, grids )						\
+		VirtualCall( self, genFaceEdgeIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenEdgeVertexInc( self, topo, grids )					\
+		VirtualCall( self, genEdgeVertexIncFunc, self, topo, grids )
+	#define CartesianGenerator_GenElementTypes( self, mesh )						\
+		VirtualCall( self, genElementTypesFunc, self, mesh )
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void CartesianGenerator_SetGeometryParams( void* meshGenerator, double* min, double* max );
+	void CartesianGenerator_SetShadowDepth( void* meshGenerator, unsigned depth );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void CartesianGenerator_BuildDecomp( CartesianGenerator* self );
+	void CartesianGenerator_RecurseDecomps( CartesianGenerator* self, 
+						unsigned dim, unsigned max, 
+						unsigned* nSubDomains, 
+						unsigned* nPos, unsigned*** posNSubDomains );
+	void CartesianGenerator_GenTopo( CartesianGenerator* self, IGraph* topo );
+	void CartesianGenerator_GenEdges2D( CartesianGenerator* self, IGraph* topo, Grid*** grids );
+	void CartesianGenerator_GenEdges3D( CartesianGenerator* self, IGraph* topo, Grid*** grids );
+	void CartesianGenerator_GenBndVerts( CartesianGenerator* self, IGraph* topo, Grid*** grids );
+	void CartesianGenerator_CompleteVertexNeighbours( CartesianGenerator* self, IGraph* topo, Grid*** grids );
+	void CartesianGenerator_MapToDomain( CartesianGenerator* self, Sync* sync, 
+					     unsigned nIncEls, unsigned* incEls );
+	void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh );
+	void CartesianGenerator_Destruct( CartesianGenerator* self );
+	void CartesianGenerator_DestructTopology( CartesianGenerator* self );
+	void CartesianGenerator_DestructGeometry( CartesianGenerator* self );
+
+#endif /* __Domain_Mesh_CartesianGenerator_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CartesianGenerator.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CartesianGenerator.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CartesianGenerator</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CommTopology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CommTopology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,397 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CommTopology.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type CommTopology_Type = "CommTopology";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+CommTopology* CommTopology_New() {
+	return _CommTopology_New( sizeof(CommTopology), 
+				  CommTopology_Type, 
+				  _CommTopology_Delete, 
+				  _CommTopology_Print, 
+				  NULL );
+}
+
+CommTopology* _CommTopology_New( COMMTOPOLOGY_DEFARGS ) {
+	CommTopology* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(CommTopology) );
+	self = (CommTopology*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* CommTopology info */
+	_CommTopology_Init( self );
+
+	return self;
+}
+
+void _CommTopology_Init( CommTopology* self ) {
+	self->comm = MPI_COMM_WORLD;
+	self->nIncRanks = 0;
+	self->incRanks = NULL;
+	self->glMap = UIntMap_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CommTopology_Delete( void* commTopology ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	CommTopology_Destruct( self );
+	FreeObject( self->glMap );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _CommTopology_Print( void* commTopology, Stream* stream ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+	
+	/* Set the Journal for printing informations */
+	Stream* commTopologyStream;
+	commTopologyStream = Journal_Register( InfoStream_Type, "CommTopologyStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "CommTopology (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void CommTopology_SetComm( void* commTopology, MPI_Comm comm ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+
+	CommTopology_Destruct( self );
+	self->comm = comm;
+}
+
+void CommTopology_SetIncidence( void* commTopology, unsigned nIncRanks, unsigned* incRanks ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( !nIncRanks || incRanks );
+
+	CommTopology_Destruct( self );
+	CommTopology_AddIncidence( self, nIncRanks, incRanks );
+}
+
+void CommTopology_AddIncidence( void* commTopology, unsigned nIncRanks, unsigned* incRanks ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+	unsigned	r_i;
+
+	assert( self );
+	assert( !nIncRanks || incRanks );
+	assert( CommTopology_ValidateIncidence( self, nIncRanks, incRanks ) );
+
+	if( nIncRanks ) {
+		unsigned*	order;
+
+		for( r_i = 0; r_i < nIncRanks; r_i++ )
+			UIntMap_Insert( self->glMap, incRanks[r_i], self->nIncRanks + r_i );
+
+		self->incRanks = ReallocNamedArray( self->incRanks, unsigned, self->nIncRanks + nIncRanks, 
+						    "CommTopology::incRanks" );
+		memcpy( self->incRanks + self->nIncRanks, incRanks, nIncRanks * sizeof(unsigned) );
+		self->nIncRanks += nIncRanks;
+
+		order = AllocArray( unsigned, self->nIncRanks * 2 );
+		for( r_i = 0; r_i < self->nIncRanks; r_i++ ) {
+			order[2 * r_i] = self->incRanks[r_i];
+			order[2 * r_i + 1] = r_i;
+		}
+		qsort( order, self->nIncRanks, 2 * sizeof(unsigned), CommTopology_CmpRanks );
+		self->order = ReallocNamedArray( self->order, unsigned, self->nIncRanks, "CommTopology::order" );
+		for( r_i = 0; r_i < self->nIncRanks; r_i++ )
+			self->order[r_i] = order[2 * r_i + 1];
+		FreeArray( order );
+	}
+}
+
+MPI_Comm CommTopology_GetComm( void* commTopology ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+
+	return self->comm;
+}
+
+unsigned CommTopology_GetCommSize( void* commTopology ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+	unsigned	nProcs;
+
+	assert( self );
+
+	MPI_Comm_size( self->comm, (int*)&nProcs );
+
+	return nProcs;
+}
+
+unsigned CommTopology_GetCommRank( void* commTopology ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+	unsigned	rank;
+
+	assert( self );
+
+	MPI_Comm_rank( self->comm, (int*)&rank );
+
+	return rank;
+}
+
+unsigned CommTopology_GetIncidenceSize( void* commTopology ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+
+	return self->nIncRanks;
+}
+
+void CommTopology_GetIncidence( void* commTopology, unsigned* nIncRanks, unsigned** incRanks ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( nIncRanks && incRanks );
+
+	*nIncRanks = self->nIncRanks;
+	*incRanks = self->incRanks;
+}
+
+unsigned CommTopology_LocalToGlobal( void* commTopology, unsigned local ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( local < self->nIncRanks );
+	assert( self->incRanks );
+	assert( self->order );
+
+	return self->incRanks[local];
+}
+
+Bool CommTopology_GlobalToLocal( void* commTopology, unsigned global, unsigned* local ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+
+	return UIntMap_Map( self->glMap, global, local );
+}
+
+void _CommTopology_Allgather( void* commTopology, 
+			      unsigned srcSize, void* srcArray, 
+			      unsigned** dstSizes, void*** dstArrays, 
+			      unsigned itemSize )
+{
+	CommTopology*	self = (CommTopology*)commTopology;
+	unsigned	tag = 669;
+	MPI_Status	status;
+	unsigned*	nbrSizes;
+	Stg_Byte**	nbrArrays;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !srcSize || srcArray );
+	assert( dstSizes );
+	assert( dstArrays );
+
+	/* Skip this if we have no neighbours. */
+	if( !self->nIncRanks ) {
+		*dstSizes = NULL;
+		*dstArrays = NULL;
+		return;
+	}
+
+	/* Allocate base arrays. */
+	nbrSizes = AllocArray( unsigned, self->nIncRanks );
+	nbrArrays = AllocArray( Stg_Byte*, self->nIncRanks );
+
+	/* Send/recv with each neighbour.  There won't be deadlocks because the neighbouring
+	   ranks are ordered from lowest to highest. Start with sizes. */
+	for( p_i = 0; p_i < self->nIncRanks; p_i++ ) {
+		unsigned	pos = self->order[p_i];
+		unsigned	nbr = self->incRanks[pos];
+		unsigned	tmpSize;
+
+		MPI_Sendrecv( &srcSize, 1, MPI_UNSIGNED, nbr, tag, 
+			      nbrSizes + pos, 1, MPI_UNSIGNED, nbr, tag, 
+			      self->comm, &status );
+
+		tmpSize = nbrSizes[pos] * itemSize;
+
+		/* Alloc storage. */
+		if( tmpSize )
+			nbrArrays[pos] = AllocArray( Stg_Byte, tmpSize );
+		else
+			nbrArrays[pos] = NULL;
+
+		MPI_Sendrecv( srcArray, srcSize * itemSize, MPI_BYTE, nbr, tag, 
+			      nbrArrays[pos], tmpSize, MPI_BYTE, nbr, tag, 
+			      self->comm, &status );
+	}
+
+	/* Store results. */
+	*dstSizes = nbrSizes;
+	*dstArrays = (void**)nbrArrays;
+}
+
+void _CommTopology_Alltoall( void* commTopology, 
+			     unsigned* srcSizes, void** srcArrays, 
+			     unsigned** dstSizes, void*** dstArrays, 
+			     unsigned itemSize )
+{
+	CommTopology*	self = (CommTopology*)commTopology;
+	unsigned	tag = 669;
+	MPI_Status	status;
+	unsigned*	nbrSizes;
+	Stg_Byte**	nbrArrays;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !srcSizes || srcArrays );
+	assert( dstSizes );
+	assert( dstArrays );
+
+	/* Skip this if we have no neighbours. */
+	if( !self->nIncRanks ) {
+		*dstSizes = NULL;
+		*dstArrays = NULL;
+		return;
+	}
+
+	/* Allocate base array. */
+	nbrSizes = AllocArray( unsigned, self->nIncRanks );
+	nbrArrays = AllocArray( Stg_Byte*, self->nIncRanks );
+
+	/* Send/recv with each neighbour.  There won't be deadlocks because the neighbouring
+	   ranks are ordered from lowest to highest. Start with sizes. */
+	for( p_i = 0; p_i < self->nIncRanks; p_i++ ) {
+		unsigned	pos = self->order[p_i];
+		unsigned	nbr = self->incRanks[pos];
+		unsigned	tmpSize;
+
+		MPI_Sendrecv( srcSizes + pos, 1, MPI_UNSIGNED, nbr, tag, 
+			      nbrSizes + pos, 1, MPI_UNSIGNED, nbr, tag, 
+			      self->comm, &status );
+
+		tmpSize = nbrSizes[pos] * itemSize;
+
+		/* Alloc storage. */
+		if( tmpSize )
+			nbrArrays[pos] = AllocArray( Stg_Byte, tmpSize );
+		else
+			nbrArrays[pos] = NULL;
+
+		/* Transfer between current neighbour. */
+		MPI_Sendrecv( srcArrays[pos], srcSizes[pos] * itemSize, MPI_BYTE, nbr, tag, 
+			      nbrArrays[pos], tmpSize, MPI_BYTE, nbr, tag, 
+			      self->comm, &status );
+	}
+
+	/* Store results. */
+	*dstSizes = nbrSizes;
+	*dstArrays = (void**)nbrArrays;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+int CommTopology_CmpRanks( const void* rank0, const void* rank1 ) {
+	if( *((unsigned*)rank0) < *((unsigned*)rank1) )
+		return -1;
+	else if( *((unsigned*)rank0) > *((unsigned*)rank1) )
+		return 1;
+	else
+		return 0;
+}
+
+void CommTopology_Destruct( CommTopology* self ) {
+	KillArray( self->incRanks );
+	self->nIncRanks = 0;
+	UIntMap_Clear( self->glMap );
+}
+
+#ifndef NDEBUG
+Bool CommTopology_ValidateIncidence( CommTopology* self, unsigned nIncRanks, unsigned* incRanks ) {
+	RangeSet	*exSet, *newSet;
+	unsigned	nProcs, rank;
+	unsigned	size;
+	unsigned	inc_i;
+
+	assert( self );
+	assert( !nIncRanks || incRanks );
+
+	/* Validate basics. */
+	MPI_Comm_size( self->comm, (int*)&nProcs );
+	MPI_Comm_rank( self->comm, (int*)&rank );
+	for( inc_i = 0; inc_i < nIncRanks; inc_i++ ) {
+		if( incRanks[inc_i] >= nProcs || incRanks[inc_i] == rank )
+			return False;
+	}
+
+	/* Ensure no existing overlap. */
+	exSet = RangeSet_New();
+	newSet = RangeSet_New();
+	RangeSet_SetIndices( exSet, self->nIncRanks, self->incRanks );
+	RangeSet_SetIndices( newSet, nIncRanks, incRanks );
+	RangeSet_Intersection( newSet, exSet );
+	size = RangeSet_GetSize( newSet );
+	FreeObject( newSet );
+	FreeObject( exSet );
+	if( size )
+		return False;
+
+	return True;
+}
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CommTopology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CommTopology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,141 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: CommTopology.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_CommTopology_h__
+#define __Domain_Mesh_CommTopology_h__
+
+	/** Textual name of this class */
+	extern const Type CommTopology_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __CommTopology			\
+		/* General info */		\
+		__Stg_Class			\
+						\
+		/* Virtual info */		\
+						\
+		/* CommTopology info */		\
+		MPI_Comm	comm;		\
+		unsigned	nIncRanks;	\
+		unsigned*	incRanks;	\
+		unsigned*	order;		\
+		UIntMap*	glMap;
+
+	struct CommTopology { __CommTopology };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define COMMTOPOLOGY_DEFARGS	\
+		STG_CLASS_DEFARGS
+
+	#define COMMTOPOLOGY_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	CommTopology* CommTopology_New();
+	CommTopology* _CommTopology_New( COMMTOPOLOGY_DEFARGS );
+	void _CommTopology_Init( CommTopology* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CommTopology_Delete( void* commTopology );
+	void _CommTopology_Print( void* commTopology, Stream* stream );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void CommTopology_SetComm( void* commTopology, MPI_Comm comm );
+	void CommTopology_SetIncidence( void* commTopology, unsigned nIncRanks, unsigned* incRanks );
+	void CommTopology_AddIncidence( void* commTopology, unsigned nIncRanks, unsigned* incRanks );
+
+	MPI_Comm CommTopology_GetComm( void* commTopology );
+	unsigned CommTopology_GetCommSize( void* commTopology );
+	unsigned CommTopology_GetCommRank( void* commTopology );
+	unsigned CommTopology_GetIncidenceSize( void* commTopology );
+	void CommTopology_GetIncidence( void* commTopology, unsigned* nIncRanks, unsigned** incRanks );
+
+	unsigned CommTopology_LocalToGlobal( void* commTopology, unsigned local );
+	Bool CommTopology_GlobalToLocal( void* commTopology, unsigned global, unsigned* local );
+
+	void _CommTopology_Allgather( void* commTopology, 
+				      unsigned srcSize, void* srcArray, 
+				      unsigned** dstSizes, void*** dstArrays, 
+				      unsigned itemSize );
+	void _CommTopology_Alltoall( void* commTopology, 
+				     unsigned* srcSizes, void** srcArrays, 
+				     unsigned** dstSizes, void*** dstArrays, 
+				     unsigned itemSize );
+
+	#define CommTopology_Allgather( commTopology, 			\
+					srcSize, srcArray,		\
+					dstSizes, dstArrays,		\
+					itemSize )			\
+		_CommTopology_Allgather( commTopology,			\
+					 srcSize, (void*)srcArray,	\
+					 dstSizes, (void***)dstArrays,	\
+					 itemSize )
+
+	#define CommTopology_Alltoall( commTopology, 			\
+				       srcSizes, srcArrays,		\
+				       dstSizes, dstArrays,		\
+				       itemSize )			\
+		_CommTopology_Alltoall( commTopology,			\
+					srcSizes, (void**)srcArrays,	\
+					dstSizes, (void***)dstArrays,	\
+					itemSize )
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	int CommTopology_CmpRanks( const void* rank0, const void* rank1 );
+	void CommTopology_Destruct( CommTopology* self );
+
+#ifndef NDEBUG
+	Bool CommTopology_ValidateIncidence( CommTopology* self, unsigned nIncRanks, unsigned* incRanks );
+#endif
+
+#endif /* __Domain_Mesh_CommTopology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CommTopology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CommTopology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CommTopology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CompressionAdaptor.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CompressionAdaptor.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,214 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CompressionAdaptor.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "MeshAdaptor.h"
+#include "CompressionAdaptor.h"
+
+
+typedef double (CompressionAdaptor_DeformFunc)( CompressionAdaptor* self, Mesh* mesh, 
+					    unsigned* globalSize, unsigned vertex, unsigned* vertexInds );
+
+
+/* Textual name of this class */
+const Type CompressionAdaptor_Type = "CompressionAdaptor";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+CompressionAdaptor* CompressionAdaptor_New( Name name ) {
+	return _CompressionAdaptor_New( sizeof(CompressionAdaptor), 
+				    CompressionAdaptor_Type, 
+				    _CompressionAdaptor_Delete, 
+				    _CompressionAdaptor_Print, 
+				    NULL, 
+				    (void* (*)(Name))_CompressionAdaptor_New, 
+				    _CompressionAdaptor_Construct, 
+				    _CompressionAdaptor_Build, 
+				    _CompressionAdaptor_Initialise, 
+				    _CompressionAdaptor_Execute, 
+				    _CompressionAdaptor_Destroy, 
+				    name, 
+				    NON_GLOBAL, 
+				    _MeshGenerator_SetDimSize, 
+				    CompressionAdaptor_Generate );
+}
+
+CompressionAdaptor* _CompressionAdaptor_New( COMPRESSIONADAPTOR_DEFARGS ) {
+	CompressionAdaptor* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(CompressionAdaptor) );
+	self = (CompressionAdaptor*)_MeshGenerator_New( MESHADAPTOR_PASSARGS );
+
+	/* Virtual info */
+
+	/* CompressionAdaptor info */
+	_CompressionAdaptor_Init( self );
+
+	return self;
+}
+
+void _CompressionAdaptor_Init( CompressionAdaptor* self ) {
+	self->compressionfactor  = 0.0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CompressionAdaptor_Delete( void* adaptor ) {
+	CompressionAdaptor*	self = (CompressionAdaptor*)adaptor;
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _CompressionAdaptor_Print( void* adaptor, Stream* stream ) {
+	CompressionAdaptor*	self = (CompressionAdaptor*)adaptor;
+	
+	/* Set the Journal for printing informations */
+	Stream* adaptorStream;
+	adaptorStream = Journal_Register( InfoStream_Type, "CompressionAdaptorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "CompressionAdaptor (ptr): (%p)\n", self );
+	_MeshGenerator_Print( self, stream );
+}
+
+void _CompressionAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data ) {
+	CompressionAdaptor*	self = (CompressionAdaptor*)adaptor;
+
+	assert( self );
+	assert( cf );
+
+	/* Call parent construct. */
+	_MeshAdaptor_Construct( self, cf, data );
+
+	self->compressionfactor = Stg_ComponentFactory_GetDouble( cf, self->name, "compressionfactor", 0.0 );
+	if(self->compressionfactor == 0.0){
+		printf("cannot have a zero compression factor exiting program\n");
+		abort();
+	}
+}
+
+void _CompressionAdaptor_Build( void* adaptor, void* data ) {
+	_MeshAdaptor_Build( adaptor, data );
+}
+
+void _CompressionAdaptor_Initialise( void* adaptor, void* data ) {
+	_MeshAdaptor_Initialise( adaptor, data );
+}
+
+void _CompressionAdaptor_Execute( void* adaptor, void* data ) {
+}
+
+void _CompressionAdaptor_Destroy( void* adaptor, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void CompressionAdaptor_Generate( void* adaptor, void* _mesh ) {
+	CompressionAdaptor*		self = (CompressionAdaptor*)adaptor;
+	Mesh*				mesh = (Mesh*)_mesh;
+	const Sync*			sync;
+	Grid				*grid;
+	unsigned*			inds;
+	double				min,max[3],min2[3];
+	unsigned			gNode;
+	double				x,b;
+	unsigned			d_i, n_i;
+
+	/* Build base mesh, which is assumed to be cartesian. */
+	MeshGenerator_Generate( self->generator, mesh );
+
+	/* If we're not 2D or 3D, forget about it. */
+	if( mesh->topo->nDims != 2 && mesh->topo->nDims != 3 )
+		return;
+
+	/* Extract the cartesian information. */
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+	inds = AllocArray( unsigned, Mesh_GetDimSize( mesh ) );
+        
+	//get factor b so that there is always a 1 to 1 relationship with the top position normally and top position when compressed
+	Mesh_GetGlobalCoordRange( mesh, min2, max);
+	b = (max[1] - min2[1])/(pow((max[1] - min2[1]), (1.0/self->compressionfactor)));
+	for( d_i = 0; d_i < Mesh_GetDimSize( mesh ); d_i++ )
+		inds[d_i] = 0;
+	gNode = Grid_Project( grid, inds );
+	insist( Mesh_GlobalToDomain( mesh, MT_VERTEX, gNode, &gNode ), == True );
+	min = mesh->verts[gNode][1];
+
+	/* Loop over domain nodes. */
+	sync = IGraph_GetDomain( mesh->topo, MT_VERTEX );
+	for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
+		gNode = Sync_DomainToGlobal( sync, n_i );
+		Grid_Lift( grid, gNode, inds );
+
+		/* Deform this node. */
+		x = mesh->verts[n_i][1] - min;
+		//a compressionfactor function, eg if compression factor = 3 then would be a cubed root function
+		mesh->verts[n_i][1] = b*(pow(x, (1.0/self->compressionfactor)));
+	}
+
+	/* Free resources. */
+	FreeArray( inds );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CompressionAdaptor.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CompressionAdaptor.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,95 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: CompressionAdaptor.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_CompressionAdaptor_h__
+#define __Domain_Mesh_CompressionAdaptor_h__
+
+	/** Textual name of this class */
+	extern const Type CompressionAdaptor_Type;
+
+	/** Virtual function types */
+	#define __CompressionAdaptor			\
+		/* General info */			\
+		__MeshAdaptor				\
+							\
+		/* Virtual info */			\
+							\
+		/* CompressionAdaptor info */		\
+		double			compressionfactor;
+
+	struct CompressionAdaptor { __CompressionAdaptor };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define COMPRESSIONADAPTOR_DEFARGS \
+		MESHADAPTOR_DEFARGS
+
+	#define COMPRESSIONADAPTOR_PASSARGS \
+		MESHADAPTOR_PASSARGS
+
+	CompressionAdaptor* CompressionAdaptor_New( Name name );
+	CompressionAdaptor* _CompressionAdaptor_New( COMPRESSIONADAPTOR_DEFARGS );
+	void _CompressionAdaptor_Init( CompressionAdaptor* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CompressionAdaptor_Delete( void* adaptor );
+	void _CompressionAdaptor_Print( void* adaptor, Stream* stream );
+	void _CompressionAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data );
+	void _CompressionAdaptor_Build( void* adaptor, void* data );
+	void _CompressionAdaptor_Initialise( void* adaptor, void* data );
+	void _CompressionAdaptor_Execute( void* adaptor, void* data );
+	void _CompressionAdaptor_Destroy( void* adaptor, void* data );
+
+	void CompressionAdaptor_Generate( void* adaptor, void* _mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_CompressionAdaptor_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/CompressionAdaptor.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/CompressionAdaptor.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CompressionAdaptor</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,402 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomp.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "types.h"
+#include "Decomp.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void Decomp_Update( Decomp* self );
+void Decomp_UpdateOwnerMap( Decomp* self );
+
+
+int stgCmpIntNE( const void* l, const void* r ) {
+   assert( *(int*)l != *(int*)r );
+   return (*(int*)l < *(int*)r) ? -1 : 1;
+}
+
+
+void _Decomp_Init( void* _self ) {
+   Decomp* self = (Decomp*)_self;
+
+   _NewClass_Init( self );
+   self->mpiComm = MPI_COMM_WORLD;
+   self->nGlobals = 0;
+   self->locals = &self->localsObj;
+   IArray_Construct( self->locals );
+   self->inv = &self->invObj;
+   IMap_Construct( self->inv );
+   self->rngBegin = 0;
+   self->rngEnd = 0;
+   self->owners = &self->ownersObj;
+   IMap_Construct( self->owners );
+}
+
+void _Decomp_Destruct( void* _self ) {
+   Decomp* self = (Decomp*)_self;
+
+   Decomp_Clear( self );
+   IArray_Destruct( self->locals );
+   IMap_Destruct( self->inv );
+   IMap_Destruct( self->owners );
+   _NewClass_Destruct( self );
+}
+
+void _Decomp_Copy( void* _self, const void* _op ) {
+   Decomp* self = (Decomp*)_self;
+   const Decomp* op = (const Decomp*)_op;
+
+   assert( self && op );
+   self->mpiComm = op->mpiComm;
+   self->nGlobals = op->nGlobals;
+   IArray_Copy( self->locals, op->locals );
+   IMap_Copy( self->inv, op->inv );
+}
+
+SizeT _Decomp_CalcMem( const void* _self, PtrMap* ptrs ) {
+   const Decomp* self = (const Decomp*)_self;
+   SizeT mem;
+
+   if( PtrMap_Find( ptrs, (void*)self ) )
+      return 0;
+   mem = _NewClass_CalcMem( self, ptrs );
+   mem += NewClass_CalcMem( self->locals, ptrs );
+   mem += NewClass_CalcMem( self->inv, ptrs );
+   return mem;
+}
+
+void Decomp_SetMPIComm( void* _self, MPI_Comm mpiComm ) {
+   Decomp* self = (Decomp*)_self;
+
+   assert( self );
+   self->mpiComm = mpiComm;
+}
+
+void Decomp_SetLocals( void* _self, int nLocals, const int* locals ) {
+   Decomp* self = (Decomp*)_self;
+   int l_i;
+
+   assert( self && (!nLocals || locals) );
+   IArray_Set( self->locals, nLocals, locals );
+   Decomp_Update( self );
+   IMap_Clear( self->inv );
+   IMap_SetMaxSize( self->inv, nLocals );
+   for( l_i = 0; l_i < nLocals; l_i++ )
+      IMap_Insert( self->inv, locals[l_i], l_i );
+}
+
+void Decomp_AddLocals( void* _self, int nLocals, const int* locals ) {
+   Decomp* self = (Decomp*)_self;
+   int l_i;
+
+   assert( self && (!nLocals || locals) );
+   IMap_SetMaxSize( self->inv, IArray_GetSize( self->locals ) + nLocals );
+   IArray_Add( self->locals, nLocals, locals );
+   Decomp_Update( self );
+   for( l_i = 0; l_i < nLocals; l_i++ )
+      IMap_Insert( self->inv, locals[l_i], l_i );
+}
+
+void Decomp_RemoveLocals( void* _self, int nLocals, const int* locals, IMap* map ) {
+   Decomp* self = (Decomp*)_self;
+   int oldSize;
+   int l_i;
+
+   assert( self && (!nLocals || locals) );
+   oldSize = IArray_GetSize( self->locals );
+   IArray_Remove( self->locals, nLocals, locals, map );
+   Decomp_Update( self );
+   for( l_i = 0; l_i < nLocals; l_i++ )
+      IMap_Remove( self->inv, locals[l_i] );
+   IMap_SetMaxSize( self->inv, oldSize - nLocals );
+}
+
+void Decomp_Clear( void* _self ) {
+   Decomp* self = (Decomp*)_self;
+
+   Decomp_ClearLocals( self );
+   self->mpiComm = MPI_COMM_WORLD;
+   self->nGlobals = 0;
+}
+
+void Decomp_ClearLocals( void* _self ) {
+   Decomp* self = (Decomp*)_self;
+
+   assert( self );
+   IArray_Clear( self->locals );
+   IMap_Clear( self->inv );
+   self->rngBegin = 0;
+   self->rngEnd = 0;
+   IMap_Clear( self->owners );
+}
+
+MPI_Comm Decomp_GetComm( const void* self ) {
+   assert( self );
+   return ((Decomp*)self)->mpiComm;
+}
+
+MPI_Comm Decomp_GetMPIComm( const void* self ) {
+   assert( Class_IsSuper( self, Decomp ) );
+   return ((Decomp*)self)->mpiComm;
+}
+
+int Decomp_GetNumGlobals( const void* self ) {
+   assert( self );
+   return ((Decomp*)self)->nGlobals;
+}
+
+int Decomp_GetNumLocals( const void* self ) {
+   assert( self );
+   return IArray_GetSize( ((Decomp*)self)->locals );
+}
+
+void Decomp_GetLocals( const void* self, int* nLocals, const int** locals ) {
+   assert( self );
+   *nLocals = IArray_GetSize( ((Decomp*)self)->locals );
+   *locals = IArray_GetPtr( ((Decomp*)self)->locals );
+}
+
+int Decomp_LocalToGlobal( const void* self, int local ) {
+   assert( self && local < IArray_GetSize( ((Decomp*)self)->locals ) );
+   return IArray_GetPtr( ((Decomp*)self)->locals )[local];
+}
+
+int Decomp_GlobalToLocal( const void* self, int global ) {
+   assert( self && global < ((Decomp*)self)->nGlobals );
+   return IMap_Map( ((Decomp*)self)->inv, global );
+}
+
+Bool Decomp_TryGlobalToLocal( const void* self, int global, int* local ) {
+   assert( self && global < ((Decomp*)self)->nGlobals );
+   return IMap_TryMap( ((Decomp*)self)->inv, global, local );
+}
+
+void Decomp_FindOwners( const void* _self, int nGlobals, const int* globals, 
+		       int* ranks )
+{
+   const Decomp* self = Class_Cast( _self, Decomp );
+   IMap ordMapObj, *ordMap = &ordMapObj;
+   int rangeSize;
+   int *ord;
+   int **ptrs, *sizes;
+   int begin, end, len, pos, ind;
+   int *recvSizes, **recvArrays;
+   int *remSizes, **remRanks;
+   int nRanks, rank;
+   int g_i, r_i, i_i;
+
+   assert( !nGlobals || globals );
+   assert( !nGlobals || ranks );
+
+   insist( MPI_Comm_size( self->mpiComm, &nRanks ), == MPI_SUCCESS );
+   insist( MPI_Comm_rank( self->mpiComm, &rank ), == MPI_SUCCESS );
+
+   IMap_Construct( ordMap );
+   IMap_SetMaxSize( ordMap, nGlobals );
+   for( g_i = 0; g_i < nGlobals; g_i++ )
+      IMap_Insert( ordMap, globals[g_i], g_i );
+   ord = Class_Array( self, int, nGlobals );
+   memcpy( ord, globals, nGlobals * sizeof(int) );
+   qsort( ord, nGlobals, sizeof(int), stgCmpIntNE );
+
+   ptrs = Class_Array( self, int*, nRanks );
+   sizes = Class_Array( self, int, nRanks );
+
+   rangeSize = self->nGlobals / nRanks;
+   if( rank < self->nGlobals % nRanks )
+      rangeSize++;
+
+   pos = 0;
+   begin = end = 0;
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      end += self->nGlobals / nRanks;
+      if( r_i < self->nGlobals % nRanks )
+	 end++;
+
+      if( pos < nGlobals && ord[pos] >= begin && ord[pos] < end ) {
+	 len = 0;
+	 while( pos + len < nGlobals && ord[pos + len] < end ) {
+	    if( r_i == rank ) {
+	       ind = IMap_Map( ordMap, ord[pos + len] );
+	       ranks[ind] = IMap_Map( self->owners, ord[pos + len] );
+	    }
+	    len++;
+	 }
+	 if( r_i != rank ) {
+	    ptrs[r_i] = ord + pos;
+	    sizes[r_i] = len;
+	 }
+	 else {
+	    ptrs[r_i] = NULL;
+	    sizes[r_i] = 0;
+	 }
+	 pos += len;
+      }
+      else {
+	 ptrs[r_i] = NULL;
+	 sizes[r_i] = 0;
+      }
+
+      begin = end;
+   }
+
+   MPIArray_Alltoall( (unsigned*)sizes, (void**)ptrs, 
+		      (unsigned**)&recvSizes, (void***)&recvArrays, 
+		      sizeof(int), self->mpiComm );
+
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      for( i_i = 0; i_i < recvSizes[r_i]; i_i++ )
+	 recvArrays[r_i][i_i] = IMap_Map( self->owners, recvArrays[r_i][i_i] );
+   }
+
+   MPIArray_Alltoall( (unsigned*)recvSizes, (void**)recvArrays, 
+		      (unsigned**)&remSizes, (void***)&remRanks, 
+		      sizeof(int), self->mpiComm );
+   MemFree( recvSizes );
+   for( r_i = 0; r_i < nRanks; r_i++ )
+      MemFree( recvArrays[r_i] );
+   MemFree( recvArrays );
+
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      for( i_i = 0; i_i < remSizes[r_i]; i_i++ ) {
+	 ind = IMap_Map( ordMap, ptrs[r_i][i_i] );
+	 ranks[ind] = remRanks[r_i][i_i];
+      }
+      MemFree( remRanks[r_i] );
+   }
+   IMap_Destruct( ordMap );
+   MemFree( remRanks );
+   MemFree( remSizes );
+   Class_Free( self, sizes );
+   Class_Free( self, ptrs );
+   Class_Free( self, ord );
+}
+
+void Decomp_Update( Decomp* self ) {
+   int nLocals;
+
+   assert( self );
+   if( self->mpiComm ) {
+      nLocals = IArray_GetSize( self->locals );
+      insist( MPI_Allreduce( &nLocals, &self->nGlobals, 1, MPI_INT, MPI_SUM, 
+			     self->mpiComm ), == MPI_SUCCESS );
+   }
+   else
+      self->nGlobals = 0;
+
+   Decomp_UpdateOwnerMap( self );
+}
+
+void Decomp_UpdateOwnerMap( Decomp* self ) {
+   int rangeSize;
+   int nLocals;
+   const int *locals;
+   int *ord;
+   int **ptrs, *sizes;
+   int begin, end, len, pos;
+   int *recvSizes, **recvArrays;
+   int nRanks, rank;
+   int r_i, i_i;
+
+   assert( Class_IsSuper( self, Decomp ) );
+
+   insist( MPI_Comm_size( self->mpiComm, &nRanks ), == MPI_SUCCESS );
+   insist( MPI_Comm_rank( self->mpiComm, &rank ), == MPI_SUCCESS );
+
+   IArray_GetArray( self->locals, &nLocals, &locals );
+   ord = Class_Array( self, int, nLocals );
+   memcpy( ord, locals, nLocals * sizeof(int) );
+   qsort( ord, nLocals, sizeof(int), stgCmpIntNE );
+
+   ptrs = Class_Array( self, int*, nRanks );
+   sizes = Class_Array( self, int, nRanks );
+
+   rangeSize = self->nGlobals / nRanks;
+   if( rank < self->nGlobals % nRanks )
+      rangeSize++;
+   IMap_Clear( self->owners );
+   IMap_SetMaxSize( self->owners, rangeSize );
+
+   pos = 0;
+   begin = end = 0;
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      end += self->nGlobals / nRanks;
+      if( r_i < self->nGlobals % nRanks )
+	 end++;
+      if( r_i == rank ) {
+	 self->rngBegin = begin;
+	 self->rngEnd = end;
+      }
+
+      if( pos < nLocals && ord[pos] >= begin && ord[pos] < end ) {
+	 len = 0;
+	 while( pos + len < nLocals && ord[pos + len] < end ) {
+	    if( r_i == rank )
+	       IMap_Insert( self->owners, ord[pos + len], r_i );
+	    len++;
+	 }
+	 if( r_i != rank ) {
+	    ptrs[r_i] = ord + pos;
+	    sizes[r_i] = len;
+	 }
+	 else {
+	    ptrs[r_i] = NULL;
+	    sizes[r_i] = 0;
+	 }
+	 pos += len;
+      }
+      else {
+	 ptrs[r_i] = NULL;
+	 sizes[r_i] = 0;
+      }
+
+      begin = end;
+   }
+
+   MPIArray_Alltoall( (unsigned*)sizes, (void**)ptrs, 
+		      (unsigned**)&recvSizes, (void***)&recvArrays, 
+		      sizeof(int), self->mpiComm );
+   Class_Free( self, sizes );
+   Class_Free( self, ptrs );
+   Class_Free( self, ord );
+
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      for( i_i = 0; i_i < recvSizes[r_i]; i_i++ )
+	 IMap_Insert( self->owners, recvArrays[r_i][i_i], r_i );
+      MemFree( recvArrays[r_i] );
+   }
+   MemFree( recvSizes );
+   MemFree( recvArrays );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,51 @@
+#include INHERIT( StGermain/Base/Foundation/NewClass )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+#define PARENTDIR StGermain/Base/Foundation
+#define PARENT NewClass
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME Decomp
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+VOIDOVERRIDE( Init, void, (void* self), (self) )
+VOIDOVERRIDE( Destruct, void, (void* self), (self) )
+VOIDOVERRIDE( Copy, void, (void* self, const void* op), (self, op) )
+OVERRIDE( CalcMem, SizeT, (const void* self, PtrMap* ptrs), (self, ptrs) )
+
+METHOD( SetMPIComm, void, (void* self, MPI_Comm mpiComm), 
+	(self, mpiComm) )
+METHOD( SetLocals, void, (void* self, int nLocals, const int* locals), 
+	(self, nLocals, locals) )
+METHOD( AddLocals, void, (void* self, int nLocals, const int* locals), 
+	(self, nLocals, locals) )
+METHOD( RemoveLocals, void, (void* self, int nLocals, const int* locals, IMap* map), 
+	(self, nLocals, locals, map) )
+METHOD( Clear, void, (void* self), (self) )
+METHOD( ClearLocals, void, (void* self), (self) )
+
+METHOD( GetMPIComm, MPI_Comm, (const void* self), (self) )
+METHOD( GetNumGlobals, int, (const void* self), (self) )
+METHOD( GetNumLocals, int, (const void* self), (self) )
+METHOD( GetLocals, void, (const void* self, int* nLocals, const int** locals), 
+	(self, nLocals, locals) )
+
+METHOD( LocalToGlobal, int, (const void* self, int local), (self, local) )
+METHOD( GlobalToLocal, int, (const void* self, int global), (self, global) )
+METHOD( TryGlobalToLocal, Bool, (const void* self, int global, int* local), 
+	(self, global, local) )
+
+METHOD( FindOwners, void, 
+	(const void* self, int nGlobals, const int* globals, 
+	 int* ranks), 
+	(self, nGlobals, globals, ranks) )
+
+MEMBER( MPI_Comm, mpiComm )
+MEMBER( int, nGlobals )
+MEMBER( IArray*, locals )
+MEMBER( IArray, localsObj )
+MEMBER( IMap*, inv )
+MEMBER( IMap, invObj )
+MEMBER( int, rngBegin )
+MEMBER( int, rngEnd )
+MEMBER( IMap*, owners )
+MEMBER( IMap, ownersObj )
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: Decomp.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Mesh_Decomp_h__
+#define __StGermain_Domain_Mesh_Decomp_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME Decomp
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Mesh_Decomp_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Decomp</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DecompTransfer.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DecompTransfer.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,671 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: DecompTransfer.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "DecompTransfer.h"
+
+
+/* Textual name of this class */
+const Type DecompTransfer_Type = "DecompTransfer";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+DecompTransfer* DecompTransfer_New( Name name ) {
+	return _DecompTransfer_New( sizeof(DecompTransfer), 
+				    DecompTransfer_Type, 
+				    _DecompTransfer_Delete, 
+				    _DecompTransfer_Print, 
+				    NULL, 
+				    (void* (*)(Name))_DecompTransfer_New, 
+				    _DecompTransfer_Construct, 
+				    _DecompTransfer_Build, 
+				    _DecompTransfer_Initialise, 
+				    _DecompTransfer_Execute, 
+				    _DecompTransfer_Destroy, 
+				    name, 
+				    NON_GLOBAL );
+}
+
+DecompTransfer* _DecompTransfer_New( DECOMPTRANSFER_DEFARGS ) {
+	DecompTransfer* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(DecompTransfer) );
+	self = (DecompTransfer*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* DecompTransfer info */
+	_DecompTransfer_Init( self );
+
+	return self;
+}
+
+void _DecompTransfer_Init( DecompTransfer* self ) {
+	self->decomps[0] = NULL;
+	self->decomps[1] = NULL;
+	self->nIncIndices = 0;
+	self->incIndices[0] = NULL;
+	self->incIndices[1] = NULL;
+	self->commTopo = NULL;
+
+	self->netSrcs = 0;
+	self->nSrcs = NULL;
+	self->srcs = NULL;
+	self->netSnks = 0;
+	self->nSnks = NULL;
+	self->snks = NULL;
+
+	self->nArrays = 0;
+	self->arrays = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _DecompTransfer_Delete( void* decompTransfer ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+
+	DecompTransfer_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _DecompTransfer_Print( void* decompTransfer, Stream* stream ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+	
+	/* Set the Journal for printing informations */
+	Stream* decompTransferStream;
+	decompTransferStream = Journal_Register( InfoStream_Type, "DecompTransferStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "DecompTransfer (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void _DecompTransfer_Construct( void* decompTransfer, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _DecompTransfer_Build( void* decompTransfer, void* data ) {
+}
+
+void _DecompTransfer_Initialise( void* decompTransfer, void* data ) {
+}
+
+void _DecompTransfer_Execute( void* decompTransfer, void* data ) {
+}
+
+void _DecompTransfer_Destroy( void* decompTransfer, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void DecompTransfer_SetDecomps( void* decompTransfer, Decomp* fromDecomp, Decomp* toDecomp, UIntMap* mapping ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+
+	assert( self );
+
+	DecompTransfer_Destruct( self );
+
+	self->decomps[0] = fromDecomp;
+	self->decomps[1] = toDecomp;
+	UIntMap_GetItems( mapping, &self->nIncIndices, &self->incIndices[0], &self->incIndices[1] );
+
+	DecompTransfer_BuildTables( self );
+}
+
+DecompTransfer_Array* DecompTransfer_AddArray( void* decompTransfer, void* localArray, void* remoteArray, 
+					       size_t localStride, size_t remoteStride, size_t itemSize )
+{
+	DecompTransfer*		self = (DecompTransfer*)decompTransfer;
+	DecompTransfer_Array*	array;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->decomps[0] );
+	assert( self->decomps[1] );
+	assert( !self->decomps[0]->nLocals || localArray );
+	assert( !self->decomps[1]->nLocals || remoteArray );
+	assert( itemSize );
+
+	/* Resize the array array (?). */
+	if( self->nArrays ) {
+		self->arrays = Memory_Realloc_Array( self->arrays, DecompTransfer_Array*, ++self->nArrays );
+	}
+	else {
+		self->arrays = Memory_Alloc_Array( DecompTransfer_Array*, ++self->nArrays, "DecompTransfer::Arrays" );
+	}
+	self->arrays[self->nArrays - 1] = Memory_Alloc_Array_Unnamed( DecompTransfer_Array, 1 );
+	array = self->arrays[self->nArrays - 1];
+
+	/* Store information. */
+	array->snkArray = localArray;
+	array->snkStride = localStride;
+	array->srcArray = remoteArray;
+	array->srcStride = remoteStride;
+	array->itemSize = itemSize;
+
+	/* Build this array. */
+	DecompTransfer_BuildArray( self, array );
+
+	return array;
+}
+
+void DecompTransfer_RemoveArray( void* decompTransfer, DecompTransfer_Array* array ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+	unsigned	a_i;
+
+	assert( self );
+
+	a_i = 0;
+	while( self->arrays[a_i++] != array && a_i < self->nArrays );
+	assert( a_i <= self->nArrays );
+	for( ; a_i < self->nArrays; a_i++ )
+		self->arrays[a_i - 1] = self->arrays[a_i];
+
+	if( --self->nArrays == 0 ) {
+		KillArray( self->arrays );
+	}
+	else
+		self->arrays = Memory_Realloc_Array( self->arrays, DecompTransfer_Array*, self->nArrays );
+
+	DecompTransfer_DestructArray( array );
+}
+
+void DecompTransfer_Transfer( void* decompTransfer ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+	unsigned	a_i;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( !self->nArrays || self->arrays );
+
+	for( a_i = 0; a_i < self->nArrays; a_i++ )
+		DecompTransfer_TransferArray( self, self->arrays[a_i] );
+}
+
+void DecompTransfer_TransferArray( void* decompTransfer, DecompTransfer_Array* array ) {
+	DecompTransfer*	self = (DecompTransfer*)decompTransfer;
+	CommTopology*	commTopo;
+	MPI_Comm	comm;
+	unsigned	nInc;
+	unsigned*	inc;
+	Stg_Byte*	snkArray;
+	Stg_Byte*	srcArray;
+	unsigned	p_i, ind_i;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->commTopo );
+	assert( array );
+
+	/* Shortcuts. */
+	commTopo = self->commTopo;
+	comm = CommTopology_GetComm( commTopo );
+
+	/* Pack from locals to a contiguous array. */
+	if( self->netSnks > 0 ) {
+		unsigned	snk_i;
+
+		snkArray = Memory_Alloc_Array_Unnamed( Stg_Byte, self->netSnks * array->itemSize );
+		for( snk_i = 0; snk_i < self->netSnks; snk_i++ ) {
+			memcpy( snkArray + snk_i * array->itemSize, 
+				(Stg_Byte*)array->snkArray + array->snkOffs[snk_i], 
+				array->itemSize );
+		}
+	}
+	else
+		snkArray = NULL;
+
+	/* Allocate for sources. */
+	if( self->netSrcs > 0 )
+		srcArray = Memory_Alloc_Array_Unnamed( Stg_Byte, self->netSrcs * array->itemSize );
+	else
+		srcArray = NULL;
+
+	/* Get incidence. */
+	CommTopology_GetIncidence( commTopo, &nInc, &inc );
+
+	/* Transfer. */
+	for( p_i = 0; p_i < nInc; p_i++ ) {
+		int		snkSize = array->snkSizes[p_i];
+		int		snkDisp = array->snkDisps[p_i];
+		int		srcSize = array->srcSizes[p_i];
+		int		srcDisp = array->srcDisps[p_i];
+		MPI_Status	status;
+		unsigned	tag = 6669;
+
+		MPI_Sendrecv( snkArray + snkDisp, snkSize, MPI_BYTE, inc[p_i], tag, 
+			      srcArray + srcDisp, srcSize, MPI_BYTE, inc[p_i], tag, 
+			      comm, &status );
+	}
+
+	/* Free the sink array. */
+	FreeArray( snkArray );
+
+	/* Unpack sources. */
+	if( self->netSnks > 0 ) {
+		unsigned	src_i;
+
+		for( src_i = 0; src_i < self->netSrcs; src_i++ ) {
+			memcpy( (Stg_Byte*)array->srcArray + array->srcOffs[src_i], 
+				srcArray + src_i * array->itemSize, 
+				array->itemSize );
+		}
+	}
+
+	/* Free source array. */
+	FreeArray( srcArray );
+
+	/*
+	** Copy local information.
+	*/
+
+	for( ind_i = 0; ind_i < self->nLocalInds; ind_i++ ) {
+		memcpy( (Stg_Byte*)array->srcArray + self->dstLocalInds[ind_i] * array->srcStride, 
+			(Stg_Byte*)array->snkArray + self->srcLocalInds[ind_i] * array->snkStride, 
+			array->itemSize );
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void DecompTransfer_BuildTables( DecompTransfer* self ) {
+	MPI_Comm	comm;
+	unsigned	nProcs, rank;
+	UIntMap*	invMap;
+	RangeSet*	lSet;
+	unsigned	nRemoteInds;
+	unsigned*	srcRemoteInds;
+	unsigned*	dstRemoteInds;
+	RangeSet*	rSet;
+	unsigned	nSrcBytes;
+	Stg_Byte*	srcBytes;
+	unsigned*	nDstBytes;
+	Stg_Byte**	dstBytes;
+	RangeSet**	fndSets;
+	unsigned*	nFndBytes;
+	Stg_Byte**	fndBytes;
+	RangeSet**	retSets;
+	unsigned*	nRetBytes;
+	Stg_Byte**	retBytes;
+	unsigned	nIncProcs;
+	unsigned*	incProcs;
+	unsigned	ind_i, p_i;
+
+	assert( self );
+
+	/*
+	** Shortcuts.
+	*/
+
+	comm = Decomp_GetComm( self->decomps[0] );
+	MPI_Comm_size( comm, (int*)&nProcs );
+	MPI_Comm_rank( comm, (int*)&rank );
+
+	/*
+	** Build an inverse inter-decomp mapping.
+	*/
+
+	invMap = UIntMap_New();
+	for( ind_i = 0; ind_i < self->nIncIndices; ind_i++ )
+		UIntMap_Insert( invMap, self->incIndices[1][ind_i], self->incIndices[0][ind_i] );
+
+	/*
+	** Separate the inter-mesh incidence into local and remote sets.
+	*/
+
+	self->nLocalInds = 0;
+	nRemoteInds = 0;
+	self->srcLocalInds = Memory_Alloc_Array( unsigned, self->nIncIndices, "DecompTransfer::srcLocalInds" );
+	self->dstLocalInds = Memory_Alloc_Array( unsigned, self->nIncIndices, "DecompTransfer::dstLocalInds" );
+	srcRemoteInds = Memory_Alloc_Array_Unnamed( unsigned, self->nIncIndices );
+	dstRemoteInds = Memory_Alloc_Array_Unnamed( unsigned, self->nIncIndices );
+	for( ind_i = 0; ind_i < self->nIncIndices; ind_i++ ) {
+		unsigned	mappedInd;
+
+		if( Decomp_GlobalToLocal( self->decomps[1], self->incIndices[1][ind_i], &mappedInd ) ) {
+			self->srcLocalInds[self->nLocalInds] = self->incIndices[0][ind_i];
+			self->dstLocalInds[self->nLocalInds++] = mappedInd;
+		}
+		else {
+			srcRemoteInds[nRemoteInds] = self->incIndices[0][ind_i];
+			dstRemoteInds[nRemoteInds++] = self->incIndices[1][ind_i];
+		}
+	}
+	self->srcLocalInds = Memory_Realloc_Array( self->srcLocalInds, unsigned, self->nLocalInds );
+	self->dstLocalInds = Memory_Realloc_Array( self->dstLocalInds, unsigned, self->nLocalInds );
+	srcRemoteInds = Memory_Realloc_Array( srcRemoteInds, unsigned, nRemoteInds );
+	dstRemoteInds = Memory_Realloc_Array( dstRemoteInds, unsigned, nRemoteInds );
+
+	/*
+	** Package up the remote indices and send them off to our neighbours.
+	*/
+
+	rSet = RangeSet_New();
+	RangeSet_SetIndices( rSet, nRemoteInds, dstRemoteInds );
+	FreeArray( dstRemoteInds );
+	RangeSet_Pickle( rSet, &nSrcBytes, &srcBytes );
+	MPIArray_Allgather( nSrcBytes, srcBytes, &nDstBytes, (void***)&dstBytes, sizeof(unsigned), comm );
+	FreeArray( srcBytes );
+
+	/*
+	** Determine which of the other processors' remote indices we need.
+	*/
+
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, self->decomps[1]->nLocals, self->decomps[1]->locals );
+	fndSets = Memory_Alloc_Array_Unnamed( RangeSet*, nProcs );
+	nFndBytes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	fndBytes = Memory_Alloc_Array_Unnamed( Stg_Byte*, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		if( p_i == rank || !nDstBytes[p_i] ) {
+			fndSets[p_i] = NULL;
+			nFndBytes[p_i] = 0;
+			fndBytes[p_i] = NULL;
+			continue;
+		}
+
+		fndSets[p_i] = RangeSet_New();
+		RangeSet_Unpickle( rSet, nDstBytes[p_i], dstBytes[p_i] );
+		RangeSet_Union( rSet, lSet );
+
+		if( !fndSets[p_i]->nInds ) {
+			KillObject( fndSets[p_i] );
+			nFndBytes[p_i] = 0;
+			fndBytes[p_i] = NULL;
+			continue;
+		}
+
+		RangeSet_Pickle( rSet, nFndBytes + p_i, fndBytes + p_i );
+	}
+	FreeArray( dstBytes );
+	FreeArray( nDstBytes );
+	FreeObject( lSet );
+	FreeObject( rSet );
+
+	/*
+	** Send our findings back to the appropriate processors.
+	*/
+
+	retSets = Memory_Alloc_Array_Unnamed( RangeSet*, nProcs );
+	MPIArray_Alltoall( nFndBytes, (void**)fndBytes, &nRetBytes, (void***)&retBytes, sizeof(unsigned), comm );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		if( p_i == rank || !nRetBytes[p_i] ) {
+			retSets[p_i] = NULL;
+			continue;
+		}
+
+		retSets[p_i] = RangeSet_New();
+		RangeSet_Unpickle( retSets[p_i], nRetBytes[p_i], retBytes[p_i] );
+		FreeArray( fndBytes[p_i] );
+	}
+	FreeArray( nFndBytes );
+	FreeArray( fndBytes );
+	FreeArray( nRetBytes );
+	FreeArray( retBytes );
+
+	/*
+	** Build our communication topology.
+	*/
+
+	nIncProcs = 0;
+	incProcs = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		if( fndSets[p_i] || retSets[p_i] )
+			incProcs[nIncProcs++] = p_i;
+	}
+	self->commTopo = CommTopology_New( "" );
+	CommTopology_SetComm( self->commTopo, comm );
+	CommTopology_SetIncidence( self->commTopo, nIncProcs, incProcs );
+	FreeArray( incProcs );
+
+	/*
+	** Dump range sets into source and sink arrays.
+	*/
+
+	if( self->commTopo->nIncRanks ) {
+		self->nSnks = Memory_Alloc_Array( unsigned, self->commTopo->nIncRanks, "DecompTransfer::nSnks" );
+		self->nSrcs = Memory_Alloc_Array( unsigned, self->commTopo->nIncRanks, "DecompTransfer::nSrcs" );
+		self->snks = Memory_Alloc_Array( unsigned*, self->commTopo->nIncRanks, "DecompTransfer::nSnks" );
+		self->srcs = Memory_Alloc_Array( unsigned*, self->commTopo->nIncRanks, "DecompTransfer::nSrcs" );
+		for( p_i = 0; p_i < nProcs; p_i++ ) {
+			unsigned	incRank;
+
+			incRank = self->commTopo->incRanks[p_i];
+			if( retSets[incRank] ) {
+				self->snks[p_i] = NULL;
+				RangeSet_GetIndices( retSets[incRank], self->nSnks + p_i, self->snks + p_i );
+			}
+			else {
+				self->nSnks[p_i] = 0;
+				self->snks[p_i] = NULL;
+			}
+
+			if( fndSets[incRank] ) {
+				self->srcs[p_i] = NULL;
+				RangeSet_GetIndices( fndSets[incRank], self->nSrcs + p_i, self->srcs + p_i );
+			}
+			else {
+				self->nSrcs[p_i] = 0;
+				self->srcs[p_i] = NULL;
+			}
+
+			FreeObject( retSets[incRank] );
+			FreeObject( fndSets[incRank] );
+		}
+		FreeArray( retSets );
+		FreeArray( fndSets );
+	}
+	else {
+		self->nSnks = NULL;
+		self->nSrcs = NULL;
+		self->snks = NULL;
+		self->srcs = NULL;
+	}
+
+	/*
+	** Map the dumped indices to the source decomp and count totals.
+	*/
+
+	self->netSnks = 0;
+	self->netSrcs = 0;
+	for( p_i = 0; p_i < self->commTopo->nIncRanks; p_i++ ) {
+		self->netSnks += self->nSnks[p_i];
+		for( ind_i = 0; ind_i < self->nSnks[p_i]; ind_i++ ) {
+			insist( UIntMap_Map( invMap, self->snks[p_i][ind_i], &self->snks[p_i][ind_i] ), == True );
+			insist( Decomp_GlobalToLocal( self->decomps[0], self->snks[p_i][ind_i], self->snks[p_i] + ind_i ), == True );
+		}
+
+		self->netSrcs += self->nSrcs[p_i];
+		for( ind_i = 0; ind_i < self->nSrcs[p_i]; ind_i++ )
+			insist( Decomp_GlobalToLocal( self->decomps[1], self->srcs[p_i][ind_i], self->srcs[p_i] + ind_i ), == True );
+	}
+	FreeObject( invMap );
+}
+
+void DecompTransfer_BuildArray( DecompTransfer* self, DecompTransfer_Array* array ) {
+	unsigned	nInc;
+	unsigned*	inc;
+
+	assert( self );
+	assert( self->commTopo );
+
+	/* Extract incidence. */
+	CommTopology_GetIncidence( self->commTopo, &nInc, &inc );
+
+	if( nInc ) {
+		/* Determine sink (local) information. */
+		if( self->netSnks > 0 ) {
+			unsigned*	snkOffs;
+			unsigned*	snkSizes;
+			unsigned*	snkDisps;
+			unsigned	snkInd = 0;
+			unsigned	p_i;
+
+			/* Allocate/reallocate memory. */
+			snkDisps = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::snkDisps" );
+			snkSizes = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::snkSizes" );
+			snkOffs = Memory_Alloc_Array( unsigned, self->netSnks, "DecompTransfer_Array::snkOffs" );
+
+			/* Calculate offsets and sizes. */
+			for( p_i = 0; p_i < nInc; p_i++ ) {
+				unsigned	snk_i;
+
+				snkSizes[p_i] = 0;
+				for( snk_i = 0; snk_i < self->nSnks[p_i]; snk_i++ ) {
+					snkOffs[snkInd] = self->snks[p_i][snk_i] * array->snkStride;
+					snkSizes[p_i] += array->itemSize;
+					snkInd++;
+				}
+			}
+
+			/* Calculate the displacements. */
+			snkDisps[0] = 0;
+			for( p_i = 1; p_i < nInc; p_i++ )
+				snkDisps[p_i] = snkDisps[p_i - 1] + snkSizes[p_i - 1];
+
+			/* Store arrays. */
+			array->snkOffs = snkOffs;
+			array->snkDisps = snkDisps;
+			array->snkSizes = snkSizes;
+		}
+		else {
+			/* Store null information. */
+			array->snkOffs = NULL;
+			array->snkDisps = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::snkDisps" );
+			array->snkSizes = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::snkSizes" );
+			memset( array->snkDisps, 0, nInc * sizeof(unsigned) );
+			memset( array->snkSizes, 0, nInc * sizeof(unsigned) );
+		}
+
+		/* Determine source information. */
+		if( self->netSrcs > 0 ) {
+			unsigned*	srcOffs;
+			unsigned*	srcSizes;
+			unsigned*	srcDisps;
+			unsigned	srcInd = 0;
+			unsigned	p_i;
+
+			/* Allocate/reallocate memory. */
+			srcDisps = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::srcDisps" );
+			srcSizes = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::srcSizes" );
+			srcOffs = Memory_Alloc_Array( unsigned, self->netSrcs, "DecompTransfer_Array::srcOffs" );
+
+			/* Calculate offsets and sizes. */
+			for( p_i = 0; p_i < nInc; p_i++ ) {
+				unsigned	src_i;
+
+				srcSizes[p_i] = 0;
+				for( src_i = 0; src_i < self->nSrcs[p_i]; src_i++ ) {
+					srcOffs[srcInd] = self->srcs[p_i][src_i] * array->srcStride;
+					srcSizes[p_i] += array->itemSize;
+					srcInd++;
+				}
+			}
+
+			/* Calculate the displacements. */
+			srcDisps[0] = 0;
+			for( p_i = 1; p_i < nInc; p_i++ )
+				srcDisps[p_i] = srcDisps[p_i - 1] + srcSizes[p_i - 1];
+
+			/* Store arrays. */
+			array->srcOffs = srcOffs;
+			array->srcDisps = srcDisps;
+			array->srcSizes = srcSizes;
+		}
+		else {
+			/* Store null information. */
+			array->srcOffs = NULL;
+			array->srcDisps = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::srcDisps" );
+			array->srcSizes = Memory_Alloc_Array( unsigned, nInc, "DecompTransfer_Array::srcSizes" );
+			memset( array->srcDisps, 0, nInc * sizeof(unsigned) );
+			memset( array->srcSizes, 0, nInc * sizeof(unsigned) );
+		}
+	}
+	else {
+		array->snkOffs = NULL;
+		array->snkDisps = NULL;
+		array->snkSizes = NULL;
+		array->srcOffs = NULL;
+		array->srcDisps = NULL;
+		array->srcSizes = NULL;
+	}
+}
+
+void DecompTransfer_Destruct( DecompTransfer* self ) {
+	self->netSrcs = 0;
+	KillArray( self->nSrcs );
+	KillArray( self->srcs );
+	self->netSnks = 0;
+	KillArray( self->nSnks );
+	KillArray( self->snks );
+}
+
+void DecompTransfer_DestructArrays( DecompTransfer* self ) {
+	unsigned	a_i;
+
+	for( a_i = 0; a_i < self->nArrays; a_i++ )
+		DecompTransfer_DestructArray( self->arrays[a_i] );
+	KillArray( self->arrays );
+	self->nArrays = 0;
+}
+
+void DecompTransfer_DestructArray( DecompTransfer_Array* array ) {
+	FreeArray( array->snkDisps );
+	FreeArray( array->snkSizes );
+	FreeArray( array->snkOffs );
+	FreeArray( array->srcDisps );
+	FreeArray( array->srcSizes );
+	FreeArray( array->srcOffs );
+	FreeArray( array );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DecompTransfer.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DecompTransfer.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,141 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: DecompTransfer.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_DecompTransfer_h__
+#define __Domain_Mesh_DecompTransfer_h__
+
+	/** Textual name of this class */
+	extern const Type DecompTransfer_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	typedef struct {
+		void*		snkArray;
+		unsigned	snkStride;
+		unsigned*	snkDisps;
+		unsigned*	snkSizes;
+		unsigned*	snkOffs;
+
+		void*		srcArray;
+		unsigned	srcStride;
+		unsigned*	srcDisps;
+		unsigned*	srcSizes;
+		unsigned*	srcOffs;
+
+		size_t		itemSize;
+	} DecompTransfer_Array;
+
+	#define __DecompTransfer			\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* DecompTransfer info */		\
+		Decomp*			decomps[2];	\
+		unsigned		nIncIndices;	\
+		unsigned*		incIndices[2];	\
+		CommTopology*		commTopo;	\
+							\
+		unsigned		nLocalInds;	\
+		unsigned*		srcLocalInds;	\
+		unsigned*		dstLocalInds;	\
+							\
+		unsigned		netSrcs;	\
+		unsigned*		nSrcs;		\
+		unsigned**		srcs;		\
+		unsigned		netSnks;	\
+		unsigned*		nSnks;		\
+		unsigned**		snks;		\
+							\
+		unsigned		nArrays;	\
+		DecompTransfer_Array**	arrays;
+
+	struct DecompTransfer { __DecompTransfer };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMPTRANSFER_DEFARGS	\
+		STG_COMPONENT_DEFARGS
+
+	#define DECOMPTRANSFER_PASSARGS	\
+		STG_COMPONENT_PASSARGS
+
+	DecompTransfer* DecompTransfer_New( Name name );
+	DecompTransfer* _DecompTransfer_New( DECOMPTRANSFER_DEFARGS );
+	void _DecompTransfer_Init( DecompTransfer* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _DecompTransfer_Delete( void* decompTransfer );
+	void _DecompTransfer_Print( void* decompTransfer, Stream* stream );
+	void _DecompTransfer_Construct( void* decompTransfer, Stg_ComponentFactory* cf, void* data );
+	void _DecompTransfer_Build( void* decompTransfer, void* data );
+	void _DecompTransfer_Initialise( void* decompTransfer, void* data );
+	void _DecompTransfer_Execute( void* decompTransfer, void* data );
+	void _DecompTransfer_Destroy( void* decompTransfer, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void DecompTransfer_SetDecomps( void* decompTransfer, Decomp* fromDecomp, Decomp* toDecomp, UIntMap* mapping );
+	DecompTransfer_Array* DecompTransfer_AddArray( void* decompTransfer, void* localArray, void* remoteArray, 
+						       size_t localStride, size_t remoteStride, size_t itemSize );
+	void DecompTransfer_RemoveArray( void* decompTransfer, DecompTransfer_Array* array );
+	void DecompTransfer_Transfer( void* decompTransfer );
+	void DecompTransfer_TransferArray( void* decompTransfer, DecompTransfer_Array* array );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void DecompTransfer_BuildTables( DecompTransfer* self );
+	void DecompTransfer_BuildArray( DecompTransfer* self, DecompTransfer_Array* array );
+	void DecompTransfer_Destruct( DecompTransfer* self );
+	void DecompTransfer_DestructArrays( DecompTransfer* self );
+	void DecompTransfer_DestructArray( DecompTransfer_Array* array );
+
+#endif /* __Domain_Mesh_DecompTransfer_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DecompTransfer.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DecompTransfer.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">DecompTransfer</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1123 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomp_Sync.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Decomp_Sync_Type = "Decomp_Sync";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomp_Sync* Decomp_Sync_New( Name name ) {
+	return _Decomp_Sync_New( sizeof(Decomp_Sync), 
+				 Decomp_Sync_Type, 
+				 _Decomp_Sync_Delete, 
+				 _Decomp_Sync_Print, 
+				 NULL );
+}
+
+Decomp_Sync* _Decomp_Sync_New( DECOMP_SYNC_DEFARGS ) {
+	Decomp_Sync* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp_Sync) );
+	self = (Decomp_Sync*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Decomp_Sync info */
+	_Decomp_Sync_Init( self );
+
+	return self;
+}
+
+void _Decomp_Sync_Init( Decomp_Sync* self ) {
+	self->decomp = NULL;
+	self->commTopo = CommTopology_New();
+	Stg_Class_AddRef( self->commTopo );
+
+	self->nDomains = 0;
+	self->nRemotes = 0;
+	self->remotes = NULL;
+	self->nShared = 0;
+	self->shared = NULL;
+	self->nSharers = NULL;
+	self->sharers = NULL;
+	self->owners = NULL;
+
+	self->grMap = UIntMap_New();
+	self->dsMap = UIntMap_New();
+
+	self->netSrcs = 0;
+	self->nSrcs = NULL;
+	self->srcs = NULL;
+	self->netSnks = 0;
+	self->nSnks = NULL;
+	self->snks = NULL;
+
+	self->arrays = List_New();
+	List_SetItemSize( self->arrays, sizeof(Decomp_Sync_Array*) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomp_Sync_Delete( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	Decomp_Sync_Destruct( self );
+	FreeObject( self->arrays );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _Decomp_Sync_Print( void* sync, Stream* stream ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	
+	/* Set the Journal for printing informations */
+	Stream* syncStream;
+	syncStream = Journal_Register( InfoStream_Type, "Decomp_SyncStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomp_Sync (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Decomp_Sync_SetDecomp( void* sync, Decomp* decomp ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( Decomp_Sync_ValidateComms( self ) );
+
+	Decomp_Sync_DestructDecomp( self );
+	self->decomp = decomp;
+	assert( Decomp_Sync_ValidateComms( self ) );
+
+	if( decomp ) {
+		self->nDomains = Decomp_GetLocalSize( decomp );
+		List_Append( Decomp_GetSyncList( decomp ), &self );
+	}
+	Decomp_Sync_InitArrays( self );
+}
+
+void Decomp_Sync_SetCommTopology( void* sync, CommTopology* commTopo ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructComm( self );
+	if( commTopo ) {
+		self->commTopo = commTopo;
+		Stg_Class_AddRef( commTopo );
+	}
+	else {
+		self->commTopo = CommTopology_New();
+		Stg_Class_AddRef( commTopo );
+		if( self->decomp )
+			CommTopology_SetComm( self->commTopo, Decomp_GetComm( self->decomp ) );
+	}
+	assert( Decomp_Sync_ValidateComms( self ) );
+
+	Decomp_Sync_InitArrays( self );
+}
+
+void Decomp_Sync_AddRemoteRanks( void* sync, unsigned nRanks, unsigned* ranks ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( !nRanks || ranks );
+
+	CommTopology_AddIncidence( self->commTopo, nRanks, ranks );
+	Decomp_Sync_ExpandArrays( self, nRanks );
+}
+
+void Decomp_Sync_SetRemotes( void* sync, unsigned nRemotes, unsigned* remotes ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	Decomp_Sync_AddRemotes( self, nRemotes, remotes );
+}
+
+void Decomp_Sync_AddRemotes( void* sync, unsigned nRemotes, unsigned* remotes ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	nIncRanks, *incRanks, *ranks;
+	unsigned	*nSrcRemotes, **srcRemotes;
+	unsigned	*nSnkRemotes, **snkRemotes;
+	unsigned	p_i;
+
+	assert( self );
+	assert( self->decomp );
+	assert( !nRemotes || remotes );
+	assert( Decomp_Sync_ValidateRemotes( self, nRemotes, remotes ) );
+
+	/* If we're not connected to anything, just exit. */
+	CommTopology_GetIncidence( self->commTopo, &nIncRanks, &incRanks );
+	if( !nIncRanks )
+		return;
+
+	/* Prepare source and sink arrays. */
+	nSrcRemotes = AllocArray( unsigned, nIncRanks );
+	nSnkRemotes = AllocArray( unsigned, nIncRanks );
+	srcRemotes = AllocArray( unsigned*, nIncRanks );
+	snkRemotes = AllocArray( unsigned*, nIncRanks );
+
+	/* Split these remotes for each processor. */
+	Decomp_Sync_SplitRemotes( self, nRemotes, remotes, 
+				  nSrcRemotes, srcRemotes, 
+				  nSnkRemotes, snkRemotes );
+
+	/* Add them. */
+	ranks = AllocArray( unsigned, nIncRanks );
+	for( p_i = 0; p_i < nIncRanks; p_i++ )
+		ranks[p_i] = p_i;
+	Decomp_Sync_AddSources( self, nIncRanks, ranks, nSrcRemotes, srcRemotes );
+	Decomp_Sync_AddSinks( self, nIncRanks, ranks, nSnkRemotes, snkRemotes );
+	Decomp_Sync_BuildShared( self );
+	FreeArray( ranks );
+
+	/* Free the space. */
+	FreeArray( nSrcRemotes );
+	FreeArray( nSnkRemotes );
+	FreeArray2D( nIncRanks, srcRemotes );
+	FreeArray2D( nIncRanks, snkRemotes );
+}
+
+void Decomp_Sync_SetSources( void* sync, unsigned nRanks, unsigned* ranks, 
+			     unsigned* nSources, unsigned** sources )
+{
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	p_i, s_i;
+
+	assert( nRanks <= CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( !nRanks || ranks );
+
+	for( p_i = 0; p_i < nRanks; p_i++ ) {
+		assert( ranks[p_i] < CommTopology_GetIncidenceSize( self->commTopo ) );
+		for( s_i = 0; s_i < self->nSrcs[ranks[p_i]]; s_i++ )
+			UIntMap_Remove( self->grMap, Decomp_Sync_DomainToGlobal( self, self->srcs[ranks[p_i]][s_i] ) );
+		KillArray( self->srcs[ranks[p_i]] );
+		self->netSrcs -= self->nSrcs[ranks[p_i]];
+		self->nDomains -= self->nSrcs[ranks[p_i]];
+		self->nRemotes -= self->nSrcs[ranks[p_i]];
+		self->nSrcs[ranks[p_i]] = 0;
+	}
+
+	Decomp_Sync_AddSources( self, nRanks, ranks, nSources, sources );
+}
+
+void Decomp_Sync_SetSinks( void* sync, unsigned nRanks, unsigned* ranks, 
+			   unsigned* nSinks, unsigned** sinks )
+{
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	p_i;
+
+	assert( nRanks <= CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( !nRanks || ranks );
+
+	for( p_i = 0; p_i < nRanks; p_i++ ) {
+		assert( ranks[p_i] < CommTopology_GetIncidenceSize( self->commTopo ) );
+		KillArray( self->snks[ranks[p_i]] );
+		self->netSnks -= self->nSnks[ranks[p_i]];
+		self->nSnks[ranks[p_i]] = 0;
+	}
+
+	Decomp_Sync_AddSinks( self, nRanks, ranks, nSinks, sinks );
+}
+
+void Decomp_Sync_AddSources( void* sync, unsigned nRanks, unsigned* ranks, 
+			     unsigned* nSources, unsigned** sources )
+{
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	nNewRemotes;
+	unsigned	domainInd;
+	unsigned	offs;
+	unsigned	p_i;
+
+	assert( self );
+	assert( self->decomp );
+	assert( nRanks <= CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( !nRanks || ranks );
+	assert( nSources && sources );
+
+	nNewRemotes = 0;
+	for( p_i = 0; p_i < nRanks; p_i++ ) {
+		assert( ranks[p_i] < CommTopology_GetIncidenceSize( self->commTopo ) );
+		assert( Decomp_Sync_ValidateRemotes( self, nSources[p_i], sources[p_i] ) );
+		nNewRemotes += nSources[p_i];
+	}
+
+	if( nNewRemotes ) {
+		self->remotes = ReallocNamedArray( self->remotes, unsigned, self->nRemotes + nNewRemotes, 
+						   "Decomp_Sync::remotes" );
+		self->owners = ReallocNamedArray( self->owners, unsigned, self->nRemotes + nNewRemotes, 
+						  "Decomp_Sync::owners" );
+		offs = self->nRemotes;
+		for( p_i = 0; p_i < nRanks; p_i++ ) {
+			unsigned	r_i;
+
+			for( r_i = 0; r_i < nSources[p_i]; r_i++ ) {
+				self->remotes[offs] = sources[p_i][r_i];
+				UIntMap_Insert( self->grMap, sources[p_i][r_i], offs );
+				self->owners[offs++] = ranks[p_i];
+			}
+		}
+		self->nRemotes += nNewRemotes;
+		self->nDomains += nNewRemotes;
+	}
+
+	for( p_i = 0; p_i < nRanks; p_i++ ) {
+		unsigned	rank = ranks[p_i];
+		unsigned	s_i;
+
+		self->srcs[rank] = ReallocArray( self->srcs[rank], unsigned, self->nSrcs[rank] + nSources[p_i] );
+		for( s_i = 0; s_i < nSources[p_i]; s_i++ ) {
+			insist( Decomp_Sync_GlobalToDomain( self, sources[p_i][s_i], &domainInd ), == True );
+			self->srcs[rank][self->nSrcs[rank] + s_i] = domainInd;
+		}
+		self->nSrcs[rank] += nSources[p_i];
+		self->netSrcs += nSources[p_i];
+	}
+}
+
+void Decomp_Sync_AddSinks( void* sync, unsigned nRanks, unsigned* ranks, 
+			   unsigned* nSinks, unsigned** sinks )
+{
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	domainInd;
+	unsigned	p_i;
+
+	assert( self );
+	assert( self->decomp );
+	assert( nRanks <= CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( !nRanks || ranks );
+	assert( nSinks && sinks );
+
+	for( p_i = 0; p_i < nRanks; p_i++ ) {
+		unsigned	rank = ranks[p_i];
+		unsigned	s_i;
+
+		assert( rank < CommTopology_GetIncidenceSize( self->commTopo ) );
+		assert( Decomp_Sync_ValidateSinks( self, nSinks[p_i], sinks[p_i] ) );
+		self->snks[rank] = ReallocArray( self->snks[rank], unsigned, self->nSnks[rank] + nSinks[p_i] );
+		for( s_i = 0; s_i < nSinks[p_i]; s_i++ ) {
+			insist( Decomp_Sync_GlobalToDomain( self, sinks[p_i][s_i], &domainInd ), == True );
+			self->snks[rank][self->nSnks[rank] + s_i] = domainInd;
+		}
+		self->nSnks[rank] += nSinks[p_i];
+		self->netSnks += nSinks[p_i];
+	}
+}
+
+void Decomp_Sync_SetRequired( void* sync, unsigned nRequired, unsigned* required ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	Decomp_Sync_AddRequired( self, nRequired, required );
+}
+
+void Decomp_Sync_AddRequired( void* sync, unsigned nRequired, unsigned* required ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	MPI_Comm	comm;
+	unsigned	nProcs, rank;
+	RangeSet	*reqSet, *remReqSet, *lSet;
+	unsigned	nLocals, *locals;
+	unsigned	nOldIncRanks, nIncRanks;
+	unsigned	nBytes;
+	Stg_Byte*	bytes;
+	unsigned	tag = 8849;
+	unsigned	p_i;
+
+	assert( self && Stg_CheckType( self, Decomp_Sync ) );
+	assert( Decomp_Sync_ValidateRemotes( self, nRequired, required ) );
+
+	comm = CommTopology_GetComm( self->commTopo );
+	MPI_Comm_rank( comm, (int*)&rank );
+	MPI_Comm_size( comm, (int*)&nProcs );
+
+	reqSet = RangeSet_New();
+	RangeSet_SetIndices( reqSet, nRequired, required );
+
+	Decomp_GetLocals( self->decomp, &nLocals, &locals );
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nLocals, locals );
+
+	nOldIncRanks = nIncRanks;
+	remReqSet = RangeSet_New();
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		Stg_Byte	state;
+		unsigned	nInds, *inds;
+		unsigned	localRank;
+
+		if( rank == p_i )
+			RangeSet_Pickle( reqSet, &nBytes, &bytes );
+		MPI_Bcast( &nBytes, 1, MPI_UNSIGNED, p_i, comm );
+		if( rank != p_i )
+			bytes = AllocArray( Stg_Byte, nBytes );
+		MPI_Bcast( bytes, nBytes, MPI_BYTE, p_i, comm );
+
+		if( rank != p_i ) {
+			RangeSet_Unpickle( remReqSet, nBytes, bytes );
+			FreeArray( bytes );
+
+			RangeSet_Intersection( remReqSet, lSet );
+			if( RangeSet_GetSize( remReqSet ) ) {
+				state = 1;
+				MPI_Gather( &state, 1, MPI_BYTE, NULL, 1, MPI_BYTE, p_i, comm );
+
+				RangeSet_Pickle( remReqSet, &nBytes, &bytes );
+				MPI_Send( &nBytes, 1, MPI_UNSIGNED, p_i, tag, comm );
+				MPI_Send( bytes, nBytes, MPI_BYTE, p_i, tag, comm );
+				FreeArray( bytes );
+
+				inds = NULL;
+				RangeSet_GetIndices( remReqSet, &nInds, &inds );
+				if( !CommTopology_GlobalToLocal( self->commTopo, p_i, &localRank ) ) {
+					Decomp_Sync_AddRemoteRanks( self, 1, &p_i );
+					insist( CommTopology_GlobalToLocal( self->commTopo, p_i, &localRank ), == True );
+					nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+				}
+				Decomp_Sync_AddSinks( sync, 1, &localRank, &nInds, &inds );
+				FreeArray( inds );
+			}
+			else {
+				state = 0;
+				MPI_Gather( &state, 1, MPI_BYTE, NULL, 1, MPI_BYTE, p_i, comm );
+			}
+		}
+		else {
+			Stg_Byte*	states;
+			unsigned	nActive, *active;
+			MPI_Status	status;
+			unsigned	nNewRanks, *newRanks;
+			unsigned	p_j;
+
+			FreeArray( bytes );
+
+			state = 0;
+			states = AllocArray( Stg_Byte, nProcs );
+			MPI_Gather( &state, 1, MPI_BYTE, states, 1, MPI_BYTE, p_i, comm );
+			nActive = 0;
+			nNewRanks = 0;
+			for( p_j = 0; p_j < nProcs; p_j++ ) {
+				if( states[p_j] ) {
+					nActive++;
+					if( !CommTopology_GlobalToLocal( self->commTopo, p_j, &localRank ) )
+						nNewRanks++;
+				}
+			}
+			active = AllocArray( unsigned, nActive );
+			newRanks = AllocArray( unsigned, nNewRanks );
+			nActive = 0;
+			nNewRanks = 0;
+			for( p_j = 0; p_j < nProcs; p_j++ ) {
+				if( states[p_j] ) {
+					active[nActive++] = p_j;
+					if( !CommTopology_GlobalToLocal( self->commTopo, p_j, &localRank ) )
+						newRanks[nNewRanks++] = p_j;
+				}
+			}
+			FreeArray( states );
+
+			Decomp_Sync_AddRemoteRanks( sync, nNewRanks, newRanks );
+			if( nNewRanks )
+				nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+			FreeArray( newRanks );
+
+			for( p_j = 0; p_j < nActive; p_j++ ) {
+				MPI_Recv( &nBytes, 1, MPI_UNSIGNED, active[p_j], tag, comm, &status );
+				bytes = AllocArray( Stg_Byte, nBytes );
+				MPI_Recv( bytes, nBytes, MPI_BYTE, active[p_j], tag, comm, &status );
+				RangeSet_Unpickle( reqSet, nBytes, bytes );
+				FreeArray( bytes );
+				inds = NULL;
+				RangeSet_GetIndices( reqSet, &nInds, &inds );
+				insist( CommTopology_GlobalToLocal( self->commTopo, active[p_j], &localRank ), == True );
+				Decomp_Sync_AddSources( sync, 1, &localRank, &nInds, &inds );
+				FreeArray( inds );
+			}
+
+			FreeArray( active );
+		}
+	}
+
+	FreeObject( reqSet );
+	FreeObject( remReqSet );
+	FreeObject( lSet );
+
+	Decomp_Sync_BuildShared( self );
+}
+
+void Decomp_Sync_BuildShared( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	nIncRanks;
+	RangeSet	*dSet, **rSets, *allSet;
+	unsigned	nLocals, *locals;
+	unsigned	nSendBytes, *nRecvBytes;
+	Stg_Byte	*sendBytes, **recvBytes;
+	unsigned	**sharers;
+	unsigned	nInds, *inds;
+	unsigned	r_i, s_i, ind_i;
+
+	assert( self && Stg_CheckType( self, Decomp_Sync ) );
+
+	/* Free shared info. */
+	FreeArray( self->shared );
+	FreeArray( self->nSharers );
+	FreeArray( self->sharers );
+
+	nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+
+	/* Communicate a range set of my domain indices to all neighbours. */
+	dSet = RangeSet_New();
+	RangeSet_SetIndices( dSet, self->nRemotes, self->remotes );
+	Decomp_GetLocals( self->decomp, &nLocals, &locals );
+	RangeSet_AddIndices( dSet, nLocals, locals );
+	RangeSet_Pickle( dSet, &nSendBytes, &sendBytes );
+	CommTopology_Allgather( self->commTopo, 
+				nSendBytes, sendBytes, 
+				&nRecvBytes, &recvBytes, 
+				sizeof(Stg_Byte) );
+	FreeArray( sendBytes );
+	rSets = AllocArray( RangeSet*, nIncRanks );
+	allSet = RangeSet_New();
+	for( r_i = 0; r_i < nIncRanks; r_i++ ) {
+		rSets[r_i] = RangeSet_New();
+		RangeSet_Unpickle( rSets[r_i], nRecvBytes[r_i], recvBytes[r_i] );
+		RangeSet_Intersection( rSets[r_i], dSet );
+		RangeSet_Union( allSet, rSets[r_i] );
+		FreeArray( recvBytes[r_i] );
+	}
+	FreeArray( recvBytes );
+	FreeArray( nRecvBytes );
+
+	/* Use the 'allSet' to generate the shared indices. */
+	self->shared = NULL;
+	RangeSet_GetIndices( allSet, &self->nShared, &self->shared );
+	FreeObject( allSet );
+	for( s_i = 0; s_i < self->nShared; s_i++ ) {
+		insist( Decomp_Sync_GlobalToDomain( self, self->shared[s_i], self->shared + s_i ), == True );
+		UIntMap_Insert( self->dsMap, self->shared[s_i], s_i );
+	}
+
+	/* Now that we have each intersection, convert to shared arrays. */
+	self->nSharers = AllocArray( unsigned, self->nShared );
+	memset( self->nSharers, 0, self->nShared * sizeof(unsigned) );
+	sharers = AllocArray2D( unsigned, self->nShared, nIncRanks );
+	for( r_i = 0; r_i < nIncRanks; r_i++ ) {
+		inds = NULL;
+		RangeSet_GetIndices( rSets[r_i], &nInds, &inds );
+		FreeObject( rSets[r_i] );
+		for( ind_i = 0; ind_i < nInds; ind_i++ ) {
+			insist( Decomp_Sync_GlobalToDomain( self, inds[ind_i], inds + ind_i ), == True );
+			insist( Decomp_Sync_DomainToShared( self, inds[ind_i], inds + ind_i ), == True );
+			sharers[inds[ind_i]][self->nSharers[inds[ind_i]]++] = r_i;
+		}
+		FreeArray( inds );
+	}
+	FreeArray( rSets );
+
+	/* Store final array. */
+	self->sharers = AllocComplex2D( unsigned, self->nShared, self->nSharers );
+	for( s_i = 0; s_i < self->nShared; s_i++ )
+		memcpy( self->sharers[s_i], sharers[s_i], self->nSharers[s_i] * sizeof(unsigned) );
+	FreeArray( sharers );
+
+#if 0
+	/* Create a range set of all sinks and sources. */
+	nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+	shareSet = RangeSet_New();
+	tmpSet = RangeSet_New();
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		RangeSet_SetIndices( tmpSet, self->nSnks[p_i], self->snks[p_i] );
+		RangeSet_Union( shareSet, tmpSet );
+		RangeSet_SetIndices( tmpSet, self->nSrcs[p_i], self->srcs[p_i] );
+		RangeSet_Union( shareSet, tmpSet );
+	}
+	FreeObject( tmpSet );
+
+	/* These indices are the shared elements. */
+	self->shared = NULL;
+	RangeSet_GetIndices( shareSet, &self->nShared, &self->shared );
+	FreeObject( shareSet );
+
+	/* If there are no shared indices, exit now. */
+	if( !self->nShared )
+		return;
+
+	/* Build the shared mapping. */
+	for( s_i = 0; s_i < self->nShared; s_i++ )
+		UIntMap_Insert( self->dsMap, self->shared[s_i], s_i );
+
+	/* Create temporary storage for the sharers. */
+	self->nSharers = AllocNamedArray( unsigned, self->nShared, "Decomp_Sync::nSharers" );
+	sharers = Memory_Alloc_2DArray_Unnamed( unsigned, self->nShared, nIncRanks );
+	memset( self->nSharers, 0, self->nShared * sizeof(unsigned) );
+
+	/* Build the sharer lists. */
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		for( s_i = 0; s_i < self->nSnks[p_i]; s_i++ ) {
+			unsigned	sharedInd;
+			unsigned	curSharer;
+
+			insist( UIntMap_Map( self->dsMap, self->snks[p_i][s_i], &sharedInd ), == True );
+			curSharer = self->nSharers[sharedInd]++;
+			sharers[sharedInd][curSharer] = p_i;
+		}
+	}
+
+	/* Transfer to final storage. */
+	self->sharers = Memory_Alloc_2DComplex( unsigned, self->nShared, self->nSharers, "Decomp_Sync::sharers" );
+	for( s_i = 0; s_i < self->nShared; s_i++ )
+		memcpy( self->sharers[s_i], sharers[s_i], self->nSharers[s_i] * sizeof(unsigned) );
+
+	/* Free the old sharers array. */
+	FreeArray( sharers );
+#endif
+}
+
+unsigned Decomp_Sync_GetGlobalSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+
+	return Decomp_GetGlobalSize( self->decomp );
+}
+
+unsigned Decomp_Sync_GetLocalSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+
+	return Decomp_GetLocalSize( self->decomp );
+}
+
+unsigned Decomp_Sync_GetRemoteSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	return self->nRemotes;
+}
+
+unsigned Decomp_Sync_GetDomainSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	return self->nDomains;
+}
+
+unsigned Decomp_Sync_GetSharedSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	return self->nShared;
+}
+
+void Decomp_Sync_GetRemotes( void* sync, unsigned* nRemotes, unsigned** remotes ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( nRemotes );
+	assert( remotes );
+
+	*nRemotes = self->nRemotes;
+	*remotes = self->remotes;
+}
+
+Bool Decomp_Sync_GlobalToDomain( void* sync, unsigned global, unsigned* domain ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( global < self->decomp->nGlobals );
+	assert( self->decomp->glMap );
+	assert( self->grMap );
+	assert( domain );
+
+	if( Decomp_GlobalToLocal( self->decomp, global, domain ) )
+		return True;
+	else if( UIntMap_Map( self->grMap, global, domain ) ) {
+		*domain += Decomp_GetLocalSize( self->decomp );
+		return True;
+	}
+
+	return False;
+}
+
+unsigned Decomp_Sync_DomainToGlobal( void* sync, unsigned domain ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( domain < self->decomp->nLocals + self->nRemotes );
+
+	if( domain < self->decomp->nLocals )
+		return Decomp_LocalToGlobal( self->decomp, domain );
+	else
+		return self->remotes[domain - Decomp_GetLocalSize( self->decomp )];
+}
+
+Bool Decomp_Sync_DomainToShared( void* sync, unsigned domain, unsigned* shared ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( domain < self->nDomains );
+	assert( self->dsMap );
+	assert( shared );
+
+	return UIntMap_Map( self->dsMap, domain, shared );
+}
+
+unsigned Decomp_Sync_SharedToDomain( void* sync, unsigned shared ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( shared < self->nShared );
+	assert( self->shared );
+
+	return self->shared[shared];
+}
+
+unsigned Decomp_Sync_GetOwner( void* sync, unsigned remote ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( remote < self->nRemotes );
+	assert( self->owners );
+
+	return self->owners[remote];
+}
+
+void Decomp_Sync_GetSharers( void* sync, unsigned shared, 
+			     unsigned* nSharers, unsigned** sharers )
+{
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( shared < self->nShared );
+	assert( self->nSharers );
+	assert( self->sharers );
+	assert( nSharers );
+	assert( sharers );
+
+	*nSharers = self->nSharers[shared];
+	*sharers = self->sharers[shared];
+}
+
+void Decomp_Sync_GetSources( void* sync, unsigned rank, unsigned* nSources, unsigned** sources ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( rank < CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( nSources && sources );
+	assert( self->nSrcs && self->srcs );
+
+	*nSources = self->nSrcs[rank];
+	*sources = self->srcs[rank];
+}
+
+void Decomp_Sync_GetSinks( void* sync, unsigned rank, unsigned* nSinks, unsigned** sinks ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( rank < CommTopology_GetIncidenceSize( self->commTopo ) );
+	assert( nSinks && sinks );
+	assert( self->nSnks && self->snks );
+
+	*nSinks = self->nSnks[rank];
+	*sinks = self->snks[rank];
+}
+
+Decomp* Decomp_Sync_GetDecomp( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	return self->decomp;
+}
+
+CommTopology* Decomp_Sync_GetCommTopology( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	return self->commTopo;
+}
+
+void Decomp_Sync_SyncArray( void* sync, Decomp_Sync_Array* array ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	nInc;
+	unsigned*	inc;
+	Stg_Byte*	snkArray;
+	Stg_Byte*	srcArray;
+	unsigned	p_i;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->decomp );
+	assert( array );
+
+	/* Pack from locals to a contiguous array. */
+	if( self->netSnks > 0 ) {
+		unsigned	snk_i;
+
+		snkArray = AllocArray( Stg_Byte, self->netSnks * array->itemSize );
+		for( snk_i = 0; snk_i < self->netSnks; snk_i++ ) {
+			memcpy( snkArray + snk_i * array->itemSize, 
+				(Stg_Byte*)array->snkArray + array->snkOffs[snk_i], 
+				array->itemSize );
+		}
+	}
+	else
+		snkArray = NULL;
+
+	/* Allocate for sources. */
+	srcArray = AllocArray( Stg_Byte, self->netSrcs * array->itemSize );
+
+	/* Get incidence. */
+	CommTopology_GetIncidence( self->commTopo, &nInc, &inc );
+
+	/* Transfer. */
+	for( p_i = 0; p_i < nInc; p_i++ ) {
+		int		snkSize = array->snkSizes[p_i];
+		int		snkDisp = array->snkDisps[p_i];
+		int		srcSize = array->srcSizes[p_i];
+		int		srcDisp = array->srcDisps[p_i];
+		MPI_Status	status;
+		unsigned	tag = 6669;
+
+		MPI_Sendrecv( snkArray + snkDisp, snkSize, MPI_BYTE, inc[p_i], tag, 
+			      srcArray + srcDisp, srcSize, MPI_BYTE, inc[p_i], tag, 
+			      CommTopology_GetComm( self->commTopo ), &status );
+	}
+
+	/* Free the sink array. */
+	FreeArray( snkArray );
+
+	/* Unpack sources. */
+	if( self->netSrcs > 0 ) {
+		unsigned	src_i;
+
+		for( src_i = 0; src_i < self->netSrcs; src_i++ ) {
+			memcpy( (Stg_Byte*)array->srcArray + array->srcOffs[src_i], 
+				srcArray + src_i * array->itemSize, 
+				array->itemSize );
+		}
+	}
+
+	/* Free source array. */
+	FreeArray( srcArray );
+}
+
+void Decomp_Sync_Update( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_Sync_InitArrays( Decomp_Sync* self ) {
+	unsigned	nIncRanks;
+
+	assert( self );
+
+	if( self->commTopo ) {
+		nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+		if( nIncRanks ) {
+			self->nSrcs = AllocNamedArray( unsigned, nIncRanks, "Decomp_Sync::nSrcs" );
+			self->srcs = AllocNamedArray( unsigned*, nIncRanks, "Decomp_Sync::srcs" );
+			self->nSnks = AllocNamedArray( unsigned, nIncRanks, "Decomp_Sync::nSnks" );
+			self->snks = AllocNamedArray( unsigned*, nIncRanks, "Decomp_Sync::snks" );
+			memset( self->nSrcs, 0, nIncRanks * sizeof(unsigned) );
+			memset( self->srcs, 0, nIncRanks * sizeof(unsigned*) );
+			memset( self->nSnks, 0, nIncRanks * sizeof(unsigned) );
+			memset( self->snks, 0, nIncRanks * sizeof(unsigned*) );
+		}
+	}
+}
+
+void Decomp_Sync_ExpandArrays( Decomp_Sync* self, unsigned nNewRanks ) {
+	unsigned	nIncRanks, nOldIncRanks;
+
+	assert( self );
+	assert( !self->nShared || (self->nSharers && self->sharers) );
+	assert( !self->nRemotes || self->owners );
+
+	nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+	nOldIncRanks = nIncRanks - nNewRanks;
+	self->nSrcs = ReallocNamedArray( self->nSrcs, unsigned, nIncRanks, "Decomp_Sync::nSrcs" );
+	self->srcs = ReallocNamedArray( self->srcs, unsigned*, nIncRanks, "Decomp_Sync::srcs" );
+	self->nSnks = ReallocNamedArray( self->nSnks, unsigned, nIncRanks, "Decomp_Sync::nSnks" );
+	self->snks = ReallocNamedArray( self->snks, unsigned*, nIncRanks, "Decomp_Sync::snks" );
+	memset( self->nSrcs + nOldIncRanks, 0, nNewRanks * sizeof(unsigned) );
+	memset( self->srcs + nOldIncRanks, 0, nNewRanks * sizeof(unsigned*) );
+	memset( self->nSnks + nOldIncRanks, 0, nNewRanks * sizeof(unsigned) );
+	memset( self->snks + nOldIncRanks, 0, nNewRanks * sizeof(unsigned*) );
+}
+
+void Decomp_Sync_SplitRemotes( Decomp_Sync* self, unsigned nRemotes, unsigned* remotes, 
+			       unsigned* nSrcs, unsigned** srcs, 
+			       unsigned* nSnks, unsigned** snks )
+{
+	unsigned	nLocals, *locals;
+	unsigned	nIncRanks;
+	RangeSet	*remSet, *locSet;
+	unsigned	nBytes, *nRemBytes, *nFndBytes;
+	Stg_Byte	*bytes, **remBytes, **fndBytes;
+	unsigned	p_i;
+
+	assert( self );
+	assert( self->decomp );
+
+	/* Make a range set of our remotes. */
+	remSet = RangeSet_New();
+	RangeSet_SetIndices( remSet, nRemotes, remotes );
+	RangeSet_Pickle( remSet, &nBytes, &bytes );
+
+	/* Collect neighbouring remotes. */
+	CommTopology_Allgather( self->commTopo, 
+				nBytes, bytes, 
+				&nRemBytes, (void***)&remBytes, 
+				sizeof(Stg_Byte) );
+
+	/* Done with the bytes. */
+	FreeArray( bytes );
+
+	/* Build a range set of our locals. */
+	locSet = RangeSet_New();
+	Decomp_GetLocals( self->decomp, &nLocals, &locals );
+	RangeSet_SetIndices( locSet, nLocals, locals );
+
+	/* Intersect our locals and our neighbours remotes to build our sink sets. */
+	nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+	remSet = RangeSet_New();
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		RangeSet_Unpickle( remSet, nRemBytes[p_i], remBytes[p_i] );
+
+		/* Done with the remote bytes. */
+		FreeArray( remBytes[p_i] );
+
+		RangeSet_Intersection( remSet, locSet );
+		snks[p_i] = NULL;
+		RangeSet_GetIndices( remSet, nSnks + p_i, snks + p_i );
+		RangeSet_Pickle( remSet, nRemBytes + p_i, remBytes + p_i );
+	}
+
+	/* Local set is no longer needed. */
+	FreeObject( locSet );
+
+	/* Return what we've found. */
+	CommTopology_Alltoall( self->commTopo, 
+			       nRemBytes, (void**)remBytes, 
+			       &nFndBytes, (void***)&fndBytes, 
+			       sizeof(Stg_Byte) );
+
+	/* Done with the remote bytes arrays. */
+	FreeArray( nRemBytes );
+	FreeArray2D( nIncRanks, remBytes );
+
+	/* Construct our source arrays with what was found. */
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		RangeSet_Unpickle( remSet, nFndBytes[p_i], fndBytes[p_i] );
+
+		/* Empty the internal found arrays. */
+		FreeArray( fndBytes[p_i] );
+
+		srcs[p_i] = NULL;
+		RangeSet_GetIndices( remSet, nSrcs + p_i, srcs + p_i );
+	}
+
+	/* Free everything else. */
+	FreeArray( nFndBytes );
+	FreeArray( fndBytes );
+	FreeObject( remSet );
+}
+
+void Decomp_Sync_Destruct( Decomp_Sync* self ) {
+	assert( self );
+
+	Decomp_Sync_DestructDecomp( self );
+	Decomp_Sync_DestructComm( self );
+}
+
+void Decomp_Sync_DestructDecomp( Decomp_Sync* self ) {
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	if( self->decomp ) {
+		List_Remove( Decomp_GetSyncList( self->decomp ), &self );
+		self->decomp = NULL;
+	}
+}
+
+void Decomp_Sync_DestructComm( Decomp_Sync* self ) {
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	Stg_Class_RemoveRef( self->commTopo );
+	self->commTopo = NULL;
+	KillArray( self->nSrcs );
+	KillArray( self->srcs );
+	KillArray( self->nSnks );
+	KillArray( self->snks );
+}
+
+void Decomp_Sync_DestructRemotes( Decomp_Sync* self ) {
+	assert( self );
+
+	Decomp_Sync_DestructArrays( self );
+	Decomp_Sync_DestructSources( self );
+	Decomp_Sync_DestructSinks( self );
+}
+
+void Decomp_Sync_DestructSources( Decomp_Sync* self ) {
+	unsigned	nIncRanks;
+	unsigned	p_i;
+
+	assert( self );
+
+	if( self->commTopo )
+		nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+
+	if( self->decomp )
+		self->nDomains = Decomp_GetLocalSize( self->decomp );
+
+	KillArray( self->remotes );
+	self->nRemotes = 0;
+	UIntMap_Clear( self->grMap );
+	self->netSrcs = 0;
+	for( p_i = 0; p_i < nIncRanks; p_i++ )
+		KillArray( self->srcs[p_i] );
+}
+
+void Decomp_Sync_DestructSinks( Decomp_Sync* self ) {
+	unsigned	nIncRanks;
+	unsigned	p_i;
+
+	if( self->commTopo )
+		nIncRanks = CommTopology_GetIncidenceSize( self->commTopo );
+
+	KillArray( self->shared );
+	self->nShared = 0;
+	KillArray( self->nSharers );
+	KillArray( self->sharers );
+	UIntMap_Clear( self->dsMap );
+	self->netSnks = 0;
+	for( p_i = 0; p_i < nIncRanks; p_i++ )
+		KillArray( self->snks[p_i] );
+}
+
+void Decomp_Sync_DestructArrays( Decomp_Sync* self ) {
+	unsigned	a_i;
+
+	for( a_i = 0; a_i < List_GetSize( self->arrays ); a_i++ ) {
+		Decomp_Sync_Array*	array = *(Decomp_Sync_Array**)List_GetItem( self->arrays, a_i );
+
+		Decomp_Sync_Array_SetSync( array, self );
+	}
+
+	List_Clear( self->arrays );
+}
+
+#ifndef NDEBUG
+Bool Decomp_Sync_ValidateRemotes( Decomp_Sync* self, unsigned nRemotes, unsigned* remotes ) {
+	unsigned	domainInd;
+	unsigned	r_i;
+
+	for( r_i = 0; r_i < nRemotes; r_i++ ) {
+		if( Decomp_Sync_GlobalToDomain( self, remotes[r_i], &domainInd ) )
+			return False;
+	}
+
+	return True;
+}
+
+Bool Decomp_Sync_ValidateSinks( Decomp_Sync* self, unsigned nSinks, unsigned* sinks ) {
+	RangeSet	*lSet, *sSet;
+	unsigned	nLocals, *locals;
+	unsigned	nInds;
+
+	Decomp_GetLocals( self->decomp, &nLocals, &locals );
+
+	lSet = RangeSet_New();
+	sSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nLocals, locals );
+	RangeSet_SetIndices( sSet, nSinks, sinks );
+	RangeSet_Subtraction( sSet, lSet );
+	nInds = RangeSet_GetSize( sSet );
+	FreeObject( lSet );
+	FreeObject( sSet );
+
+	return !nInds;
+}
+
+Bool Decomp_Sync_ValidateComms( Decomp_Sync* self ) {
+	assert( self );
+
+	if( self->decomp && self->commTopo )
+		return Decomp_GetComm( self->decomp ) == CommTopology_GetComm( self->commTopo );
+	else
+		return True;
+}
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,176 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomp_Sync.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Decomp_Sync_h__
+#define __Domain_Mesh_Decomp_Sync_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Sync_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	#define __Decomp_Sync				\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* Decomp_Sync info */			\
+		Decomp*			decomp;		\
+		CommTopology*		commTopo;	\
+							\
+		unsigned		nDomains;	\
+		unsigned		nRemotes;	\
+		unsigned*		remotes;	\
+		unsigned		nShared;	\
+		unsigned*		shared;		\
+		unsigned*		nSharers;	\
+		unsigned**		sharers;	\
+		unsigned*		owners;		\
+							\
+		UIntMap*		grMap;		\
+		UIntMap*		dsMap;		\
+							\
+		unsigned		netSrcs;	\
+		unsigned*		nSrcs;		\
+		unsigned**		srcs;		\
+		unsigned		netSnks;	\
+		unsigned*		nSnks;		\
+		unsigned**		snks;		\
+							\
+		List*			arrays;
+
+	struct Decomp_Sync { __Decomp_Sync };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_SYNC_DEFARGS	\
+		STG_CLASS_DEFARGS
+
+	#define DECOMP_SYNC_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	Decomp_Sync* Decomp_Sync_New();
+	Decomp_Sync* _Decomp_Sync_New( DECOMP_SYNC_DEFARGS );
+	void _Decomp_Sync_Init( Decomp_Sync* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomp_Sync_Delete( void* sync );
+	void _Decomp_Sync_Print( void* sync, Stream* stream );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Decomp_Sync_SetDecomp( void* sync, Decomp* decomp );
+	void Decomp_Sync_SetCommTopology( void* sync, CommTopology* commTopo );
+	void Decomp_Sync_AddRemoteRanks( void* sync, unsigned nRanks, unsigned* ranks );
+	void Decomp_Sync_SetRemotes( void* sync, unsigned nRemotes, unsigned* remotes );
+	void Decomp_Sync_AddRemotes( void* sync, unsigned nRemotes, unsigned* remotes );
+	void Decomp_Sync_SetSources( void* sync, unsigned nRanks, unsigned* ranks, 
+				     unsigned* nSources, unsigned** sources );
+	void Decomp_Sync_SetSinks( void* sync, unsigned nRanks, unsigned* ranks, 
+				   unsigned* nSinks, unsigned** sinks );
+	void Decomp_Sync_AddSources( void* sync, unsigned nRanks, unsigned* ranks, 
+				     unsigned* nSources, unsigned** sources );
+	void Decomp_Sync_AddSinks( void* sync, unsigned nRanks, unsigned* ranks, 
+				   unsigned* nSinks, unsigned** sinks );
+	void Decomp_Sync_SetRequired( void* sync, unsigned nRequired, unsigned* required );
+	void Decomp_Sync_AddRequired( void* sync, unsigned nRequired, unsigned* required );
+	void Decomp_Sync_BuildShared( void* sync );
+
+	unsigned Decomp_Sync_GetGlobalSize( void* sync );
+	unsigned Decomp_Sync_GetLocalSize( void* sync );
+	unsigned Decomp_Sync_GetRemoteSize( void* sync );
+	unsigned Decomp_Sync_GetDomainSize( void* sync );
+	unsigned Decomp_Sync_GetSharedSize( void* sync );
+	Decomp* Decomp_Sync_GetDecomp( void* sync );
+	CommTopology* Decomp_Sync_GetCommTopology( void* sync );
+	void Decomp_Sync_GetRemotes( void* sync, unsigned* nRemotes, unsigned** remotes );
+	unsigned Decomp_Sync_GetOwner( void* sync, unsigned remote );
+	void Decomp_Sync_GetSharers( void* sync, unsigned shared, 
+				     unsigned* nSharers, unsigned** sharers );
+	void Decomp_Sync_GetSources( void* sync, unsigned rank, unsigned* nSources, unsigned** sources );
+	void Decomp_Sync_GetSinks( void* sync, unsigned rank, unsigned* nSinks, unsigned** sinks );
+
+	Bool Decomp_Sync_GlobalToDomain( void* sync, unsigned global, unsigned* domain );
+	unsigned Decomp_Sync_DomainToGlobal( void* sync, unsigned domain );
+	Bool Decomp_Sync_DomainToShared( void* sync, unsigned domain, unsigned* shared );
+	unsigned Decomp_Sync_SharedToDomain( void* sync, unsigned shared );
+
+	void Decomp_Sync_SyncArray( void* sync, Decomp_Sync_Array* array );
+
+	void Decomp_Sync_Update( void* sync );
+
+	void Decomp_Sync_AddRef( void* sync );
+	void Decomp_Sync_RemoveRef( void* sync );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_Sync_InitArrays( Decomp_Sync* self );
+	void Decomp_Sync_ExpandArrays( Decomp_Sync* self, unsigned nNewRanks );
+
+	void Decomp_Sync_SplitRemotes( Decomp_Sync* self, unsigned nRemotes, unsigned* remotes, 
+				       unsigned* nSrcs, unsigned** srcs, 
+				       unsigned* nSnks, unsigned** snks );
+
+	void Decomp_Sync_Destruct( Decomp_Sync* self );
+	void Decomp_Sync_DestructDecomp( Decomp_Sync* self );
+	void Decomp_Sync_DestructComm( Decomp_Sync* self );
+	void Decomp_Sync_DestructRemotes( Decomp_Sync* self );
+	void Decomp_Sync_DestructSources( Decomp_Sync* self );
+	void Decomp_Sync_DestructSinks( Decomp_Sync* self );
+	void Decomp_Sync_DestructArrays( Decomp_Sync* self );
+
+#ifndef NDEBUG
+	Bool Decomp_Sync_ValidateRemotes( Decomp_Sync* self, unsigned nRemotes, unsigned* remotes );
+	Bool Decomp_Sync_ValidateSinks( Decomp_Sync* self, unsigned nSinks, unsigned* sinks );
+	Bool Decomp_Sync_ValidateComms( Decomp_Sync* self );
+#endif
+
+#endif /* __Domain_Mesh_Decomp_Sync_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Decomp_Sync</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Array.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Array.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,312 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomp_Sync.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "Decomp_Sync_Array.h"
+
+
+/* Textual name of this class */
+const Type Decomp_Sync_Array_Type = "Decomp_Sync_Array";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomp_Sync_Array* Decomp_Sync_Array_New() {
+	return _Decomp_Sync_Array_New( sizeof(Decomp_Sync_Array), 
+				       Decomp_Sync_Array_Type, 
+				       _Decomp_Sync_Array_Delete, 
+				       _Decomp_Sync_Array_Print, 
+				       NULL );
+}
+
+Decomp_Sync_Array* _Decomp_Sync_Array_New( DECOMP_SYNC_ARRAY_DEFARGS ) {
+	Decomp_Sync_Array* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp_Sync_Array) );
+	self = (Decomp_Sync_Array*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Decomp_Sync_Array info */
+	_Decomp_Sync_Array_Init( self );
+
+	return self;
+}
+
+void _Decomp_Sync_Array_Init( Decomp_Sync_Array* self ) {
+	self->sync = NULL;
+
+	self->snkArray = NULL;
+	self->snkStride = 0;
+	self->snkDisps = NULL;
+	self->snkSizes = NULL;
+	self->snkOffs = NULL;
+
+	self->srcArray = NULL;
+	self->srcStride = 0;
+	self->srcDisps = NULL;
+	self->srcSizes = NULL;
+	self->srcOffs = NULL;
+
+	self->itemSize = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomp_Sync_Array_Delete( void* sync ) {
+	Decomp_Sync_Array*	self = (Decomp_Sync_Array*)sync;
+
+	Decomp_Sync_Array_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _Decomp_Sync_Array_Print( void* sync, Stream* stream ) {
+	Decomp_Sync_Array*	self = (Decomp_Sync_Array*)sync;
+
+	/* Set the Journal for printing informations */
+	Stream* syncStream;
+	syncStream = Journal_Register( InfoStream_Type, "Decomp_Sync_ArrayStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomp_Sync_Array (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Decomp_Sync_Array_SetSync( void* array, Decomp_Sync* sync ) {
+	Decomp_Sync_Array*	self = (Decomp_Sync_Array*)array;
+
+	assert( self );
+
+	Decomp_Sync_Array_Destruct( self );
+
+	self->sync = sync;
+	if( sync )
+		List_Append( sync->arrays, &self );
+}
+
+void Decomp_Sync_Array_SetMemory( void* array, 
+				  void* localArray, void* remoteArray, 
+				  size_t localStride, size_t remoteStride, 
+				  size_t itemSize )
+{
+	Decomp_Sync_Array*	self = (Decomp_Sync_Array*)array;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->sync );
+
+	/* Store information. */
+	self->snkArray = localArray;
+	self->snkStride = localStride;
+	self->srcArray = remoteArray;
+	self->srcStride = remoteStride;
+	self->itemSize = itemSize;
+
+	/* Build this array. */
+	Decomp_Sync_Array_BuildArray( self );
+}
+
+void Decomp_Sync_Array_Sync( void* array ) {
+	Decomp_Sync_Array*	self = (Decomp_Sync_Array*)array;
+
+	assert( self );
+
+	Decomp_Sync_SyncArray( self->sync, self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_Sync_Array_BuildArray( Decomp_Sync_Array* self ) {
+	Decomp*		decomp;
+	CommTopology*	commTopo;
+	unsigned	nInc, *inc;
+
+	assert( self );
+	assert( self->sync );
+
+	/* Shortcuts. */
+	decomp = Decomp_Sync_GetDecomp( self->sync );
+	commTopo = Decomp_Sync_GetCommTopology( self->sync );
+
+	/* Extract incidence. */
+	CommTopology_GetIncidence( commTopo, &nInc, &inc );
+
+	if( nInc ) {
+		/* Determine sink (local) information. */
+		if( self->sync->netSnks > 0 ) {
+			unsigned*	snkOffs;
+			unsigned*	snkSizes;
+			unsigned*	snkDisps;
+			unsigned	snkInd = 0;
+			unsigned	p_i;
+
+			/* Allocate/reallocate memory. */
+			snkDisps = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkDisps" );
+			snkSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkSizes" );
+			snkOffs = Memory_Alloc_Array( unsigned, self->sync->netSnks, "Decomp_Sync_Array::snkOffs" );
+
+			/* Calculate offsets and sizes. */
+			for( p_i = 0; p_i < nInc; p_i++ ) {
+				unsigned	snk_i;
+
+				snkSizes[p_i] = 0;
+				for( snk_i = 0; snk_i < self->sync->nSnks[p_i]; snk_i++ ) {
+					unsigned	dInd;
+
+					dInd = self->sync->snks[p_i][snk_i];
+					snkOffs[snkInd] = dInd * self->snkStride;
+					snkSizes[p_i] += self->itemSize;
+					snkInd++;
+				}
+			}
+
+			/* Calculate the displacements. */
+			snkDisps[0] = 0;
+			for( p_i = 1; p_i < nInc; p_i++ )
+				snkDisps[p_i] = snkDisps[p_i - 1] + snkSizes[p_i - 1];
+
+			/* Store arrays. */
+			self->snkOffs = snkOffs;
+			self->snkDisps = snkDisps;
+			self->snkSizes = snkSizes;
+		}
+		else {
+			/* Store null information. */
+			self->snkOffs = NULL;
+			self->snkDisps = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkDisps" );
+			self->snkSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkSizes" );
+			memset( self->snkDisps, 0, nInc * sizeof(unsigned) );
+			memset( self->snkSizes, 0, nInc * sizeof(unsigned) );
+		}
+
+		/* Determine source (shadow) information. */
+		if( self->sync->netSrcs > 0 ) {
+			unsigned*	srcOffs;
+			unsigned*	srcSizes;
+			unsigned*	srcDisps;
+			unsigned	srcInd = 0;
+			unsigned	p_i;
+
+			/* Allocate/reallocate memory. */
+			srcDisps = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::srcDisps" );
+			srcSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::srcSizes" );
+			srcOffs = Memory_Alloc_Array( unsigned, self->sync->netSrcs, "Decomp_Sync_Array::srcOffs" );
+
+			/* Calculate offsets and sizes. */
+			for( p_i = 0; p_i < nInc; p_i++ ) {
+				unsigned	src_i;
+
+				srcSizes[p_i] = 0;
+				for( src_i = 0; src_i < self->sync->nSrcs[p_i]; src_i++ ) {
+					unsigned	sInd;
+
+					sInd = self->sync->srcs[p_i][src_i];
+					assert( sInd >= Decomp_GetLocalSize( decomp ) );
+					sInd -= Decomp_GetLocalSize( decomp );
+					srcOffs[srcInd] = sInd * self->srcStride;
+					srcSizes[p_i] += self->itemSize;
+					srcInd++;
+				}
+			}
+
+			/* Calculate the displacements. */
+			srcDisps[0] = 0;
+			for( p_i = 1; p_i < nInc; p_i++ )
+				srcDisps[p_i] = srcDisps[p_i - 1] + srcSizes[p_i - 1];
+
+			/* Store arrays. */
+			self->srcOffs = srcOffs;
+			self->srcDisps = srcDisps;
+			self->srcSizes = srcSizes;
+		}
+		else {
+			/* Store null information. */
+			self->srcOffs = NULL;
+			self->srcDisps = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::srcDisps" );
+			self->srcSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::srcSizes" );
+			memset( self->srcDisps, 0, nInc * sizeof(unsigned) );
+			memset( self->srcSizes, 0, nInc * sizeof(unsigned) );
+		}
+	}
+	else {
+		self->snkOffs = NULL;
+		self->snkDisps = NULL;
+		self->snkSizes = NULL;
+		self->srcOffs = NULL;
+		self->srcDisps = NULL;
+		self->srcSizes = NULL;
+	}
+}
+
+void Decomp_Sync_Array_Destruct( Decomp_Sync_Array* self ) {
+	if( self->sync )
+		List_Remove( self->sync->arrays, &self );
+
+	self->snkArray = NULL;
+	self->snkStride = 0;
+	self->srcArray = NULL;
+	self->srcStride = 0;
+	self->itemSize = 0;
+
+	KillArray( self->snkDisps );
+	KillArray( self->snkSizes );
+	KillArray( self->snkOffs );
+	KillArray( self->srcDisps );
+	KillArray( self->srcSizes );
+	KillArray( self->srcOffs );
+	self->itemSize = 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Array.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Array.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomp_Sync_Array.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Decomp_Sync_Array_h__
+#define __Domain_Mesh_Decomp_Sync_Array_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Sync_Array_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	#define __Decomp_Sync_Array		\
+		/* General info */		\
+		__Stg_Class			\
+						\
+		/* Virtual info */		\
+						\
+		/* Decomp_Sync_Array info */	\
+		Decomp_Sync*	sync;		\
+						\
+		void*		snkArray;	\
+		unsigned	snkStride;	\
+		unsigned*	snkDisps;	\
+		unsigned*	snkSizes;	\
+		unsigned*	snkOffs;	\
+						\
+		void*		srcArray;	\
+		unsigned	srcStride;	\
+		unsigned*	srcDisps;	\
+		unsigned*	srcSizes;	\
+		unsigned*	srcOffs;	\
+						\
+		size_t		itemSize;
+
+	struct Decomp_Sync_Array { __Decomp_Sync_Array };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_SYNC_ARRAY_DEFARGS	\
+		STG_CLASS_DEFARGS
+
+	#define DECOMP_SYNC_ARRAY_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	Decomp_Sync_Array* Decomp_Sync_Array_New();
+	Decomp_Sync_Array* _Decomp_Sync_Array_New( DECOMP_SYNC_ARRAY_DEFARGS );
+	void _Decomp_Sync_Array_Init( Decomp_Sync_Array* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomp_Sync_Array_Delete( void* array );
+	void _Decomp_Sync_Array_Print( void* array, Stream* stream );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Decomp_Sync_Array_SetSync( void* array, Decomp_Sync* sync );
+	void Decomp_Sync_Array_SetMemory( void* array, 
+					  void* localArray, void* remoteArray, 
+					  size_t localStride, size_t remoteStride, 
+					  size_t itemSize );
+	void Decomp_Sync_Array_Sync( void* array );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_Sync_Array_BuildArray( Decomp_Sync_Array* self );
+	void Decomp_Sync_Array_Destruct( Decomp_Sync_Array* self );
+
+#endif /* __Domain_Mesh_Decomp_Sync_Array_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Claim.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Claim.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,270 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomp_Sync_Claim.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "Decomp_Sync_Claim.h"
+
+
+/* Textual name of this class */
+const Type Decomp_Sync_Claim_Type = "Decomp_Sync_Claim";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomp_Sync_Claim* Decomp_Sync_Claim_New( Name name ) {
+	return _Decomp_Sync_Claim_New( sizeof(Decomp_Sync_Claim), 
+				       Decomp_Sync_Claim_Type, 
+				       _Decomp_Sync_Claim_Delete, 
+				       _Decomp_Sync_Claim_Print, 
+				       _Decomp_Sync_Claim_Copy, 
+				       (void* (*)(Name))_Decomp_Sync_Claim_New, 
+				       _Decomp_Sync_Claim_Construct, 
+				       _Decomp_Sync_Claim_Build, 
+				       _Decomp_Sync_Claim_Initialise, 
+				       _Decomp_Sync_Claim_Execute, 
+				       _Decomp_Sync_Claim_Destroy, 
+				       name, 
+				       NON_GLOBAL, 
+				       Decomp_Sync_Claim_Select );
+}
+
+Decomp_Sync_Claim* _Decomp_Sync_Claim_New( DECOMP_SYNC_CLAIM_DEFARGS ) {
+	Decomp_Sync_Claim* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp_Sync_Claim) );
+	self = (Decomp_Sync_Claim*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+	self->selectFunc = selectFunc;
+
+	/* Decomp_Sync_Claim info */
+	_Decomp_Sync_Claim_Init( self );
+
+	return self;
+}
+
+void _Decomp_Sync_Claim_Init( Decomp_Sync_Claim* self ) {
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomp_Sync_Claim_Delete( void* claim ) {
+	Decomp_Sync_Claim*	self = (Decomp_Sync_Claim*)claim;
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _Decomp_Sync_Claim_Print( void* claim, Stream* stream ) {
+	Decomp_Sync_Claim*	self = (Decomp_Sync_Claim*)claim;
+	
+	/* Set the Journal for printing informations */
+	Stream* claimStream;
+	claimStream = Journal_Register( InfoStream_Type, "Decomp_Sync_ClaimStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomp_Sync_Claim (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _Decomp_Sync_Claim_Copy( void* claim, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	Decomp_Sync_Claim*	self = (Decomp_Sync_Claim*)claim;
+	Decomp_Sync_Claim*	newDecomp_Sync_Claim;
+	PtrMap*	map = ptrMap;
+	Bool	ownMap = False;
+
+	/* Damn me for making copying so difficult... what was I thinking? */
+	
+	/* We need to create a map if it doesn't already exist. */
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newDecomp_Sync_Claim = (Decomp_Sync_Claim*)_Mesh_Copy( self, destProc_I, deep, nameExt, map );
+	
+	/* Copy the virtual methods here. */
+
+	/* Deep or shallow? */
+	if( deep ) {
+	}
+	else {
+	}
+	
+	/* If we own the map, get rid of it here. */
+	if( ownMap ) Stg_Class_Delete( map );
+	
+	return (void*)newDecomp_Sync_Claim;
+#endif
+
+	return NULL;
+}
+
+void _Decomp_Sync_Claim_Construct( void* claim, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Decomp_Sync_Claim_Build( void* claim, void* data ) {
+}
+
+void _Decomp_Sync_Claim_Initialise( void* claim, void* data ) {
+}
+
+void _Decomp_Sync_Claim_Execute( void* claim, void* data ) {
+}
+
+void _Decomp_Sync_Claim_Destroy( void* claim, void* data ) {
+}
+
+void Decomp_Sync_Claim_Select( void* claim, Decomp_Sync* sync, unsigned nRequired, unsigned* required, 
+			       unsigned* nLocals, unsigned** locals )
+{
+	Decomp_Sync_Claim*	self = (Decomp_Sync_Claim*)claim;
+	RangeSet*	lSet;
+
+	assert( self );
+	assert( !nRequired || required );
+
+	/* Build a range set of local indices. */
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nRequired, required );
+
+	/* Determine ownership. */
+	Decomp_Sync_Claim_ClaimOwnership( self, sync->commTopo, nRequired, required, lSet, sync->isects, 
+					  nLocals, locals, &sync->nRemotes, &sync->remotes );
+
+	/* Free the local set. */
+	FreeObject( lSet );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_Sync_Claim_ClaimOwnership( Decomp_Sync_Claim* self, CommTopology* topo, unsigned nRequired, unsigned* required, 
+				       RangeSet* lSet, RangeSet** isects, 
+				       unsigned* nLocals, unsigned** locals, unsigned* nRemotes, unsigned** remotes )
+{
+	unsigned	rank, nProcs;
+	MPI_Comm	comm;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	nBytes;
+	Stg_Byte*	bytes;
+	RangeSet*	tmpClaimed;
+	unsigned	tag = 6669;
+	unsigned	p_i, p_j;
+
+	/* Get basic MPI info. */
+	rank = CommTopology_GetGlobalCommRank( topo );
+	nProcs = CommTopology_GetGlobalCommSize( topo );
+	comm = CommTopology_GetGlobalComm( topo );
+
+	/* Extract our neighbouring processors. */
+	CommTopology_GetIncidence( topo, &nInc, &inc );
+
+	/* Figure out where info is coming from and going to. Note that the incidence
+	   is always ordered from lowest to highest rank. */
+	tmpClaimed = RangeSet_New();
+	for( p_i = 0; p_i < nInc; p_i++ ) {
+		MPI_Status	status;
+
+		if( inc[p_i] > rank )
+			break;
+
+		/* Receive from neighbour which indices it has taken. */
+		MPI_Recv( &nBytes, 1, MPI_UNSIGNED, inc[p_i], tag, comm, &status );
+		bytes = Memory_Alloc_Array_Unnamed( Stg_Byte, nBytes );
+		MPI_Recv( bytes, nBytes, MPI_BYTE, inc[p_i], tag, comm, &status );
+		RangeSet_Unpickle( tmpClaimed, nBytes, bytes );
+		FreeArray( bytes );
+
+		/* Subtract from our claimed set. */
+		RangeSet_Subtraction( lSet, tmpClaimed );
+	}
+	FreeObject( tmpClaimed );
+
+	/* Extract our ownership. */
+	Decomp_Sync_Claim_BuildIndices( self, nRequired, required, lSet, 
+					nLocals, locals, nRemotes, remotes );
+
+	/* Update remaining neighbours as to which indices we've taken. */
+	for( p_j = p_i; p_j < nInc; p_j++ ) {
+		RangeSet*	intersect;
+
+		intersect = RangeSet_DeepCopy( isects[p_j] );
+		RangeSet_Intersection( intersect, lSet );
+		RangeSet_Pickle( intersect, &nBytes, &bytes );
+		MPI_Send( &nBytes, 1, MPI_UNSIGNED, inc[p_j], tag, comm );
+		MPI_Send( bytes, nBytes, MPI_BYTE, inc[p_j], tag, comm );
+		FreeArray( bytes );
+	}
+}
+
+void Decomp_Sync_Claim_BuildIndices( Decomp_Sync_Claim* self, unsigned nRequired, unsigned* required, RangeSet* claimed, 
+				     unsigned* nLocals, unsigned** locals, unsigned* nRemotes, unsigned** remotes )
+{
+	RangeSet*	rSet;
+
+	/* Extract indices. */
+	RangeSet_GetIndices( claimed, nLocals, locals );
+
+	/* Build a set of remotes. */
+	rSet = RangeSet_New();
+	RangeSet_SetIndices( rSet, nRequired, required );
+	RangeSet_Subtraction( rSet, claimed );
+	RangeSet_GetIndices( rSet, nRemotes, remotes );
+
+	/* Destroy rental set. */
+	FreeObject( rSet );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Claim.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Claim.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomp_Sync_Claim.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Decomp_Sync_Claim_h__
+#define __Domain_Mesh_Decomp_Sync_Claim_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Sync_Claim_Type;
+
+	/** Virtual function types */
+	typedef void (Decomp_Sync_Claim_SelectFunc)( void* claim, Decomp_Sync* sync, unsigned nRequired, unsigned* required, 
+						     unsigned* nLocals, unsigned** locals );
+
+	/** Mesh class contents */
+	#define __Decomp_Sync_Claim				\
+		/* General info */				\
+		__Stg_Component					\
+								\
+		/* Virtual info */				\
+		Decomp_Sync_Claim_SelectFunc*	selectFunc;	\
+								\
+		/* Decomp_Sync_Claim info */
+
+	struct Decomp_Sync_Claim { __Decomp_Sync_Claim };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_SYNC_CLAIM_DEFARGS			\
+		STG_COMPONENT_DEFARGS,				\
+		Decomp_Sync_Claim_SelectFunc*	selectFunc
+
+	#define DECOMP_SYNC_CLAIM_PASSARGS		\
+		STG_COMPONENT_PASSARGS, selectFunc
+
+	Decomp_Sync_Claim* Decomp_Sync_Claim_New( Name name );
+	Decomp_Sync_Claim* _Decomp_Sync_Claim_New( DECOMP_SYNC_CLAIM_DEFARGS );
+	void _Decomp_Sync_Claim_Init( Decomp_Sync_Claim* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomp_Sync_Claim_Delete( void* claim );
+	void _Decomp_Sync_Claim_Print( void* claim, Stream* stream );
+
+	#define Decomp_Sync_Claim_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Decomp_Sync_Claim_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Decomp_Sync_Claim_Copy( void* claim, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _Decomp_Sync_Claim_Construct( void* claim, Stg_ComponentFactory* cf, void* data );
+	void _Decomp_Sync_Claim_Build( void* claim, void* data );
+	void _Decomp_Sync_Claim_Initialise( void* claim, void* data );
+	void _Decomp_Sync_Claim_Execute( void* claim, void* data );
+	void _Decomp_Sync_Claim_Destroy( void* claim, void* data );
+
+	void Decomp_Sync_Claim_Select( void* claim, Decomp_Sync* sync, unsigned nRequired, unsigned* required, 
+				       unsigned* nLocals, unsigned** locals );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_Sync_Claim_ClaimOwnership( Decomp_Sync_Claim* self, CommTopology* topo, unsigned nRequired, unsigned* required, 
+					       RangeSet* lSet, RangeSet** isects, 
+					       unsigned* nLocals, unsigned** locals, unsigned* nRemotes, unsigned** remotes );
+	void Decomp_Sync_Claim_BuildIndices( Decomp_Sync_Claim* self, unsigned nRequired, unsigned* required, RangeSet* claimed, 
+					     unsigned* nLocals, unsigned** locals, unsigned* nRemotes, unsigned** remotes );
+
+#endif /* __Domain_Mesh_Decomp_Sync_Claim_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Claim.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Claim.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Decomp_Sync_Claim</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Negotiate.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Negotiate.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,363 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomp_Sync_Negotiate.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "Decomp_Sync_Negotiate.h"
+
+
+/* Textual name of this class */
+const Type Decomp_Sync_Negotiate_Type = "Decomp_Sync_Negotiate";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomp_Sync_Negotiate* Decomp_Sync_Negotiate_New( Name name ) {
+	return _Decomp_Sync_Negotiate_New( sizeof(Decomp_Sync_Negotiate), 
+					   Decomp_Sync_Negotiate_Type, 
+					   _Decomp_Sync_Negotiate_Delete, 
+					   _Decomp_Sync_Negotiate_Print, 
+					   _Decomp_Sync_Negotiate_Copy, 
+					   (void* (*)(Name))_Decomp_Sync_Negotiate_New, 
+					   _Decomp_Sync_Negotiate_Construct, 
+					   _Decomp_Sync_Negotiate_Build, 
+					   _Decomp_Sync_Negotiate_Initialise, 
+					   _Decomp_Sync_Negotiate_Execute, 
+					   _Decomp_Sync_Negotiate_Destroy, 
+					   name, 
+					   NON_GLOBAL, 
+					   Decomp_Sync_Negotiate_Select );
+}
+
+Decomp_Sync_Negotiate* _Decomp_Sync_Negotiate_New( DECOMP_SYNC_NEGOTIATE_DEFARGS ) {
+	Decomp_Sync_Negotiate* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp_Sync_Negotiate) );
+	self = (Decomp_Sync_Negotiate*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+	self->selectFunc = selectFunc;
+
+	/* Decomp_Sync_Negotiate info */
+	_Decomp_Sync_Negotiate_Init( self );
+
+	return self;
+}
+
+void _Decomp_Sync_Negotiate_Init( Decomp_Sync_Negotiate* self ) {
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomp_Sync_Negotiate_Delete( void* negotiate ) {
+	Decomp_Sync_Negotiate*	self = (Decomp_Sync_Negotiate*)negotiate;
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _Decomp_Sync_Negotiate_Print( void* negotiate, Stream* stream ) {
+	Decomp_Sync_Negotiate*	self = (Decomp_Sync_Negotiate*)negotiate;
+	
+	/* Set the Journal for printing informations */
+	Stream* negotiateStream;
+	negotiateStream = Journal_Register( InfoStream_Type, "Decomp_Sync_NegotiateStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomp_Sync_Negotiate (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _Decomp_Sync_Negotiate_Copy( void* negotiate, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	Decomp_Sync_Negotiate*	self = (Decomp_Sync_Negotiate*)negotiate;
+	Decomp_Sync_Negotiate*	newDecomp_Sync_Negotiate;
+	PtrMap*	map = ptrMap;
+	Bool	ownMap = False;
+
+	/* Damn me for making copying so difficult... what was I thinking? */
+	
+	/* We need to create a map if it doesn't already exist. */
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newDecomp_Sync_Negotiate = (Decomp_Sync_Negotiate*)_Mesh_Copy( self, destProc_I, deep, nameExt, map );
+	
+	/* Copy the virtual methods here. */
+
+	/* Deep or shallow? */
+	if( deep ) {
+	}
+	else {
+	}
+	
+	/* If we own the map, get rid of it here. */
+	if( ownMap ) Stg_Class_Delete( map );
+	
+	return (void*)newDecomp_Sync_Negotiate;
+#endif
+
+	return NULL;
+}
+
+void _Decomp_Sync_Negotiate_Construct( void* negotiate, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Decomp_Sync_Negotiate_Build( void* negotiate, void* data ) {
+}
+
+void _Decomp_Sync_Negotiate_Initialise( void* negotiate, void* data ) {
+}
+
+void _Decomp_Sync_Negotiate_Execute( void* negotiate, void* data ) {
+}
+
+void _Decomp_Sync_Negotiate_Destroy( void* negotiate, void* data ) {
+}
+
+void Decomp_Sync_Negotiate_Select( void* negotiate, Decomp_Sync* sync ) {
+	Decomp_Sync_Negotiate*	self = (Decomp_Sync_Negotiate*)negotiate;
+	CommTopology*		commTopo;
+	unsigned		rank;
+	unsigned		nInc;
+	unsigned*		inc;
+	unsigned*		nFound;
+	unsigned**		found;
+	unsigned*		nUniques;
+	unsigned**		uniques;
+	unsigned		mostUniques;
+	unsigned**		srcs;
+	unsigned		p_i;
+
+	assert( self );
+	assert( sync );
+	assert( sync->commTopo );
+
+	/* Shortcuts. */
+	commTopo = sync->commTopo;
+	rank = CommTopology_GetGlobalCommRank( commTopo );
+
+	/* Locate remote indices. */
+	Decomp_Sync_Negotiate_RemoteSearch( self, sync, &nFound, &found );
+
+	/* Get processor incidence. */
+	CommTopology_GetIncidence( commTopo, &nInc, &inc );
+
+	if( nInc ) {
+		/* Set up the source arrays. */
+		sync->nSrcs = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync::nSrcs" );
+		srcs = Memory_Alloc_Array_Unnamed( unsigned*, nInc );
+		memset( sync->nSrcs, 0, nInc * sizeof(unsigned) );
+		memset( srcs, 0, nInc * sizeof(unsigned*) );
+
+		/* Select source procs from which to retrieve required nodes such that communications are minimized. */
+		nUniques = Memory_Alloc_Array_Unnamed( unsigned, nInc );
+		uniques = Memory_Alloc_2DComplex_Unnamed( unsigned, nInc, nFound );
+		memset( nUniques, 0, nInc * sizeof(unsigned) );
+
+		do {
+			unsigned	mostProc = 0;
+
+			/* Loop over procs and find unique nodes per proc. ie. the most nodes not already covered by
+			   an existing source. */
+			mostUniques = 0;
+			for( p_i = 0; p_i < nInc; p_i++ ) {
+				unsigned	fnd_i;
+
+				/* Clear the number of uniques. */
+				nUniques[p_i] = 0;
+
+				/* If there are no founds for this proc or we've already sourced it, then skip. */
+				if( nFound[p_i] == 0 || sync->nSrcs[p_i] > 0 )
+					continue;
+
+				/* Hunt down unique global indices. */
+				for( fnd_i = 0; fnd_i < nFound[p_i]; fnd_i++ ) {
+					unsigned	p_j;
+
+					for( p_j = 0; p_j < nInc; p_j++ ) {
+						unsigned	src_i;
+
+						for( src_i = 0; src_i < sync->nSrcs[p_i]; src_i++ ) {
+							if( srcs[p_i][src_i] == found[p_i][fnd_i] )
+								break;
+						}
+						if( src_i < sync->nSrcs[p_i] )
+							break;
+					}
+					if( p_j == nInc )
+						uniques[p_i][nUniques[p_i]++] = found[p_i][fnd_i];
+				}
+
+				/* Determine which proc has the most uniques and store. */
+				if( nUniques[p_i] > mostUniques ) {
+					mostUniques = nUniques[p_i];
+					mostProc = p_i;
+				}
+			}
+
+			/* Store result. */
+			if( mostUniques ) {
+				sync->nSrcs[mostProc] = mostUniques;
+				if( mostUniques ) {
+					srcs[mostProc] = Memory_Alloc_Array_Unnamed( unsigned, mostUniques );
+					memcpy( srcs[mostProc], uniques[mostProc], mostUniques * sizeof(unsigned) );
+				}
+			}
+		}
+		while( mostUniques );
+
+		/* Proper allocation. */
+		sync->srcs = Memory_Alloc_2DComplex( unsigned, nInc, sync->nSrcs, "Decomp_Sync::srcs" );
+		for( p_i = 0; p_i < nInc; p_i++ ) {
+			if( sync->nSrcs[p_i] )
+				memcpy( sync->srcs[p_i], srcs[p_i], sync->nSrcs[p_i] * sizeof(unsigned) );
+		}
+
+		/* Get rid of all the resources so far. */
+		FreeArray2D( nInc, srcs );
+		FreeArray( nUniques );
+		FreeArray( uniques );
+
+		/* Communicate back to all procs our selection.  Note that even though most procs will not need to send
+		   anything here, we still need to let them know that. */
+		CommTopology_Alltoall( commTopo, 
+				       sync->nSrcs, (void**)sync->srcs, 
+				       &sync->nSnks, (void***)&sync->snks, 
+				       sizeof(unsigned) );
+
+		/* Calculate net values for source and sink. */
+		for( p_i = 0; p_i < nInc; p_i++ ) {
+			sync->netSrcs += sync->nSrcs[p_i];
+			sync->netSnks += sync->nSnks[p_i];
+		}
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_Sync_Negotiate_RemoteSearch( Decomp_Sync_Negotiate* self, Decomp_Sync* sync, 
+					 unsigned** nRemFound, unsigned*** remFound )
+{
+	unsigned*	nFound;
+	unsigned**	found;
+	RangeSet*	rSet;
+	unsigned	nBytes;
+	Stg_Byte*	bytes;
+	unsigned*	remNBytes;
+	unsigned**	remBytes;
+	RangeSet**	remSets;
+	unsigned	p_i;
+
+	assert( self );
+	assert( sync );
+	assert( nRemFound );
+	assert( remFound );
+
+	if( sync->commTopo->nInc ) {
+		/* Build a range set of our remotes and pickle. */
+		rSet = RangeSet_New();
+		RangeSet_SetIndices( rSet, sync->nRemotes, sync->remotes );
+		RangeSet_Pickle( rSet, &nBytes, &bytes );
+
+		/* Broadcast our remotes to neighbours. */
+		CommTopology_Allgather( sync->commTopo, 
+					nBytes, bytes, 
+					&remNBytes, (void***)&remBytes, 
+					sizeof(Stg_Byte) );
+
+		/* Free bytes. */
+		FreeArray( bytes );
+
+		/* Unpickle range sets. */
+		remSets = Memory_Alloc_Array_Unnamed( RangeSet*, sync->commTopo->nInc );
+		for( p_i = 0; p_i < sync->commTopo->nInc; p_i++ ) {
+			remSets[p_i] = RangeSet_New();
+			RangeSet_Unpickle( remSets[p_i], remNBytes[p_i], (void*)remBytes[p_i] );
+		}
+
+		/* Free remote bytes. */
+		FreeArray( remNBytes );
+		FreeArray( remBytes );
+
+		/* Replace our remote range set with a local one, then intersect remote sets. */
+		RangeSet_SetIndices( rSet, sync->decomp->nLocals, sync->decomp->locals );
+		nFound = Memory_Alloc_Array_Unnamed( unsigned, sync->commTopo->nInc );
+		found = Memory_Alloc_Array_Unnamed( unsigned*, sync->commTopo->nInc );
+		for( p_i = 0; p_i < sync->commTopo->nInc; p_i++ ) {
+			RangeSet_Intersection( remSets[p_i], rSet );
+			RangeSet_GetIndices( remSets[p_i], nFound + p_i, found + p_i );
+			FreeObject( remSets[p_i] );
+		}
+
+		/* Free remote set array. */
+		FreeArray( remSets );
+
+		/* Send back all the ones we found and receive from all others all our requireds they found. */
+		CommTopology_Alltoall( sync->commTopo, 
+				       nFound, (void**)found, 
+				       nRemFound, (void***)remFound, 
+				       sizeof(unsigned) );
+
+		/* Release some memory. */
+		FreeArray( nFound );
+		FreeArray2D( sync->commTopo->nInc, found );
+	}
+	else {
+		*nRemFound = 0;
+		*remFound = NULL;
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Negotiate.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Negotiate.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomp_Sync_Negotiate.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Decomp_Sync_Negotiate_h__
+#define __Domain_Mesh_Decomp_Sync_Negotiate_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Sync_Negotiate_Type;
+
+	/** Virtual function types */
+	typedef void (Decomp_Sync_Negotiate_SelectFunc)( void* negotiate, Decomp_Sync* decomp );
+
+	/** Mesh class contents */
+	#define __Decomp_Sync_Negotiate					\
+		/* General info */					\
+		__Stg_Component						\
+									\
+		/* Virtual info */					\
+		Decomp_Sync_Negotiate_SelectFunc*	selectFunc;	\
+									\
+		/* Decomp_Sync_Negotiate info */
+
+	struct Decomp_Sync_Negotiate { __Decomp_Sync_Negotiate };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_SYNC_NEGOTIATE_DEFARGS				\
+		STG_COMPONENT_DEFARGS,					\
+		Decomp_Sync_Negotiate_SelectFunc*	selectFunc
+
+	#define DECOMP_SYNC_NEGOTIATE_PASSARGS		\
+		STG_COMPONENT_PASSARGS, selectFunc
+
+	Decomp_Sync_Negotiate* Decomp_Sync_Negotiate_New( Name name );
+	Decomp_Sync_Negotiate* _Decomp_Sync_Negotiate_New( DECOMP_SYNC_NEGOTIATE_DEFARGS );
+	void _Decomp_Sync_Negotiate_Init( Decomp_Sync_Negotiate* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomp_Sync_Negotiate_Delete( void* negotiate );
+	void _Decomp_Sync_Negotiate_Print( void* negotiate, Stream* stream );
+
+	#define Decomp_Sync_Negotiate_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Decomp_Sync_Negotiate_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Decomp_Sync_Negotiate_Copy( void* negotiate, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _Decomp_Sync_Negotiate_Construct( void* negotiate, Stg_ComponentFactory* cf, void* data );
+	void _Decomp_Sync_Negotiate_Build( void* negotiate, void* data );
+	void _Decomp_Sync_Negotiate_Initialise( void* negotiate, void* data );
+	void _Decomp_Sync_Negotiate_Execute( void* negotiate, void* data );
+	void _Decomp_Sync_Negotiate_Destroy( void* negotiate, void* data );
+
+	void Decomp_Sync_Negotiate_Select( void* negotiate, Decomp_Sync* decomp );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_Sync_Negotiate_RemoteSearch( Decomp_Sync_Negotiate* self, Decomp_Sync* decomp, 
+						 unsigned** nRemFound, unsigned*** remFound );
+
+#endif /* __Domain_Mesh_Decomp_Sync_Negotiate_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomp_Sync_Negotiate.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomp_Sync_Negotiate.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Decomp_Sync_Negotiate</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomposer.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomposer.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,463 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Decomposer.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Decomposer_Type = "Decomposer";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomposer* Decomposer_New( Name name ) {
+	return _Decomposer_New( sizeof(Decomposer), 
+				Decomposer_Type, 
+				_Decomposer_Delete, 
+				_Decomposer_Print, 
+				NULL, 
+				_Decomposer_Decompose );
+}
+
+Decomposer* _Decomposer_New( DECOMPOSER_DEFARGS ) {
+	Decomposer* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomposer) );
+	self = (Decomposer*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+	self->decomposeFunc = decomposeFunc;
+
+	/* Decomposer info */
+	_Decomposer_Init( self );
+
+	return self;
+}
+
+void _Decomposer_Init( Decomposer* self ) {
+	self->comm = MPI_COMM_WORLD;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomposer_Delete( void* decomposer ) {
+	Decomposer*	self = (Decomposer*)decomposer;
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _Decomposer_Print( void* decomposer, Stream* stream ) {
+	Decomposer*	self = (Decomposer*)decomposer;
+	
+	/* Set the Journal for printing informations */
+	Stream* decomposerStream;
+	decomposerStream = Journal_Register( InfoStream_Type, "DecomposerStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomposer (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+void _Decomposer_Decompose( void* decomposer, unsigned nDomains, unsigned* domains, 
+			    CommTopology** commTopo, Decomp** decomp, Decomp_Sync** sync )
+{
+	Decomposer*	self = (Decomposer*)decomposer;
+	CommTopology*	tmpCommTopo;
+	Decomp*		tmpDecomp;
+	RangeSet**	isects;
+
+	assert( self );
+	assert( sync );
+
+	if( commTopo && *commTopo ) {
+		Decomposer_BuildLocalIntersections( self, nDomains, domains, 
+						    *commTopo, &isects );
+		tmpCommTopo = *commTopo;
+	}
+	else {
+		Decomposer_BuildCommTopology( self, nDomains, domains, 
+					      &tmpCommTopo, &isects );
+
+		/* Keep communication topology? */
+		if( commTopo )
+			*commTopo = tmpCommTopo;
+	}
+
+	Decomposer_Claim( self, tmpCommTopo, isects, nDomains, domains, 
+			  &tmpDecomp, sync );
+
+	/* Interested in keeping decomp? */
+	if( decomp )
+		*decomp = tmpDecomp;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Decomposer_SetComm( void* decomposer, MPI_Comm comm ) {
+	Decomposer*	self = (Decomposer*)decomposer;
+
+	assert( self );
+
+	self->comm = comm;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomposer_BuildCommTopology( Decomposer* self, unsigned nDomains, unsigned* domains, 
+				   CommTopology** commTopo, RangeSet*** isects )
+{
+	unsigned	rank, nProcs;
+	RangeSet*	lSet;
+	MPI_Group	worldGroup;
+	unsigned*	worldRanks;
+	unsigned*	subRanks;
+	unsigned	nCommInc;
+	unsigned*	commInc;
+	RangeSet**	iSets;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !nDomains || domains );
+	assert( commTopo );
+	assert( isects );
+
+	/* Get basic MPI info. */
+	MPI_Comm_rank( self->comm, (int*)&rank );
+	MPI_Comm_size( self->comm, (int*)&nProcs );
+
+	/* We'll need to modify the world group. */
+	MPI_Comm_group( self->comm, &worldGroup );
+	worldRanks = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	subRanks = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+
+	/* We need space to store index intersections. */
+	iSets = Memory_Alloc_Array_Unnamed( RangeSet*, nProcs );
+	memset( iSets, 0, nProcs * sizeof(RangeSet*) );
+
+	/* Create a local set of required indices. */
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nDomains, domains );
+
+	/* Tackle each processor one at a time. */
+	for( p_i = 0; p_i < nProcs - 1; p_i++ ) {
+		int		groupRange[3];
+		MPI_Group	subGroup;
+		MPI_Comm	subComm;
+		unsigned	p_j;
+
+		/* Set the processor range. */
+		groupRange[0] = p_i;
+		groupRange[1] = nProcs - 1;
+		groupRange[2] = 1;
+
+		/* We'll need a new group, as we only want to communicate using a triangular scheme. */
+		MPI_Group_range_incl( worldGroup, 1, &groupRange, &subGroup );
+		MPI_Comm_create( self->comm, subGroup, &subComm );
+
+		/* Only continue if we're part of the sub-communicator. */
+		if( rank >= p_i ) {
+			unsigned	nBytes;
+			Stg_Byte*	bytes;
+			unsigned*	nFounds;
+			Stg_Byte**	founds;
+
+			/* Create a mapping between ranks. */
+			for( p_j = p_i; p_j < nProcs; p_j++ )
+				subRanks[p_j] = p_j - p_i;
+			MPI_Group_translate_ranks( subGroup, nProcs - p_i, (int*)(subRanks + p_i), 
+						   worldGroup, (int*)worldRanks );
+
+			if( p_i == rank )
+				RangeSet_Pickle( lSet, &nBytes, &bytes );
+
+			MPIArray_Bcast( &nBytes, (void**)&bytes, sizeof(Stg_Byte), subRanks[p_i], subComm );
+
+			if( p_i != rank ) {
+				/* Create the intersection. */
+				iSets[p_i] = RangeSet_New();
+				RangeSet_Unpickle( iSets[p_i], nBytes, bytes );
+				RangeSet_Intersection( iSets[p_i], lSet );
+
+				/* Pickle the intersection to send back. */
+				FreeArray( bytes );
+				RangeSet_Pickle( iSets[p_i], &nBytes, &bytes );
+			}
+			else {
+				KillArray( bytes );
+				nBytes = 0;
+			}
+
+			/* Retrieve the results and unpickle each of them. */
+			MPIArray_Gather( nBytes, bytes, &nFounds, (void***)&founds, sizeof(Stg_Byte), 
+					 subRanks[p_i], subComm );
+			if( p_i == rank ) {
+				for( p_j = 0; p_j < nProcs - p_i; p_j++ ) {
+					if( !nFounds[p_j] )
+						continue;
+
+					iSets[worldRanks[p_j]] = RangeSet_New();
+					RangeSet_Unpickle( iSets[worldRanks[p_j]], nFounds[p_j], founds[p_j] );
+				}
+
+				/* Free the found arrays. */
+				FreeArray( nFounds );
+				FreeArray( founds );
+			}
+			else {
+				/* Free pickled range set. */
+				FreeArray( bytes );
+			}
+
+			/* Destroy the sub-communicator. */
+			MPI_Comm_free( &subComm );
+		}
+
+		/* Destroy the sub-group. */
+		MPI_Group_free( &subGroup );
+	}
+
+	/* Free rank translation arrays and local range set. */
+	FreeArray( worldRanks );
+	FreeArray( subRanks );
+
+	/* Build a set of communication incidence. */
+	nCommInc = 0;
+	commInc = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		if( iSets[p_i] && iSets[p_i]->nInds )
+			commInc[nCommInc++] = p_i;
+	}
+
+	/* Create the communication topology, unless one has already been specified. */
+	*commTopo = CommTopology_New();
+	CommTopology_SetComm( *commTopo, self->comm );
+	CommTopology_SetIncidence( *commTopo, nCommInc, commInc );
+	FreeArray( commInc );
+
+	/* Build final intersections. */
+	CommTopology_GetIncidence( *commTopo, &nInc, &inc );
+	if( nInc ) {
+		unsigned	inc_i;
+
+		*isects = Memory_Alloc_Array_Unnamed( RangeSet*, nInc );
+		for( inc_i = 0; inc_i < nInc; inc_i++ )
+			(*isects)[inc_i] = iSets[inc[inc_i]];
+	}
+	else
+		*isects = NULL;
+
+	/* Free intersection array. */
+	FreeArray( iSets );
+}
+
+void Decomposer_BuildLocalIntersections( Decomposer* self, unsigned nDomains, unsigned* domains, 
+					 CommTopology* commTopo, RangeSet*** isects )
+{
+	unsigned	nIncRanks;
+	RangeSet*	lSet;
+	unsigned	nBytes, *nRemBytes, *nFndBytes;
+	Stg_Byte	*bytes, **remBytes, **fndBytes;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !nDomains || domains );
+	assert( commTopo );
+	assert( isects );
+
+	/* Get some crap. */
+	nIncRanks = CommTopology_GetIncidenceSize( commTopo );
+
+	/* We need space to store index intersections. */
+	*isects = Memory_Alloc_Array_Unnamed( RangeSet*, nIncRanks );
+	memset( *isects, 0, nIncRanks * sizeof(RangeSet*) );
+
+	/* Create a local set of required indices, send to everyone. */
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nDomains, domains );
+	RangeSet_Pickle( lSet, &nBytes, &bytes );
+	CommTopology_Allgather( commTopo, 
+				nBytes, bytes, 
+				&nRemBytes, &remBytes, 
+				sizeof(Stg_Byte) );
+
+	/* Done with bytes. */
+	FreeArray( bytes );
+
+	/* Build intersections. */
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		(*isects)[p_i] = RangeSet_New();
+		RangeSet_Unpickle( (*isects)[p_i], nRemBytes[p_i], remBytes[p_i] );
+		RangeSet_Intersection( (*isects)[p_i], lSet );
+		FreeArray( remBytes[p_i] );
+		RangeSet_Pickle( (*isects)[p_i], nRemBytes + p_i, remBytes + p_i );
+	}
+
+	/* Send back. */
+	CommTopology_Alltoall( commTopo, 
+			       nRemBytes, remBytes, 
+			       &nFndBytes, &fndBytes, 
+			       sizeof(Stg_Byte) );
+
+	/* Free unused arrays. */
+	FreeArray( nRemBytes );
+	FreeArray2D( nIncRanks, remBytes );
+
+	/* Extract our intersections. */
+	for( p_i = 0; p_i < nIncRanks; p_i++ )
+		RangeSet_Unpickle( (*isects)[p_i], nFndBytes[p_i], fndBytes[p_i] );
+
+	/* Free remaining arrays. */
+	FreeArray( nFndBytes );
+	FreeArray2D( nIncRanks, fndBytes );
+}
+
+void Decomposer_Claim( Decomposer* self, CommTopology* commTopo, RangeSet** isects, 
+		       unsigned nDomains, unsigned* domains, 
+		       Decomp** decomp, Decomp_Sync** sync )
+{
+	unsigned	rank, nProcs;
+	MPI_Comm	comm;
+	unsigned	nInc;
+	unsigned*	inc;
+	RangeSet*	lSet;
+	unsigned	nBytes;
+	Stg_Byte*	bytes;
+	RangeSet*	tmpClaimed;
+	unsigned	tag = 6669;
+	unsigned	p_i, p_j;
+
+	/* Get basic MPI info. */
+	comm = CommTopology_GetComm( commTopo );
+	MPI_Comm_rank( comm, (int*)&rank );
+	MPI_Comm_size( comm, (int*)&nProcs );
+
+	/* Build a set of domains. */
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, nDomains, domains );
+
+	/* Extract our neighbouring processors. */
+	CommTopology_GetIncidence( commTopo, &nInc, &inc );
+
+	/* Figure out where info is coming from and going to. Note that the incidence
+	   is always ordered from lowest to highest rank. */
+	tmpClaimed = RangeSet_New();
+	for( p_i = 0; p_i < nInc; p_i++ ) {
+		MPI_Status	status;
+
+		if( inc[p_i] > rank )
+			break;
+
+		/* Receive from neighbour which indices it has taken. */
+		MPI_Recv( &nBytes, 1, MPI_UNSIGNED, inc[p_i], tag, comm, &status );
+		bytes = Memory_Alloc_Array_Unnamed( Stg_Byte, nBytes );
+		MPI_Recv( bytes, nBytes, MPI_BYTE, inc[p_i], tag, comm, &status );
+		RangeSet_Unpickle( tmpClaimed, nBytes, bytes );
+		FreeArray( bytes );
+
+		/* Subtract from our claimed set. */
+		RangeSet_Subtraction( lSet, tmpClaimed );
+	}
+	FreeObject( tmpClaimed );
+
+	/* Update remaining neighbours as to which indices we've taken. */
+	for( p_j = p_i; p_j < nInc; p_j++ ) {
+		RangeSet*	intersect;
+
+		intersect = RangeSet_DeepCopy( isects[p_j] );
+		RangeSet_Intersection( intersect, lSet );
+		RangeSet_Pickle( intersect, &nBytes, &bytes );
+		MPI_Send( &nBytes, 1, MPI_UNSIGNED, inc[p_j], tag, comm );
+		MPI_Send( bytes, nBytes, MPI_BYTE, inc[p_j], tag, comm );
+		FreeArray( bytes );
+		FreeObject( intersect );
+	}
+
+	/* Extract our ownership. */
+	Decomposer_BuildIndices( self, nDomains, domains, lSet, 
+				 commTopo, decomp, sync );
+
+	/* Free local range set. */
+	FreeObject( lSet );
+}
+
+void Decomposer_BuildIndices( Decomposer* self, unsigned nDomains, unsigned* domains, RangeSet* claimed, 
+			      CommTopology* commTopo, Decomp** decomp, Decomp_Sync** sync )
+{
+	RangeSet*	rSet;
+	unsigned	nLocals, *locals;
+	unsigned	nRemotes, *remotes;
+
+	/* Extract local indices. */
+	*decomp = Decomp_New();
+	Decomp_SetComm( *decomp, self->comm );
+	locals = NULL;
+	RangeSet_GetIndices( claimed, &nLocals, &locals );
+	Decomp_SetLocals( *decomp, nLocals, locals );
+	FreeArray( locals );
+
+	/* Build a set of remotes. */
+	rSet = RangeSet_New();
+	RangeSet_SetIndices( rSet, nDomains, domains );
+	RangeSet_Subtraction( rSet, claimed );
+
+	/* Set remote indices. */
+	*sync = Decomp_Sync_New();
+	Decomp_Sync_SetDecomp( *sync, *decomp );
+	Decomp_Sync_SetCommTopology( *sync, commTopo );
+	remotes = NULL;
+	RangeSet_GetIndices( rSet, &nRemotes, &remotes );
+	Decomp_Sync_SetRemotes( *sync, nRemotes, remotes );
+	FreeArray( remotes );
+
+	/* Destroy rental set. */
+	FreeObject( rSet );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Decomposer.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Decomposer.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,113 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomposer.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Decomposer_h__
+#define __Domain_Mesh_Decomposer_h__
+
+	/** Textual name of this class */
+	extern const Type	Decomposer_Type;
+
+	/** Virtual function types */
+	typedef void (Decomposer_DecomposeFunc)( void* decomposer, unsigned nDomains, unsigned* domains, 
+						 CommTopology** commTopology, Decomp** decomp, Decomp_Sync** sync );
+
+	/** Class contents */
+	#define __Decomposer					\
+		/* General info */				\
+		__Stg_Class					\
+								\
+		/* Virtual info */				\
+		Decomposer_DecomposeFunc*	decomposeFunc;	\
+								\
+		/* Decomposer info */				\
+		MPI_Comm		comm;
+
+	struct Decomposer { __Decomposer };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMPOSER_DEFARGS				\
+		STG_CLASS_DEFARGS,				\
+		Decomposer_DecomposeFunc*	decomposeFunc
+
+	#define DECOMPOSER_PASSARGS			\
+		STG_CLASS_PASSARGS, decomposeFunc
+
+	Decomposer* Decomposer_New();
+	Decomposer* _Decomposer_New( DECOMPOSER_DEFARGS );
+	void _Decomposer_Init( Decomposer* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomposer_Delete( void* decomposer );
+	void _Decomposer_Print( void* decomposer, Stream* stream );
+
+	void _Decomposer_Decompose( void* decomposer, unsigned nDomains, unsigned* domains, 
+				    CommTopology** commTopology, Decomp** decomp, Decomp_Sync** sync );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Decomposer_SetComm( void* decomposer, MPI_Comm comm );
+
+	#define Decomposer_Decompose( decomposer, nDomains, domains, commTopo, decomp, sync )				\
+		(assert( (decomposer) && ((Decomposer*)decomposer)->decomposeFunc ),					\
+		 ((Decomposer*)decomposer)->decomposeFunc( decomposer, nDomains, domains, commTopo, decomp, sync ))
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomposer_BuildCommTopology( Decomposer* self, unsigned nDomains, unsigned* domains, 
+					   CommTopology** commTopo, RangeSet*** isects );
+	void Decomposer_BuildLocalIntersections( Decomposer* self, unsigned nDomains, unsigned* domains, 
+						 CommTopology* commTopo, RangeSet*** isects );
+	void Decomposer_Claim( Decomposer* self, CommTopology* topo, RangeSet** isects, 
+			       unsigned nDomains, unsigned* domains, 
+			       Decomp** decomp, Decomp_Sync** sync );
+	void Decomposer_BuildIndices( Decomposer* self, unsigned nDomains, unsigned* domains, RangeSet* claimed, 
+				      CommTopology* commTopo, Decomp** decomp, Decomp_Sync** sync );
+
+#endif /* __Domain_Mesh_Decomposer_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DictionaryGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DictionaryGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,159 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: DictionaryGenerator.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type DictionaryGenerator_Type = "DictionaryGenerator";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+DictionaryGenerator* DictionaryGenerator_New( Name name ) {
+	return _DictionaryGenerator_New( sizeof(DictionaryGenerator), 
+					DictionaryGenerator_Type, 
+					_DictionaryGenerator_Delete, 
+					_DictionaryGenerator_Print, 
+					 NULL, 
+					(void* (*)(Name))_DictionaryGenerator_New, 
+					_DictionaryGenerator_Construct, 
+					_DictionaryGenerator_Build, 
+					_DictionaryGenerator_Initialise, 
+					_DictionaryGenerator_Execute, 
+					_DictionaryGenerator_Destroy, 
+					name, 
+					NON_GLOBAL, 
+					DictionaryGenerator_Generate );
+}
+
+DictionaryGenerator* _DictionaryGenerator_New( DICTIONARYGENERATOR_DEFARGS ) {
+	DictionaryGenerator* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(DictionaryGenerator) );
+	self = (DictionaryGenerator*)_MeshGenerator_New( MESHGENERATOR_PASSARGS );
+
+	/* Virtual info */
+
+	/* DictionaryGenerator info */
+	_DictionaryGenerator_Init( self );
+
+	return self;
+}
+
+void _DictionaryGenerator_Init( DictionaryGenerator* self ) {
+	self->dict = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _DictionaryGenerator_Delete( void* generator ) {
+	DictionaryGenerator*	self = (DictionaryGenerator*)generator;
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _DictionaryGenerator_Print( void* generator, Stream* stream ) {
+	DictionaryGenerator*	self = (DictionaryGenerator*)generator;
+	
+	/* Set the Journal for printing informations */
+	Stream* generatorStream;
+	generatorStream = Journal_Register( InfoStream_Type, "DictionaryGeneratorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "DictionaryGenerator (ptr): (%p)\n", self );
+	_MeshGenerator_Print( self, stream );
+}
+
+void _DictionaryGenerator_Construct( void* generator, Stg_ComponentFactory* cf, void* data ) {
+	DictionaryGenerator*	self = (DictionaryGenerator*)generator;
+	Dictionary*		dict;
+
+	assert( self );
+	assert( cf );
+
+	/* Call parent construct. */
+	_MeshGenerator_Construct( self, cf, data );
+
+	/* Set the dictionary to the component dictionary. */
+	DictionaryGenerator_SetDictionary( self, cf->componentDict );
+}
+
+void _DictionaryGenerator_Build( void* generator, void* data ) {
+	_MeshGenerator_Build( generator, data );
+}
+
+void _DictionaryGenerator_Initialise( void* generator, void* data ) {
+}
+
+void _DictionaryGenerator_Execute( void* generator, void* data ) {
+}
+
+void _DictionaryGenerator_Destroy( void* generator, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void DictionaryGenerator_Generate( void* generator, void* _mesh ) {
+	DictionaryGenerator*	self = (DictionaryGenerator*)generator;
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	/* Sanity check. */
+	assert( self );
+	assert( self->dict );
+
+	/* For now, this can only work in serial. */
+	
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DictionaryGenerator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DictionaryGenerator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,99 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: DictionaryGenerator.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_DictionaryGenerator_h__
+#define __Domain_Mesh_DictionaryGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type DictionaryGenerator_Type;
+
+	/** Virtual function types */
+
+	/** DictionaryGenerator class contents */
+	#define __DictionaryGenerator		\
+		/* General info */		\
+		__MeshGenerator			\
+						\
+		/* Virtual info */		\
+						\
+		/* DictionaryGenerator info */	\
+		Dictionary*	dict;
+
+	struct DictionaryGenerator { __DictionaryGenerator };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DICTIONARYGENERATOR_DEFARGS	\
+		MESHGENERATOR_DEFARGS
+
+	#define DICTIONARYGENERATOR_PASSARGS	\
+		MESHGENERATOR_PASSARGS
+
+	DictionaryGenerator* DictionaryGenerator_New( Name name );
+	DictionaryGenerator* _DictionaryGenerator_New( DICTIONARYGENERATOR_DEFARGS );
+	void _DictionaryGenerator_Init( DictionaryGenerator* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _DictionaryGenerator_Delete( void* generator );
+	void _DictionaryGenerator_Print( void* generator, Stream* stream );
+	void _DictionaryGenerator_Construct( void* generator, Stg_ComponentFactory* cf, void* data );
+	void _DictionaryGenerator_Build( void* generator, void* data );
+	void _DictionaryGenerator_Initialise( void* generator, void* data );
+	void _DictionaryGenerator_Execute( void* generator, void* data );
+	void _DictionaryGenerator_Destroy( void* generator, void* data );
+
+	void DictionaryGenerator_Generate( void* generator, void* _mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void DictionaryGenerator_SetDictionary( void* generator, Dictionary* dict );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_DictionaryGenerator_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/DictionaryGenerator.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/DictionaryGenerator.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">DictionaryGenerator</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StgDomainMesh_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Finalise_h__
+#define __Domain_Mesh_Finalise_h__
+	
+	Bool StgDomainMesh_Finalise( void );
+	
+#endif /* __Domain_Mesh_Finalise_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Grid.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Grid.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,285 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Grid.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+
+
+/* Textual name of this class */
+const Type Grid_Type = "Grid";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Grid* Grid_New() {
+	return _Grid_New( sizeof(Grid), 
+			  Grid_Type, 
+			  _Grid_Delete, 
+			  _Grid_Print, 
+			  NULL );
+}
+
+Grid* _Grid_New( GRID_DEFARGS ) {
+	Grid*	self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Grid) );
+	self = (Grid*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Grid info */
+	_Grid_Init( self );
+
+	return self;
+}
+
+void _Grid_Init( Grid* self ) {
+	self->nDims = 0;
+	self->sizes = NULL;
+	self->basis = NULL;
+	self->nPoints = 0;
+
+	self->map = NULL;
+	self->invMap = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Grid_Delete( void* grid ) {
+	Grid*	self = (Grid*)grid;
+
+	FreeArray( self->sizes );
+	FreeArray( self->basis );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _Grid_Print( void* grid, Stream* stream ) {
+	Grid*	self = (Grid*)grid;
+
+	/* Set the Journal for printing informations */
+	Stream* gridStream;
+	gridStream = Journal_Register( InfoStream_Type, "GridStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Grid (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Grid_SetNumDims( void* grid, unsigned nDims ) {
+	Grid*	self = (Grid*)grid;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* If we're changing dimensions, kill everything and begin again. */
+	KillArray( self->sizes );
+	KillArray( self->basis );
+
+	/* Set dimensions. */
+	self->nDims = nDims;
+}
+
+void Grid_SetSizes( void* grid, unsigned* sizes ) {
+	Grid*	self = (Grid*)grid;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->nDims || sizes );
+#ifndef NDEBUG
+	{
+		unsigned	d_i;
+
+		for( d_i = 0; d_i < self->nDims; d_i++ )
+			assert( sizes[d_i] );
+	}
+#endif
+
+	/* Copy the sizes, allocate arrays and build basis. */
+	if( self->nDims ) {
+		unsigned	d_i;
+
+		self->sizes = Memory_Alloc_Array( unsigned, self->nDims, "Grid::sizes" );
+		self->basis = Memory_Alloc_Array( unsigned, self->nDims, "Grid::basis" );
+		memcpy( self->sizes, sizes, self->nDims * sizeof(unsigned) );
+
+		/* Build basis. */
+		self->basis[0] = 1;
+		self->nPoints = sizes[0];
+		for( d_i = 1; d_i < self->nDims; d_i++ ) {
+			self->basis[d_i] = self->basis[d_i - 1] * self->sizes[d_i - 1];
+			self->nPoints *= sizes[d_i];
+		}
+	}
+}
+
+void Grid_SetMapping( void* grid, HashTable* mapping, HashTable* inverse ) {
+	Grid*	self = (Grid*)grid;
+
+	assert( self );
+
+	self->map = mapping;
+	self->invMap = inverse;
+}
+
+unsigned Grid_GetNumDims( void* grid ) {
+	Grid*	self = (Grid*)grid;
+
+	assert( self );
+
+	return self->nDims;
+}
+
+unsigned* Grid_GetSizes( void* grid ) {
+	Grid*	self = (Grid*)grid;
+
+	assert( self );
+
+	return self->sizes;
+}
+
+unsigned Grid_GetNumPoints( void* grid ) {
+	Grid*	self = (Grid*)grid;
+
+	assert( self );
+
+	return self->nPoints;
+}
+
+void Grid_GetMapping( void* grid, HashTable** mapping, HashTable** inverse ) {
+	Grid*	self = (Grid*)grid;
+
+	assert( self );
+
+	*mapping = self->map;
+	*inverse = self->invMap;
+}
+
+void Grid_Lift( void* grid, unsigned ind, unsigned* params ) {
+	Grid*		self = (Grid*)grid;
+	unsigned	rem;
+	unsigned	d_i;
+
+	/* Sanity check. */
+	assert( self );
+	assert( self->nDims );
+	assert( self->sizes && self->basis );
+	assert( params );
+
+	/*
+	** Take a one dimensional array index and lift it into a regular mesh topological
+	** space.
+	*/
+
+	if( self->map ) {
+#ifndef NDEBUG
+		unsigned*	remPtr;
+
+		assert( remPtr = HashTable_FindEntry( self->map, &ind, sizeof(unsigned), unsigned ) );
+		rem = *remPtr;
+#else
+		rem = *HashTable_FindEntry( self->map, &ind, sizeof(unsigned), unsigned );
+#endif
+	}
+	else
+		rem = ind;
+
+	for( d_i = self->nDims; d_i > 0; d_i-- ) {
+		unsigned	dimInd = d_i - 1;
+		div_t		divRes;
+
+		divRes = div( rem, self->basis[dimInd] );
+		params[dimInd] = divRes.quot;
+		rem = divRes.rem;
+
+		/* Ensure this is a valid lifting. */
+		assert( params[dimInd] < self->sizes[dimInd] );
+	}
+}
+
+unsigned Grid_Project( void* grid, unsigned* params ) {
+	Grid*		self = (Grid*)grid;
+	unsigned	ind = 0;
+	unsigned	d_i;
+
+	/* Sanity check. */
+	assert( self );
+	assert( self->nDims );
+	assert( self->sizes && self->basis );
+	assert( params );
+
+	/*
+	** Project an n-dimensional set of topological indices into a one-dimensional, unique space.
+	*/
+
+	for( d_i = 0; d_i < self->nDims; d_i++ ) {
+		assert( params[d_i] < self->sizes[d_i] );
+		ind += params[d_i] * self->basis[d_i];
+	}
+
+	if( self->invMap ) {
+#ifndef NDEBUG
+		unsigned*	indPtr;
+
+		assert( indPtr = HashTable_FindEntry( self->invMap, &ind, sizeof(unsigned), unsigned ) );
+		ind = *indPtr;
+#else
+		ind = *HashTable_FindEntry( self->invMap, &ind, sizeof(unsigned), unsigned );
+#endif
+	}
+
+	return ind;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Grid.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Grid.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,108 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Grid.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Grid_h__
+#define __Domain_Mesh_Grid_h__
+
+	/** Textual name of this class */
+	extern const Type Grid_Type;
+
+	/** Virtual function types */
+
+	/** Grid class contents */
+	#define __Grid				\
+		/* General info */		\
+		__Stg_Class			\
+						\
+		/* Virtual info */		\
+						\
+		/* Grid info */			\
+		unsigned	nDims;		\
+		unsigned*	sizes;		\
+		unsigned*	basis;		\
+		unsigned	nPoints;	\
+						\
+		HashTable*	map;		\
+		HashTable*	invMap;
+
+	struct Grid { __Grid };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define GRID_DEFARGS \
+		STG_CLASS_DEFARGS
+
+	#define GRID_PASSARGS \
+		STG_CLASS_PASSARGS
+
+	Grid* Grid_New();
+	Grid* _Grid_New( GRID_DEFARGS );
+	void _Grid_Init( Grid* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Grid_Delete( void* grid );
+	void _Grid_Print( void* grid, Stream* stream );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Grid_SetNumDims( void* grid, unsigned nDims );
+	void Grid_SetSizes( void* grid, unsigned* sizes );
+	void Grid_SetMapping( void* grid, HashTable* mapping, HashTable* inverse );
+
+	unsigned Grid_GetNumDims( void* grid );
+	unsigned* Grid_GetSizes( void* grid );
+	unsigned Grid_GetNumPoints( void* grid );
+	void Grid_GetMapping( void* grid, HashTable** mapping, HashTable** inverse );
+
+	void Grid_Lift( void* grid, unsigned ind, unsigned* params );
+	unsigned Grid_Project( void* grid, unsigned* params );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Grid_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Grid.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Grid.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Grid</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/HMesh.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/HMesh.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,651 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: HMesh.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "MeshClass.h"
+#include "HMesh.h"
+
+
+#define HMESH_WELD_RESOLUTION	1e-5;
+
+
+/* Textual name of this class */
+const Type HMesh_Type = "HMesh";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+HMesh* HMesh_DefaultNew( Name name ) {
+	return _HMesh_New( sizeof(HMesh), 
+			   HMesh_Type, 
+			   _HMesh_Delete, 
+			   _HMesh_Print, 
+			   _HMesh_Copy, 
+			   (void*)HMesh_DefaultNew,
+			   _HMesh_Construct,
+			   _HMesh_Build, 
+			   _HMesh_Initialise, 
+			   _HMesh_Execute,
+			   _HMesh_Destroy,
+			   name,
+			   False,
+			   _Mesh_Node_IsLocal1D,
+			   _Mesh_Node_IsShadow1D,
+			   _Mesh_Element_IsLocal1D,
+			   _Mesh_Element_IsShadow1D,
+			   NULL, 
+			   0,
+			   0, 
+			   NULL, 
+			   NULL );
+}
+
+HMesh* HMesh_New( Name		name,
+		  void*		layout,
+		  SizeT		_nodeSize,
+		  SizeT		_elementSize,
+		  void*		extension_Register,
+		  Dictionary*	dictionary )
+{
+	return _HMesh_New( sizeof(HMesh), 
+			   HMesh_Type, 
+			   _HMesh_Delete, 
+			   _HMesh_Print, 
+			   _HMesh_Copy, 
+			   (void*)HMesh_DefaultNew,
+			   _HMesh_Construct,
+			   _HMesh_Build, 
+			   _HMesh_Initialise, 
+			   _HMesh_Execute,
+			   _HMesh_Destroy,
+			   name,
+			   True,
+			   _Mesh_Node_IsLocal1D,
+			   _Mesh_Node_IsShadow1D,
+			   _Mesh_Element_IsLocal1D,
+			   _Mesh_Element_IsShadow1D,
+			   layout, 
+			   _nodeSize,
+			   _elementSize, 
+			   extension_Register, 
+			   dictionary );
+}
+
+void HMesh_Init( HMesh*		self,
+		 Name		name,
+		 void*		layout,
+		 SizeT		_nodeSize,
+		 SizeT		_elementSize,
+		 void*		extensionMgr_Register,
+		 Dictionary*	dictionary )
+{
+	/* General info */
+	self->type = HMesh_Type;
+	self->_sizeOfSelf = sizeof(HMesh);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _HMesh_Delete;
+	self->_print = _HMesh_Print;
+	self->_copy = _HMesh_Copy;
+	self->_defaultConstructor = (void*)HMesh_DefaultNew;
+	self->_construct = _HMesh_Construct;
+	self->_build = _HMesh_Build;
+	self->_initialise = _HMesh_Initialise;
+	self->_execute = _HMesh_Execute;
+	self->_destroy = _HMesh_Destroy;
+	self->nodeIsLocal = _Mesh_Node_IsLocal1D;
+	self->nodeIsShadow = _Mesh_Node_IsShadow1D;
+	self->elementIsLocal = _Mesh_Element_IsLocal1D;
+	self->elementIsShadow = _Mesh_Element_IsShadow1D;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_Mesh_Init( (Mesh*)self, layout, _nodeSize, _elementSize, extensionMgr_Register );
+	_HMesh_Init( self );
+}
+
+HMesh* _HMesh_New( SizeT					_sizeOfSelf, 
+		   Type						type,
+		   Stg_Class_DeleteFunction*			_delete,
+		   Stg_Class_PrintFunction*			_print,
+		   Stg_Class_CopyFunction*			_copy, 
+		   Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		   Stg_Component_ConstructFunction*		_construct,
+		   Stg_Component_BuildFunction*			_build,
+		   Stg_Component_InitialiseFunction*		_initialise,
+		   Stg_Component_ExecuteFunction*		_execute,
+		   Stg_Component_DestroyFunction*		_destroy,
+		   Name						name,
+		   Bool						initFlag,
+		   Mesh_Node_IsLocalFunction*			nodeIsLocal,
+		   Mesh_Node_IsShadowFunction*			nodeIsShadow,
+		   Mesh_Element_IsLocalFunction*		elementIsLocal,
+		   Mesh_Element_IsShadowFunction*		elementIsShadow,
+		   void*					layout,
+		   SizeT					_nodeSize,
+		   SizeT					_elementSize, 
+		   void*					extension_Register,
+		   Dictionary*					dictionary )
+{
+	HMesh* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(HMesh) );
+	self = (HMesh*)_Mesh_New( _sizeOfSelf, type, _delete, _print, _copy, 
+				  _defaultConstructor, _construct, 
+				  _build, _initialise, _execute, _destroy, 
+				  name, NON_GLOBAL, 
+				  nodeIsLocal, nodeIsShadow, elementIsLocal, elementIsShadow, 
+				  layout, _nodeSize, _elementSize, 
+				  extension_Register, dictionary );
+	
+	/* Virtual info */
+	
+	/* HMesh info */
+	if( initFlag ) _HMesh_Init( self );
+
+	return self;
+}
+
+void _HMesh_Init( HMesh* self ) {
+	/* At this point, _Mesh_Init will have been called. */
+	self->nLevels = 0;
+	self->levels = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _HMesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data ) {
+	HMesh*		self = (HMesh*)mesh;
+	Dictionary*	dict;
+	unsigned	nLevels;
+	char*		meshName;
+	Mesh*		baseMesh;
+	unsigned	baseLevel;
+
+	/* As far as I can tell, we don't really want to construct the super-class. */
+	/*_Mesh_Construct( mesh, cf );*/
+
+	/* Sort out my own initialisation. */
+	_HMesh_Init( (HMesh*)self );
+
+	/* Shortcuts. */
+	dict = cf->componentDict;
+
+	/* Read the base mesh from the dictionary. */
+	meshName = Stg_ComponentFactory_GetString( cf, self->name, "base-mesh", NULL );
+	if( meshName && strcmp( meshName, "" ) ) {
+		baseMesh = Stg_ComponentFactory_ConstructByName( cf, meshName, Mesh, True, data );
+	}
+	else
+		baseMesh = NULL;
+
+	/* Read the number of levels expected. */
+	nLevels = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "levels", 1 );
+
+	/* Read the base mesh's level. */
+	baseLevel = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "base-level", 0 );
+	assert( baseLevel < nLevels );
+
+	/* Set everything up. */
+	HMesh_SetNLevels( self, nLevels, baseLevel );
+	if( baseMesh )
+		HMesh_SetMesh( self, baseLevel, baseMesh, False );
+}
+
+void _HMesh_Destroy( void* mesh, void* data ) {
+	/* What the hell is supposed to go in here anyway? I was under the impression that *_Delete takes
+	   care of all the destruction around here... anyway, destroy the super-class. */
+	_Mesh_Destroy( mesh, data );
+}
+
+void _HMesh_Delete( void* mesh ) {
+	HMesh*	self = (HMesh*)mesh;
+
+	/* Delete the parent. */
+	_Mesh_Delete( self );
+}
+
+void _HMesh_Print( void* mesh, Stream* stream ) {
+	HMesh*	self = (HMesh*)mesh;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshStream;
+	meshStream = Journal_Register( InfoStream_Type, "HMeshStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "HMesh (ptr): (%p)\n", self );
+	_Mesh_Print( self, stream );
+}
+
+void* _HMesh_Copy( void* mesh, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	HMesh*	self = (HMesh*)mesh;
+	HMesh*	newHMesh;
+	PtrMap*	map = ptrMap;
+	Bool	ownMap = False;
+
+	/* Damn me for making copying so difficult... what was I thinking? */
+	
+	/* We need to create a map if it doesn't already exist. */
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newHMesh = (HMesh*)_Mesh_Copy( self, destProc_I, deep, nameExt, map );
+	
+	/* Copy the virtual methods here. */
+
+	/* Deep or shallow? */
+	if( deep ) {
+	}
+	else {
+	}
+	
+	/* If we own the map, get rid of it here. */
+	if( ownMap ) Stg_Class_Delete( map );
+	
+	return (void*)newHMesh;
+}
+
+void _HMesh_Build( void* mesh, void* data ) {
+	HMesh*		self = (HMesh*)mesh;
+	unsigned	l_i;
+
+	assert( self );
+
+	/* Build parent mesh. */
+	_Mesh_Build( mesh, data );
+
+	/* Build each level. */
+	for( l_i = 0; l_i < self->nLevels; l_i++ )
+		Build( self->levels[l_i].mesh, data, False );
+}
+
+void _HMesh_Initialise( void* mesh, void* data ) {
+	HMesh*		self = (HMesh*)mesh;
+	unsigned	l_i;
+
+	assert( self );
+
+	/* Initalise the parent mesh. */
+	_Mesh_Initialise( mesh, data );
+
+	/* Initialise all levels, we'll need each mesh's data. */
+	for( l_i = 0; l_i < self->nLevels; l_i++ )
+		Initialise( self->levels[l_i].mesh, data, False );
+
+	/* Here is where we construct our topographical mesh, the composite of all levels. 
+	   These routines also take care of building the mappings bewtween levels and to the
+	   topographical mesh. Essentially, this is where the bulk of the work is done. */
+	HMesh_BuildNodes( self );
+	HMesh_BuildElements( self );
+}
+
+void _HMesh_Execute( void* mesh, void* data ) {
+	/* Execute parent mesh. */
+	_Mesh_Execute( mesh, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void HMesh_SetNLevels( HMesh* self, unsigned nLevels, unsigned baseLevel ) {
+	assert( self );
+	assert( !nLevels || baseLevel < nLevels );
+
+	/* If this is being set after a previous construction, kill everything. */
+	if( self->nLevels ) {
+		unsigned	l_i;
+
+		for( l_i = 0; l_i < self->nLevels; l_i++ )
+			HMesh_DeleteLevel( self->levels + l_i );
+		KillArray( self->levels );
+	}
+
+	/* Set the levels and resize everything. */
+	self->nLevels = nLevels;
+	self->baseLevel = baseLevel;
+	if( self->nLevels ) {
+		self->levels = Memory_Alloc_Array( HMesh_Level, self->nLevels, "HMesh::levels" );
+		memset( self->levels, 0, self->nLevels * sizeof(HMesh_Level) );
+	}
+}
+
+void HMesh_SetMesh( HMesh* self, unsigned level, Mesh* mesh, Bool own ) {
+	assert( self );
+	assert( level < self->nLevels );
+
+	/* Make sure the level we're looking at is empty. */
+	HMesh_DeleteLevel( self->levels + level );
+
+	/* Store the new mesh. */
+	self->levels[level].mesh = mesh;
+	self->levels[level].ownMesh = own;
+}
+
+Mesh* HMesh_GenMesh( HMesh* self, unsigned level ) {
+	char*	name;
+
+	assert( self );
+	assert( level < self->nLevels );
+
+	/* Make sure the level we're looking at is empty. */
+	HMesh_DeleteLevel( self->levels + level );
+
+	/* Create a new mesh for this level. */
+	name = HMesh_GenName( self, level );
+	self->levels[level].mesh = Mesh_DefaultNew( name );
+	self->levels[level].ownMesh = True;
+	Memory_Free( name );
+
+	return self->levels[level].mesh;
+}
+
+Mesh* HMesh_GetMesh( HMesh* self, unsigned level ) {
+	assert( self );
+	assert( level < self->nLevels );
+	assert( self->levels );
+
+	return self->levels[level].mesh;
+}
+
+Mesh* HMesh_GetBaseMesh( HMesh* self ) {
+	assert( self );
+	assert( self->levels );
+
+	return self->levels[self->baseLevel].mesh;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+char* HMesh_GenName( HMesh* self, unsigned level ) {
+	unsigned	len;
+	unsigned	width;
+	char*		name;
+
+	assert( self );
+	assert( level < self->nLevels );
+
+	/* Calculate the length of the new name. */
+	len = self->name ? strlen(self->name) : 0;
+	width = self->nLevels ? log(self->nLevels) + 1 : 0;
+	len += width + 2;
+
+	/* Construct the new name. */
+	name = Memory_Alloc_Array( char, len, "HMesh::<mesh name>" );
+	sprintf( name, "%s_%0*d", self->name ? self->name : "", width, level );
+
+	return name;
+}
+
+void HMesh_BuildNodes( HMesh* self ) {
+	unsigned	l_i;
+
+	assert( self );
+
+	/* Make sure nodes aren't already set, if they are kill'em. */
+	/* TODO */
+
+	/* Higher levels require some additional crap to allow node welding. */
+	for( l_i = 0; l_i < self->nLevels; l_i++ ) {
+		HMesh_Level*	level = self->levels + l_i;
+		HMesh_Level*	prevLevel = self->levels + l_i - 1;
+		Mesh*		mesh = level->mesh;
+		Mesh*		prevMesh = prevLevel->mesh;
+		unsigned	n_i;
+
+		/* The coarsest level is a bit of an exception, we can just copy his 
+		   nodal values directly, no messing about. */
+		if( l_i == 0 ) {
+			self->nodeLocalCount = mesh->nodeLocalCount;
+			self->nodeShadowCount = mesh->nodeShadowCount;
+			self->nodeDomainCount = mesh->nodeDomainCount;
+			self->nodeCoord = Memory_Alloc_Array( Coord, self->nodeDomainCount, "HMesh::nodeCoord" );
+			memcpy( self->nodeCoord, mesh->nodeCoord, self->nodeDomainCount * sizeof(Coord) );
+			level->nodeUp = Memory_Alloc_Array( unsigned, mesh->nodeDomainCount, "HMesh_InterMap::upToLow" );
+			level->nodeGlobals = Memory_Alloc_Array( unsigned, mesh->nodeDomainCount, "HMesh_Level::nodeGlobals" );
+			for( n_i = 0; n_i < prevMesh->nodeDomainCount; n_i++ ) {
+				level->nodeUp[n_i] = -1;
+				level->nodeGlobals[n_i] = n_i;
+			}
+			continue;
+		}
+
+		/* Allocate space on this level for the mappings. */
+		level->nodeUp = Memory_Alloc_Array( unsigned, mesh->nodeDomainCount, "HMesh_Level::nodeUp" );
+		level->nodeDown = Memory_Alloc_Array( unsigned, mesh->nodeDomainCount, "HMesh_Level::nodeDown" );
+		level->nodeGlobals = Memory_Alloc_Array( unsigned, mesh->nodeDomainCount, "HMesh_Level::nodeGlobals" );
+
+		/* Initialise the up map to invalid values. */
+		for( n_i = 0; n_i < prevMesh->nodeDomainCount; n_i++ )
+			level->nodeUp[n_i] = -1;
+
+		/* Search the previous level for overlapping nodes (i.e. nodes that 
+		   are within a certain radius) and use their storage instead of creating new space. */
+		for( n_i = 0; n_i < mesh->nodeDomainCount; n_i++ ) {
+			unsigned	weld;
+
+			if( HMesh_FindWeld( self, l_i, mesh->nodeCoord[n_i], &weld ) ) {
+				/* If we found a node to weld to, do it. */
+				level->nodeDown[n_i] = weld;
+				prevLevel->nodeUp[weld] = n_i;
+				level->nodeGlobals[n_i] = prevLevel->nodeGlobals[weld];
+			}
+			else {
+				/* If we didn't find one, add a new node. */
+				self->nodeDomainCount++;
+				self->nodeCoord = Memory_Realloc_Array( self->nodeCoord, Coord, self->nodeDomainCount );
+				memcpy( self->nodeCoord + self->nodeDomainCount - 1, 
+					mesh->nodeCoord + n_i, 
+					sizeof(Coord) );
+				level->nodeDown[n_i] = -1;
+				level->nodeGlobals[n_i] = self->nodeDomainCount - 1;
+			}
+		}
+	}
+}
+
+void HMesh_BuildElements( HMesh* self ) {
+	unsigned	l_i;
+
+	assert( self );
+
+	/* To construct this level's down elements we can check which down element each of 
+	   this element's nodes falls in. If there are more than one, this element spans 
+	   many lower elements, meaning something sinister is afoot. */
+	for( l_i = 0; l_i < self->nLevels; l_i++ ) {
+		HMesh_Level*	level = self->levels + l_i;
+		HMesh_Level*	prevLevel;
+		Mesh*		mesh = level->mesh;
+		Mesh*		prevMesh;
+		unsigned	e_i;
+
+		/* We can skip the coarsest level, as it has no down map. */
+		if( l_i == 0 ) continue;
+
+		/* Shortcuts. */
+		prevLevel = self->levels + l_i - 1;
+		prevMesh = prevLevel->mesh;
+
+		/* Allocate space on this level for the mappings. */
+		level->elDown = Memory_Alloc_Array( unsigned, mesh->elementDomainCount, "HMesh_Level::elDown" );
+
+		/* Search all the elements. */
+		for( e_i = 0; e_i < mesh->elementDomainCount; e_i++ ) {
+			unsigned	elInd;
+			unsigned	en_i;
+
+			/* Search all the elements' nodes. */
+			for( en_i = 0; en_i < mesh->elementNodeCountTbl[e_i]; en_i++ ) {
+				unsigned	nInd = mesh->elementNodeTbl[e_i][en_i];
+				unsigned	curElInd;
+
+				/* They all have to be in the same coarser element. */
+				curElInd = Mesh_ElementWithPoint( prevMesh, mesh->nodeCoord[nInd], 
+								  INCLUSIVE_UPPER_BOUNDARY );
+				if( en_i == 0 ) elInd = curElInd;
+				else if( curElInd != elInd ) {
+					fprintf( stderr, "*** ERROR: Overlapping element.\n" );
+					abort();
+				}
+			}
+
+			/* Success! */
+			level->elDown[e_i] = elInd;
+		}
+	}
+
+	/* Now that we have the down mapping, we can construct the up mapping... */
+	for( l_i = 0; l_i < self->nLevels; l_i++ ) {
+		HMesh_Level*	level = self->levels + l_i;
+		HMesh_Level*	nextLevel;
+		Mesh*		mesh = level->mesh;
+		Mesh*		nextMesh;
+		unsigned	e_i;
+
+		/* We can skip the finest level, as it has no up map. */
+		if( l_i == self->nLevels - 1 ) continue;
+
+		/* Shortcuts. */
+		nextLevel = self->levels + l_i + 1;
+		nextMesh = nextLevel->mesh;
+
+		/* Allocate space on this level for the mappings. */
+		level->nElsUp = Memory_Alloc_Array( unsigned, mesh->elementDomainCount, "HMesh_Level::nElsUp" );
+		level->elUp = Memory_Alloc_Array( unsigned*, mesh->elementDomainCount, "HMesh_Level::elUp" );
+
+		/* Search the upper mesh's elements. */
+		for( e_i = 0; e_i < nextMesh->elementDomainCount; e_i++ ) {
+			unsigned	elInd = nextLevel->elDown[e_i];
+
+			/* Resize our element list. */
+			level->nElsUp[elInd]++;
+			if( level->elUp[elInd] ) {
+				level->elUp[elInd] = Memory_Realloc_Array( level->elUp[elInd], unsigned, level->nElsUp[elInd] );
+			}
+			else {
+				level->elUp[elInd] = Memory_Alloc_Array( unsigned, 1, "HMesh_Level::elUp[]" );
+			}
+
+			/* Add the up element. */
+			level->elUp[elInd][level->nElsUp[elInd] - 1] = e_i;
+		}
+
+		/* Use the up mapping to determine how many elements we have left unrefined on this level. */
+		for( e_i = 0; e_i < mesh->elementDomainCount; e_i++ )
+			if( !level->elUp[e_i] ) self->elementDomainCount++;
+	}
+}
+
+Bool HMesh_FindWeld( HMesh* self, unsigned level, Coord crd, unsigned* weld ) {
+	unsigned	node;
+	Mesh*		mesh;
+	Coord		tmp;
+
+	assert( self );
+	assert( level > 0 && level < self->nLevels );
+
+	/* If there is no lower mesh, then what the hell are we doing here? */
+	mesh = self->levels[level - 1].mesh;
+	assert( mesh );
+
+	/* Find the closest node from lower mesh, check if it's close enough */
+	node = Mesh_ClosestNode( mesh, crd );
+	Vector_Sub( tmp, crd, mesh->nodeCoord[node] );
+	if( Vector_Mag( tmp ) < self->levels[level].weldEpsilon ) {
+		*weld = node;
+		return True;
+	}
+
+	return False;
+}
+
+void HMesh_CalcWeldEpsilons( HMesh* self ) {
+	unsigned	l_i;
+	double		lsep, sep;
+
+	assert( self );
+
+	/* If we don't have enough levels, skip the lot. */
+	if( self->nLevels <= 1 ) return;
+
+	/* Calculate the nodal separation for the coarsest mesh before
+	   entering the loop; kind of an optimisation. */
+	lsep = Mesh_NodeSeparation( self->levels[0].mesh );
+	for( l_i = 1; l_i < self->nLevels; l_i++ ) {
+		Mesh*	upper = self->levels[l_i].mesh;
+		double	usep;
+
+		/* Get the minimum distance between any two nodes of each mesh. */
+		usep = Mesh_NodeSeparation( upper );
+		sep = usep < lsep ? usep : lsep;
+
+		/* Factor in the weld resolution. */
+		self->levels[l_i].weldEpsilon = sep * HMESH_WELD_RESOLUTION;
+
+		/* Flip the separations. */
+		lsep = usep;
+	}
+}
+
+void HMesh_DeleteLevel( HMesh_Level* level ) {
+	assert( level );
+
+	if( level->mesh && level->ownMesh ) Stg_Class_Delete( level->mesh );
+	else level->mesh = NULL;
+	KillArray( level->nodeUp );
+	KillArray( level->nodeDown );
+	KillArray( level->nodeGlobals );
+	KillArray2D( level->mesh->elementDomainCount, level->elUp );
+	KillArray( level->elDown );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/HMesh.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/HMesh.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,170 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: HMesh.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_HMesh_h__
+#define __Domain_Mesh_HMesh_h__
+
+	/** Textual name of this class */
+	extern const Type HMesh_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	typedef struct {
+		Mesh*		mesh;
+		Bool		ownMesh;
+		unsigned*	nodeUp;
+		unsigned*	nodeDown;
+		unsigned*	nodeGlobals;
+		unsigned*	nElsUp;
+		unsigned**	elUp;
+		unsigned*	elDown;
+		double		weldEpsilon;
+	} HMesh_Level;
+
+	#define __HMesh \
+		/* General info */ \
+		__Mesh \
+		\
+		/* Virtual info */ \
+		\
+		/* HMesh info */ \
+		unsigned	nLevels; \
+		unsigned	baseLevel; \
+		HMesh_Level*	levels; \
+
+	struct _HMesh { __HMesh };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create a HMesh */
+	HMesh* HMesh_DefaultNew( Name name );
+
+	HMesh* HMesh_New( Name		name,
+			  void*		layout,
+			  SizeT		_nodeSize,
+			  SizeT		_elementSize,
+			  void*		extension_Register,
+			  Dictionary*	dictionary );
+
+	/* Initialise a Mesh */
+	void HMesh_Init( HMesh*		self,
+			 Name		name,
+			 void*		layout,
+			 SizeT		_nodeSize,
+			 SizeT		_elementSize,
+			 void*		extension_Register,
+			 Dictionary*	dictionary );
+	
+	/* Creation implementation */
+	HMesh* _HMesh_New( SizeT					_sizeOfSelf, 
+			   Type						type,
+			   Stg_Class_DeleteFunction*			_delete,
+			   Stg_Class_PrintFunction*			_print,
+			   Stg_Class_CopyFunction*			_copy, 
+			   Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+			   Stg_Component_ConstructFunction*		_construct,
+			   Stg_Component_BuildFunction*			_build,
+			   Stg_Component_InitialiseFunction*		_initialise,
+			   Stg_Component_ExecuteFunction*		_execute,
+			   Stg_Component_DestroyFunction*		_destroy,
+			   Name						name,
+			   Bool						initFlag,
+			   Mesh_Node_IsLocalFunction*			nodeIsLocal,
+			   Mesh_Node_IsShadowFunction*			nodeIsShadow,
+			   Mesh_Element_IsLocalFunction*		elementIsLocal,
+			   Mesh_Element_IsShadowFunction*		elementIsShadow,
+			   void*					layout,
+			   SizeT					_nodeSize,
+			   SizeT					_elementSize, 
+			   void*					extension_Register,
+			   Dictionary*					dictionary );
+
+	void _HMesh_LoadFromDict( void*			mesh, 
+				  Dictionary*		subDict, 
+				  Dictionary*		dictionary, 
+				  Stg_ObjectList*	objList);
+
+	/* Initialisation implementation functions */
+	void _HMesh_Init( HMesh* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _HMesh_Delete( void* mesh );
+	void _HMesh_Print( void* mesh, Stream* stream );
+
+	#define HMesh_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define HMesh_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _HMesh_Copy( void* mesh, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _HMesh_Build( void* mesh, void* data );
+	void _HMesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data );
+	void _HMesh_Initialise( void* mesh, void* data );
+	void _HMesh_Execute( void* mesh, void* data );
+	void _HMesh_Destroy( void* mesh, void* data );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void HMesh_SetNLevels( HMesh* self, unsigned nLevels, unsigned baseLevel );
+	void HMesh_SetMesh( HMesh* self, unsigned level, Mesh* mesh, Bool own );
+	Mesh* HMesh_GenMesh( HMesh* self, unsigned level );
+	Mesh* HMesh_GetMesh( HMesh* self, unsigned level );
+	Mesh* HMesh_GetBaseMesh( HMesh* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	char* HMesh_GenName( HMesh* self, unsigned level );
+	void HMesh_BuildNodes( HMesh* self );
+	void HMesh_BuildElements( HMesh* self );
+	Bool HMesh_FindWeld( HMesh* self, unsigned level, Coord crd, unsigned* weld );
+	void HMesh_CalcWeldEpsilons( HMesh* self );
+	void HMesh_DeleteLevel( HMesh_Level* level );
+
+#endif /* __Domain_Mesh_HMesh_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/HMesh.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/HMesh.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">HMesh</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">Mesh</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">base-mesh</param>
+		<param name="Type">String</param>
+		<param name="Default">NULL</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">levels</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">base-level</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">meshName</param>
+		<param name="Type">Mesh</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 224 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/IGraph.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/IGraph.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1067 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: IGraph.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "StGermain/StGermain.h"
+#include "types.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void IGraph_PickleIncidenceInit( IGraph* self, int dim, 
+				 int nEls, int* els, int* nBytes );
+void IGraph_PickleIncidence( IGraph* self, int dim, 
+			     int nEls, int* els, stgByte* bytes );
+void IGraph_UnpickleIncidence( IGraph* self, int dim, 
+			       int nBytes, stgByte* bytes );
+int IGraph_Cmp( const void* l, const void* r );
+
+
+void _IGraph_Init( void* _self ) {
+   IGraph* self = (IGraph*)_self;
+
+   _MeshTopology_Init( self );
+   self->nDims = 0;
+   self->nTDims = 0;
+   self->shadDepth = 0;
+   self->comm = NULL;
+   self->locals = NULL;
+   self->remotes = NULL;
+   self->nBndEls = NULL;
+   self->bndEls = NULL;
+   self->nIncEls = NULL;
+   self->incEls = NULL;
+}
+
+void _IGraph_Destruct( void* _self ) {
+   IGraph* self = (IGraph*)_self;
+
+   IGraph_Clear( self );
+   _MeshTopology_Destruct( self );
+}
+
+void _IGraph_Copy( void* _self, const void* op ) {
+   /*IGraph* self = (IGraph*)_self;*/
+
+   assert( 0 );
+   /* TODO */
+}
+
+SizeT _IGraph_CalcMem( const void* _self, PtrMap* ptrs ) {
+   IGraph* self = (IGraph*)_self;
+   SizeT mem;
+   int d_i;
+
+   if( PtrMap_Find( ptrs, (void*)self ) )
+      return 0;
+   mem = _MeshTopology_CalcMem( self, ptrs );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->locals )
+	 mem += NewClass_CalcMem( self->locals[d_i], ptrs );
+      if( self->remotes )
+	 mem += NewClass_CalcMem( self->remotes[d_i], ptrs );
+   }
+   return mem;
+}
+
+void _IGraph_SetNumDims( void* _self, int nDims ) {
+   IGraph* self = (IGraph*)_self;
+   int d_i;
+
+   IGraph_ClearDims( self );
+   _MeshTopology_SetNumDims( self, nDims );
+
+   self->locals = Class_Array( self, Decomp*, self->nTDims );
+   self->remotes = Class_Array( self, Sync*, self->nTDims );
+   self->nIncEls = Class_Array2D( self, int*, self->nTDims, self->nTDims );
+   self->incEls = Class_Array2D( self, int**, self->nTDims, self->nTDims );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      self->locals[d_i] = Decomp_New();
+      NewClass_AddRef( self->locals[d_i] );
+      self->remotes[d_i] = Sync_New();
+      NewClass_AddRef( self->remotes[d_i] );
+      if( self->comm )
+	 Decomp_SetMPIComm( self->locals[d_i], Comm_GetMPIComm( self->comm ) );
+      Sync_SetDecomp( self->remotes[d_i], self->locals[d_i] );
+      if( self->comm )
+	 Sync_SetComm( self->remotes[d_i], self->comm );
+      memset( self->nIncEls[d_i], 0, sizeof(int**) * self->nTDims );
+      memset( self->incEls[d_i], 0, sizeof(int***) * self->nTDims );
+   }
+}
+
+void IGraph_SetComm( void* _self, const Comm* comm ) {
+   IGraph* self = (IGraph*)_self;
+   const Comm* curComm;
+   int d_i;
+
+   assert( self );
+
+   IGraph_ClearElements( self );
+   _MeshTopology_SetComm( self, comm );
+
+   if( comm ) {
+      for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+	 curComm = Sync_GetComm( self->remotes[d_i] );
+	 if( curComm != comm ) {
+	    Sync_SetComm( self->remotes[d_i], self->comm );
+	    Decomp_SetMPIComm( self->locals[d_i], Comm_GetMPIComm( self->comm ) );
+	 }
+      }
+   }
+}
+
+void IGraph_SetDomain( void* _self, int dim, Sync* sync ) {
+   IGraph* self = (IGraph*)_self;
+
+   assert( self && dim < self->nTDims );
+   NewClass_RemoveRef( self->locals[dim] );
+   NewClass_RemoveRef( self->remotes[dim] );
+   self->remotes[dim] = sync;
+   NewClass_AddRef( sync );
+   if( sync ) {
+      self->locals[dim] = (Decomp*)Sync_GetDecomp( sync );
+      NewClass_AddRef( self->locals[dim] );
+   }
+}
+
+void IGraph_SetElements( void* _self, int dim, int nEls, 
+			       const int* globals )
+{
+   IGraph* self = (IGraph*)_self;
+   int rank;
+   int nNbrs;
+   const int *nbrs;
+   int nSubEls;
+   const int *subEls;
+   int rem, netRem;
+   int *nNbrEls, **nbrEls;
+   IArray** isects;
+   ISet localsObj, *locals = &localsObj;
+   ISet remotesObj, *remotes = &remotesObj;
+   int nCurEls, *curEls;
+   MPI_Comm mpiComm;
+   int n_i, e_i;
+
+   assert( self && dim < self->nTDims );
+   assert( !nEls || globals );
+   assert( self->comm );
+
+   Comm_GetNeighbours( self->comm, &nNbrs, &nbrs );
+   if( !nNbrs ) {
+      IGraph_SetLocalElements( self, dim, nEls, globals );
+      return;
+   }
+
+   ISet_Construct( locals );
+   mpiComm = Comm_GetMPIComm( self->comm );
+   insist( MPI_Comm_rank( mpiComm, &rank ), == MPI_SUCCESS );
+   isects = Class_Array( self, IArray*, nNbrs );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      isects[n_i] = IArray_New();
+
+   ISet_UseArray( locals, nEls, globals );
+   nSubEls = (nEls < 1000) ? nEls : 1000;
+   rem = nEls;
+   subEls = globals;
+   nNbrEls = Class_Array( self, int, nNbrs );
+   nbrEls = Class_Array( self, int*, nNbrs );
+   do {
+      Comm_AllgatherInit( self->comm, nSubEls, nNbrEls, sizeof(int) );
+      for( n_i = 0; n_i < nNbrs; n_i++ )
+	 nbrEls[n_i] = Class_Array( self, int, nNbrEls[n_i] );
+      Comm_AllgatherBegin( self->comm, subEls, (void**)nbrEls );
+      Comm_AllgatherEnd( self->comm );
+
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 for( e_i = 0; e_i < nNbrEls[n_i]; e_i++ ) {
+	    if( ISet_Has( locals, nbrEls[n_i][e_i] ) )
+	       IArray_Append( isects[n_i], nbrEls[n_i][e_i] );
+	 }
+	 Class_Free( self, nbrEls[n_i] );
+      }
+
+      subEls += nSubEls;
+      rem -= nSubEls;
+      nSubEls = (rem < 1000) ? rem : 1000;
+      insist( MPI_Allreduce( &rem, &netRem, 1, MPI_INT, MPI_SUM, 
+			     mpiComm ), == MPI_SUCCESS );
+   } while( netRem );
+   Class_Free( self, nNbrEls );
+   Class_Free( self, nbrEls );
+
+   ISet_Construct( remotes );
+   ISet_SetMaxSize( remotes, nEls );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      IArray_GetArray( isects[n_i], &nCurEls, (const int**)&curEls );
+      if( nbrs[n_i] < rank ) {
+	 for( e_i = 0; e_i < nCurEls; e_i++ ) {
+	    ISet_TryRemove( locals, curEls[e_i] );
+	    ISet_TryInsert( remotes, curEls[e_i] );
+	 }
+      }
+      NewClass_Delete( isects[n_i] );
+   }
+   Class_Free( self, isects );
+
+   nCurEls = ISet_GetSize( locals );
+   curEls = Class_Array( self, int, nCurEls );
+   ISet_GetArray( locals, curEls );
+   ISet_Destruct( locals );
+   qsort( curEls, nCurEls, sizeof(int), IGraph_Cmp );
+   IGraph_SetLocalElements( self, dim, nCurEls, curEls );
+   Class_Free( self, curEls );
+   nCurEls = ISet_GetSize( remotes );
+   curEls = Class_Array( self, int, nCurEls );
+   ISet_GetArray( remotes, curEls );
+   ISet_Destruct( remotes );
+   qsort( curEls, nCurEls, sizeof(int), IGraph_Cmp );
+   IGraph_SetRemoteElements( self, dim, nCurEls, curEls );
+   Class_Free( self, curEls );
+}
+
+void IGraph_SetLocalElements( void* _self, int dim, int nEls, 
+				    const int* globals )
+{
+   IGraph* self = (IGraph*)_self;
+   int d_i, e_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || globals );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      for( e_i = 0; e_i < Sync_GetNumDomains( self->remotes[dim] ); d_i++ )
+	 Class_Free( self, self->incEls[dim][d_i][e_i] );
+      Class_Free( self, self->incEls[dim][d_i] );
+      Class_Free( self, self->nIncEls[dim][d_i] );
+      self->incEls[dim][d_i] = NULL;
+      self->nIncEls[dim][d_i] = NULL;
+   }
+   Decomp_SetLocals( self->locals[dim], nEls, globals );
+   Sync_SetDecomp( self->remotes[dim], self->locals[dim] );
+}
+
+void IGraph_AddLocalElements( void* _self, int dim, int nEls, 
+				    const int* globals )
+{
+   IGraph* self = (IGraph*)_self;
+
+   assert( 0 );
+   /* TODO */
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || globals );
+   Decomp_AddLocals( self->locals[dim], nEls, globals );
+   /* TODO: Expand this dimensions incidence if some incidence already set. */
+}
+
+void IGraph_RemoveLocalElements( void* _self, int dim, int nEls, 
+				       const int* globals, IMap* map )
+{
+   /*IGraph* self = (IGraph*)_self;*/
+
+   assert( 0 );
+   /* TODO: Method body goes here */
+}
+
+void IGraph_SetRemoteElements( void* _self, int dim, int nEls, 
+				     const int* globals )
+{
+   IGraph* self = (IGraph*)_self;
+   int nDoms;
+   int d_i, e_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || globals );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->nIncEls[dim][d_i] ) {
+	 for( e_i = Decomp_GetNumLocals( self->locals[dim] );
+	      e_i < Sync_GetNumDomains( self->remotes[dim] );
+	      e_i++ )
+	 {
+	    Class_Free( self, self->incEls[dim][d_i][e_i] );
+	 }
+      }
+   }
+
+   Sync_SetRemotes( self->remotes[dim], nEls, globals );
+
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->nIncEls[dim][d_i] ) {
+	 nDoms = Sync_GetNumDomains( self->remotes[dim] );
+	 self->nIncEls[dim][d_i] = Class_Rearray( self, self->incEls[dim][d_i], 
+						  int, nDoms );
+	 self->incEls[dim][d_i] = Class_Rearray( self, self->incEls[dim][d_i], 
+						 int*, nDoms );
+	 for( e_i = Decomp_GetNumLocals( self->locals[dim] );
+	      e_i < nDoms; 
+	      e_i++ )
+	 {
+	    self->nIncEls[dim][d_i][e_i] = 0;
+	    self->incEls[dim][d_i][e_i] = NULL;
+	 }
+      }
+   }
+}
+
+void IGraph_AddRemoteElements( void* _self, int dim, int nEls, 
+				     const int* globals )
+{
+   IGraph* self = (IGraph*)_self;
+   int nOldDoms, nDoms;
+   int d_i, e_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || globals );
+   nOldDoms = Sync_GetNumDomains( self->remotes[dim] );
+   Sync_AddRemotes( self->remotes[dim], nEls, globals );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->nIncEls[dim][d_i] ) {
+	 nDoms = Sync_GetNumDomains( self->remotes[dim] );
+	 self->nIncEls[dim][d_i] = Class_Rearray( self, self->nIncEls[dim][d_i], 
+						  int, nDoms );
+	 self->incEls[dim][d_i] = Class_Rearray( self, self->incEls[dim][d_i], 
+						 int*, nDoms );
+	 for( e_i = nOldDoms; e_i < nDoms; e_i++ ) {
+	    self->nIncEls[dim][d_i][e_i] = 0;
+	    self->incEls[dim][d_i][e_i] = NULL;
+	 }
+      }
+   }
+}
+
+void IGraph_RemoveRemoteElements( void* _self, int dim, int nEls, 
+					const int* globals, IMap* map )
+{
+   /*IGraph* self = (IGraph*)_self;*/
+
+   assert( 0 );
+   /* TODO: Method body goes here */
+}
+
+void IGraph_SetBoundaryElements( void* _self, int dim, 
+				       int nEls, const int* els )
+{
+   IGraph* self = Class_Cast( _self, IGraph );
+
+   assert( !nEls || els );
+   assert( dim < self->nTDims );
+
+   if( !self->nBndEls ) {
+      self->nBndEls = Class_Array( self, int, self->nTDims );
+      memset( self->nBndEls, 0, sizeof(int) * self->nTDims );
+   }
+   if( !self->bndEls ) {
+      self->bndEls = Class_Array( self, int*, self->nTDims );
+      memset( self->bndEls, 0, sizeof(int*) * self->nTDims );
+   }
+   self->nBndEls[dim] = nEls;
+   self->bndEls[dim] = Class_Rearray( self, self->bndEls[dim], int, nEls );
+   memcpy( self->bndEls[dim], els, sizeof(int) * nEls );
+}
+
+void IGraph_SetIncidence( void* _self, int fromDim, int fromEl, 
+				int toDim, int nIncEls, const int* incEls  )
+{
+   IGraph* self = (IGraph*)_self;
+   int nDoms;
+
+   assert( self );
+   assert( fromDim < self->nTDims && toDim < self->nTDims );
+   assert( self->locals[fromDim] );
+   if( !self->nIncEls[fromDim][toDim] ) {
+      nDoms = Sync_GetNumDomains( self->remotes[fromDim] );
+      self->nIncEls[fromDim][toDim] = Class_Array( self, int, nDoms );
+      self->incEls[fromDim][toDim] = Class_Array( self, int*, nDoms );
+      memset( self->incEls[fromDim][toDim], 0, sizeof(int*) * nDoms );
+   }
+
+   self->nIncEls[fromDim][toDim][fromEl] = nIncEls;
+   self->incEls[fromDim][toDim][fromEl] = 
+	   Class_Rearray( self, self->incEls[fromDim][toDim][fromEl], int, nIncEls );
+   memcpy( self->incEls[fromDim][toDim][fromEl], incEls, nIncEls * sizeof(int) );
+}
+
+void IGraph_RemoveIncidence( void* _self, int fromDim, int toDim ) {
+   IGraph* self = (IGraph*)_self;
+   int nEls;
+   int e_i;
+
+   assert( self );
+   assert( fromDim < self->nTDims );
+   assert( toDim < self->nTDims );
+
+   nEls = Sync_GetNumDomains( self->remotes[fromDim] );
+   for( e_i = 0; e_i < nEls; e_i++ )
+      Class_Free( self, self->incEls[fromDim][toDim][e_i] );
+   Class_Free( self, self->incEls[fromDim][toDim] );
+   Class_Free( self, self->nIncEls[fromDim][toDim] );
+   self->incEls[fromDim][toDim] = NULL;
+   self->nIncEls[fromDim][toDim] = NULL;
+}
+
+void IGraph_InvertIncidence( void* _self, int fromDim, int toDim ) {
+   IGraph* self = (IGraph*)_self;
+   int fromSize, toSize;
+   int *nInvIncEls, **invIncEls;
+   int *nIncEls, **incEls;
+   int elInd;
+   int e_i, inc_i;
+
+   assert( self );
+   fromSize = Sync_GetNumDomains( self->remotes[fromDim] );
+   toSize = Sync_GetNumDomains( self->remotes[toDim] );
+   nInvIncEls = self->nIncEls[toDim][fromDim];
+   invIncEls = self->incEls[toDim][fromDim];
+   nIncEls = Class_Array( self, int, fromSize );
+   memset( nIncEls, 0, fromSize * sizeof(int) );
+   for( e_i = 0; e_i < toSize; e_i++ ) {
+      for( inc_i = 0; inc_i < nInvIncEls[e_i]; inc_i++ )
+	 nIncEls[invIncEls[e_i][inc_i]]++;
+   }
+
+   incEls = Class_Array( self, int*, fromSize );
+   for( e_i = 0; e_i < fromSize; e_i++ )
+      incEls[e_i] = Class_Array( self, int, nIncEls[e_i] );
+   memset( nIncEls, 0, fromSize * sizeof(unsigned) );
+   for( e_i = 0; e_i < toSize; e_i++ ) {
+      for( inc_i = 0; inc_i < nInvIncEls[e_i]; inc_i++ ) {
+	 elInd = invIncEls[e_i][inc_i];
+	 incEls[elInd][nIncEls[elInd]++] = e_i;
+      }
+   }
+
+   for( e_i = 0; e_i < fromSize; e_i++ ) {
+      IGraph_SetIncidence( self, fromDim, e_i, toDim, 
+				 nIncEls[e_i], incEls[e_i] );
+      Class_Free( self, incEls[e_i] );
+   }
+   Class_Free( self, nIncEls );
+   Class_Free( self, incEls );
+}
+
+void IGraph_ExpandIncidence( void* _self, int dim ) {
+   IGraph* self = (IGraph*)_self;
+   ISet nbrSetObj, *nbrSet = &nbrSetObj;
+   int nEls;
+   int nCurNbrs, maxNbrs;
+   int nIncEls, *incEls;
+   int nUpEls, *upEls;
+   int e_i, inc_i, inc_j;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( dim > 0 );
+   assert( self->nIncEls[dim][0] );
+
+   nEls = Sync_GetNumDomains( self->remotes[dim] );
+   maxNbrs = 0;
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      nCurNbrs = 0;
+      nIncEls = self->nIncEls[dim][0][e_i];
+      incEls = self->incEls[dim][0][e_i];
+      for( inc_i = 0; inc_i < nIncEls; inc_i++ )
+	 nCurNbrs += self->nIncEls[0][dim][incEls[inc_i]];
+      if( nCurNbrs > maxNbrs )
+	 maxNbrs = nCurNbrs;
+   }
+
+   ISet_Construct( nbrSet );
+   ISet_SetMaxSize( nbrSet, maxNbrs );
+   if( !self->nIncEls[dim][dim] ) {
+      self->nIncEls[dim][dim] = Class_Array( self, int, nEls );
+      memset( self->nIncEls[dim][dim], 0, nEls * sizeof(int) );
+   }
+   if( !self->incEls[dim][dim] ) {
+      self->incEls[dim][dim] = Class_Array( self, int*, nEls );
+      memset( self->incEls[dim][dim], 0, nEls * sizeof(int*) );
+   }
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      nIncEls = self->nIncEls[dim][0][e_i];
+      incEls = self->incEls[dim][0][e_i];
+      for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+	 nUpEls = self->nIncEls[0][dim][incEls[inc_i]];
+	 upEls = self->incEls[0][dim][incEls[inc_i]];
+	 for( inc_j = 0; inc_j < nUpEls; inc_j++ ) {
+	    if( upEls[inc_j] == e_i )
+	       continue;
+	    ISet_TryInsert( nbrSet, upEls[inc_j] );
+	 }
+      }
+      self->nIncEls[dim][dim][e_i] = ISet_GetSize( nbrSet );
+      self->incEls[dim][dim][e_i] = 
+	 Class_Rearray( self, self->incEls[dim][dim][e_i], int, 
+			self->nIncEls[dim][dim][e_i] );
+      ISet_GetArray( nbrSet, self->incEls[dim][dim][e_i] );
+      ISet_Clear( nbrSet );
+   }
+   ISet_Destruct( nbrSet );
+}
+
+void _IGraph_SetShadowDepth( void* _self, int depth ) {
+   IGraph* self = (IGraph*)_self;
+   int nNbrs, nDims;
+   Sync* vertSync;
+   ISet ghostSetObj, *ghostSet = &ghostSetObj;
+   ISet mySetObj, *mySet = &mySetObj;
+   IArray* isects;
+   int nGhosts, *ghosts;
+   int nLocals, nRemotes;
+   const int* locals, *remotes;
+   int *nNbrGhosts, **nbrGhosts;
+   int *nBytes, *nRecvBytes;
+   stgByte **bytes, **recvBytes;
+   int nIncEls, *incEls;
+   int **nLowEls, ***lowEls;
+   int *nShdEls, **shdEls;
+   int el, dom;
+   int n_i, s_i, l_i, inc_i;
+   int v_i, g_i, e_i, d_i;
+
+   assert( self && depth >= 0 );
+   assert( self->comm && self->nTDims );
+
+   _MeshTopology_SetShadowDepth( self, depth );
+
+   /* Build ghost set. */
+   nDims = self->nDims;
+   nNbrs = Comm_GetNumNeighbours( self->comm );
+   vertSync = self->remotes[0];
+   nGhosts = 0;
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      nGhosts += vertSync->nSnks[n_i] + vertSync->nSrcs[n_i];
+   ISet_Construct( ghostSet );
+   ISet_SetMaxSize( ghostSet, nGhosts );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < vertSync->nSnks[n_i]; s_i++ ) {
+	 el = Decomp_LocalToGlobal( self->locals[0], 
+				    vertSync->snks[n_i][s_i] );
+	 ISet_TryInsert( ghostSet, el );
+      }
+      for( s_i = 0; s_i < vertSync->nSrcs[n_i]; s_i++ ) {
+	 el = Sync_RemoteToGlobal( vertSync, vertSync->srcs[n_i][s_i] );
+	 ISet_TryInsert( ghostSet, el );
+      }
+   }
+   nGhosts = ISet_GetSize( ghostSet );
+   ghosts = Class_Array( self, int, nGhosts );
+   ISet_GetArray( ghostSet, ghosts );
+   ISet_Destruct( ghostSet );
+
+   /* Gather neighbouring ghost sets. */
+   nNbrGhosts = Class_Array( self, int, nNbrs );
+   nbrGhosts = Class_Array( self, int*, nNbrs );
+   Comm_AllgatherInit( self->comm, nGhosts, nNbrGhosts, sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      nbrGhosts[n_i] = Class_Array( self, int, nNbrGhosts[n_i] );
+   Comm_AllgatherBegin( self->comm, ghosts, (void**)nbrGhosts );
+   Comm_AllgatherEnd( self->comm );
+   Class_Free( self, ghosts );
+
+   /* Build intersections. */
+   ISet_Construct( mySet );
+   ISet_SetMaxSize( mySet, Sync_GetNumDomains( vertSync ) );
+   Decomp_GetLocals( self->locals[0], &nLocals, &locals );
+   for( l_i = 0; l_i < nLocals; l_i++ )
+      ISet_Insert( mySet, locals[l_i] );
+   Sync_GetRemotes( self->remotes[0], &nRemotes, &remotes );
+   for( l_i = 0; l_i < nRemotes; l_i++ )
+      ISet_Insert( mySet, remotes[l_i] );
+   isects = Class_Array( self, IArray, nNbrs );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      IArray_Construct( isects + n_i );
+      for( g_i = 0; g_i < nNbrGhosts[n_i]; g_i++ ) {
+	 if( ISet_Has( mySet, nbrGhosts[n_i][g_i] ) )
+	    IArray_Append( isects + n_i, nbrGhosts[n_i][g_i] );
+      }
+      Class_Free( self, nbrGhosts[n_i] );
+   }
+
+   /* Convert vertices to shadowed elements. */
+   ISet_Clear( mySet );
+   ISet_SetMaxSize( mySet, Decomp_GetNumLocals( self->locals[self->nDims] ) );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      IArray_GetArray( isects + n_i, nNbrGhosts + n_i, 
+		       (const int**)(nbrGhosts + n_i) );
+      for( v_i = 0; v_i < nNbrGhosts[n_i]; v_i++ ) {
+	 dom = Sync_GlobalToDomain( vertSync, nbrGhosts[n_i][v_i] );
+	 for( inc_i = 0; inc_i < self->nIncEls[0][nDims][dom]; inc_i++ ) {
+	    el = self->incEls[0][nDims][dom][inc_i];
+	    if( el < Decomp_GetNumLocals( self->locals[nDims] ) ) {
+	       el = Decomp_LocalToGlobal( self->locals[nDims], el );
+	       ISet_TryInsert( mySet, el );
+	    }
+	 }
+      }
+      IArray_Destruct( isects + n_i );
+      nNbrGhosts[n_i] = ISet_GetSize( mySet );
+      nbrGhosts[n_i] = Class_Array( self, int, nNbrGhosts[n_i] );
+      ISet_GetArray( mySet, nbrGhosts[n_i] );
+      ISet_Clear( mySet );
+   }
+   Class_Free( self, isects );
+   ISet_SetMaxSize( mySet, 0 );
+
+   /* Transfer elements. */
+   nShdEls = Class_Array( self, int, nNbrs );
+   shdEls = Class_Array( self, int*, nNbrs );
+   Comm_AlltoallInit( self->comm, nNbrGhosts, nShdEls, sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      shdEls[n_i] = Class_Array( self, int, nShdEls[n_i] );
+   Comm_AlltoallBegin( self->comm, (const void**)nbrGhosts, (void**)shdEls );
+   Comm_AlltoallEnd( self->comm );
+   dom = 0;
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      dom += nShdEls[n_i];
+   ISet_SetMaxSize( mySet, dom );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( e_i = 0; e_i < nShdEls[n_i]; e_i++ )
+	 ISet_Insert( mySet, shdEls[n_i][e_i] );
+      Class_Free( self, shdEls[n_i] );
+   }
+   nShdEls[0] = ISet_GetSize( mySet );
+   shdEls[0] = Class_Array( self, int, nShdEls[0] );
+   ISet_GetArray( mySet, shdEls[0] );
+   ISet_Clear( mySet );
+   ISet_SetMaxSize( mySet, 0 );
+   qsort( shdEls[0], nShdEls[0], sizeof(int), IGraph_Cmp );
+   IGraph_AddRemoteElements( self, nDims, nShdEls[0], shdEls[0] );
+   Class_Free( self, shdEls[0] );
+
+   /* Transfer lower level shadowed elements. */
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( e_i = 0; e_i < nNbrGhosts[n_i]; e_i++ ) {
+	 nbrGhosts[n_i][e_i] = Decomp_GlobalToLocal( self->locals[nDims], 
+						     nbrGhosts[n_i][e_i] );
+      }
+   }
+   nLowEls = Class_Array( self, int*, self->nTDims );
+   lowEls = Class_Array( self, int**, self->nTDims );
+   for( d_i = nDims - 1; d_i >= 0; d_i-- ) {
+      if( !self->nIncEls[nDims][d_i] ) {
+	 nLowEls[d_i] = NULL;
+	 lowEls[d_i] = NULL;
+	 continue;
+      }
+      nLowEls[d_i] = Class_Array( self, int, nNbrs );
+      lowEls[d_i] = Class_Array( self, int*, nNbrs );
+      ISet_SetMaxSize( mySet, Decomp_GetNumLocals( self->locals[d_i] ) );
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 for( e_i = 0; e_i < nNbrGhosts[n_i]; e_i++ ) {
+	    nIncEls = self->nIncEls[nDims][d_i][nbrGhosts[n_i][e_i]];
+	    incEls = self->incEls[nDims][d_i][nbrGhosts[n_i][e_i]];
+	    for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+	       if( incEls[inc_i] >= Decomp_GetNumLocals( self->locals[d_i] ) )
+		  continue;
+	       el = Decomp_LocalToGlobal( self->locals[d_i], incEls[inc_i] );
+	       ISet_TryInsert( mySet, el );
+	    }
+	 }
+	 nLowEls[d_i][n_i] = ISet_GetSize( mySet );
+	 lowEls[d_i][n_i] = Class_Array( self, int, nLowEls[d_i][n_i] );
+	 ISet_GetArray( mySet, lowEls[d_i][n_i] );
+	 ISet_Clear( mySet );
+      }
+
+      Comm_AlltoallInit( self->comm, nLowEls[d_i], nShdEls, sizeof(int) );
+      for( n_i = 0; n_i < nNbrs; n_i++ )
+	 shdEls[n_i] = Class_Array( self, int, nShdEls[n_i] );
+      Comm_AlltoallBegin( self->comm, (const void**)lowEls[d_i], (void**)shdEls );
+      Comm_AlltoallEnd( self->comm );
+
+      dom = 0;
+      for( n_i = 0; n_i < nNbrs; n_i++ )
+	 dom += nShdEls[n_i];
+      ISet_SetMaxSize( mySet, dom );
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 for( s_i = 0; s_i < nShdEls[n_i]; s_i++ ) {
+	    if( !Sync_TryGlobalToDomain( self->remotes[d_i], 
+					 shdEls[n_i][s_i], &el ) )
+	    {
+	       ISet_Insert( mySet, shdEls[n_i][s_i] );
+	    }
+	 }
+	 Class_Free( self, shdEls[n_i] );
+      }
+      nShdEls[0] = ISet_GetSize( mySet );
+      shdEls[0] = Class_Array( self, int, nShdEls[0] );
+      ISet_GetArray( mySet, shdEls[0] );
+      ISet_Clear( mySet );
+      qsort( shdEls[0], nShdEls[0], sizeof(int), IGraph_Cmp );
+      IGraph_AddRemoteElements( self, d_i, nShdEls[0], shdEls[0] );
+      Class_Free( self, shdEls[0] );
+   }
+   ISet_Destruct( mySet );
+   Class_Free( self, shdEls );
+   Class_Free( self, nShdEls );
+
+   /* Transfer shadowed incidence. */
+   nBytes = Class_Array( self, int, nNbrs );
+   bytes = Class_Array( self, stgByte*, nNbrs );
+   nRecvBytes = Class_Array( self, int, nNbrs );
+   recvBytes = Class_Array( self, stgByte*, nNbrs );
+   nLowEls[nDims] = nNbrGhosts;
+   lowEls[nDims] = nbrGhosts;
+   for( d_i = 0; d_i < nDims; d_i++ ) {
+      if( !nLowEls[d_i] ) continue;
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 for( e_i = 0; e_i < nLowEls[d_i][n_i]; e_i++ ) {
+	    lowEls[d_i][n_i][e_i] = Decomp_GlobalToLocal( self->locals[d_i], 
+							  lowEls[d_i][n_i][e_i] );
+	 }
+      }
+   }
+   for( d_i = nDims; d_i >= 0; d_i-- ) {
+      if( !nLowEls[d_i] )
+	 continue;
+      if( d_i == 0 ) {
+	 for( n_i = 0; n_i < nNbrs; n_i++ )
+	    Class_Free( self, lowEls[0][n_i] );
+	 Class_Free( self, lowEls[0] );
+	 Class_Free( self, nLowEls[0] );
+	 continue;
+      }
+
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 IGraph_PickleIncidenceInit( self, d_i, 
+					   nLowEls[d_i][n_i], lowEls[d_i][n_i], 
+					   nBytes + n_i );
+	 bytes[n_i] = Class_Array( self, stgByte, nBytes[n_i] );
+	 IGraph_PickleIncidence( self, d_i, 
+				       nLowEls[d_i][n_i], lowEls[d_i][n_i], 
+				       bytes[n_i] );
+	 Class_Free( self, lowEls[d_i][n_i] );
+      }
+      Class_Free( self, nLowEls[d_i] );
+      Class_Free( self, lowEls[d_i] );
+
+      Comm_AlltoallInit( self->comm, nBytes, nRecvBytes, sizeof(stgByte) );
+      for( n_i = 0; n_i < nNbrs; n_i++ )
+	 recvBytes[n_i] = Class_Array( self, stgByte, nRecvBytes[n_i] );
+      Comm_AlltoallBegin( self->comm, (const void**)bytes, (void**)recvBytes );
+      Comm_AlltoallEnd( self->comm );
+      for( n_i = 0; n_i < nNbrs; n_i++ )
+	 Class_Free( self, bytes[n_i] );
+
+      for( n_i = 0; n_i < nNbrs; n_i++ ) {
+	 IGraph_UnpickleIncidence( self, d_i, 
+					 nRecvBytes[n_i], recvBytes[n_i] );
+	 Class_Free( self, recvBytes[n_i] );
+      }
+   }
+   Class_Free( self, nBytes );
+   Class_Free( self, bytes );
+   Class_Free( self, lowEls );
+   Class_Free( self, nLowEls );
+   Class_Free( self, recvBytes );
+   Class_Free( self, nRecvBytes );
+}
+
+void IGraph_Clear( void* self ) {
+   IGraph_ClearDims( self );
+   if( ((IGraph*)self)->comm )
+      NewClass_RemoveRef( ((IGraph*)self)->comm );
+   ((IGraph*)self)->comm = NULL;
+}
+
+void IGraph_ClearDims( void* _self ) {
+   IGraph* self = (IGraph*)_self;
+   int d_i;
+
+   IGraph_ClearElements( self );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->locals && self->locals[d_i] )
+	 NewClass_RemoveRef( self->locals[d_i] );
+      if( self->remotes && self->remotes[d_i] )
+	 NewClass_RemoveRef( self->remotes[d_i] );
+   }
+   Class_Free( self, self->locals );
+   Class_Free( self, self->remotes );
+   Class_Free( self, self->nIncEls );
+   Class_Free( self, self->incEls );
+
+   self->nDims = 0;
+   self->nTDims = 0;
+   self->shadDepth = 0;
+   self->locals = NULL;
+   self->remotes = NULL;
+   self->nIncEls = NULL;
+   self->incEls = NULL;
+}
+
+void IGraph_ClearElements( void* _self ) {
+   IGraph* self = (IGraph*)_self;
+   int d_i;
+
+   IGraph_ClearIncidence( self );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      if( self->locals )
+	 Decomp_ClearLocals( self->locals[d_i] );
+      if( self->remotes && self->remotes[d_i] )
+	 Sync_ClearRemotes( self->remotes[d_i] );
+      if( self->bndEls )
+	 Class_Free( self, self->bndEls[d_i] );
+   }
+   Class_Free( self, self->bndEls );
+   Class_Free( self, self->nBndEls );
+   self->bndEls = NULL;
+   self->nBndEls = NULL;
+}
+
+void IGraph_ClearIncidence( void* _self ) {
+   IGraph* self = (IGraph*)_self;
+   int d_i, d_j, e_i;
+
+   assert( self );
+   for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+      for( d_j = 0; d_j < self->nTDims; d_j++ ) {
+	 if( self->nIncEls[d_i][d_j] ) {
+	    for( e_i = 0; e_i < Sync_GetNumDomains( self->remotes[d_i] ); e_i++ )
+	       Class_Free( self, self->incEls[d_i][d_j][e_i] );
+	    Class_Free( self, self->incEls[d_i][d_j] );
+	    Class_Free( self, self->nIncEls[d_i][d_j] );
+	    self->nIncEls[d_i][d_j] = NULL;
+	    self->incEls[d_i][d_j] = NULL;
+	 }
+      }
+   }
+}
+
+int IGraph_GetNumDims( const void* self ) {
+   assert( self );
+   return ((IGraph*)self)->nDims;
+}
+
+const Comm* IGraph_GetComm( const void* self ) {
+   assert( self );
+   return ((IGraph*)self)->comm;
+}
+
+Bool IGraph_HasDomain( const void* self, int dim ) {
+   assert( self && dim < ((IGraph*)self)->nTDims );
+   return Sync_GetNumDomains( ((IGraph*)self)->remotes[dim] ) ? 
+      True : False;
+}
+
+const Sync* IGraph_GetDomain( const void* self, int dim ) {
+   assert( self && dim < ((IGraph*)self)->nTDims );
+   return ((IGraph*)self)->remotes[dim];
+}
+
+void IGraph_GetBoundaryElements( const void* self, int dim, 
+				       int* nEls, const int** els )
+{
+   assert( Class_IsSuper( self, IGraph ) );
+   assert( dim < ((IGraph*)self)->nTDims );
+   assert( nEls );
+   assert( els );
+
+   *nEls = ((IGraph*)self)->nBndEls ? 
+      ((IGraph*)self)->nBndEls[dim] : 0;
+   *els = ((IGraph*)self)->bndEls ? 
+      ((IGraph*)self)->bndEls[dim] : NULL;
+}
+
+Bool IGraph_HasIncidence( const void* self, int fromDim, int toDim ) {
+   assert( self );
+   assert( fromDim < ((IGraph*)self)->nTDims );
+   assert( toDim < ((IGraph*)self)->nTDims );
+   return ((IGraph*)self)->nIncEls[fromDim][toDim] ? True : False;
+}
+
+int IGraph_GetIncidenceSize( const void* self, int fromDim, int fromEl, 
+				   int toDim )
+{
+   assert( self );
+   assert( fromDim < ((IGraph*)self)->nTDims );
+   assert( toDim < ((IGraph*)self)->nTDims );
+   assert( fromEl < Sync_GetNumDomains( ((IGraph*)self)->remotes[fromDim] ) );
+   return ((IGraph*)self)->nIncEls[fromDim][toDim][fromEl];
+}
+
+void _IGraph_GetIncidence( void* self, int fromDim, int fromEl, 
+			   int toDim, IArray* inc )
+{
+   assert( self );
+   assert( fromDim < ((IGraph*)self)->nTDims );
+   assert( toDim < ((IGraph*)self)->nTDims );
+   assert( fromEl < Sync_GetNumDomains( ((IGraph*)self)->remotes[fromDim] ) );
+   assert( inc );
+
+   IArray_SoftResize( inc, ((IGraph*)self)->nIncEls[fromDim][toDim][fromEl] );
+   memcpy( inc->ptr, ((IGraph*)self)->incEls[fromDim][toDim][fromEl], 
+	   IArray_GetSize( inc ) * sizeof(int) );
+}
+
+void IGraph_PrintIncidence( const void* _self, int fromDim, int toDim ) {
+   IGraph* self = (IGraph*)_self;
+   int nEls, global;
+   int nIncEls, *incEls;
+   int e_i, inc_i;
+
+   assert( self );
+   assert( toDim < self->nTDims );
+   assert( fromDim < self->nTDims );
+
+   nEls = Sync_GetNumDomains( self->remotes[fromDim] );
+   printf( "Printing incidence for %d elements:\n", nEls );
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      global = Sync_DomainToGlobal( self->remotes[fromDim], e_i );
+      nIncEls = self->nIncEls[fromDim][toDim][e_i];
+      incEls = self->incEls[fromDim][toDim][e_i];
+      printf( "   %d, %d incident elements:\n", global, nIncEls );
+      for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+	 printf( "      %d\n", incEls[inc_i] );
+      }
+   }
+}
+
+void IGraph_PickleIncidenceInit( IGraph* self, int dim, 
+				       int nEls, int* els, int* nBytes )
+{
+   int size;
+   int d_i, e_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || els );
+   assert( nBytes );
+
+   size = 1;
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      size += 1;
+      for( d_i = 0; d_i < dim; d_i++ ) {
+	 size += 1;
+	 if( self->nIncEls[dim][d_i] )
+	    size += self->nIncEls[dim][d_i][els[e_i]];
+      }
+   }
+   *nBytes = size * sizeof(int);
+}
+
+void IGraph_PickleIncidence( IGraph* self, int dim, 
+				   int nEls, int* els, 
+				   stgByte* bytes )
+{
+   Sync* sync;
+   int curEntry, *entries;
+   int nIncEls, *incEls;
+   int inc_i, d_i, e_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( !nEls || els );
+   assert( bytes );
+
+   sync = self->remotes[dim];
+   entries = (int*)bytes;
+   entries[0] = nEls;
+   curEntry = 1;
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      entries[curEntry++] = Sync_DomainToGlobal( sync, els[e_i] );
+      for( d_i = 0; d_i < dim; d_i++ ) {
+	 if( !self->nIncEls[dim][d_i] ) {
+	    entries[curEntry++] = 0;
+	    continue;
+	 }
+	 nIncEls = self->nIncEls[dim][d_i][els[e_i]];
+	 entries[curEntry++] = nIncEls;
+	 incEls = self->incEls[dim][d_i][els[e_i]];
+	 for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+	    entries[curEntry++] = Sync_DomainToGlobal( self->remotes[d_i], 
+						       incEls[inc_i] );
+	 }
+      }
+   }
+}
+
+void IGraph_UnpickleIncidence( IGraph* self, int dim, 
+				     int nBytes, stgByte* bytes )
+{
+   Sync* sync;
+   int nEls, el;
+   int nIncEls, **incEls;
+   int curEntry, *entries;
+   int inc_i, e_i, d_i;
+
+   assert( self );
+   assert( dim < self->nTDims );
+   assert( nBytes && bytes );
+
+   sync = self->remotes[dim];
+   entries = (int*)bytes;
+   nEls = entries[0];
+   curEntry = 1;
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      el = Sync_GlobalToDomain( sync, entries[curEntry++] );
+      for( d_i = 0; d_i < dim; d_i++ ) {
+	 nIncEls = entries[curEntry++];
+	 if( !self->nIncEls[dim][d_i] ) {
+	    if( !nIncEls )
+	       continue;
+	    self->nIncEls[dim][d_i] = Class_Array( self, int, 
+						   Sync_GetNumDomains( sync ) );
+	    memset( self->nIncEls[dim][d_i], 0, 
+		    sizeof(int) * Sync_GetNumDomains( sync ) );
+	 }
+	 self->nIncEls[dim][d_i][el] = nIncEls;
+	 if( !nIncEls ) {
+	    if( self->incEls[dim][d_i] )
+	       Class_Free( self, self->incEls[dim][d_i][el] );
+	    continue;
+	 }
+	 if( !self->incEls[dim][d_i] ) {
+	    self->incEls[dim][d_i] = Class_Array( self, int*, 
+						  Sync_GetNumDomains( sync ) );
+	    memset( self->incEls[dim][d_i], 0, 
+		    Sync_GetNumDomains( sync ) * sizeof(int*) );
+	 }
+	 incEls = self->incEls[dim][d_i];
+	 incEls[el] = Class_Rearray( self, incEls[el], int, nIncEls );
+	 for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+	    incEls[el][inc_i] = Sync_GlobalToDomain( self->remotes[d_i], 
+						     entries[curEntry++] );
+	 }
+      }
+   }
+}
+
+int IGraph_Cmp( const void* l, const void* r ) {
+   assert( *(int*)l != *(int*)r );
+   return (*(int*)l < *(int*)r) ? -1 : 1;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/IGraph.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/IGraph.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,137 @@
+#include INHERIT( StgDomain/Mesh/MeshTopology )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+#define PARENTDIR StgDomain/Mesh
+#define PARENT MeshTopology
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME IGraph
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+
+MEMBER( Decomp**, locals )
+MEMBER( Sync**, remotes )
+MEMBER( int*, nBndEls )
+MEMBER( int**, bndEls )
+MEMBER( int***, nIncEls )
+MEMBER( int****, incEls )
+
+
+VOIDOVERRIDE( Init, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Destruct, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Copy, void, 
+	      (void* self, const void* op), 
+	      (self, op) )
+
+OVERRIDE( CalcMem, SizeT, 
+	  (const void* self, PtrMap* ptrs), 
+	  (self, ptrs) )
+
+VOIDOVERRIDE( SetNumDims, void, 
+	      (void* self, int nDims), 
+	      (self, nDims) )
+
+METHOD( SetDomain, void, 
+	(void* self, int dim, Sync* sync), 
+	(self, dim, comm) )
+
+METHOD( SetElements, void, 
+	(void* self, int dim, int nEls, const int* globals), 
+	(self, dim, nEls, globals) )
+
+METHOD( SetLocalElements, void, 
+	(void* self, int dim, int nEls, const int* globals), 
+	(self, dim, nEls, globals) )
+
+METHOD( AddLocalElements, void, 
+	(void* self, int dim, int nEls, const int* globals), 
+	(self, dim, nEls, globals) )
+
+METHOD( RemoveLocalElements, void, 
+	(void* self, int dim, int nEls, const int* globals, IMap* map), 
+	(self, dim, nEls, globals, map) )
+
+METHOD( SetRemoteElements, void, 
+	(void* self, int dim, int nEls, const int* globals), 
+	(self, dim, nEls, globals) )
+
+METHOD( AddRemoteElements, void, 
+	(void* self, int dim, int nEls, const int* globals), 
+	(self, dim, nEls, globals) )
+
+METHOD( RemoveRemoteElements, void, 
+	(void* self, int dim, int nEls, const int* globals, IMap* map), 
+	(self, dim, nEls, globals, map) )
+
+METHOD( SetBoundaryElements, void, 
+	(void* self, int dim, int nEls, const int* els ), 
+	(self, dim, nEls, els) )
+
+METHOD( SetIncidence, void, 
+	(void* self, int fromDim, int fromEl, int toDim, int nIncEls, const int* incEls ), 
+	(self, fromDim, fromEl, toDim, nIncEls, incEls) )
+
+METHOD( RemoveIncidence, void, 
+	(void* self, int fromDim, int toDim), 
+	(self, fromDim, toDim) )
+
+METHOD( InvertIncidence, void, 
+	(void* self, int fromDim, int toDim), 
+	(self, fromDim, toDim) )
+
+METHOD( ExpandIncidence, void, 
+	(void* self, int dim), 
+	(self, dim) )
+
+VOIDOVERRIDE( SetShadowDepth, void, 
+	      (void* self, int depth), 
+	      (self, depth) )
+
+METHOD( Clear, void, 
+	(void* self), 
+	(self) )
+
+METHOD( ClearDims, void, 
+	(void* self), 
+	(self) )
+
+METHOD( ClearElements, void, 
+	(void* self), 
+	(self) )
+
+METHOD( ClearIncidence, void, 
+	(void* self), 
+	(self) )
+
+METHOD( HasDomain, Bool, 
+	(const void* self, int dim), 
+	(self, dim) )
+
+METHOD( GetDomain, const Sync*, 
+	(const void* self, int dim), 
+	(self) )
+
+METHOD( GetBoundaryElements, void, 
+	(const void* self, int dim, int* nEls, const int** els), 
+	(self, dim, nEls, els) )
+
+METHOD( HasIncidence, Bool, 
+	(const void* self, int fromDim, int toDim), 
+	(self, fromDim, toDim) )
+
+METHOD( GetIncidenceSize, int, 
+	(const void* self, int fromDim, int fromEl, int toDim), 
+	(self, fromDim, fromEl, toDim) )
+
+VOIDOVERRIDE( GetIncidence, void, 
+	      (void* self, int fromDim, int fromEl, int toDim, IArray* inc), 
+	      (self, fromDim, fromEl, toDim, inc) )
+
+METHOD( PrintIncidence, void, 
+	(const void* self, int fromDim, int toDim), 
+	(self, fromDim, toDim) )
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/IGraph.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/IGraph.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: IGraph.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Mesh_IGraph_h__
+#define __StGermain_Domain_Mesh_IGraph_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME IGraph
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Mesh_IGraph_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/IGraph.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/IGraph.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IGraph</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,95 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include "Mesh.h"
+
+
+Stream* Mesh_VerboseConfig = NULL;
+Stream* Mesh_Debug = NULL;
+Stream* Mesh_Warning = NULL;
+Stream* Mesh_Error = NULL;
+
+
+Bool StgDomainMesh_Init( int* argc, char** argv[] ) {
+	Mesh_VerboseConfig = Journal_Register( Info_Type, "Mesh_VerboseConfig" );
+	Mesh_Debug = Journal_Register( Debug_Type, "Mesh" );
+	Mesh_Warning = Journal_Register( Error_Type, "Mesh" );
+	Mesh_Error = Journal_Register( Error_Type, "Mesh" );
+
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   Mesh_Algorithms_Type, "0", (Stg_Component_DefaultConstructorFunction*)Mesh_Algorithms_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   Mesh_HexAlgorithms_Type, "0", 
+				   (Stg_Component_DefaultConstructorFunction*)Mesh_HexAlgorithms_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   Mesh_CentroidAlgorithms_Type, "0", 
+				   (Stg_Component_DefaultConstructorFunction*)Mesh_CentroidAlgorithms_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   Mesh_RegularAlgorithms_Type, "0", 
+				   (Stg_Component_DefaultConstructorFunction*)Mesh_RegularAlgorithms_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   MeshTopology_Type, "0", (Stg_Component_DefaultConstructorFunction*)MeshTopology_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   CartesianGenerator_Type, "0", (Stg_Component_DefaultConstructorFunction*)CartesianGenerator_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   Mesh_Type, "0", (Stg_Component_DefaultConstructorFunction*)Mesh_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   SurfaceAdaptor_Type, "0", (Stg_Component_DefaultConstructorFunction*)SurfaceAdaptor_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   CompressionAdaptor_Type, "0", (Stg_Component_DefaultConstructorFunction*)CompressionAdaptor_New );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   MeshVariable_Type, "0", (Stg_Component_DefaultConstructorFunction*)MeshVariable_New );
+
+	RegisterParent( Mesh_ElementType_Type, Stg_Class_Type );
+	RegisterParent( Mesh_HexType_Type, Mesh_ElementType_Type );
+	RegisterParent( Mesh_CentroidType_Type, Mesh_ElementType_Type );
+	RegisterParent( Mesh_Algorithms_Type, Stg_Component_Type );
+	RegisterParent( Mesh_HexAlgorithms_Type, Mesh_Algorithms_Type );
+	RegisterParent( Mesh_CentroidAlgorithms_Type, Mesh_Algorithms_Type );
+	RegisterParent( Mesh_RegularAlgorithms_Type, Mesh_Algorithms_Type );
+	RegisterParent( MeshTopology_Type, Stg_Component_Type );
+	RegisterParent( Mesh_Type, Stg_Component_Type );
+	RegisterParent( MeshGenerator_Type, Stg_Component_Type );
+	RegisterParent( CartesianGenerator_Type, MeshGenerator_Type );
+	RegisterParent( MeshAdaptor_Type, MeshGenerator_Type );
+	RegisterParent( SurfaceAdaptor_Type, MeshAdaptor_Type );
+	RegisterParent( CompressionAdaptor_Type, MeshAdaptor_Type );
+	RegisterParent( MeshVariable_Type, Variable_Type );
+
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Init_h__
+#define __Domain_Mesh_Init_h__
+	
+	Bool StgDomainMesh_Init( int* argc, char** argv[] );
+	
+#endif /* __Domain_Mesh_Init_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,75 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Mesh.h 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_h__
+#define __Domain_Mesh_h__
+	
+#include "types.h"
+#include "shortcuts.h"
+
+#include "Grid.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+/*
+	#include "Decomposer.h"
+	#include "DecompTransfer.h"
+*/
+#include "Mesh_ElementType.h"
+#include "Mesh_HexType.h"
+#include "Mesh_CentroidType.h"
+#include "Mesh_Algorithms.h"
+#include "Mesh_HexAlgorithms.h"
+#include "Mesh_RegularAlgorithms.h"
+#include "Mesh_CentroidAlgorithms.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "CartesianGenerator.h"
+#include "MeshAdaptor.h"
+#include "SurfaceAdaptor.h"
+#include "CompressionAdaptor.h"
+#include "MeshVariable.h"
+
+#include "Init.h"
+#include "Finalise.h"
+
+#endif /* __Domain_Mesh_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshAdaptor.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshAdaptor.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,151 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshAdaptor.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Decomp.h"
+#include "MeshTopology.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "MeshAdaptor.h"
+
+
+/* Textual name of this class */
+const Type MeshAdaptor_Type = "MeshAdaptor";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshAdaptor* _MeshAdaptor_New( MESHADAPTOR_DEFARGS ) {
+	MeshAdaptor* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(MeshAdaptor) );
+	self = (MeshAdaptor*)_MeshGenerator_New( MESHGENERATOR_PASSARGS );
+
+	/* Virtual info */
+
+	/* MeshAdaptor info */
+	_MeshAdaptor_Init( self );
+
+	return self;
+}
+
+void _MeshAdaptor_Init( MeshAdaptor* self ) {
+	self->generator = NULL;
+	self->srcMesh = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshAdaptor_Delete( void* adaptor ) {
+	MeshAdaptor*	self = (MeshAdaptor*)adaptor;
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _MeshAdaptor_Print( void* adaptor, Stream* stream ) {
+	MeshAdaptor*	self = (MeshAdaptor*)adaptor;
+	
+	/* Set the Journal for printing informations */
+	Stream* adaptorStream;
+	adaptorStream = Journal_Register( InfoStream_Type, "MeshAdaptorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "MeshAdaptor (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void _MeshAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data ) {
+	MeshAdaptor*	self = (MeshAdaptor*)adaptor;
+
+	_MeshGenerator_Construct( self, cf, data );
+
+	/* There could be either a generator or a mesh to use as a template.  Prefer the mesh. */
+	self->srcMesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "sourceMesh", Mesh, False, data );
+	if( !self->srcMesh ) {
+		/* Read the source generator. */
+		self->generator = Stg_ComponentFactory_ConstructByKey( cf, self->name, "sourceGenerator", 
+								       MeshGenerator, True, data );
+	}
+}
+
+void _MeshAdaptor_Build( void* adaptor, void* data ) {
+	_MeshGenerator_Build( adaptor, data );
+}
+
+void _MeshAdaptor_Initialise( void* adaptor, void* data ) {
+}
+
+void _MeshAdaptor_Execute( void* adaptor, void* data ) {
+}
+
+void _MeshAdaptor_Destroy( void* adaptor, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshAdaptor_SetGenerator( void* adaptor, void* generator ) {
+	MeshAdaptor*	self = (MeshAdaptor*)adaptor;
+
+	self->generator = generator;
+	if( self->generator )
+		self->srcMesh = NULL;
+}
+
+void MeshAdaptor_SetSourceMesh( void* adaptor, void* mesh ) {
+	MeshAdaptor*	self = (MeshAdaptor*)adaptor;
+
+	self->srcMesh = (Mesh*)mesh;
+	if( self->srcMesh )
+		self->generator = NULL;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshAdaptor.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshAdaptor.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,98 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshAdaptor.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_MeshAdaptor_h__
+#define __Domain_Mesh_MeshAdaptor_h__
+
+	/** Textual name of this class */
+	extern const Type MeshAdaptor_Type;
+
+	/** Virtual function types */
+
+	/** MeshAdaptor class contents */
+	#define __MeshAdaptor				\
+		/* General info */			\
+		__MeshGenerator				\
+							\
+		/* Virtual info */			\
+							\
+		/* MeshAdaptor info */			\
+		MeshGenerator*		generator;	\
+		Mesh*			srcMesh;
+
+	struct MeshAdaptor { __MeshAdaptor };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESHADAPTOR_DEFARGS \
+		MESHGENERATOR_DEFARGS
+
+	#define MESHADAPTOR_PASSARGS \
+		MESHGENERATOR_PASSARGS
+
+	MeshAdaptor* _MeshAdaptor_New( MESHADAPTOR_DEFARGS );
+	void _MeshAdaptor_Init( MeshAdaptor* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _MeshAdaptor_Delete( void* adaptor );
+	void _MeshAdaptor_Print( void* adaptor, Stream* stream );
+	void _MeshAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data );
+	void _MeshAdaptor_Build( void* adaptor, void* data );
+	void _MeshAdaptor_Initialise( void* adaptor, void* data );
+	void _MeshAdaptor_Execute( void* adaptor, void* data );
+	void _MeshAdaptor_Destroy( void* adaptor, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshAdaptor_SetGenerator( void* adaptor, void* generator );
+	void MeshAdaptor_SetSourceMesh( void* adaptor, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_MeshAdaptor_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshAdaptor.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshAdaptor.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshAdaptor</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshClass.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshClass.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,617 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshClass.c 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_Type = "Mesh";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh* Mesh_New( Name name ) {
+	return _Mesh_New( sizeof(Mesh), 
+			  Mesh_Type, 
+			  _Mesh_Delete, 
+			  _Mesh_Print, 
+			  NULL, 
+			  (void* (*)(Name))_Mesh_New, 
+			  _Mesh_Construct, 
+			  _Mesh_Build, 
+			  _Mesh_Initialise, 
+			  _Mesh_Execute, 
+			  _Mesh_Destroy, 
+			  name, 
+			  NON_GLOBAL );
+}
+
+Mesh* _Mesh_New( MESH_DEFARGS ) {
+	Mesh* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh) );
+	self = (Mesh*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh info */
+	_Mesh_Init( self );
+
+	return self;
+}
+
+void _Mesh_Init( Mesh* self ) {
+	self->topo = IGraph_New( "" );
+	self->verts = NULL;
+
+	self->vars = List_New();
+	List_SetItemSize( self->vars, sizeof(MeshVariable*) );
+
+	self->minSep = 0.0;
+	self->minAxialSep = NULL;
+	self->minLocalCrd = NULL;
+	self->maxLocalCrd = NULL;
+	self->minDomainCrd = NULL;
+	self->maxDomainCrd = NULL;
+	self->minGlobalCrd = NULL;
+	self->maxGlobalCrd = NULL;
+
+	self->algorithms = Mesh_Algorithms_New( "" );
+	Mesh_Algorithms_SetMesh( self->algorithms, self );
+	self->nElTypes = 0;
+	self->elTypes = NULL;
+	self->elTypeMap = NULL;
+
+	self->topoDataSizes = UIntMap_New();
+	self->topoDataInfos = NULL;
+	self->topoDatas = NULL;
+	self->info = ExtensionManager_New_OfExistingObject( "mesh_info", self );
+
+	self->generator = NULL;
+	self->emReg = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_Delete( void* mesh ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	Mesh_Destruct( self );
+	KillObject( self->algorithms );
+	NewClass_Delete( self->topo );
+	KillObject( self->info );
+	KillObject( self->vars );
+	KillObject( self->topoDataSizes );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _Mesh_Print( void* mesh, Stream* stream ) {
+	Mesh*	self = (Mesh*)mesh;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshStream;
+	meshStream = Journal_Register( InfoStream_Type, "MeshStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void _Mesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Mesh_Build( void* mesh, void* data ) {
+	Mesh*		self = (Mesh*)mesh;
+	unsigned	nDims;
+	unsigned	d_i;
+
+	assert( self );
+
+	if( self->generator )
+		MeshGenerator_Generate( self->generator, self );
+
+	nDims = Mesh_GetDimSize( self );
+	if( !nDims )
+		return;
+
+	self->topoDataInfos = Memory_Alloc_Array( ExtensionManager*, nDims, "mesh::topoDataInfos" );
+	self->topoDatas = Memory_Alloc_Array( void*, nDims, "mesh::topoDatas" );
+
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		char		name[20];
+		unsigned	size;
+
+		if( !UIntMap_Map( self->topoDataSizes, d_i, &size ) || !size ||
+		    !Mesh_GetDomainSize( self, d_i ) )
+		{
+			self->topoDataInfos[d_i] = NULL;
+			self->topoDatas[d_i] = NULL;
+			continue;
+		}
+
+		sprintf( name, "topoData(%d)", d_i );
+		self->topoDataInfos[d_i] = ExtensionManager_New_OfStruct( name, size );
+		self->topoDatas[d_i] = (void*)ExtensionManager_Malloc( self->topoDataInfos[d_i], Mesh_GetDomainSize( self, d_i ) );
+	}
+
+	/*
+	** Set up the geometric information.
+	*/
+
+	self->minAxialSep = Memory_Alloc_Array( double, nDims, "Mesh::minAxialSep" );
+	self->minLocalCrd = Memory_Alloc_Array( double, nDims, "Mesh::minLocalCrd" );
+	self->maxLocalCrd = Memory_Alloc_Array( double, nDims, "Mesh::maxLocalCrd" );
+	self->minDomainCrd = Memory_Alloc_Array( double, nDims, "Mesh::minLocalCrd" );
+	self->maxDomainCrd = Memory_Alloc_Array( double, nDims, "Mesh::maxLocalCrd" );
+	self->minGlobalCrd = Memory_Alloc_Array( double, nDims, "Mesh::minGlobalCrd" );
+	self->maxGlobalCrd = Memory_Alloc_Array( double, nDims, "Mesh::maxGlobalCrd" );
+	Mesh_DeformationUpdate( self );
+}
+
+void _Mesh_Initialise( void* mesh, void* data ) {
+}
+
+void _Mesh_Execute( void* mesh, void* data ) {
+}
+
+void _Mesh_Destroy( void* mesh, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Mesh_SetExtensionManagerRegister( void* mesh, void* extMgrReg ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	self->emReg = extMgrReg;
+	if( extMgrReg )
+		ExtensionManager_Register_Add( extMgrReg, self->info );
+}
+
+void Mesh_SetTopologyDataSize( void* mesh, MeshTopology_Dim dim, unsigned size ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	UIntMap_Insert( self->topoDataSizes, dim, size );
+}
+
+void Mesh_SetGenerator( void* mesh, void* generator ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	Mesh_Destruct( self );
+	self->generator = generator;
+}
+
+void Mesh_SetAlgorithms( void* mesh, void* algorithms ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self && Stg_CheckType( self, Mesh ) );
+
+	FreeObject( self->algorithms );
+	if( algorithms ) {
+		assert( Stg_CheckType( algorithms, Mesh_Algorithms ) );
+		self->algorithms = algorithms;
+	}
+	else
+		self->algorithms = Mesh_Algorithms_New( "" );
+	Mesh_Algorithms_SetMesh( self->algorithms, self );
+}
+
+unsigned Mesh_GetDimSize( void* mesh ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return self->topo->nDims;
+}
+
+unsigned Mesh_GetGlobalSize( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Decomp_GetNumGlobals( Sync_GetDecomp( IGraph_GetDomain( self->topo, dim ) ) );
+}
+
+unsigned Mesh_GetLocalSize( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Decomp_GetNumLocals( Sync_GetDecomp( IGraph_GetDomain( self->topo, dim ) ) );
+}
+
+unsigned Mesh_GetRemoteSize( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_GetNumRemotes( IGraph_GetDomain( self->topo, dim ) );
+}
+
+unsigned Mesh_GetDomainSize( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_GetNumDomains( IGraph_GetDomain( self->topo, dim ) );
+}
+
+unsigned Mesh_GetSharedSize( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_GetNumShared( IGraph_GetDomain( self->topo, dim ) );
+}
+
+MeshTopology* Mesh_GetTopology( void* mesh ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return self->topo;
+}
+
+Sync* Mesh_GetSync( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return (Sync*)IGraph_GetDomain( self->topo, dim );
+}
+
+Bool Mesh_GlobalToDomain( void* mesh, MeshTopology_Dim dim, unsigned global, unsigned* domain ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_TryGlobalToDomain( IGraph_GetDomain( self->topo, dim ), global, domain );
+}
+
+unsigned Mesh_DomainToGlobal( void* mesh, MeshTopology_Dim dim, unsigned domain ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_DomainToGlobal( IGraph_GetDomain( self->topo, dim ), domain );
+}
+
+Bool Mesh_LocalToShared( void* mesh, MeshTopology_Dim dim, unsigned domain, unsigned* shared ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_TryLocalToShared( IGraph_GetDomain( self->topo, dim ), domain, shared );
+}
+
+unsigned Mesh_SharedToLocal( void* mesh, MeshTopology_Dim dim, unsigned shared ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return Sync_SharedToLocal( IGraph_GetDomain( self->topo, dim ), shared );
+}
+
+unsigned Mesh_GetOwner( void* mesh, MeshTopology_Dim dim, unsigned remote ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return Sync_GetOwner( IGraph_GetDomain( self->topo, dim ), remote );
+}
+
+void Mesh_GetSharers( void* mesh, MeshTopology_Dim dim, unsigned shared, 
+		      unsigned* nSharers, unsigned** sharers )
+{
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	Sync_GetSharers( IGraph_GetDomain( self->topo, dim ), shared, nSharers, sharers );
+}
+
+Bool Mesh_HasIncidence( void* mesh, MeshTopology_Dim fromDim, MeshTopology_Dim toDim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	return IGraph_HasIncidence( self->topo, fromDim, toDim );
+}
+
+unsigned Mesh_GetIncidenceSize( void* mesh, MeshTopology_Dim fromDim, unsigned fromInd, 
+				MeshTopology_Dim toDim )
+{
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return IGraph_GetIncidenceSize( self->topo, fromDim, fromInd, toDim );
+}
+
+void Mesh_GetIncidence( void* mesh, MeshTopology_Dim fromDim, unsigned fromInd, MeshTopology_Dim toDim, 
+			IArray* inc )
+{
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topo );
+
+	MeshTopology_GetIncidence( self->topo, fromDim, fromInd, toDim, inc );
+}
+
+unsigned Mesh_NearestVertex( void* mesh, double* point ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return Mesh_Algorithms_NearestVertex( self->algorithms, point );
+}
+
+Bool Mesh_Search( void* mesh, double* point, 
+		  MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self && Stg_CheckType( self, Mesh ) );
+
+	return Mesh_Algorithms_Search( self->algorithms, point, dim, ind );
+}
+
+Bool Mesh_SearchElements( void* mesh, double* point, unsigned* elInd ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self && Stg_CheckType( self, Mesh ) );
+
+	return Mesh_Algorithms_SearchElements( self->algorithms, point, elInd );
+}
+
+Bool Mesh_ElementHasPoint( void* mesh, unsigned element, double* point, 
+			   MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( element < Mesh_GetDomainSize( self, Mesh_GetDimSize( self ) ) );
+	assert( self->elTypeMap );
+	assert( self->elTypeMap[element] < self->nElTypes );
+	assert( self->elTypes[self->elTypeMap[element]] );
+
+	return Mesh_ElementType_ElementHasPoint( self->elTypes[self->elTypeMap[element]], element, point, 
+						 dim, ind );
+}
+
+Mesh_ElementType* Mesh_GetElementType( void* mesh, unsigned element ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( element < Mesh_GetDomainSize( self, Mesh_GetDimSize( self ) ) );
+	assert( self->elTypeMap );
+	assert( self->elTypeMap[element] < self->nElTypes );
+	assert( self->elTypes );
+
+	return self->elTypes[self->elTypeMap[element]];
+}
+
+Comm* Mesh_GetCommTopology( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	return (Comm*)MeshTopology_GetComm( self->topo );
+}
+
+double* Mesh_GetVertex( void* mesh, unsigned domain ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( domain < Mesh_GetDomainSize( self, MT_VERTEX ) );
+	assert( self->verts );
+
+	return self->verts[domain];
+}
+
+Bool Mesh_HasExtension( void* mesh, const char* name ) {
+	Mesh* self = (Mesh*)mesh;
+
+	assert( self );
+
+	return (ExtensionManager_GetHandle( self->info, name ) != -1) ?
+		True : False;
+}
+
+void* _Mesh_GetExtension( void* mesh, const char* name ) {
+	Mesh* self = (Mesh*)mesh;
+
+	assert( self );
+	assert( ExtensionManager_GetHandle( self->info, name ) != -1 );
+
+	return ExtensionManager_Get( self->info, self, 
+				     ExtensionManager_GetHandle( self->info, 
+								 name ) );
+}
+
+void* Mesh_GetTopologyData( void* mesh, MeshTopology_Dim dim ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( self->topoDatas );
+	assert( dim < Mesh_GetDimSize( self ) );
+
+	return self->topoDatas[dim];
+}
+
+void Mesh_GetMinimumSeparation( void* mesh, double* minSep, double* axial ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( minSep );
+
+	*minSep = self->minSep;
+	if( axial )
+		memcpy( axial, self->minAxialSep, Mesh_GetDimSize( self ) * sizeof(double) );
+}
+
+void Mesh_GetLocalCoordRange( void* mesh, double* min, double* max ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( min );
+	assert( max );
+
+	memcpy( min, self->minLocalCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+	memcpy( max, self->maxLocalCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+}
+
+void Mesh_GetDomainCoordRange( void* mesh, double* min, double* max ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+	assert( min );
+	assert( max );
+
+	memcpy( min, self->minDomainCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+	memcpy( max, self->maxDomainCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+}
+
+void Mesh_GetGlobalCoordRange( void* mesh, double* min, double* max ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	memcpy( min, self->minGlobalCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+	memcpy( max, self->maxGlobalCrd, Mesh_GetDimSize( self ) * sizeof(double) );
+}
+
+void Mesh_DeformationUpdate( void* mesh ) {
+	Mesh*	self = (Mesh*)mesh;
+
+	assert( self );
+
+	self->minSep = Mesh_Algorithms_GetMinimumSeparation( self->algorithms, self->minAxialSep );
+	Mesh_Algorithms_GetLocalCoordRange( self->algorithms, self->minLocalCrd, self->maxLocalCrd );
+	Mesh_Algorithms_GetDomainCoordRange( self->algorithms, self->minDomainCrd, self->maxDomainCrd );
+	Mesh_Algorithms_GetGlobalCoordRange( self->algorithms, self->minGlobalCrd, self->maxGlobalCrd );
+
+	Mesh_Algorithms_Update( self->algorithms );
+}
+
+void Mesh_Sync( void* mesh ) {
+	Mesh*	self = (Mesh*)mesh;
+	const Sync* sync;
+	int nDims, nLocals;
+
+	assert( self );
+
+	sync = Mesh_GetSync( self, 0 );
+	nDims = Mesh_GetDimSize( self );
+	nLocals = Mesh_GetLocalSize( self, 0 );
+	Sync_SyncArray( sync, 
+			self->verts[0], nDims * sizeof(double), 
+			self->verts[nLocals], nDims * sizeof(double), 
+			nDims * sizeof(double) );
+
+	/* TODO
+	if( self->dataSyncArrays ) {
+		unsigned	d_i;
+
+		for( d_i = 0; d_i < Mesh_GetDimSize( self ); d_i++ ) {
+			if( self->dataSyncArrays[d_i] )
+				Decomp_Sync_Array_Sync( self->dataSyncArrays[d_i] );
+		}
+	}
+	*/
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Mesh_Destruct( Mesh* self ) {
+	unsigned	et_i, v_i;
+
+	for( et_i = 0; et_i < self->nElTypes; et_i++ )
+		FreeObject( self->elTypes[et_i] );
+	KillArray( self->elTypes );
+	KillArray( self->elTypeMap );
+	self->nElTypes = 0;
+
+	KillArray( self->verts );
+
+	self->generator = NULL;
+	self->emReg = NULL;
+
+	/*
+	for( v_i = 0; v_i < List_GetSize( self->vars ); v_i++ ) {
+		MeshVariable*	var;
+
+		var = *(MeshVariable**)List_GetItem( self->vars, v_i );
+		MeshVariable_SetMesh( var, NULL );
+	}
+	List_Clear( self->vars );
+	*/
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshClass.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshClass.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,177 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshClass.h 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_h__
+#define __Domain_Mesh_Mesh_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh						\
+		/* General info */				\
+		__Stg_Component					\
+								\
+		/* Virtual info */				\
+								\
+		/* Mesh info */					\
+		MeshTopology*			topo;		\
+		double**			verts;		\
+								\
+		List*				vars;		\
+								\
+		double				minSep;		\
+		double*				minAxialSep;	\
+		double*				minLocalCrd;	\
+		double*				maxLocalCrd;	\
+		double*				minDomainCrd;	\
+		double*				maxDomainCrd;	\
+		double*				minGlobalCrd;	\
+		double*				maxGlobalCrd;	\
+								\
+		Mesh_Algorithms*		algorithms;	\
+		unsigned			nElTypes;	\
+		Mesh_ElementType**		elTypes;	\
+		unsigned*			elTypeMap;	\
+								\
+		UIntMap*			topoDataSizes;	\
+		ExtensionManager**		topoDataInfos;	\
+		void**				topoDatas;	\
+		ExtensionManager*		info;		\
+								\
+		MeshGenerator*			generator;	\
+		ExtensionManager_Register*	emReg;
+
+	struct Mesh { __Mesh };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_DEFARGS		\
+		STG_COMPONENT_DEFARGS
+
+	#define MESH_PASSARGS		\
+		STG_COMPONENT_PASSARGS
+
+	Mesh* Mesh_New( Name name );
+	Mesh* _Mesh_New( MESH_DEFARGS );
+	void _Mesh_Init( Mesh* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_Delete( void* mesh );
+	void _Mesh_Print( void* mesh, Stream* stream );
+	void _Mesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data );
+	void _Mesh_Build( void* mesh, void* data );
+	void _Mesh_Initialise( void* mesh, void* data );
+	void _Mesh_Execute( void* mesh, void* data );
+	void _Mesh_Destroy( void* mesh, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Mesh_SetGenerator( void* mesh, void* generator );
+	void Mesh_SetAlgorithms( void* mesh, void* algorithms );
+
+	void Mesh_SetExtensionManagerRegister( void* mesh, void* extMgrReg );
+	void Mesh_SetTopologyDataSize( void* mesh, MeshTopology_Dim dim, unsigned size );
+	void* Mesh_GetTopologyData( void* mesh, MeshTopology_Dim dim );
+
+	unsigned Mesh_GetDimSize( void* mesh );
+	unsigned Mesh_GetGlobalSize( void* mesh, MeshTopology_Dim dim );
+	unsigned Mesh_GetLocalSize( void* mesh, MeshTopology_Dim dim );
+	unsigned Mesh_GetRemoteSize( void* mesh, MeshTopology_Dim dim );
+	unsigned Mesh_GetDomainSize( void* mesh, MeshTopology_Dim dim );
+	unsigned Mesh_GetSharedSize( void* mesh, MeshTopology_Dim dim );
+	MeshTopology* Mesh_GetTopology( void* mesh );
+	Sync* Mesh_GetSync( void* mesh, MeshTopology_Dim dim );
+
+	Bool Mesh_GlobalToDomain( void* mesh, MeshTopology_Dim dim, unsigned global, unsigned* domain );
+	unsigned Mesh_DomainToGlobal( void* mesh, MeshTopology_Dim dim, unsigned domain );
+	Bool Mesh_LocalToShared( void* meshTopology, MeshTopology_Dim dim, unsigned domain, unsigned* shared );
+	unsigned Mesh_SharedToLocal( void* meshTopology, MeshTopology_Dim dim, unsigned shared );
+
+	unsigned Mesh_GetOwner( void* mesh, MeshTopology_Dim dim, unsigned remote );
+	void Mesh_GetSharers( void* mesh, MeshTopology_Dim dim, unsigned shared, 
+			      unsigned* nSharers, unsigned** sharers );
+
+	Bool Mesh_HasIncidence( void* mesh, MeshTopology_Dim fromDim, MeshTopology_Dim toDim );
+	unsigned Mesh_GetIncidenceSize( void* mesh, MeshTopology_Dim fromDim, unsigned fromInd, 
+					MeshTopology_Dim toDim );
+	void Mesh_GetIncidence( void* mesh, MeshTopology_Dim fromDim, unsigned fromInd, MeshTopology_Dim toDim, 
+				IArray* inc );
+
+	unsigned Mesh_NearestVertex( void* mesh, double* point );
+	Bool Mesh_Search( void* mesh, double* point, 
+			  MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_SearchElements( void* mesh, double* point, unsigned* elInd );
+	Bool Mesh_ElementHasPoint( void* mesh, unsigned element, double* point, 
+				   MeshTopology_Dim* dim, unsigned* ind );
+	Mesh_ElementType* Mesh_GetElementType( void* mesh, unsigned element );
+
+	Comm* Mesh_GetCommTopology( void* mesh, MeshTopology_Dim dim );
+	double* Mesh_GetVertex( void* mesh, unsigned domain );
+
+	Bool Mesh_HasExtension( void* mesh, const char* name );
+	#define Mesh_GetExtension( mesh, type, name ) \
+		(type)_Mesh_GetExtension( mesh, name )
+	void* _Mesh_GetExtension( void* mesh, const char* name );
+
+	void Mesh_GetMinimumSeparation( void* mesh, double* minSep, double* axial );
+	void Mesh_GetLocalCoordRange( void* mesh, double* min, double* max );
+	void Mesh_GetDomainCoordRange( void* mesh, double* min, double* max );
+	void Mesh_GetGlobalCoordRange( void* mesh, double* min, double* max );
+
+	void Mesh_DeformationUpdate( void* mesh );
+	void Mesh_Sync( void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Mesh_Destruct( Mesh* self );
+
+#endif /* __Domain_Mesh_Mesh_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshClass.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshClass.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">MeshLayout</param>
+		<param name="Type">MeshLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 345 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,319 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshGenerator.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+
+
+/* Textual name of this class */
+const Type MeshGenerator_Type = "MeshGenerator";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshGenerator* _MeshGenerator_New( MESHGENERATOR_DEFARGS ) {
+	MeshGenerator*	self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(MeshGenerator) );
+	self = (MeshGenerator*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+	self->setDimSizeFunc = setDimSizeFunc;
+	self->generateFunc = generateFunc;
+
+	/* MeshGenerator info */
+	_MeshGenerator_Init( self );
+
+	return self;
+}
+
+void _MeshGenerator_Init( MeshGenerator* self ) {
+	self->mpiComm = MPI_COMM_WORLD;
+	self->nMeshes = 0;
+	self->meshes = NULL;
+	self->nDims = 0;
+	self->enabledDims = NULL;
+	self->enabledInc = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshGenerator_Delete( void* meshGenerator ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	MeshGenerator_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _MeshGenerator_Print( void* meshGenerator, Stream* stream ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshGeneratorStream;
+	meshGeneratorStream = Journal_Register( InfoStream_Type, "MeshGeneratorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "MeshGenerator (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void _MeshGenerator_Construct( void* meshGenerator, Stg_ComponentFactory* cf, void* data ) {
+	MeshGenerator*		self = (MeshGenerator*)meshGenerator;
+	Dictionary*		dict;
+	unsigned		nDims;
+	Dictionary_Entry_Value*	meshList;
+	Dictionary_Entry_Value	*enabledDimsList, *enabledIncList;
+	Mesh*			mesh;
+
+	assert( self );
+	assert( cf );
+
+	/* Rip out the components structure as a dictionary. */
+	dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+
+	/* Set the communicator to a default. */
+	MeshGenerator_SetMPIComm( self, MPI_COMM_WORLD );
+
+	/* Read the individual mesh if specified. */
+	mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, False, data );
+	if( mesh )
+		MeshGenerator_AddMesh( self, mesh );
+
+	/* Read the mesh list, if it's there. */
+	meshList = Dictionary_Get( dict, "meshes" );
+	if( meshList ) {
+		unsigned	nMeshes;
+		char*		name;
+		unsigned	m_i;
+
+		nMeshes = Dictionary_Entry_Value_GetCount( meshList );
+		for( m_i = 0; m_i < nMeshes; m_i++ ) {
+			Mesh*	mesh;
+
+			name = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( meshList, m_i ) );
+			mesh = Stg_ComponentFactory_ConstructByName( cf, name, Mesh, True, data );
+			MeshGenerator_AddMesh( self, mesh );
+		}
+	}
+
+	/* Read dimensions and state. */
+	nDims = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "dims", 2 );
+	MeshGenerator_SetDimSize( self, nDims );
+	enabledDimsList = Dictionary_Get( dict, "enabledDims" );
+	enabledIncList = Dictionary_Get( dict, "enabledIncidence" );
+	if( enabledDimsList || enabledIncList ) {
+		unsigned	d_i;
+
+		memset( self->enabledDims, 0, (nDims + 1) * sizeof(Bool) );
+		for( d_i = 0; d_i <= nDims; d_i++ )
+			memset( self->enabledInc[d_i], 0, (nDims + 1) * sizeof(Bool) );
+	}
+	if( enabledDimsList ) {
+		unsigned	nEnabledDims;
+		unsigned	dim;
+		unsigned	d_i;
+
+		nEnabledDims = Dictionary_Entry_Value_GetCount( enabledDimsList );
+		for( d_i = 0; d_i < nEnabledDims; d_i++ ) {
+			dim = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value_GetElement( enabledDimsList, d_i ) );
+			MeshGenerator_SetDimState( self, dim, True );
+		}
+	}
+	if( enabledIncList ) {
+		unsigned	nEnabledInc;
+		unsigned	fromDim, toDim;
+		unsigned	d_i;
+
+		nEnabledInc = Dictionary_Entry_Value_GetCount( enabledIncList );
+		assert( nEnabledInc % 2 == 0 );
+		for( d_i = 0; d_i < nEnabledInc; d_i += 2 ) {
+			fromDim = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value_GetElement( enabledIncList, d_i ) );
+			toDim = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value_GetElement( enabledIncList, d_i + 1 ) );
+			MeshGenerator_SetIncidenceState( self, fromDim, toDim, True );
+		}
+	}
+}
+
+void _MeshGenerator_Build( void* meshGenerator, void* data ) {
+}
+
+void _MeshGenerator_Initialise( void* meshGenerator, void* data ) {
+}
+
+void _MeshGenerator_Execute( void* meshGenerator, void* data ) {
+}
+
+void _MeshGenerator_Destroy( void* meshGenerator, void* data ) {
+}
+
+void MeshGenerator_SetFullIncidence( void* meshGenerator ) {
+	MeshGenerator* self = (MeshGenerator*)meshGenerator;
+	int d_i, d_j;
+
+	assert( self );
+
+	for( d_i = 0; d_i <= self->nDims; d_i++ ) {
+		self->enabledDims[d_i] = True;
+		for( d_j = 0; d_j <= self->nDims; d_j++ )
+			self->enabledInc[d_i][d_j] = True;
+	}
+}
+
+void _MeshGenerator_SetDimSize( void* meshGenerator, unsigned nDims ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+	unsigned	d_i, d_j;
+
+	assert( self && Stg_CheckType( self, MeshGenerator ) );
+
+	self->nDims = nDims;
+	self->enabledDims = ReallocArray( self->enabledDims, Bool, nDims + 1 );
+	self->enabledInc = ReallocArray2D( self->enabledInc, Bool, nDims + 1, nDims + 1 );
+	for( d_i = 0; d_i <= nDims; d_i++ ) {
+		if( d_i == 0 || d_i == nDims )
+			self->enabledDims[d_i] = True;
+		else
+			self->enabledDims[d_i] = False;
+		for( d_j = 0; d_j <= nDims; d_j++ ) {
+			if( (d_i == 0 || d_i == nDims) && (d_j == 0 || d_j == nDims) ) {
+				if( d_i == d_j && d_j == nDims )
+					self->enabledInc[d_i][d_j] = False;
+				else
+					self->enabledInc[d_i][d_j] = True;
+			}
+			else
+				self->enabledInc[d_i][d_j] = False;
+		}
+	}
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshGenerator_SetMPIComm( void* meshGenerator, MPI_Comm mpiComm ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* Should probably kill some stuff when I do this. Oh well. */
+	self->mpiComm = mpiComm;
+}
+
+void MeshGenerator_AddMesh( void* meshGenerator, void* mesh ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* If not already allocated, allocate now. */
+	if( !self->meshes ) {
+		self->nMeshes = 1;
+		self->meshes = Memory_Alloc_Array( Mesh*, 1, "MeshGenerator::meshes" );
+	}
+	else {
+		/* Otherwise reallocate. */
+		self->nMeshes++;
+		self->meshes = Memory_Realloc_Array( self->meshes, Mesh*, self->nMeshes );
+	}
+
+	/* Add the new mesh. */
+	self->meshes[self->nMeshes - 1] = mesh;
+	((Mesh*)mesh)->generator = self;
+}
+
+void MeshGenerator_SetDimState( void* meshGenerator, unsigned dim, Bool state ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	assert( self && Stg_CheckType( self, MeshGenerator ) );
+	assert( dim <= self->nDims );
+	assert( self->enabledDims );
+
+	self->enabledDims[dim] = state;
+}
+
+void MeshGenerator_ClearIncidenceStates( void* meshGenerator ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+	unsigned	d_i, d_j;
+
+	assert( self && Stg_CheckType( self, MeshGenerator ) );
+
+	for( d_i = 0; d_i <= self->nDims; d_i++ ) {
+		for( d_j = 0; d_j <= self->nDims; d_j++ )
+			self->enabledInc[d_i][d_j] = False;
+	}
+}
+
+void MeshGenerator_SetIncidenceState( void* meshGenerator, unsigned fromDim, unsigned toDim, Bool state ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	assert( self && Stg_CheckType( self, MeshGenerator ) );
+	assert( fromDim <= self->nDims );
+	assert( toDim <= self->nDims );
+	assert( self->enabledInc );
+
+	self->enabledInc[fromDim][toDim] = state;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void MeshGenerator_Destruct( MeshGenerator* self ) {
+	assert( self && Stg_CheckType( self, MeshGenerator ) );
+
+	KillArray( self->enabledDims );
+	KillArray( self->enabledInc );
+	KillArray( self->meshes );
+	self->nMeshes = 0;
+	self->nDims = 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshGenerator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshGenerator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,132 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshGenerator.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_MeshGenerator_h__
+#define __Domain_Mesh_MeshGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type MeshGenerator_Type;
+
+	/** Virtual function types */
+	typedef void (MeshGenerator_SetDimSizeFunc)( void* meshGenerator, unsigned nDims );
+	typedef void (MeshGenerator_GenerateFunc)( void* meshGenerator, void* _mesh );
+
+	/** MeshGenerator class contents */
+	#define __MeshGenerator					\
+		/* General info */				\
+		__Stg_Component					\
+								\
+		/* Virtual info */				\
+		MeshGenerator_SetDimSizeFunc*	setDimSizeFunc;	\
+		MeshGenerator_GenerateFunc*	generateFunc;	\
+								\
+		/* MeshGenerator info */			\
+		MPI_Comm		mpiComm;		\
+		unsigned		nMeshes;		\
+		Mesh**			meshes;			\
+								\
+		unsigned		nDims;			\
+		Bool*			enabledDims;		\
+		Bool**			enabledInc;
+
+	struct MeshGenerator { __MeshGenerator };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESHGENERATOR_DEFARGS				\
+		STG_COMPONENT_DEFARGS,				\
+		MeshGenerator_SetDimSizeFunc*	setDimSizeFunc,	\
+		MeshGenerator_GenerateFunc*	generateFunc
+
+	#define MESHGENERATOR_PASSARGS		\
+		STG_COMPONENT_PASSARGS,		\
+		setDimSizeFunc,			\
+		generateFunc
+
+	MeshGenerator* _MeshGenerator_New( MESHGENERATOR_DEFARGS );
+	void _MeshGenerator_Init( MeshGenerator* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _MeshGenerator_Delete( void* meshGenerator );
+	void _MeshGenerator_Print( void* meshGenerator, Stream* stream );
+
+	#define MeshGenerator_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshGenerator_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _MeshGenerator_Copy( void* meshGenerator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _MeshGenerator_Construct( void* meshGenerator, Stg_ComponentFactory* cf, void* data );
+	void _MeshGenerator_Build( void* meshGenerator, void* data );
+	void _MeshGenerator_Initialise( void* meshGenerator, void* data );
+	void _MeshGenerator_Execute( void* meshGenerator, void* data );
+	void _MeshGenerator_Destroy( void* meshGenerator, void* data );
+
+	void _MeshGenerator_SetDimSize( void* meshGenerator, unsigned nDims );
+
+	#define MeshGenerator_SetDimSize( self, nDims )			\
+		VirtualCall( self, setDimSizeFunc, self, nDims )
+
+	#define MeshGenerator_Generate( self, mesh )			\
+		VirtualCall( self, generateFunc, self, mesh )
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshGenerator_SetMPIComm( void* meshGenerator, MPI_Comm mpiComm );
+	void MeshGenerator_AddMesh( void* meshGenerator, void* mesh );
+	void MeshGenerator_SetFullIncidence( void* meshGenerator );
+	void MeshGenerator_SetDimState( void* meshGenerator, unsigned dim, Bool state );
+	void MeshGenerator_ClearIncidenceStates( void* meshGenerator );
+	void MeshGenerator_SetIncidenceState( void* meshGenerator, unsigned fromDim, unsigned toDim, Bool state );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void MeshGenerator_Destruct( MeshGenerator* self );
+
+#endif /* __Domain_Mesh_MeshGenerator_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshGenerator.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshGenerator.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshGenerator</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshTopology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshTopology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshTopology.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "StGermain/StGermain.h"
+#include "types.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void _MeshTopology_Init( void* _self ) {
+   MeshTopology* self = (MeshTopology*)_self;
+
+   _NewClass_Init( self );
+   self->nDims = 0;
+   self->nTDims = 0;
+   self->shadDepth = 0;
+   self->comm = NULL;
+}
+
+void _MeshTopology_Destruct( void* _self ) {
+   MeshTopology* self = (MeshTopology*)_self;
+
+   _NewClass_Destruct( self );
+}
+
+void _MeshTopology_Copy( void* _self, const void* op ) {
+   /*MeshTopology* self = (MeshTopology*)_self;*/
+
+   assert( 0 );
+   /* TODO */
+}
+
+SizeT _MeshTopology_CalcMem( const void* _self, PtrMap* ptrs ) {
+   MeshTopology* self = (MeshTopology*)_self;
+   SizeT mem;
+
+   if( PtrMap_Find( ptrs, (void*)self ) )
+      return 0;
+   mem = _NewClass_CalcMem( self, ptrs );
+   return mem;
+}
+
+void _MeshTopology_SetNumDims( void* _self, int nDims ) {
+   MeshTopology* self = (MeshTopology*)_self;
+
+   self->nDims = nDims;
+   if( self->nDims > 0 )
+      self->nTDims = nDims + 1;
+}
+
+void _MeshTopology_SetComm( void* _self, const Comm* comm ) {
+   MeshTopology* self = (MeshTopology*)_self;
+
+   NewClass_RemoveRef( self->comm );
+   self->comm = (Comm*)comm;
+   if( comm )
+      NewClass_AddRef( (Comm*)comm );
+}
+
+void _MeshTopology_SetShadowDepth( void* _self, int depth ) {
+   MeshTopology* self = (MeshTopology*)_self;
+
+   assert( self && depth >= 0 );
+   assert( self->comm && self->nTDims );
+
+   self->shadDepth = depth;
+}
+
+int MeshTopology_GetNumDims( const void* self ) {
+   assert( self );
+   return ((MeshTopology*)self)->nDims;
+}
+
+const Comm* MeshTopology_GetComm( const void* self ) {
+   assert( self );
+   return ((MeshTopology*)self)->comm;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshTopology.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshTopology.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,54 @@
+#include INHERIT( StGermain/Base/Foundation/NewClass )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+#define PARENTDIR StGermain/Base/Foundation
+#define PARENT NewClass
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME MeshTopology
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+
+MEMBER( int, nDims )
+MEMBER( int, nTDims )
+MEMBER( int, shadDepth )
+MEMBER( Comm*, comm )
+
+
+VOIDOVERRIDE( Init, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Destruct, void, 
+	      (void* self), (self) )
+
+VOIDOVERRIDE( Copy, void, 
+	      (void* self, const void* op), 
+              (self, op) )
+
+OVERRIDE( CalcMem, SizeT, 
+	  (const void* self, PtrMap* ptrs), 
+	  (self, ptrs) )
+
+VOIDVIRTUALMETHOD( SetComm, void, 
+		   (void* self, const Comm* comm), 
+        	   (self, comm) )
+
+VOIDVIRTUALMETHOD( SetNumDims, void, 
+	       	   (void* self, int nDims), 
+	       	   (self, nDims) )
+
+VOIDVIRTUALMETHOD( SetShadowDepth, void, 
+		   (void* self, int depth), 
+		   (self, depth) )
+
+METHOD( GetNumDims, int, 
+	(const void* self), 
+	(self) )
+
+METHOD( GetComm, const Comm*, 
+	(const void* self), 
+	(self) )
+
+VOIDABSTRACTMETHOD( GetIncidence, void, 
+		    (void* self, int fromDim, int fromEl, int toDim, IArray* inc), 
+		    (self, fromDim, fromEl, toDim, inc) )
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshTopology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshTopology.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: MeshTopology.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Mesh_MeshTopology_h__
+#define __StGermain_Domain_Mesh_MeshTopology_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME MeshTopology
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Mesh_MeshTopology_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshTopology.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshTopology.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshTopology</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,271 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshVariable.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type MeshVariable_Type = "MeshVariable";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshVariable* MeshVariable_New( Name name ) {
+	return _MeshVariable_New( sizeof(MeshVariable), 
+				  MeshVariable_Type, 
+				  _MeshVariable_Delete, 
+				  _MeshVariable_Print, 
+				  NULL, 
+				  (void* (*)(Name))_MeshVariable_New, 
+				  _MeshVariable_Construct, 
+				  _MeshVariable_Build, 
+				  _MeshVariable_Initialise, 
+				  _MeshVariable_Execute, 
+				  _MeshVariable_Destroy, 
+				  name, 
+				  False, 
+				  0, 
+				  NULL, 
+				  NULL, 
+				  NULL, 
+				  NULL, 
+				  NULL,
+				  NULL, 
+				  NULL, 
+				  NULL, 
+				  NULL );
+}
+
+MeshVariable* _MeshVariable_New( MESHVARIABLE_DEFARGS ) {
+	MeshVariable* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(MeshVariable) );
+	self = (MeshVariable*)_Variable_New( VARIABLE_PASSARGS );
+
+	/* Virtual info */
+
+	/* MeshVariable info */
+	_MeshVariable_Init( self );
+
+	return self;
+}
+
+void _MeshVariable_Init( MeshVariable* self ) {
+	self->mesh = NULL;
+	self->topoDim = MT_VERTEX;
+	self->meshArraySize = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshVariable_Delete( void* meshVariable ) {
+	MeshVariable*	self = (MeshVariable*)meshVariable;
+
+	MeshVariable_Destruct( self );
+
+	/* Delete the parent. */
+	_Variable_Delete( self );
+}
+
+void _MeshVariable_Print( void* meshVariable, Stream* stream ) {
+	MeshVariable*	self = (MeshVariable*)meshVariable;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshVariableStream;
+	meshVariableStream = Journal_Register( InfoStream_Type, "MeshVariableStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "MeshVariable (ptr): (%p)\n", self );
+	_Variable_Print( self, stream );
+}
+
+void _MeshVariable_Construct( void* meshVariable, Stg_ComponentFactory* cf, void* data ) {
+	MeshVariable*		self = (MeshVariable*)meshVariable;
+	SizeT			    dataOffsets[]     = { 0 };
+	Variable_DataType	dataTypes[]       = { 0 };		/* Init value later */
+	Index			    dataTypeCounts[]  = { 1 };
+	Dictionary *        componentDict     = NULL;
+	Dictionary *        thisComponentDict = NULL;
+	Name                dataTypeName      = NULL;
+	Name                rankName          = NULL;
+	void *              variableRegister  = NULL;
+	void *              pointerRegister   = NULL;
+	Name*               names             = NULL;
+	Stream*             error             = Journal_Register( Error_Type, self->type );
+	Mesh*			mesh;
+	
+	assert( self );
+
+	componentDict = cf->componentDict;
+	assert( componentDict );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, self->name );
+	assert( thisComponentDict );
+	
+	/* Grab Registers */
+	variableRegister = Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variableRegister );
+	pointerRegister = Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+	assert( pointerRegister );
+
+	/* Construct the mesh. */
+	mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, True, data );
+	MeshVariable_SetMesh( self, mesh );
+
+	/* Get the topological element we're intereseted in. */
+	self->topoDim = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "topologicalDim", 0 );
+			
+	/* Get Type of Variable */
+	dataTypeName = Dictionary_GetString( thisComponentDict, "DataType" );
+	if ( !strcasecmp( dataTypeName, "Double" ) )
+		dataTypes[0] = Variable_DataType_Double;
+	else if ( !strcasecmp( dataTypeName, "Float" ) )
+		dataTypes[0] = Variable_DataType_Float;
+	else if ( !strcasecmp( dataTypeName, "Int" ) )
+		dataTypes[0] = Variable_DataType_Int;
+	else if ( !strcasecmp( dataTypeName, "Char" ) )
+		dataTypes[0] = Variable_DataType_Char;
+	else if ( !strcasecmp( dataTypeName, "Short" ) )
+		dataTypes[0] = Variable_DataType_Short;
+	else 
+		Journal_Firewall( False, error, "Variable '%s' cannot understand data type '%s'\n", self->name, dataTypeName );
+
+	/* Get Rank of Variable - i.e. Scalar or Vector */
+	rankName = Dictionary_GetString( thisComponentDict, "Rank" );
+	if( !strcasecmp( rankName, "Scalar" ) ){
+		dataTypeCounts[0] = 1;
+	}
+	else if ( !strcasecmp( rankName, "Vector" ) ){
+		Dictionary_Entry_Value* list;
+		Index                   nameCount = 0;
+
+		/* Get Names from list */
+		if (( list = Dictionary_Get( thisComponentDict, "names" ) )) {
+			Index entry_I;
+
+			nameCount = Dictionary_Entry_Value_GetCount( list );
+			names = Memory_Alloc_Array( Name, nameCount, "Variable Names" );
+
+			for ( entry_I = 0 ; entry_I < nameCount ; entry_I++ )
+				names[ entry_I ] = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement(list, entry_I ) );
+		}
+		dataTypeCounts[0] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "VectorComponentCount", nameCount );
+
+		Journal_Firewall( nameCount >= dataTypeCounts[0], error,
+				"Variable '%s' has too few names in list for %d vector components.\n", self->name, dataTypeCounts[0] );
+	}
+	else
+		Journal_Firewall( False, error, "Variable '%s' cannot understand rank '%s'\n", self->name, rankName );
+
+	_Variable_Init( (Variable*)self, 
+			1, 
+			dataOffsets, 
+			dataTypes, 
+			dataTypeCounts, 
+			names, 
+			0, 
+			NULL,
+			_MeshVariable_GetMeshArraySize,
+			(void**)&self->arrayPtr,
+			True, 
+			variableRegister );
+
+	/* Clean Up */
+	if (names)
+		Memory_Free(names);
+}
+
+void _MeshVariable_Build( void* meshVariable, void* data ) {
+	MeshVariable*	self = (MeshVariable*)meshVariable;
+
+	assert( self );
+
+	/* We need to make sure the Mesh is built first, since this Variable and it's sub-components are going
+	 *  to ask for the Mesh Size etc. */	
+	Stg_Component_Build( self->mesh, data, False );
+
+	_Variable_Build( self, data );
+}
+
+void _MeshVariable_Initialise( void* meshVariable, void* data ) {
+}
+
+void _MeshVariable_Execute( void* meshVariable, void* data ) {
+}
+
+void _MeshVariable_Destroy( void* meshVariable, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshVariable_SetMesh( void* meshVariable, void* _mesh ) {
+	MeshVariable*	self = (MeshVariable*)meshVariable;
+	Mesh*		mesh = (Mesh*)_mesh;
+
+	assert( self );
+
+	MeshVariable_Destruct( self );
+
+	self->mesh = mesh;
+	if( mesh )
+		List_Append( mesh->vars, self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void MeshVariable_Destruct( MeshVariable* self ) {
+}
+
+Index _MeshVariable_GetMeshArraySize( void* meshVariable ) {
+	MeshVariable*	self = (MeshVariable*)meshVariable;
+
+	return Mesh_GetDomainSize( self->mesh, self->topoDim );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshVariable.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshVariable.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,103 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshVariable.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_MeshVariable_h__
+#define __Domain_Mesh_MeshVariable_h__
+
+	/** Textual name of this class */
+	extern const Type MeshVariable_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __MeshVariable				\
+		/* General info */			\
+		__Variable				\
+							\
+		/* Virtual info */			\
+							\
+		/* MeshVariable info */			\
+		Mesh*			mesh;		\
+		MeshTopology_Dim	topoDim;	\
+		unsigned		meshArraySize;
+
+	struct MeshVariable { __MeshVariable };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESHVARIABLE_DEFARGS	\
+		VARIABLE_DEFARGS
+
+	#define MESHVARIABLE_PASSARGS	\
+		VARIABLE_PASSARGS
+
+	MeshVariable* MeshVariable_New( Name name );
+	MeshVariable* _MeshVariable_New( MESHVARIABLE_DEFARGS );
+	void _MeshVariable_Init( MeshVariable* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _MeshVariable_Delete( void* meshVariable );
+	void _MeshVariable_Print( void* meshVariable, Stream* stream );
+	void _MeshVariable_Construct( void* meshVariable, Stg_ComponentFactory* cf, void* data );
+	void _MeshVariable_Build( void* meshVariable, void* data );
+	void _MeshVariable_Initialise( void* meshVariable, void* data );
+	void _MeshVariable_Execute( void* meshVariable, void* data );
+	void _MeshVariable_Destroy( void* meshVariable, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshVariable_SetMesh( void* meshVariable, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void MeshVariable_Destruct( MeshVariable* self );
+
+	Index _MeshVariable_GetMeshArraySize( void* meshVariable );
+
+#endif /* __Domain_Mesh_MeshVariable_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/MeshVariable.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/MeshVariable.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshVariable</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_Algorithms.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_Algorithms.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,651 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_Algorithms.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_Algorithms_Type = "Mesh_Algorithms";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_Algorithms* Mesh_Algorithms_New( Name name ) {
+	return _Mesh_Algorithms_New( sizeof(Mesh_Algorithms), 
+				     Mesh_Algorithms_Type, 
+				     _Mesh_Algorithms_Delete, 
+				     _Mesh_Algorithms_Print, 
+				     NULL, 
+				     (void* (*)(Name))_Mesh_Algorithms_New, 
+				     _Mesh_Algorithms_Construct, 
+				     _Mesh_Algorithms_Build, 
+				     _Mesh_Algorithms_Initialise, 
+				     _Mesh_Algorithms_Execute, 
+				     _Mesh_Algorithms_Destroy, 
+				     name, 
+				     NON_GLOBAL, 
+				     _Mesh_Algorithms_SetMesh, 
+				     _Mesh_Algorithms_Update, 
+				     _Mesh_Algorithms_NearestVertex, 
+				     _Mesh_Algorithms_Search, 
+				     _Mesh_Algorithms_SearchElements, 
+				     _Mesh_Algorithms_GetMinimumSeparation, 
+				     _Mesh_Algorithms_GetLocalCoordRange, 
+				     _Mesh_Algorithms_GetDomainCoordRange, 
+				     _Mesh_Algorithms_GetGlobalCoordRange );
+}
+
+Mesh_Algorithms* _Mesh_Algorithms_New( MESH_ALGORITHMS_DEFARGS ) {
+	Mesh_Algorithms* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_Algorithms) );
+	self = (Mesh_Algorithms*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+	self->setMeshFunc = setMeshFunc;
+	self->updateFunc = updateFunc;
+	self->nearestVertexFunc = nearestVertexFunc;
+	self->searchFunc = searchFunc;
+	self->searchElementsFunc = searchElementsFunc;
+	self->getMinimumSeparationFunc = getMinimumSeparationFunc;
+	self->getLocalCoordRangeFunc = getLocalCoordRangeFunc;
+	self->getDomainCoordRangeFunc = getDomainCoordRangeFunc;
+	self->getGlobalCoordRangeFunc = getGlobalCoordRangeFunc;
+
+	/* Mesh_Algorithms info */
+	_Mesh_Algorithms_Init( self );
+
+	return self;
+}
+
+void _Mesh_Algorithms_Init( Mesh_Algorithms* self ) {
+	self->nearestVertex = NULL;
+	self->search = NULL;
+	self->mesh = NULL;
+	self->incArray = IArray_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_Algorithms_Delete( void* algorithms ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+
+	NewClass_Delete( self->incArray );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _Mesh_Algorithms_Print( void* algorithms, Stream* stream ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	
+	/* Set the Journal for printing informations */
+	Stream* algorithmsStream;
+	algorithmsStream = Journal_Register( InfoStream_Type, "Mesh_AlgorithmsStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_Algorithms (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void _Mesh_Algorithms_Construct( void* algorithms, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Mesh_Algorithms_Build( void* algorithms, void* data ) {
+}
+
+void _Mesh_Algorithms_Initialise( void* algorithms, void* data ) {
+}
+
+void _Mesh_Algorithms_Execute( void* algorithms, void* data ) {
+}
+
+void _Mesh_Algorithms_Destroy( void* algorithms, void* data ) {
+}
+
+void _Mesh_Algorithms_SetMesh( void* algorithms, void* mesh ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+
+	assert( self );
+	assert( mesh );
+
+	self->mesh = (Mesh*)mesh;
+}
+
+void _Mesh_Algorithms_Update( void* algorithms ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	unsigned		nDims;
+	unsigned		d_i;
+
+	assert( self );
+
+	if( !self->mesh )
+		return;
+
+	if( Mesh_HasIncidence( self->mesh, MT_VERTEX, MT_VERTEX ) )
+		self->nearestVertex = Mesh_Algorithms_NearestVertexWithNeighbours;
+	else
+		self->nearestVertex = Mesh_Algorithms_NearestVertexGeneral;
+
+	nDims = Mesh_GetDimSize( self->mesh );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( !Mesh_GetGlobalSize( self->mesh, d_i ) || !Mesh_HasIncidence( self->mesh, nDims, d_i ) )
+			break;
+	}
+	if( d_i == nDims )
+		self->search = Mesh_Algorithms_SearchWithFullIncidence;
+	else if( Mesh_HasIncidence( self->mesh, MT_VERTEX, Mesh_GetDimSize( self->mesh ) ) )
+		self->search = Mesh_Algorithms_SearchWithMinIncidence;
+	else
+		self->search = Mesh_Algorithms_SearchGeneral;
+}
+
+unsigned _Mesh_Algorithms_NearestVertex( void* algorithms, double* point ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+
+	assert( self );
+	assert( self->nearestVertex );
+
+	return self->nearestVertex( self, point );
+}
+
+Bool _Mesh_Algorithms_Search( void* algorithms, double* point, 
+			      MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+
+	assert( self );
+	assert( self->search );
+
+	return self->search( self, point, dim, ind );
+}
+
+Bool _Mesh_Algorithms_SearchElements( void* algorithms, double* point, 
+				      unsigned* elInd )
+{
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		dim, ind;
+
+	assert( self );
+	assert( self->mesh );
+	assert( elInd );
+
+	mesh = self->mesh;
+	if( Mesh_Algorithms_Search( self, point, &dim, &ind ) ) {
+		unsigned	nDims;
+
+		nDims = Mesh_GetDimSize( mesh );
+		if( dim != nDims ) {
+			unsigned	nInc, *inc;
+			unsigned	nLocalEls;
+			unsigned	lowest;
+			unsigned	global;
+			unsigned	inc_i;
+
+			/* Must have required incidence for this to work. */
+			assert( Mesh_HasIncidence( mesh, dim, nDims ) );
+
+			nLocalEls = Mesh_GetLocalSize( mesh, nDims );
+			Mesh_GetIncidence( mesh, dim, ind, nDims, self->incArray );
+			nInc = IArray_GetSize( self->incArray );
+			inc = (unsigned*)IArray_GetPtr( self->incArray );
+			assert( nInc );
+			lowest = Mesh_DomainToGlobal( mesh, nDims, inc[0] );
+			for( inc_i = 1; inc_i < nInc; inc_i++ ) {
+				global = Mesh_DomainToGlobal( mesh, nDims, inc[inc_i] );
+				if( global < lowest )
+					lowest = global;
+			}
+
+			insist( Mesh_GlobalToDomain( mesh, nDims, lowest, elInd), == True );
+		}
+		else
+			*elInd = ind;
+
+		return True;
+	}
+
+	return False;
+}
+
+double _Mesh_Algorithms_GetMinimumSeparation( void* algorithms, double* perDim ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nDomainEls;
+	double			minSep;
+	double*			dimSep;
+	unsigned		e_i;
+
+	assert( self );
+	assert( self->mesh );
+
+	mesh = self->mesh;
+	if( perDim )
+		dimSep = Memory_Alloc_Array_Unnamed( double, Mesh_GetDimSize( mesh ) );
+	else
+		dimSep = NULL;
+
+	minSep = HUGE_VAL;
+	nDomainEls = Mesh_GetDomainSize( mesh, Mesh_GetDimSize( mesh ) );
+	for( e_i = 0; e_i < nDomainEls; e_i++ ) {
+		Mesh_ElementType*	elType;
+		double			curSep;
+
+		elType = Mesh_GetElementType( mesh, e_i );
+		curSep = Mesh_ElementType_GetMinimumSeparation( elType, e_i, dimSep );
+		if( curSep < minSep ) {
+			minSep = curSep;
+			if( perDim )
+				memcpy( perDim, dimSep, Mesh_GetDimSize( mesh ) * sizeof(double) );
+		}
+	}
+
+	return minSep;
+}
+
+void _Mesh_Algorithms_GetLocalCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nVerts, nEls;
+	unsigned*		verts;
+	double*			vert;
+	unsigned		nDims;
+	unsigned		v_i, e_i, d_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( min );
+	assert( max );
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	nEls = Mesh_GetLocalSize( mesh, nDims );
+	memcpy( min, Mesh_GetVertex( mesh, 0 ), nDims * sizeof(double) );
+	memcpy( max, Mesh_GetVertex( mesh, 0 ), nDims * sizeof(double) );
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		Mesh_GetIncidence( mesh, nDims, e_i, 0, self->incArray );
+		nVerts = IArray_GetSize( self->incArray );
+		verts = (unsigned*)IArray_GetPtr( self->incArray );
+		for( v_i = 0; v_i < nVerts; v_i++ ) {
+			vert = Mesh_GetVertex( mesh, verts[v_i] );
+			for( d_i = 0; d_i < nDims; d_i++ ) {
+				if( vert[d_i] < min[d_i] )
+					min[d_i] = vert[d_i];
+				if( vert[d_i] > max[d_i] )
+					max[d_i] = vert[d_i];
+			}
+		}
+	}
+}
+
+void _Mesh_Algorithms_GetDomainCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nVerts;
+	double*			vert;
+	unsigned		nDims;
+	unsigned		v_i, d_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( min );
+	assert( max );
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	nVerts = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	memcpy( min, Mesh_GetVertex( mesh, 0 ), nDims * sizeof(double) );
+	memcpy( max, Mesh_GetVertex( mesh, 0 ), nDims * sizeof(double) );
+	for( v_i = 1; v_i < nVerts; v_i++ ) {
+		vert = Mesh_GetVertex( mesh, v_i );
+		for( d_i = 0; d_i < nDims; d_i++ ) {
+			if( vert[d_i] < min[d_i] )
+				min[d_i] = vert[d_i];
+			if( vert[d_i] > max[d_i] )
+				max[d_i] = vert[d_i];
+		}
+	}
+}
+
+void _Mesh_Algorithms_GetGlobalCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nDims;
+	double			*localMin, *localMax;
+	MPI_Comm		comm;
+	unsigned		d_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( min );
+	assert( max );
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	localMin = Memory_Alloc_Array_Unnamed( double, nDims );
+	localMax = Memory_Alloc_Array_Unnamed( double, nDims );
+
+	comm = Comm_GetMPIComm( Mesh_GetCommTopology( mesh, MT_VERTEX ) );
+	Mesh_Algorithms_GetLocalCoordRange( self, localMin, localMax );
+	for( d_i = 0; d_i < Mesh_GetDimSize( mesh ); d_i++ ) {
+		MPI_Allreduce( localMin + d_i, min + d_i, 1, MPI_DOUBLE, MPI_MIN, comm );
+		MPI_Allreduce( localMax + d_i, max + d_i, 1, MPI_DOUBLE, MPI_MAX, comm );
+	}
+
+	FreeArray( localMin );
+	FreeArray( localMax );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+#define Vec_Sep( nDims, v0, v1 )									\
+	(((v0)[0] - (v1)[0]) * ((v0)[0] - (v1)[0]) +							\
+	 (((nDims) >= 2) ? (((v0)[1] - (v1)[1]) * ((v0)[1] - (v1)[1]) + 				\
+			    (((nDims) == 3) ? (((v0)[2] - (v1)[2]) * ((v0)[2] - (v1)[2])) : 0)) : 0))
+
+unsigned Mesh_Algorithms_NearestVertexWithNeighbours( void* algorithms, double* point ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nDims;
+	unsigned		curVert;
+	double*			vert;
+	double			sep;
+	Bool			done;
+	unsigned		nNbrs;
+	unsigned*		nbrs;
+	double			nbrSep;
+	unsigned		nbr_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( Mesh_HasIncidence( self->mesh, MT_VERTEX, MT_VERTEX ) );
+
+	/* Get dimensionality. */
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+
+	/* Begin somewhere in the middle. */
+	curVert = Mesh_GetDomainSize( mesh, MT_VERTEX ) / 2;
+
+	/* Calc distance squared to current node. */
+	vert = Mesh_GetVertex( mesh, curVert );
+	sep = Vec_Sep( nDims, vert, point );
+
+	/* Loop until we've found closest local node. */
+	do {
+		/* Get neighbouring vertices. */
+		Mesh_GetIncidence( mesh, MT_VERTEX, curVert, MT_VERTEX, self->incArray );
+		nNbrs = IArray_GetSize( self->incArray );
+		nbrs = (unsigned*)IArray_GetPtr( self->incArray );
+
+		/* Assume we'll be done after this loop. */
+		done = True;
+
+		/* Compare to neighbours. */
+		for( nbr_i = 0; nbr_i < nNbrs; nbr_i++ ) {
+			/* Calculate neighbour separation. */
+			nbrSep = Vec_Sep( nDims, Mesh_GetVertex( mesh, nbrs[nbr_i] ), point );
+
+			/* Closer? */
+			if( nbrSep < sep ) {
+				curVert = nbrs[nbr_i];
+				sep = nbrSep;
+				done = False;
+			}
+		}
+	}
+	while( !done );
+
+	return curVert;
+}
+
+unsigned Mesh_Algorithms_NearestVertexGeneral( void* algorithms, double* point ) {
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nDims;
+	unsigned		nDomainVerts;
+	double*			vert;
+	unsigned		minVertInd;
+	double			curSep, minSep;
+	unsigned		v_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( Mesh_GetDomainSize( self->mesh, MT_VERTEX ) );
+
+	/* TODO: This is going to be hella slow, need to use some kind of spatial partitioning scheme. */
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	nDomainVerts = Mesh_GetDomainSize( mesh, MT_VERTEX );
+
+	vert = Mesh_GetVertex( mesh, 0 );
+	minSep = Vec_Sep( nDims, vert, point );
+	minVertInd = 0;
+
+	for( v_i = 1; v_i < nDomainVerts; v_i++ ) {
+		vert = Mesh_GetVertex( mesh, v_i );
+		curSep = Vec_Sep( nDims, vert, point );
+		if( curSep < minSep ) {
+			minSep = curSep;
+			minVertInd = v_i;
+		}
+	}
+
+	return minVertInd;
+}
+
+Bool Mesh_Algorithms_SearchWithFullIncidence( void* algorithms, double* point, 
+					      MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	double			maxCrd[3], minCrd[3];
+	unsigned		nDims;
+	unsigned		nEls;
+	unsigned		nearVert;
+	unsigned		nInc, *inc;
+	unsigned		e_i, d_i, inc_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( Mesh_HasIncidence( self->mesh, MT_VERTEX, Mesh_GetDimSize( self->mesh ) ) );
+	assert( dim );
+	assert( ind );
+
+	/* Get dimensionality. */
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+
+	/* If outside local range, immediately return false. */
+	Mesh_GetDomainCoordRange( mesh, minCrd, maxCrd );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( point[d_i] < minCrd[d_i] || point[d_i] > maxCrd[d_i] )
+			return False;
+	}
+
+	/* Start by locating the closest vertex. */
+	nearVert = Mesh_NearestVertex( mesh, point );
+
+	/* Get vertex/element incidence. */
+	Mesh_GetIncidence( mesh, MT_VERTEX, nearVert, nDims, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = (unsigned*)IArray_GetPtr( self->incArray );
+
+	/* Search each of these incident elements in turn. */
+	for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+		if( Mesh_ElementHasPoint( mesh, inc[inc_i], point, dim, ind ) )
+			return True;
+	}
+
+	/* Brute force, search every element in turn (last resort). */
+	nEls = Mesh_GetDomainSize( mesh, nDims );
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		if( Mesh_ElementHasPoint( mesh, e_i, point, dim, ind ) )
+			return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_Algorithms_SearchWithMinIncidence( void* algorithms, double* point, 
+					      MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	double			maxCrd[3], minCrd[3];
+	unsigned		lowest;
+	unsigned		nDims;
+	unsigned		nEls;
+	unsigned		nearVert;
+	unsigned		nInc, *inc;
+	unsigned		e_i, d_i, inc_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( Mesh_HasIncidence( self->mesh, MT_VERTEX, Mesh_GetDimSize( self->mesh ) ) );
+	assert( dim );
+	assert( ind );
+
+	/* Get dimensionality. */
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+
+	/* If outside local range, immediately return false. */
+	Mesh_GetDomainCoordRange( mesh, minCrd, maxCrd );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( point[d_i] < minCrd[d_i] || point[d_i] > maxCrd[d_i] )
+			return False;
+	}
+
+	/* Start by locating the closest vertex. */
+	nearVert = Mesh_NearestVertex( mesh, point );
+
+	/* Get vertex/element incidence. */
+	Mesh_GetIncidence( mesh, MT_VERTEX, nearVert, nDims, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = (unsigned*)IArray_GetPtr( self->incArray );
+
+	/* Search all of these elements and return the element with lowest global index. */
+	lowest = (unsigned)-1;
+	for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+		if( Mesh_ElementHasPoint( mesh, inc[inc_i], point, dim, ind ) ) {
+			unsigned	global;
+
+			global = Mesh_DomainToGlobal( mesh, nDims, inc[inc_i] );
+			if( global < lowest )
+				lowest = global;
+		}
+	}
+	if( lowest != (unsigned)-1 ) {
+		insist( Mesh_GlobalToDomain( mesh, nDims, lowest, ind ), == True );
+		*dim = nDims;
+		return True;
+	}
+
+	/* Brute force, search every element in turn (last resort). */
+	lowest = (unsigned)-1;
+	nEls = Mesh_GetDomainSize( mesh, nDims );
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		if( Mesh_ElementHasPoint( mesh, e_i, point, dim, ind ) ) {
+			unsigned	global;
+
+			global = Mesh_DomainToGlobal( mesh, nDims, e_i );
+			if( global < lowest )
+				lowest = global;
+		}
+	}
+	if( lowest != (unsigned)-1 ) {
+		insist( Mesh_GlobalToDomain( mesh, nDims, lowest, ind ), == True );
+		*dim = nDims;
+		return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_Algorithms_SearchGeneral( void* algorithms, double* point, 
+				    MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_Algorithms*	self = (Mesh_Algorithms*)algorithms;
+	Mesh*			mesh;
+	double			maxCrd[3], minCrd[3];
+	unsigned		nDims;
+	unsigned		nEls;
+	unsigned		e_i, d_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( dim );
+	assert( ind );
+
+	/* Get dimensionality. */
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+
+	/* If outside local range, immediately return false. */
+	Mesh_GetDomainCoordRange( mesh, minCrd, maxCrd );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( point[d_i] < minCrd[d_i] || point[d_i] > maxCrd[d_i] )
+			return False;
+	}
+
+	/* Brute force, search every element in turn. */
+	nEls = Mesh_GetDomainSize( mesh, nDims );
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		if( Mesh_ElementHasPoint( mesh, e_i, point, dim, ind ) )
+			return True;
+	}
+
+	return False;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_Algorithms.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_Algorithms.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,190 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_Algorithms.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_Algorithms_h__
+#define __Domain_Mesh_Mesh_Algorithms_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_Algorithms_Type;
+
+	/** Virtual function types */
+	typedef void (Mesh_Algorithms_SetMeshFunc)( void* algorithms, void* mesh );
+	typedef void (Mesh_Algorithms_UpdateFunc)( void* algorithms );
+	typedef unsigned (Mesh_Algorithms_NearestVertexFunc)( void* algorithms, double* point );
+	typedef Bool (Mesh_Algorithms_SearchFunc)( void* algorithms, double* point, 
+						   MeshTopology_Dim* dim, unsigned* ind );
+	typedef Bool (Mesh_Algorithms_SearchElementsFunc)( void* algorithms, double* point, 
+							   unsigned* elInd );
+	typedef double (Mesh_Algorithms_GetMinimumSeparationFunc)( void* algorithms, double* perDim );
+	typedef void (Mesh_Algorithms_GetLocalCoordRangeFunc)( void* algorithms, double* min, double* max );
+	typedef void (Mesh_Algorithms_GetDomainCoordRangeFunc)( void* algorithms, double* min, double* max );
+	typedef void (Mesh_Algorithms_GetGlobalCoordRangeFunc)( void* algorithms, double* min, double* max );
+
+	/** Class contents */
+	#define __Mesh_Algorithms								\
+		/* General info */								\
+		__Stg_Component									\
+												\
+		/* Virtual info */								\
+		Mesh_Algorithms_SetMeshFunc*			setMeshFunc;			\
+		Mesh_Algorithms_UpdateFunc*			updateFunc;			\
+		Mesh_Algorithms_NearestVertexFunc*		nearestVertexFunc;		\
+		Mesh_Algorithms_SearchFunc*			searchFunc;			\
+		Mesh_Algorithms_SearchElementsFunc*		searchElementsFunc;		\
+		Mesh_Algorithms_GetMinimumSeparationFunc*	getMinimumSeparationFunc;	\
+		Mesh_Algorithms_GetLocalCoordRangeFunc*		getLocalCoordRangeFunc;		\
+		Mesh_Algorithms_GetDomainCoordRangeFunc*	getDomainCoordRangeFunc;	\
+		Mesh_Algorithms_GetGlobalCoordRangeFunc*	getGlobalCoordRangeFunc;	\
+												\
+		/* Mesh_Algorithms info */							\
+		Mesh_Algorithms_NearestVertexFunc*	nearestVertex;				\
+		Mesh_Algorithms_SearchFunc*		search;					\
+		Mesh*					mesh;					\
+		IArray*					incArray;
+
+	struct Mesh_Algorithms { __Mesh_Algorithms };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_ALGORITHMS_DEFARGS								\
+		STG_COMPONENT_DEFARGS,								\
+		Mesh_Algorithms_SetMeshFunc*			setMeshFunc,			\
+		Mesh_Algorithms_UpdateFunc*			updateFunc,			\
+		Mesh_Algorithms_NearestVertexFunc*		nearestVertexFunc, 		\
+		Mesh_Algorithms_SearchFunc*			searchFunc, 			\
+		Mesh_Algorithms_SearchElementsFunc*		searchElementsFunc, 		\
+		Mesh_Algorithms_GetMinimumSeparationFunc*	getMinimumSeparationFunc, 	\
+		Mesh_Algorithms_GetLocalCoordRangeFunc*		getLocalCoordRangeFunc,		\
+		Mesh_Algorithms_GetDomainCoordRangeFunc*	getDomainCoordRangeFunc,	\
+		Mesh_Algorithms_GetGlobalCoordRangeFunc*	getGlobalCoordRangeFunc
+
+	#define MESH_ALGORITHMS_PASSARGS	\
+		STG_COMPONENT_PASSARGS, 	\
+		setMeshFunc, 			\
+		updateFunc, 			\
+		nearestVertexFunc,		\
+		searchFunc, 			\
+		searchElementsFunc,		\
+		getMinimumSeparationFunc,	\
+		getLocalCoordRangeFunc, 	\
+		getDomainCoordRangeFunc, 	\
+		getGlobalCoordRangeFunc
+
+	Mesh_Algorithms* Mesh_Algorithms_New( Name name );
+	Mesh_Algorithms* _Mesh_Algorithms_New( MESH_ALGORITHMS_DEFARGS );
+	void _Mesh_Algorithms_Init( Mesh_Algorithms* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_Algorithms_Delete( void* algorithms );
+	void _Mesh_Algorithms_Print( void* algorithms, Stream* stream );
+	void _Mesh_Algorithms_Construct( void* algorithms, Stg_ComponentFactory* cf, void* data );
+	void _Mesh_Algorithms_Build( void* algorithms, void* data );
+	void _Mesh_Algorithms_Initialise( void* algorithms, void* data );
+	void _Mesh_Algorithms_Execute( void* algorithms, void* data );
+	void _Mesh_Algorithms_Destroy( void* algorithms, void* data );
+
+	void _Mesh_Algorithms_SetMesh( void* algorithms, void* mesh );
+	void _Mesh_Algorithms_Update( void* algorithms );
+	unsigned _Mesh_Algorithms_NearestVertex( void* algorithms, double* point );
+	Bool _Mesh_Algorithms_Search( void* algorithms, double* point, 
+				      MeshTopology_Dim* dim, unsigned* ind );
+	Bool _Mesh_Algorithms_SearchElements( void* algorithms, double* point, 
+					      unsigned* elInd );
+	double _Mesh_Algorithms_GetMinimumSeparation( void* algorithms, double* perDim );
+	void _Mesh_Algorithms_GetLocalCoordRange( void* algorithms, double* min, double* max );
+	void _Mesh_Algorithms_GetDomainCoordRange( void* algorithms, double* min, double* max );
+	void _Mesh_Algorithms_GetGlobalCoordRange( void* algorithms, double* min, double* max );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	#define Mesh_Algorithms_SetMesh( self, mesh )							\
+		VirtualCall( self, setMeshFunc, self, mesh )
+
+	#define Mesh_Algorithms_Update( self )								\
+		VirtualCall( self, updateFunc, self )
+
+	#define Mesh_Algorithms_NearestVertex( self, point )					\
+		VirtualCall( self, nearestVertexFunc, self, point )
+
+	#define Mesh_Algorithms_Search( algorithms, point, dim, ind )				\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->searchFunc ),			\
+		 ((Mesh_Algorithms*)algorithms)->searchFunc( algorithms, point, dim, ind ))
+
+	#define Mesh_Algorithms_SearchElements( algorithms, point, elInd )			\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->searchElementsFunc ),		\
+		 ((Mesh_Algorithms*)algorithms)->searchElementsFunc( algorithms, point, elInd ))
+
+	#define Mesh_Algorithms_GetMinimumSeparation( algorithms, perDim )			\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->getMinimumSeparationFunc ),	\
+		 ((Mesh_Algorithms*)algorithms)->getMinimumSeparationFunc( algorithms, perDim ))
+
+	#define Mesh_Algorithms_GetLocalCoordRange( algorithms, min, max )			\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->getLocalCoordRangeFunc ),	\
+		 ((Mesh_Algorithms*)algorithms)->getLocalCoordRangeFunc( algorithms, min, max ))
+
+	#define Mesh_Algorithms_GetDomainCoordRange( algorithms, min, max )			\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->getDomainCoordRangeFunc ),	\
+		 ((Mesh_Algorithms*)algorithms)->getDomainCoordRangeFunc( algorithms, min, max ))
+
+	#define Mesh_Algorithms_GetGlobalCoordRange( algorithms, min, max )			\
+		(assert( (algorithms) && ((Mesh_Algorithms*)algorithms)->getGlobalCoordRangeFunc ),	\
+		 ((Mesh_Algorithms*)algorithms)->getGlobalCoordRangeFunc( algorithms, min, max ))
+
+	unsigned Mesh_Algorithms_NearestVertexWithNeighbours( void* algorithms, double* point );
+	unsigned Mesh_Algorithms_NearestVertexGeneral( void* algorithms, double* point );
+	Bool Mesh_Algorithms_SearchWithFullIncidence( void* algorithms, double* point, 
+						      MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_Algorithms_SearchWithMinIncidence( void* algorithms, double* point, 
+						     MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_Algorithms_SearchGeneral( void* algorithms, double* point, 
+					    MeshTopology_Dim* dim, unsigned* ind );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Mesh_Algorithms_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_Algorithms.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_Algorithms.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh_Algorithms</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_CentroidAlgorithms.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_CentroidAlgorithms.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,239 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_CentroidAlgorithms.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_CentroidAlgorithms_Type = "Mesh_CentroidAlgorithms";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_CentroidAlgorithms* Mesh_CentroidAlgorithms_New( Name name ) {
+	return _Mesh_CentroidAlgorithms_New( sizeof(Mesh_CentroidAlgorithms), 
+					     Mesh_CentroidAlgorithms_Type, 
+					     _Mesh_CentroidAlgorithms_Delete, 
+					     _Mesh_CentroidAlgorithms_Print, 
+					     NULL, 
+					     (void* (*)(Name))_Mesh_CentroidAlgorithms_New, 
+					     _Mesh_CentroidAlgorithms_Construct, 
+					     _Mesh_CentroidAlgorithms_Build, 
+					     _Mesh_CentroidAlgorithms_Initialise, 
+					     _Mesh_CentroidAlgorithms_Execute, 
+					     _Mesh_CentroidAlgorithms_Destroy, 
+					     name, 
+					     NON_GLOBAL, 
+					     _Mesh_Algorithms_SetMesh, 
+					     Mesh_CentroidAlgorithms_Update, 
+					     Mesh_CentroidAlgorithms_NearestVertex, 
+					     Mesh_CentroidAlgorithms_Search, 
+					     Mesh_CentroidAlgorithms_SearchElements, 
+					     _Mesh_Algorithms_GetMinimumSeparation, 
+					     Mesh_CentroidAlgorithms_GetLocalCoordRange, 
+					     Mesh_CentroidAlgorithms_GetDomainCoordRange, 
+					     Mesh_CentroidAlgorithms_GetGlobalCoordRange );
+}
+
+Mesh_CentroidAlgorithms* _Mesh_CentroidAlgorithms_New( MESH_HEXALGORITHMS_DEFARGS ) {
+	Mesh_CentroidAlgorithms* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_CentroidAlgorithms) );
+	self = (Mesh_CentroidAlgorithms*)_Mesh_Algorithms_New( MESH_ALGORITHMS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh_CentroidAlgorithms info */
+	_Mesh_CentroidAlgorithms_Init( self );
+
+	return self;
+}
+
+void _Mesh_CentroidAlgorithms_Init( Mesh_CentroidAlgorithms* self ) {
+	assert( self && Stg_CheckType( self, Mesh_CentroidAlgorithms ) );
+
+	self->elMesh = NULL;
+	self->incArray = IArray_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_CentroidAlgorithms_Delete( void* centroidAlgorithms ) {
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+
+	NewClass_Delete( self->incArray );
+
+	/* Delete the parent. */
+	_Mesh_Algorithms_Delete( self );
+}
+
+void _Mesh_CentroidAlgorithms_Print( void* centroidAlgorithms, Stream* stream ) {
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+	
+	/* Set the Journal for printing informations */
+	Stream* centroidAlgorithmsStream;
+	centroidAlgorithmsStream = Journal_Register( InfoStream_Type, "Mesh_CentroidAlgorithmsStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_CentroidAlgorithms (ptr): (%p)\n", self );
+	_Mesh_Algorithms_Print( self, stream );
+}
+
+void _Mesh_CentroidAlgorithms_Construct( void* centroidAlgorithms, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Mesh_CentroidAlgorithms_Build( void* centroidAlgorithms, void* data ) {
+}
+
+void _Mesh_CentroidAlgorithms_Initialise( void* centroidAlgorithms, void* data ) {
+}
+
+void _Mesh_CentroidAlgorithms_Execute( void* centroidAlgorithms, void* data ) {
+}
+
+void _Mesh_CentroidAlgorithms_Destroy( void* centroidAlgorithms, void* data ) {
+}
+
+void Mesh_CentroidAlgorithms_Update( void* centroidAlgorithms ) {
+}
+
+#define Vec_Sep( nDims, v0, v1 )									\
+	(((v0)[0] - (v1)[0]) * ((v0)[0] - (v1)[0]) +							\
+	 (((nDims) >= 2) ? (((v0)[1] - (v1)[1]) * ((v0)[1] - (v1)[1]) + 				\
+			    (((nDims) == 3) ? (((v0)[2] - (v1)[2]) * ((v0)[2] - (v1)[2])) : 0)) : 0))
+
+unsigned Mesh_CentroidAlgorithms_NearestVertex( void* centroidAlgorithms, double* point ) {
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+	unsigned			elInd;
+	double dist, nearDist;
+	unsigned near;
+	unsigned nDims;
+	double* vert;
+	unsigned inc_i;
+
+	assert( self );
+
+	if( Mesh_SearchElements( self->elMesh, point, &elInd ) ) {
+		unsigned	nInc, *inc;
+
+		nDims = Mesh_GetDimSize( self->mesh );
+		Mesh_GetIncidence( self->elMesh, Mesh_GetDimSize( self->mesh ), elInd, MT_VERTEX, 
+				   self->incArray );
+		nInc = IArray_GetSize( self->incArray );
+		inc = (unsigned*)IArray_GetPtr( self->incArray );
+		near = inc[0];
+		vert = Mesh_GetVertex( self->mesh, inc[0] );
+		nearDist = Vec_Sep( nDims, vert, point );
+		for( inc_i = 1; inc_i < nInc; inc_i++ ) {
+			vert = Mesh_GetVertex( self->mesh, inc[inc_i] );
+			dist = Vec_Sep( nDims, vert, point );
+			if( dist < nearDist ) {
+				near = inc[inc_i];
+				nearDist = dist;
+			}
+		}
+		return near;
+	}
+	else
+		return _Mesh_Algorithms_NearestVertex( self, point );
+}
+
+Bool Mesh_CentroidAlgorithms_Search( void* centroidAlgorithms, double* point, 
+				     MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+
+	assert( self );
+
+	return Mesh_Search( self->elMesh, point, dim, ind );
+}
+
+Bool Mesh_CentroidAlgorithms_SearchElements( void* centroidAlgorithms, double* point, 
+					     unsigned* elInd )
+{
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+
+	assert( self );
+
+	return Mesh_SearchElements( self->elMesh, point, elInd );
+}
+
+void Mesh_CentroidAlgorithms_GetLocalCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_CentroidAlgorithms* self = (Mesh_CentroidAlgorithms*)algorithms;
+
+	assert( self );
+	Mesh_GetLocalCoordRange( self->elMesh, min, max );
+}
+
+void Mesh_CentroidAlgorithms_GetDomainCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_CentroidAlgorithms* self = (Mesh_CentroidAlgorithms*)algorithms;
+
+	assert( self );
+	Mesh_GetDomainCoordRange( self->elMesh, min, max );
+}
+
+void Mesh_CentroidAlgorithms_GetGlobalCoordRange( void* algorithms, double* min, double* max ) {
+	Mesh_CentroidAlgorithms* self = (Mesh_CentroidAlgorithms*)algorithms;
+
+	assert( self );
+	Mesh_GetGlobalCoordRange( self->elMesh, min, max );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Mesh_CentroidAlgorithms_SetElementMesh( void* centroidAlgorithms, void* mesh ) {
+	Mesh_CentroidAlgorithms*	self = (Mesh_CentroidAlgorithms*)centroidAlgorithms;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidAlgorithms ) );
+
+	self->elMesh = mesh;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_CentroidAlgorithms.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_CentroidAlgorithms.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,107 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_CentroidAlgorithms.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_CentroidAlgorithms_h__
+#define __Domain_Mesh_Mesh_CentroidAlgorithms_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_CentroidAlgorithms_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh_CentroidAlgorithms		\
+		/* General info */			\
+		__Mesh_Algorithms			\
+							\
+		/* Virtual info */			\
+							\
+		/* Mesh_CentroidAlgorithms info */	\
+		Mesh*			elMesh;
+
+	struct Mesh_CentroidAlgorithms { __Mesh_CentroidAlgorithms };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_HEXALGORITHMS_DEFARGS \
+		MESH_ALGORITHMS_DEFARGS
+
+	#define MESH_HEXALGORITHMS_PASSARGS \
+		MESH_ALGORITHMS_PASSARGS
+
+	Mesh_CentroidAlgorithms* Mesh_CentroidAlgorithms_New( Name name );
+	Mesh_CentroidAlgorithms* _Mesh_CentroidAlgorithms_New( MESH_HEXALGORITHMS_DEFARGS );
+	void _Mesh_CentroidAlgorithms_Init( Mesh_CentroidAlgorithms* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_CentroidAlgorithms_Delete( void* centroidAlgorithms );
+	void _Mesh_CentroidAlgorithms_Print( void* centroidAlgorithms, Stream* stream );
+	void _Mesh_CentroidAlgorithms_Construct( void* centroidAlgorithms, Stg_ComponentFactory* cf, void* data );
+	void _Mesh_CentroidAlgorithms_Build( void* centroidAlgorithms, void* data );
+	void _Mesh_CentroidAlgorithms_Initialise( void* centroidAlgorithms, void* data );
+	void _Mesh_CentroidAlgorithms_Execute( void* centroidAlgorithms, void* data );
+	void _Mesh_CentroidAlgorithms_Destroy( void* centroidAlgorithms, void* data );
+
+	void Mesh_CentroidAlgorithms_Update( void* centroidAlgorithms );
+	unsigned Mesh_CentroidAlgorithms_NearestVertex( void* centroidAlgorithms, double* point );
+	Bool Mesh_CentroidAlgorithms_Search( void* centroidAlgorithms, double* point, 
+					     MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_CentroidAlgorithms_SearchElements( void* centroidAlgorithms, double* point, 
+						     unsigned* elInd );
+	void Mesh_CentroidAlgorithms_GetLocalCoordRange( void* algorithms, double* min, double* max );
+	void Mesh_CentroidAlgorithms_GetDomainCoordRange( void* algorithms, double* min, double* max );
+	void Mesh_CentroidAlgorithms_GetGlobalCoordRange( void* algorithms, double* min, double* max );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Mesh_CentroidAlgorithms_SetElementMesh( void* centroidAlgorithms, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Mesh_CentroidAlgorithms_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_CentroidAlgorithms.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_CentroidAlgorithms.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh_CentroidAlgorithms</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_CentroidType.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_CentroidType.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,174 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_CentroidType.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "Mesh_ElementType.h"
+#include "MeshClass.h"
+#include "Mesh_CentroidType.h"
+
+
+/* Textual name of this class */
+const Type Mesh_CentroidType_Type = "Mesh_CentroidType";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_CentroidType* Mesh_CentroidType_New( Name name ) {
+	return _Mesh_CentroidType_New( sizeof(Mesh_CentroidType), 
+				       Mesh_CentroidType_Type, 
+				       _Mesh_CentroidType_Delete, 
+				       _Mesh_CentroidType_Print, 
+				       NULL, 
+				       Mesh_CentroidType_Update, 
+				       Mesh_CentroidType_ElementHasPoint, 
+				       Mesh_CentroidType_GetMinimumSeparation, 
+				       Mesh_CentroidType_GetCentroid );
+}
+
+Mesh_CentroidType* _Mesh_CentroidType_New( MESH_CENTROIDTYPE_DEFARGS ) {
+	Mesh_CentroidType* self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_CentroidType) );
+	self = (Mesh_CentroidType*)_Mesh_ElementType_New( MESH_ELEMENTTYPE_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh_CentroidType info */
+	_Mesh_CentroidType_Init( self );
+
+	return self;
+}
+
+void _Mesh_CentroidType_Init( Mesh_CentroidType* self ) {
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+
+	self->elMesh = NULL;
+	self->incArray = IArray_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_CentroidType_Delete( void* centroidType ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+
+	NewClass_Delete( self->incArray );
+
+	/* Delete the parent. */
+	_Mesh_ElementType_Delete( self );
+}
+
+void _Mesh_CentroidType_Print( void* centroidType, Stream* stream ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+	Stream*			centroidTypeStream;
+
+	centroidTypeStream = Journal_Register( InfoStream_Type, "Mesh_CentroidTypeStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_CentroidType (ptr): (%p)\n", self );
+	_Mesh_ElementType_Print( self, stream );
+}
+
+void Mesh_CentroidType_Update( void* centroidType ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+}
+
+Bool Mesh_CentroidType_ElementHasPoint( void* centroidType, unsigned elInd, double* point, 
+					MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+
+	return Mesh_ElementHasPoint( self->elMesh, elInd, point, dim, ind );
+}
+
+double Mesh_CentroidType_GetMinimumSeparation( void* centroidType, unsigned elInd, double* perDim ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+	Mesh_ElementType*	elType;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+
+	elType = Mesh_GetElementType( self->elMesh, elInd );
+
+	return Mesh_ElementType_GetMinimumSeparation( elType, elInd, perDim );
+}
+
+void Mesh_CentroidType_GetCentroid( void* centroidType, unsigned element, double* centroid ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+	const int*		inc;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+
+	Mesh_GetIncidence( self->mesh, Mesh_GetDimSize( self->mesh ), element, MT_VERTEX, 
+			   self->incArray );
+	assert( IArray_GetSize( self->incArray ) == 1 );
+	inc = IArray_GetPtr( self->incArray );
+	memcpy( centroid, Mesh_GetVertex( self->mesh, inc[0] ), Mesh_GetDimSize( self->mesh ) * sizeof(unsigned) );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Mesh_CentroidType_SetElementMesh( void* centroidType, void* mesh ) {
+	Mesh_CentroidType*	self = (Mesh_CentroidType*)centroidType;
+
+	assert( self && Stg_CheckType( self, Mesh_CentroidType ) );
+	assert( !mesh || Stg_CheckType( mesh, Mesh ) );
+
+	self->elMesh = mesh;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_CentroidType.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_CentroidType.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,99 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_CentroidType.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_CentroidType_h__
+#define __Domain_Mesh_Mesh_CentroidType_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_CentroidType_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh_CentroidType			\
+		/* General info */			\
+		__Mesh_ElementType			\
+							\
+		/* Virtual info */			\
+							\
+		/* Mesh_CentroidType info */		\
+		Mesh*			elMesh;		\
+		IArray*			incArray;
+
+	struct Mesh_CentroidType { __Mesh_CentroidType };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_CENTROIDTYPE_DEFARGS		\
+		MESH_ELEMENTTYPE_DEFARGS
+
+	#define MESH_CENTROIDTYPE_PASSARGS		\
+		MESH_ELEMENTTYPE_PASSARGS
+
+	Mesh_CentroidType* Mesh_CentroidType_New();
+	Mesh_CentroidType* _Mesh_CentroidType_New( MESH_CENTROIDTYPE_DEFARGS );
+	void _Mesh_CentroidType_Init( Mesh_CentroidType* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_CentroidType_Delete( void* centroidType );
+	void _Mesh_CentroidType_Print( void* centroidType, Stream* stream );
+
+	void Mesh_CentroidType_Update( void* centroidType );
+	Bool Mesh_CentroidType_ElementHasPoint( void* centroidType, unsigned elInd, double* point, 
+					   MeshTopology_Dim* dim, unsigned* ind );
+	double Mesh_CentroidType_GetMinimumSeparation( void* centroidType, unsigned elInd, double* perDim );
+	void Mesh_CentroidType_GetCentroid( void* centroidType, unsigned element, double* centroid );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Mesh_CentroidType_SetElementMesh( void* centroidType, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Mesh_CentroidType_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_ElementType.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_ElementType.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,147 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_ElementType.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_ElementType_Type = "Mesh_ElementType";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_ElementType* _Mesh_ElementType_New( MESH_ELEMENTTYPE_DEFARGS ) {
+	Mesh_ElementType*	self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_ElementType) );
+	self = (Mesh_ElementType*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+	self->updateFunc = updateFunc;
+	self->elementHasPointFunc = elementHasPointFunc;
+	self->getMinimumSeparationFunc = getMinimumSeparationFunc;
+	self->getCentroidFunc = getCentroidFunc;
+
+	/* Mesh_ElementType info */
+	_Mesh_ElementType_Init( self );
+
+	return self;
+}
+
+void _Mesh_ElementType_Init( Mesh_ElementType* self ) {
+	assert( self && Stg_CheckType( self, Mesh_ElementType ) );
+
+	self->mesh = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_ElementType_Delete( void* elementType ) {
+	Mesh_ElementType*	self = (Mesh_ElementType*)elementType;
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _Mesh_ElementType_Print( void* elementType, Stream* stream ) {
+	Mesh_ElementType*	self = (Mesh_ElementType*)elementType;
+	Stream*			elementTypeStream;
+
+	elementTypeStream = Journal_Register( InfoStream_Type, "Mesh_ElementTypeStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_ElementType (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+void _Mesh_ElementType_GetCentroid( void* elementType, unsigned element, double* centroid ) {
+	Mesh_ElementType*	self = (Mesh_ElementType*)elementType;
+	Mesh*			mesh;
+	IArray*			inc;
+	unsigned		nIncVerts;
+	const int		*incVerts;
+	unsigned		nDims;
+	double			denom;
+	unsigned		d_i, v_i;
+
+	assert( self );
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	inc = IArray_New();
+	Mesh_GetIncidence( mesh, nDims, element, MT_VERTEX, inc );
+	nIncVerts = (unsigned)IArray_GetSize( inc );
+	incVerts = IArray_GetPtr( inc );
+
+	assert( nIncVerts );
+	denom = 1.0 / (double)nIncVerts;
+
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		centroid[d_i] = Mesh_GetVertex( mesh, incVerts[0] )[d_i];
+		for( v_i = 1; v_i < nIncVerts; v_i++ )
+			centroid[d_i] += Mesh_GetVertex( mesh, incVerts[v_i] )[d_i];
+		centroid[d_i] *= denom;
+	}
+
+	NewClass_Delete( inc );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Mesh_ElementType_SetMesh( void* elementType, void* mesh ) {
+	Mesh_ElementType*	self = (Mesh_ElementType*)elementType;
+
+	assert( self && Stg_CheckType( self, Mesh_ElementType ) );
+	assert( !mesh || Stg_CheckType( mesh, Mesh ) );
+
+	self->mesh = mesh;
+	Mesh_ElementType_Update( self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_ElementType.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_ElementType.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,121 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_ElementType.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_ElementType_h__
+#define __Domain_Mesh_Mesh_ElementType_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_ElementType_Type;
+
+	/** Virtual function types */
+	typedef void (Mesh_ElementType_UpdateFunc)( void* elementType );
+	typedef Bool (Mesh_ElementType_ElementHasPointFunc)( void* elementType, unsigned element, double* point, 
+							     MeshTopology_Dim* dim, unsigned* ind );
+	typedef double (Mesh_ElementType_GetMinimumSeparationFunc)( void* elementType, unsigned element, double* perDim );
+	typedef void (Mesh_ElementType_GetCentroidFunc)( void* elementType, unsigned element, double* centroid );
+
+	/** Class contents */
+	#define __Mesh_ElementType								\
+		/* General info */								\
+		__Stg_Class									\
+												\
+		/* Virtual info */								\
+		Mesh_ElementType_UpdateFunc*			updateFunc;			\
+		Mesh_ElementType_ElementHasPointFunc*		elementHasPointFunc;		\
+		Mesh_ElementType_GetMinimumSeparationFunc*	getMinimumSeparationFunc;	\
+		Mesh_ElementType_GetCentroidFunc*		getCentroidFunc;		\
+												\
+		/* Mesh_ElementType info */							\
+		Mesh*			mesh;
+
+	struct Mesh_ElementType { __Mesh_ElementType };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_ELEMENTTYPE_DEFARGS							\
+		STG_CLASS_DEFARGS,								\
+		Mesh_ElementType_UpdateFunc*			updateFunc, 			\
+		Mesh_ElementType_ElementHasPointFunc*		elementHasPointFunc,		\
+		Mesh_ElementType_GetMinimumSeparationFunc*	getMinimumSeparationFunc,	\
+		Mesh_ElementType_GetCentroidFunc*		getCentroidFunc
+
+	#define MESH_ELEMENTTYPE_PASSARGS	\
+		STG_CLASS_PASSARGS, 		\
+		updateFunc, 			\
+		elementHasPointFunc, 		\
+		getMinimumSeparationFunc,	\
+		getCentroidFunc
+
+	Mesh_ElementType* _Mesh_ElementType_New( MESH_ELEMENTTYPE_DEFARGS );
+	void _Mesh_ElementType_Init( Mesh_ElementType* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_ElementType_Delete( void* elementType );
+	void _Mesh_ElementType_Print( void* elementType, Stream* stream );
+	void _Mesh_ElementType_GetCentroid( void* elementType, unsigned element, double* centroid );
+
+	#define Mesh_ElementType_Update( self )							\
+		VirtualCall( self, updateFunc, self )
+
+	#define Mesh_ElementType_ElementHasPoint( self, element, point, dim, ind )		\
+		VirtualCall( self, elementHasPointFunc, self, element, point, dim, ind )
+
+	#define Mesh_ElementType_GetMinimumSeparation( self, element, perDim )			\
+		VirtualCall( self, getMinimumSeparationFunc, self, element, perDim )
+
+	#define Mesh_ElementType_GetCentroid( self, element, centroid )				\
+		VirtualCall( self, getCentroidFunc, self, element, centroid )
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Mesh_ElementType_SetMesh( void* elementType, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Mesh_ElementType_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_ElementType.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_ElementType.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh_ElementType</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_HexAlgorithms.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_HexAlgorithms.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,140 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_HexAlgorithms.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_HexAlgorithms_Type = "Mesh_HexAlgorithms";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_HexAlgorithms* Mesh_HexAlgorithms_New( Name name ) {
+	return _Mesh_HexAlgorithms_New( sizeof(Mesh_HexAlgorithms), 
+					Mesh_HexAlgorithms_Type, 
+					_Mesh_HexAlgorithms_Delete, 
+					_Mesh_HexAlgorithms_Print, 
+					NULL, 
+					(void* (*)(Name))_Mesh_HexAlgorithms_New, 
+					_Mesh_HexAlgorithms_Construct, 
+					_Mesh_HexAlgorithms_Build, 
+					_Mesh_HexAlgorithms_Initialise, 
+					_Mesh_HexAlgorithms_Execute, 
+					_Mesh_HexAlgorithms_Destroy, 
+					name, 
+					NON_GLOBAL, 
+					_Mesh_Algorithms_SetMesh, 
+					_Mesh_Algorithms_Update, 
+					_Mesh_Algorithms_NearestVertex, 
+					_Mesh_Algorithms_Search, 
+					_Mesh_Algorithms_SearchElements, 
+					_Mesh_Algorithms_GetMinimumSeparation, 
+					_Mesh_Algorithms_GetLocalCoordRange, 
+					_Mesh_Algorithms_GetDomainCoordRange, 
+					_Mesh_Algorithms_GetGlobalCoordRange );
+}
+
+Mesh_HexAlgorithms* _Mesh_HexAlgorithms_New( MESH_HEXALGORITHMS_DEFARGS ) {
+	Mesh_HexAlgorithms* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_HexAlgorithms) );
+	self = (Mesh_HexAlgorithms*)_Mesh_Algorithms_New( MESH_ALGORITHMS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh_HexAlgorithms info */
+	_Mesh_HexAlgorithms_Init( self );
+
+	return self;
+}
+
+void _Mesh_HexAlgorithms_Init( Mesh_HexAlgorithms* self ) {
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_HexAlgorithms_Delete( void* hexAlgorithms ) {
+	Mesh_HexAlgorithms*	self = (Mesh_HexAlgorithms*)hexAlgorithms;
+
+	/* Delete the parent. */
+	_Mesh_Algorithms_Delete( self );
+}
+
+void _Mesh_HexAlgorithms_Print( void* hexAlgorithms, Stream* stream ) {
+	Mesh_HexAlgorithms*	self = (Mesh_HexAlgorithms*)hexAlgorithms;
+	
+	/* Set the Journal for printing informations */
+	Stream* hexAlgorithmsStream;
+	hexAlgorithmsStream = Journal_Register( InfoStream_Type, "Mesh_HexAlgorithmsStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_HexAlgorithms (ptr): (%p)\n", self );
+	_Mesh_Algorithms_Print( self, stream );
+}
+
+void _Mesh_HexAlgorithms_Construct( void* hexAlgorithms, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Mesh_HexAlgorithms_Build( void* hexAlgorithms, void* data ) {
+}
+
+void _Mesh_HexAlgorithms_Initialise( void* hexAlgorithms, void* data ) {
+}
+
+void _Mesh_HexAlgorithms_Execute( void* hexAlgorithms, void* data ) {
+}
+
+void _Mesh_HexAlgorithms_Destroy( void* hexAlgorithms, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_HexAlgorithms.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_HexAlgorithms.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,94 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_HexAlgorithms.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_HexAlgorithms_h__
+#define __Domain_Mesh_Mesh_HexAlgorithms_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_HexAlgorithms_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh_HexAlgorithms			\
+		/* General info */			\
+		__Mesh_Algorithms			\
+							\
+		/* Virtual info */			\
+							\
+		/* Mesh_HexAlgorithms info */
+
+	struct Mesh_HexAlgorithms { __Mesh_HexAlgorithms };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_HEXALGORITHMS_DEFARGS \
+		MESH_ALGORITHMS_DEFARGS
+
+	#define MESH_HEXALGORITHMS_PASSARGS \
+		MESH_ALGORITHMS_PASSARGS
+
+	Mesh_HexAlgorithms* Mesh_HexAlgorithms_New( Name name );
+	Mesh_HexAlgorithms* _Mesh_HexAlgorithms_New( MESH_HEXALGORITHMS_DEFARGS );
+	void _Mesh_HexAlgorithms_Init( Mesh_HexAlgorithms* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_HexAlgorithms_Delete( void* hexAlgorithms );
+	void _Mesh_HexAlgorithms_Print( void* hexAlgorithms, Stream* stream );
+	void _Mesh_HexAlgorithms_Construct( void* hexAlgorithms, Stg_ComponentFactory* cf, void* data );
+	void _Mesh_HexAlgorithms_Build( void* hexAlgorithms, void* data );
+	void _Mesh_HexAlgorithms_Initialise( void* hexAlgorithms, void* data );
+	void _Mesh_HexAlgorithms_Execute( void* hexAlgorithms, void* data );
+	void _Mesh_HexAlgorithms_Destroy( void* hexAlgorithms, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Domain_Mesh_Mesh_HexAlgorithms_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_HexAlgorithms.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_HexAlgorithms.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh_HexAlgorithms</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_HexType.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_HexType.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1083 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_HexType.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+#include "Mesh_ElementType.h"
+#include "MeshClass.h"
+#include "Mesh_HexType.h"
+
+
+/* Textual name of this class */
+const Type Mesh_HexType_Type = "Mesh_HexType";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_HexType* Mesh_HexType_New( Name name ) {
+	return _Mesh_HexType_New( sizeof(Mesh_HexType), 
+				  Mesh_HexType_Type, 
+				  _Mesh_HexType_Delete, 
+				  _Mesh_HexType_Print, 
+				  NULL, 
+				  Mesh_HexType_Update, 
+				  Mesh_HexType_ElementHasPoint, 
+				  Mesh_HexType_GetMinimumSeparation, 
+				  _Mesh_ElementType_GetCentroid );
+}
+
+Mesh_HexType* _Mesh_HexType_New( MESH_HEXTYPE_DEFARGS ) {
+	Mesh_HexType* self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_HexType) );
+	self = (Mesh_HexType*)_Mesh_ElementType_New( MESH_ELEMENTTYPE_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh_HexType info */
+	_Mesh_HexType_Init( self );
+
+	return self;
+}
+
+void _Mesh_HexType_Init( Mesh_HexType* self ) {
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+
+	self->vertMap = AllocArray( unsigned, 8 );
+	self->inc = AllocArray( unsigned, 8 );
+	Mesh_HexType_SetVertexMap( self, NULL );
+
+	self->elementHasPoint = NULL;
+
+	self->triInds = AllocArray2D( unsigned, 2, 3 );
+	self->triInds[0][0] = 0; self->triInds[0][1] = 1; self->triInds[0][2] = 2;
+	self->triInds[1][0] = 1; self->triInds[1][1] = 3; self->triInds[1][2] = 2;
+
+	self->tetInds = AllocArray2D( unsigned, 10, 4 );
+	self->tetInds[0][0] = 0; self->tetInds[0][1] = 1; self->tetInds[0][2] = 2; self->tetInds[0][3] = 4;
+	self->tetInds[1][0] = 1; self->tetInds[1][1] = 2; self->tetInds[1][2] = 3; self->tetInds[1][3] = 7;
+	self->tetInds[2][0] = 1; self->tetInds[2][1] = 4; self->tetInds[2][2] = 5; self->tetInds[2][3] = 7;
+	self->tetInds[3][0] = 2; self->tetInds[3][1] = 4; self->tetInds[3][2] = 6; self->tetInds[3][3] = 7;
+	self->tetInds[4][0] = 1; self->tetInds[4][1] = 2; self->tetInds[4][2] = 4; self->tetInds[4][3] = 7;
+	self->tetInds[5][0] = 0; self->tetInds[5][1] = 1; self->tetInds[5][2] = 3; self->tetInds[5][3] = 5;
+	self->tetInds[6][0] = 0; self->tetInds[6][1] = 4; self->tetInds[6][2] = 5; self->tetInds[6][3] = 6;
+	self->tetInds[7][0] = 0; self->tetInds[7][1] = 2; self->tetInds[7][2] = 3; self->tetInds[7][3] = 6;
+	self->tetInds[8][0] = 3; self->tetInds[8][1] = 5; self->tetInds[8][2] = 6; self->tetInds[8][3] = 7;
+	self->tetInds[9][0] = 0; self->tetInds[9][1] = 3; self->tetInds[9][2] = 5; self->tetInds[9][3] = 6;
+
+	self->incArray = IArray_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_HexType_Delete( void* elementType ) {
+	Mesh_HexType*	self = (Mesh_HexType*)elementType;
+
+	FreeArray( self->vertMap );
+	FreeArray( self->inc );
+	FreeArray( self->triInds );
+	FreeArray( self->tetInds );
+	NewClass_Delete( self->incArray );
+
+	/* Delete the parent. */
+	_Mesh_ElementType_Delete( self );
+}
+
+void _Mesh_HexType_Print( void* elementType, Stream* stream ) {
+	Mesh_HexType*	self = (Mesh_HexType*)elementType;
+	Stream*			elementTypeStream;
+
+	elementTypeStream = Journal_Register( InfoStream_Type, "Mesh_HexTypeStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_HexType (ptr): (%p)\n", self );
+	_Mesh_ElementType_Print( self, stream );
+}
+
+void Mesh_HexType_Update( void* hexType ) {
+	Mesh_HexType*	self = (Mesh_HexType*)hexType;
+	unsigned	nDims;
+	unsigned	d_i;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+
+	nDims = Mesh_GetDimSize( self->mesh );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( !Mesh_GetGlobalSize( self->mesh, d_i ) || !Mesh_HasIncidence( self->mesh, nDims, d_i ) )
+			break;
+	}
+
+	if( Mesh_GetDimSize( self->mesh ) == 3 ) {
+		if( d_i == nDims ) {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint3DWithIncidence;
+		}
+		else {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint3DGeneral;
+		}
+	}
+	else if( Mesh_GetDimSize( self->mesh ) == 2 ) {
+		if( d_i == nDims ) {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint2DWithIncidence;
+		}
+		else {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint2DGeneral;
+		}
+	}
+	else {
+		if( d_i == nDims ) {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint1DWithIncidence;
+		}
+		else {
+			self->elementHasPoint = 
+				(Mesh_ElementType_ElementHasPointFunc*)Mesh_HexType_ElementHasPoint1DGeneral;
+		}
+	}
+}
+
+Bool Mesh_HexType_ElementHasPoint( void* hexType, unsigned elInd, double* point, 
+				   MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_HexType*	self = (Mesh_HexType*)hexType;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) <= 3 );
+	assert( self->elementHasPoint );
+
+	return self->elementHasPoint( self, elInd, point, dim, ind );
+}
+
+double Mesh_HexType_GetMinimumSeparation( void* hexType, unsigned elInd, double* perDim ) {
+	Mesh_HexType*	self = (Mesh_HexType*)hexType;
+	Mesh*		mesh;
+	unsigned*	map;
+	double		curSep;
+	double*		dimSep;
+	unsigned	nInc;
+	const int	*inc;
+
+	assert( self );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( Mesh_GetDimSize( self->mesh ) <= 3 );
+
+	mesh = self->mesh;
+
+	/*
+	** We know we're a hexahedral element but we may not be regular.  This algorithm (originally from
+	** FeVariable.c) doesn't calculate the exact separation but provides an answer that's pretty
+	** close.
+	*/
+
+	dimSep = AllocArray( double, Mesh_GetDimSize( mesh ) );
+
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+	map = self->vertMap;
+
+	curSep = Mesh_GetVertex( mesh, inc[map[1]] )[0] - Mesh_GetVertex( mesh, inc[map[0]] )[0];
+	dimSep[0] = curSep;
+
+	if( Mesh_GetDimSize( mesh ) >= 2 ) {
+		curSep = Mesh_GetVertex( mesh, inc[map[3]] )[0] - Mesh_GetVertex( mesh, inc[map[2]] )[0];
+		if( curSep < dimSep[0] )
+			dimSep[0] = curSep;
+	}
+
+	if( Mesh_GetDimSize( mesh ) == 3 ) {
+		curSep = Mesh_GetVertex( mesh, inc[map[5]] )[0] - Mesh_GetVertex( mesh, inc[map[4]] )[0];
+		if( curSep < dimSep[0] )
+			dimSep[0] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[7]] )[0] - Mesh_GetVertex( mesh, inc[map[6]] )[0];
+		if( curSep < dimSep[0] )
+			dimSep[0] = curSep;
+	}
+
+	if( Mesh_GetDimSize( mesh ) >= 2 ) {
+		curSep = Mesh_GetVertex( mesh, inc[map[2]] )[1] - Mesh_GetVertex( mesh, inc[map[0]] )[1];
+		dimSep[1] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[3]] )[1] - Mesh_GetVertex( mesh, inc[map[1]] )[1];
+		if( curSep < dimSep[1] )
+			dimSep[1] = curSep;
+	}
+
+	if( Mesh_GetDimSize( mesh ) == 3 ) {
+		curSep = Mesh_GetVertex( mesh, inc[map[6]] )[1] - Mesh_GetVertex( mesh, inc[map[4]] )[1];
+		if( curSep < dimSep[1] )
+			dimSep[1] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[7]] )[1] - Mesh_GetVertex( mesh, inc[map[5]] )[1];
+		if( curSep < dimSep[1] )
+			dimSep[1] = curSep;
+	}
+
+	if( Mesh_GetDimSize( mesh ) == 3 ) {
+		curSep = Mesh_GetVertex( mesh, inc[map[4]] )[2] - Mesh_GetVertex( mesh, inc[map[0]] )[2];
+		dimSep[2] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[5]] )[2] - Mesh_GetVertex( mesh, inc[map[1]] )[2];
+		if( curSep < dimSep[2] )
+			dimSep[2] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[6]] )[2] - Mesh_GetVertex( mesh, inc[map[2]] )[2];
+		if ( curSep < dimSep[2] )
+			dimSep[2] = curSep;
+
+		curSep = Mesh_GetVertex( mesh, inc[map[7]] )[2] - Mesh_GetVertex( mesh, inc[map[3]] )[2];
+		if ( curSep < dimSep[2] )
+			dimSep[2] = curSep;
+	}
+
+	curSep = dimSep[0];
+	if( Mesh_GetDimSize( mesh ) >= 2 ) {
+		curSep = dimSep[1] < curSep ? dimSep[1] : curSep;
+		if ( Mesh_GetDimSize( mesh ) == 3 )
+			curSep = dimSep[2] < curSep ? dimSep[2] : curSep;
+	}
+
+	if( perDim )
+		memcpy( perDim, dimSep, Mesh_GetDimSize( mesh ) * sizeof(double) );
+
+	FreeArray( dimSep );
+
+	return curSep;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Mesh_HexType_SetVertexMap( void* hexType, unsigned* map ) {
+	Mesh_HexType*	self = (Mesh_HexType*)hexType;
+	unsigned	v_i;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+
+	if( map ) {
+		self->mapSize = (Mesh_GetDimSize( self->mesh ) == 3) ? 8 : 4;
+		memcpy( self->vertMap, map, self->mapSize * sizeof(unsigned) );
+	}
+	else {
+		self->mapSize = 0;
+		for( v_i = 0; v_i < 8; v_i++ )
+			self->vertMap[v_i] = v_i;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+Bool Mesh_HexType_ElementHasPoint3DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+					    MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	double		bc[4];
+	unsigned	inside;
+	const int	*inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 3 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	/* Shortcuts. */
+	mesh = self->mesh;
+
+	/* Get element to vertex incidence. */
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+
+	/* Search for tetrahedra. */
+	if( self->mapSize ) {
+		unsigned	v_i;
+
+		for( v_i = 0; v_i < self->mapSize; v_i++ )
+			self->inc[v_i] = inc[self->vertMap[v_i]];
+		if( Simplex_Search3D( mesh->verts, self->inc, 10, self->tetInds, point, bc, &inside ) ) {
+			*dim = MT_VOLUME;
+			*ind = elInd;
+			return True;
+		}
+	}
+	else {
+		if( Simplex_Search3D( mesh->verts, (unsigned*)inc, 10, self->tetInds, point, bc, &inside ) ) {
+			*dim = MT_VOLUME;
+			*ind = elInd;
+			return True;
+		}
+	}
+
+	return False;
+}
+
+Bool Mesh_HexType_ElementHasPoint3DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+						  MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	Bool		fnd;
+	double		bc[4];
+	IGraph*		topo;
+	unsigned	inside;
+	const int*	inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 3 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	/* Shortcuts. */
+	mesh = self->mesh;
+	topo = (IGraph*)mesh->topo;
+
+	/* Get element to vertex incidence. */
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+
+	/* Search for tetrahedra. */
+	if( self->mapSize ) {
+		unsigned	v_i;
+
+		for( v_i = 0; v_i < self->mapSize; v_i++ )
+			self->inc[v_i] = inc[self->vertMap[v_i]];
+		fnd = Simplex_Search3D( mesh->verts, self->inc, 10, self->tetInds, point, bc, &inside );
+	}
+	else
+		fnd = Simplex_Search3D( mesh->verts, (unsigned*)inc, 10, self->tetInds, point, bc, &inside );
+	if( fnd ) {
+		unsigned*	inds = self->tetInds[inside];
+
+		/* Check boundary ownership. */
+		if( bc[0] == 0.0 || bc[0] == -0.0 ) {
+			if( bc[1] == 0.0 || bc[1] == -0.0 ) {
+				if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+					*dim = MT_VERTEX;
+					*ind = topo->incEls[MT_VOLUME][MT_VERTEX][elInd][inds[3]];
+				}
+				else if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+					*dim = MT_VERTEX;
+					*ind = topo->incEls[MT_VOLUME][MT_VERTEX][elInd][inds[2]];
+				}
+				else {
+					if( inside == 0 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+					}
+					else if( inside == 1 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][11];
+					}
+					else if( inside == 2 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][7];
+					}
+					else if( inside == 3 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][5];
+					}
+					else if( inside == 4 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+					}
+					else if( inside == 5 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+					}
+					else if( inside == 6 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+					}
+					else if( inside == 7 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+					}
+					else if( inside == 8 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][5];
+					}
+					else {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+					}
+				}
+			}
+			else if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+				if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+					*dim = MT_VERTEX;
+					*ind = topo->incEls[MT_VOLUME][MT_VERTEX][elInd][inds[1]];
+				}
+				else {
+					if( inside == 0 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+					}
+					else if( inside == 1 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+					}
+					else if( inside == 2 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+					}
+					else if( inside == 3 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+					}
+					else if( inside == 4 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+					}
+					else if( inside == 5 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][9];
+					}
+					else if( inside == 6 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][6];
+					}
+					else if( inside == 7 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][10];
+					}
+					else if( inside == 8 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][7];
+					}
+					else {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+					}
+				}
+			}
+			else if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+				if( inside == 0 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][1];
+				}
+				else if( inside == 2 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][4];
+				}
+				else if( inside == 3 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][6];
+				}
+				else if( inside == 4 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+				}
+				else if( inside == 5 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][3];
+				}
+				else if( inside == 6 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][4];
+				}
+				else if( inside == 7 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][1];
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+				}
+				else {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+			}
+			else {
+				if( inside == 0 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 1 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+				}
+				else if( inside == 2 ) {
+					*dim = 	MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+				}
+				else if( inside == 3 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+				}
+				else if( inside == 4 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 5 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+				else if( inside == 6 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+				}
+				else if( inside == 7 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][1];
+				}
+				else {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+			}
+		}
+		else if( bc[1] == 0.0 || bc[1] == -0.0 ) {
+			if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+				if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+					*dim = MT_VERTEX;
+					*ind = topo->incEls[MT_VOLUME][MT_VERTEX][elInd][inds[0]];
+				}
+				else {
+					if( inside == 0 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][8];
+					}
+					else if( inside == 1 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+					}
+					else if( inside == 2 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+					}
+					else if( inside == 3 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+					}
+					else if( inside == 4 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+					}
+					else if( inside == 5 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+					}
+					else if( inside == 6 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+					}
+					else if( inside == 7 ) {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+					}
+					else if( inside == 8 ) {
+						*dim = MT_EDGE;
+						*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][7];
+					}
+					else {
+						*dim = MT_FACE;
+						*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+					}
+				}
+			}
+			else if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+				if( inside == 0 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][2];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][3];
+				}
+				else if( inside == 2 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][9];
+				}
+				else if( inside == 3 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][10];
+				}
+				else if( inside == 4 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+				else if( inside == 5 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+				else if( inside == 6 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+				else if( inside == 7 ) {
+					*dim = 	MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+				}
+				else {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+			}
+			else {
+				if( inside == 0 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+				else if( inside == 2 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+				else if( inside == 3 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+				}
+				else if( inside == 4 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 5 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 6 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 7 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][3];
+				}
+				else {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+			}
+		}
+		else if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+			if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+				if( inside == 0 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][0];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+				else if( inside == 2 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+				else if( inside == 3 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+				}
+				else if( inside == 4 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+				else if( inside == 5 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][0];
+				}
+				else if( inside == 6 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][8];
+				}
+				else if( inside == 7 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_VOLUME][MT_EDGE][elInd][2];
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+				else {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+				}
+			}
+			else {
+				if( inside == 0 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 2 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 3 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 4 ) {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+				else if( inside == 5 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+				}
+				else if( inside == 6 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+				}
+				else if( inside == 7 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+				}
+				else if( inside == 8 ) {
+					*dim = MT_FACE;
+					*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][5];
+				}
+				else {
+					*dim = MT_VOLUME;
+					*ind = elInd;
+				}
+			}
+		}
+		else if( bc[3] == 0.0 || bc[3] == -0.0 ) {
+			if( inside == 0 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+			}
+			else if( inside == 1 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+			}
+			else if( inside == 2 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+			}
+			else if( inside == 3 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][4];
+			}
+			else if( inside == 4 ) {
+				*dim = MT_VOLUME;
+				*ind = elInd;
+			}
+			else if( inside == 5 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+			}
+			else if( inside == 6 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][2];
+			}
+			else if( inside == 7 ) {
+				*dim = MT_FACE;
+				*ind = topo->incEls[MT_VOLUME][MT_FACE][elInd][0];
+			}
+			else if( inside == 8 ) {
+				*dim = MT_VOLUME;
+				*ind = elInd;
+			}
+			else {
+				*dim = MT_VOLUME;
+				*ind = elInd;
+			}
+		}
+		else {
+			*dim = MT_VOLUME;
+			*ind = elInd;
+		}
+
+		return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_HexType_ElementHasPoint2DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+					    MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	Bool		fnd;
+	double		bc[3];
+	unsigned	inside;
+	const int*	inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 2 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	/* Shortcuts. */
+	mesh = self->mesh;
+
+	/* Get element to vertex incidence. */
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+
+	/* Search for triangle. */
+	if( self->mapSize ) {
+		unsigned	v_i;
+
+		for( v_i = 0; v_i < self->mapSize; v_i++ )
+			self->inc[v_i] = inc[self->vertMap[v_i]];
+		fnd = Simplex_Search2D( mesh->verts, self->inc, 2, self->triInds, point, bc, &inside );
+	}
+	else
+		fnd = Simplex_Search2D( mesh->verts, (unsigned*)inc, 2, self->triInds, point, bc, &inside );
+	if( fnd ) {
+		*dim = MT_FACE;
+		*ind = elInd;
+		return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_HexType_ElementHasPoint2DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+						  MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	Bool		fnd;
+	double		bc[3];
+	IGraph*		topo;
+	unsigned	inside;
+	const int*	inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 2 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	/* Shortcuts. */
+	mesh = self->mesh;
+	topo = (IGraph*)mesh->topo;
+
+	/* Get element to vertex incidence. */
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+
+	/* Search for triangle. */
+	if( self->mapSize ) {
+		unsigned	v_i;
+
+		for( v_i = 0; v_i < self->mapSize; v_i++ )
+			self->inc[v_i] = inc[self->vertMap[v_i]];
+		fnd = Simplex_Search2D( mesh->verts, self->inc, 2, self->triInds, point, bc, &inside );
+	}
+	else
+		fnd = Simplex_Search2D( mesh->verts, (unsigned*)inc, 2, self->triInds, point, bc, &inside );
+	if( fnd ) {
+		unsigned	*inds = self->triInds[inside];
+
+		/* Check boundary ownership. */
+		if( bc[0] == 0.0 || bc[0] == -0.0 ) {
+			if( bc[1] == 0.0 || bc[1] == -0.0 ) {
+				*dim = MT_VERTEX;
+				*ind = topo->incEls[MT_FACE][MT_VERTEX][elInd][inds[2]];
+			}
+			else if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+				*dim = MT_VERTEX;
+				*ind = topo->incEls[MT_FACE][MT_VERTEX][elInd][inds[1]];
+			}
+			else {
+				if( inside == 0 ) {
+					*dim = MT_FACE;
+					*ind = elInd;
+				}
+				else if( inside == 1 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_FACE][MT_EDGE][elInd][1];
+				}
+			}
+		}
+		else if( bc[1] == 0.0 || bc[1] == -0.0 ) {
+			if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+				*dim = MT_VERTEX;
+				*ind = topo->incEls[MT_FACE][MT_VERTEX][elInd][inds[0]];
+			}
+			else {
+				if( inside == 0 ) {
+					*dim = MT_EDGE;
+					*ind = topo->incEls[MT_FACE][MT_EDGE][elInd][2];
+				}
+				else if( inside == 1 ) {
+					*dim = MT_FACE;
+					*ind = elInd;
+				}
+			}
+		}
+		else if( bc[2] == 0.0 || bc[2] == -0.0 ) {
+			if( inside == 0 ) {
+				*dim = MT_EDGE;
+				*ind = topo->incEls[MT_FACE][MT_EDGE][elInd][0];
+			}
+			else if( inside == 1 ) {
+				*dim = MT_EDGE;
+				*ind = topo->incEls[MT_FACE][MT_EDGE][elInd][3];
+			}
+		}
+		else {
+			*dim = MT_FACE;
+			*ind = elInd;
+		}
+
+		return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_HexType_ElementHasPoint1DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+					    MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	const int*	inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 1 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	mesh = self->mesh;
+	Mesh_GetIncidence( mesh, MT_EDGE, elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+
+	if( point[0] > *Mesh_GetVertex( mesh, inc[self->vertMap[0]] ) && 
+	    point[0] < *Mesh_GetVertex( mesh, inc[self->vertMap[1]] ) )
+	{
+		*dim = MT_EDGE;
+		*ind = elInd;
+		return True;
+	}
+
+	return False;
+}
+
+Bool Mesh_HexType_ElementHasPoint1DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+						  MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh*		mesh;
+	unsigned	nInc;
+	const int*	inc;
+
+	assert( self && Stg_CheckType( self, Mesh_HexType ) );
+	assert( Mesh_GetDimSize( self->mesh ) == 1 );
+	assert( elInd < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	assert( point );
+	assert( dim );
+	assert( ind );
+
+	mesh = self->mesh;
+	Mesh_GetIncidence( mesh, MT_EDGE, elInd, MT_VERTEX, self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = IArray_GetPtr( self->incArray );
+	assert( nInc == 2 );
+
+	if( point[0] > *Mesh_GetVertex( mesh, inc[self->vertMap[0]] ) && 
+	    point[0] < *Mesh_GetVertex( mesh, inc[self->vertMap[1]] ) )
+	{
+		*dim = MT_EDGE;
+		*ind = elInd;
+		return True;
+	}
+	else if( point[0] == *Mesh_GetVertex( mesh, inc[self->vertMap[0]] ) ) {
+		*dim = MT_VERTEX;
+		*ind = inc[0];
+		return True;
+	}
+	else if( point[0] == *Mesh_GetVertex( mesh, inc[self->vertMap[1]] ) ) {
+		*dim = MT_VERTEX;
+		*ind = inc[1];
+		return True;
+	}
+
+	return False;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_HexType.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_HexType.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,118 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_HexType.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_HexType_h__
+#define __Domain_Mesh_Mesh_HexType_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_HexType_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh_HexType							\
+		/* General info */						\
+		__Mesh_ElementType						\
+										\
+		/* Virtual info */						\
+										\
+		/* Mesh_HexType info */						\
+		unsigned				mapSize;		\
+		unsigned*				vertMap;		\
+		unsigned*				inc;			\
+		Mesh_ElementType_ElementHasPointFunc*	elementHasPoint;	\
+		unsigned**				triInds;		\
+		unsigned**				tetInds;		\
+		IArray*					incArray;
+
+	struct Mesh_HexType { __Mesh_HexType };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_HEXTYPE_DEFARGS		\
+		MESH_ELEMENTTYPE_DEFARGS
+
+	#define MESH_HEXTYPE_PASSARGS		\
+		MESH_ELEMENTTYPE_PASSARGS
+
+	Mesh_HexType* Mesh_HexType_New();
+	Mesh_HexType* _Mesh_HexType_New( MESH_HEXTYPE_DEFARGS );
+	void _Mesh_HexType_Init( Mesh_HexType* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_HexType_Delete( void* hexType );
+	void _Mesh_HexType_Print( void* hexType, Stream* stream );
+
+	void Mesh_HexType_Update( void* hexType );
+	Bool Mesh_HexType_ElementHasPoint( void* hexType, unsigned elInd, double* point, 
+					   MeshTopology_Dim* dim, unsigned* ind );
+	double Mesh_HexType_GetMinimumSeparation( void* hexType, unsigned elInd, double* perDim );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Mesh_HexType_SetVertexMap( void* hexType, unsigned* map );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	Bool Mesh_HexType_ElementHasPoint3DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+						    MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_HexType_ElementHasPoint3DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+							  MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_HexType_ElementHasPoint2DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+						    MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_HexType_ElementHasPoint2DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+							  MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_HexType_ElementHasPoint1DGeneral( Mesh_HexType* self, unsigned elInd, double* point, 
+						    MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_HexType_ElementHasPoint1DWithIncidence( Mesh_HexType* self, unsigned elInd, double* point, 
+							  MeshTopology_Dim* dim, unsigned* ind );
+	void Mesh_HexType_TetBarycenter( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc );
+	void Mesh_HexType_TriBarycenter( double** verts, unsigned* inc, unsigned* inds, double* point, double* bc );
+
+#endif /* __Domain_Mesh_Mesh_HexType_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_RegularAlgorithms.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_RegularAlgorithms.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,282 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Mesh_RegularAlgorithms.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include "Mesh.h"
+
+
+/* Textual name of this class */
+const Type Mesh_RegularAlgorithms_Type = "Mesh_RegularAlgorithms";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh_RegularAlgorithms* Mesh_RegularAlgorithms_New( Name name ) {
+	return _Mesh_RegularAlgorithms_New( sizeof(Mesh_RegularAlgorithms), 
+					    Mesh_RegularAlgorithms_Type, 
+					    _Mesh_RegularAlgorithms_Delete, 
+					    _Mesh_RegularAlgorithms_Print, 
+					    NULL, 
+					    (void* (*)(Name))_Mesh_RegularAlgorithms_New, 
+					    _Mesh_RegularAlgorithms_Construct, 
+					    _Mesh_RegularAlgorithms_Build, 
+					    _Mesh_RegularAlgorithms_Initialise, 
+					    _Mesh_RegularAlgorithms_Execute, 
+					    _Mesh_RegularAlgorithms_Destroy, 
+					    name, 
+					    NON_GLOBAL, 
+					    Mesh_RegularAlgorithms_SetMesh, 
+					    Mesh_RegularAlgorithms_Update, 
+					    _Mesh_Algorithms_NearestVertex, 
+					    _Mesh_Algorithms_Search, 
+					    Mesh_RegularAlgorithms_SearchElements, 
+					    _Mesh_Algorithms_GetMinimumSeparation, 
+					    _Mesh_Algorithms_GetLocalCoordRange, 
+					    _Mesh_Algorithms_GetDomainCoordRange, 
+					    _Mesh_Algorithms_GetGlobalCoordRange );
+}
+
+Mesh_RegularAlgorithms* _Mesh_RegularAlgorithms_New( MESH_REGULARALGORITHMS_DEFARGS ) {
+	Mesh_RegularAlgorithms* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Mesh_RegularAlgorithms) );
+	self = (Mesh_RegularAlgorithms*)_Mesh_Algorithms_New( MESH_ALGORITHMS_PASSARGS );
+
+	/* Virtual info */
+
+	/* Mesh_RegularAlgorithms info */
+	_Mesh_RegularAlgorithms_Init( self );
+
+	return self;
+}
+
+void _Mesh_RegularAlgorithms_Init( Mesh_RegularAlgorithms* self ) {
+	assert( self && Stg_CheckType( self, Mesh_RegularAlgorithms ) );
+
+	self->sep = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_RegularAlgorithms_Delete( void* algorithms ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+
+	Mesh_RegularAlgorithms_Destruct( self );
+
+	/* Delete the parent. */
+	_Mesh_Algorithms_Delete( self );
+}
+
+void _Mesh_RegularAlgorithms_Print( void* algorithms, Stream* stream ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	
+	/* Set the Journal for printing informations */
+	Stream* algorithmsStream;
+	algorithmsStream = Journal_Register( InfoStream_Type, "Mesh_RegularAlgorithmsStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Mesh_RegularAlgorithms (ptr): (%p)\n", self );
+	_Mesh_Algorithms_Print( self, stream );
+}
+
+void _Mesh_RegularAlgorithms_Construct( void* algorithms, Stg_ComponentFactory* cf, void* data ) {
+	_Mesh_Algorithms_Construct( algorithms, cf, data );
+}
+
+void _Mesh_RegularAlgorithms_Build( void* algorithms, void* data ) {
+}
+
+void _Mesh_RegularAlgorithms_Initialise( void* algorithms, void* data ) {
+}
+
+void _Mesh_RegularAlgorithms_Execute( void* algorithms, void* data ) {
+}
+
+void _Mesh_RegularAlgorithms_Destroy( void* algorithms, void* data ) {
+}
+
+void Mesh_RegularAlgorithms_SetMesh( void* algorithms, void* mesh ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+
+	assert( self && Stg_CheckType( self, Mesh_RegularAlgorithms ) );
+
+	Mesh_RegularAlgorithms_Destruct( self );
+	_Mesh_Algorithms_SetMesh( self, mesh );
+}
+
+void Mesh_RegularAlgorithms_Update( void* algorithms ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	unsigned		nDims;
+	double			minSep;
+
+	assert( self && Stg_CheckType( self, Mesh_RegularAlgorithms ) );
+	assert( self->mesh );
+
+	Mesh_RegularAlgorithms_Destruct( self );
+	_Mesh_Algorithms_Update( self );
+
+	nDims = Mesh_GetDimSize( self->mesh );
+	self->sep = AllocArray( double, nDims );
+	self->minCrd = AllocArray( double, nDims );
+	self->maxCrd = AllocArray( double, nDims );
+	Mesh_GetMinimumSeparation( self->mesh, &minSep, self->sep );
+	Mesh_GetGlobalCoordRange( self->mesh, self->minCrd, self->maxCrd );
+}
+
+Bool _Mesh_RegularAlgorithms_Search( void* algorithms, void* _mesh, double* point, 
+				     MeshTopology_Dim* dim, unsigned* ind )
+{
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	assert( self );
+	assert( mesh );
+	assert( dim );
+	assert( ind );
+
+	/* TODO */
+	abort();
+
+	return False;
+}
+
+Bool Mesh_RegularAlgorithms_SearchElements( void* algorithms, double* point, unsigned* elInd ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	Mesh*			mesh;
+	unsigned		nDims;
+	unsigned		inds[3];
+	Grid			*elGrid;
+	double			out, frac, integer;
+	unsigned		d_i;
+
+	assert( self );
+	assert( Mesh_GetDimSize( self->mesh ) <= 3 );
+	assert( elInd );
+
+	mesh = self->mesh;
+	nDims = Mesh_GetDimSize( mesh );
+	elGrid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+						ExtensionManager_GetHandle( mesh->info, "elementGrid" ) );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		if( Num_Approx( point[d_i] - self->maxCrd[d_i], 0.0 ) )
+			inds[d_i] = elGrid->sizes[d_i] - 1;
+		else if( point[d_i] < self->minCrd[d_i] || point[d_i] > self->maxCrd[d_i] )
+			return False;
+		else {
+			out = (point[d_i] - self->minCrd[d_i]) / self->sep[d_i];
+			frac = modf( out, &integer );
+			inds[d_i] = (unsigned)integer;
+			if( inds[d_i] > 0 && Num_Approx( frac, 0.0 ) )
+				inds[d_i]--;
+		}
+	}
+
+	*elInd = Grid_Project( elGrid, inds );
+	return Mesh_GlobalToDomain( mesh, nDims, *elInd, elInd );
+}
+
+double _Mesh_RegularAlgorithms_GetMinimumSeparation( void* algorithms, void* _mesh, double* perDim ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	/* TODO */
+	abort();
+
+	return 0.0;
+}
+
+void _Mesh_RegularAlgorithms_GetLocalCoordRange( void* algorithms, void* _mesh, double* min, double* max ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	assert( self );
+	assert( mesh );
+	assert( min );
+	assert( max );
+
+	/* TODO */
+	abort();
+}
+
+void _Mesh_RegularAlgorithms_GetDomainCoordRange( void* algorithms, void* _mesh, double* min, double* max ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	assert( self );
+	assert( mesh );
+	assert( min );
+	assert( max );
+
+	/* TODO */
+	abort();
+}
+
+void _Mesh_RegularAlgorithms_GetGlobalCoordRange( void* algorithms, void* _mesh, double* min, double* max ) {
+	Mesh_RegularAlgorithms*	self = (Mesh_RegularAlgorithms*)algorithms;
+	Mesh*			mesh = (Mesh*)_mesh;
+
+	assert( self );
+	assert( mesh );
+	assert( min );
+	assert( max );
+
+	/* TODO */
+	abort();
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Mesh_RegularAlgorithms_Destruct( Mesh_RegularAlgorithms* self ) {
+	assert( self && Stg_CheckType( self, Mesh_RegularAlgorithms ) );
+
+	KillArray( self->sep );
+	KillArray( self->minCrd );
+	KillArray( self->maxCrd );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_RegularAlgorithms.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_RegularAlgorithms.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Mesh_RegularAlgorithms.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Mesh_RegularAlgorithms_h__
+#define __Domain_Mesh_Mesh_RegularAlgorithms_h__
+
+	/** Textual name of this class */
+	extern const Type Mesh_RegularAlgorithms_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Mesh_RegularAlgorithms		\
+		/* General info */			\
+		__Mesh_Algorithms			\
+							\
+		/* Virtual info */			\
+							\
+		/* Mesh_RegularAlgorithms info */	\
+		double*		sep;			\
+		double*		minCrd;			\
+		double*		maxCrd;
+
+	struct Mesh_RegularAlgorithms { __Mesh_RegularAlgorithms };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESH_REGULARALGORITHMS_DEFARGS \
+		MESH_ALGORITHMS_DEFARGS
+
+	#define MESH_REGULARALGORITHMS_PASSARGS \
+		MESH_ALGORITHMS_PASSARGS
+
+	Mesh_RegularAlgorithms* Mesh_RegularAlgorithms_New( Name name );
+	Mesh_RegularAlgorithms* _Mesh_RegularAlgorithms_New( MESH_REGULARALGORITHMS_DEFARGS );
+	void _Mesh_RegularAlgorithms_Init( Mesh_RegularAlgorithms* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Mesh_RegularAlgorithms_Delete( void* algorithms );
+	void _Mesh_RegularAlgorithms_Print( void* algorithms, Stream* stream );
+	void _Mesh_RegularAlgorithms_Construct( void* algorithms, Stg_ComponentFactory* cf, void* data );
+	void _Mesh_RegularAlgorithms_Build( void* algorithms, void* data );
+	void _Mesh_RegularAlgorithms_Initialise( void* algorithms, void* data );
+	void _Mesh_RegularAlgorithms_Execute( void* algorithms, void* data );
+	void _Mesh_RegularAlgorithms_Destroy( void* algorithms, void* data );
+
+	void Mesh_RegularAlgorithms_SetMesh( void* algorithms, void* mesh );
+	void Mesh_RegularAlgorithms_Update( void* algorithms );
+	Bool Mesh_RegularAlgorithms_Search( void* algorithms, void* mesh, double* point, 
+					    MeshTopology_Dim* dim, unsigned* ind );
+	Bool Mesh_RegularAlgorithms_SearchElements( void* algorithms, double* point, unsigned* elInd );
+	double Mesh_RegularAlgorithms_GetMinimumSeparation( void* algorithms, void* mesh, double* perDim );
+	void Mesh_RegularAlgorithms_GetLocalCoordRange( void* algorithms, void* mesh, double* min, double* max );
+	void Mesh_RegularAlgorithms_GetDomainCoordRange( void* algorithms, void* mesh, double* min, double* max );
+	void Mesh_RegularAlgorithms_GetGlobalCoordRange( void* algorithms, void* mesh, double* min, double* max );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Mesh_RegularAlgorithms_Destruct( Mesh_RegularAlgorithms* self );
+
+#endif /* __Domain_Mesh_Mesh_RegularAlgorithms_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Mesh_RegularAlgorithms.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Mesh_RegularAlgorithms.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Mesh_RegularAlgorithms</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/SurfaceAdaptor.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/SurfaceAdaptor.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,302 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SurfaceAdaptor.c 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "MeshTopology.h"
+#include "IGraph.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "MeshAdaptor.h"
+#include "SurfaceAdaptor.h"
+
+
+typedef double (SurfaceAdaptor_DeformFunc)( SurfaceAdaptor* self, Mesh* mesh, 
+					    unsigned* globalSize, unsigned vertex, unsigned* vertexInds );
+
+
+/* Textual name of this class */
+const Type SurfaceAdaptor_Type = "SurfaceAdaptor";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+SurfaceAdaptor* SurfaceAdaptor_New( Name name ) {
+	return _SurfaceAdaptor_New( sizeof(SurfaceAdaptor), 
+				    SurfaceAdaptor_Type, 
+				    _SurfaceAdaptor_Delete, 
+				    _SurfaceAdaptor_Print, 
+				    NULL, 
+				    (void* (*)(Name))_SurfaceAdaptor_New, 
+				    _SurfaceAdaptor_Construct, 
+				    _SurfaceAdaptor_Build, 
+				    _SurfaceAdaptor_Initialise, 
+				    _SurfaceAdaptor_Execute, 
+				    _SurfaceAdaptor_Destroy, 
+				    name, 
+				    NON_GLOBAL, 
+				    _MeshGenerator_SetDimSize, 
+				    SurfaceAdaptor_Generate );
+}
+
+SurfaceAdaptor* _SurfaceAdaptor_New( SURFACEADAPTOR_DEFARGS ) {
+	SurfaceAdaptor* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(SurfaceAdaptor) );
+	self = (SurfaceAdaptor*)_MeshGenerator_New( MESHADAPTOR_PASSARGS );
+
+	/* Virtual info */
+
+	/* SurfaceAdaptor info */
+	_SurfaceAdaptor_Init( self );
+
+	return self;
+}
+
+void _SurfaceAdaptor_Init( SurfaceAdaptor* self ) {
+	self->surfaceType = SurfaceAdaptor_SurfaceType_Invalid;
+	memset( &self->info, 0, sizeof(SurfaceAdaptor_SurfaceInfo) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _SurfaceAdaptor_Delete( void* adaptor ) {
+	SurfaceAdaptor*	self = (SurfaceAdaptor*)adaptor;
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _SurfaceAdaptor_Print( void* adaptor, Stream* stream ) {
+	SurfaceAdaptor*	self = (SurfaceAdaptor*)adaptor;
+	
+	/* Set the Journal for printing informations */
+	Stream* adaptorStream;
+	adaptorStream = Journal_Register( InfoStream_Type, "SurfaceAdaptorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "SurfaceAdaptor (ptr): (%p)\n", self );
+	_MeshGenerator_Print( self, stream );
+}
+
+void _SurfaceAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data ) {
+	SurfaceAdaptor*	self = (SurfaceAdaptor*)adaptor;
+	Dictionary*	dict;
+	char*		surfaceType;
+
+	assert( self );
+	assert( cf );
+
+	/* Call parent construct. */
+	_MeshAdaptor_Construct( self, cf, data );
+
+	/* Rip out the components structure as a dictionary. */
+	dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+
+	/* What kind of surface do we want? */
+	surfaceType = Stg_ComponentFactory_GetString( cf, self->name, "surfaceType", "" );
+	if( !strcmp( surfaceType, "wedge" ) ) {
+		self->surfaceType = SurfaceAdaptor_SurfaceType_Wedge;
+		self->info.wedge.offs = Stg_ComponentFactory_GetDouble( cf, self->name, "offset", 0.0 );
+		self->info.wedge.grad = Stg_ComponentFactory_GetDouble( cf, self->name, "gradient", 0.5 );
+	}
+	else if( !strcmp( surfaceType, "sine" ) || !strcmp( surfaceType, "cosine" ) ) {
+		Dictionary_Entry_Value*	originList;
+
+		if( !strcmp( surfaceType, "sine" ) )
+			self->surfaceType = SurfaceAdaptor_SurfaceType_Sine;
+		else
+			self->surfaceType = SurfaceAdaptor_SurfaceType_Cosine;
+
+		originList = Dictionary_Get( dict, "origin" );
+		if( originList ) {
+			unsigned	nDims;
+			unsigned	d_i;
+
+			nDims = Dictionary_Entry_Value_GetCount( originList );
+			for( d_i = 0; d_i < nDims; d_i++ ) {
+				Dictionary_Entry_Value*	val;
+
+				val = Dictionary_Entry_Value_GetElement( originList, d_i );
+				self->info.trig.origin[d_i] = Dictionary_Entry_Value_AsDouble( val );
+			}
+		}
+		else
+			memset( self->info.trig.origin, 0, sizeof(double) * 2 );
+
+		self->info.trig.amp = Stg_ComponentFactory_GetDouble( cf, self->name, "amplitude", 1.0 );
+		self->info.trig.freq = Stg_ComponentFactory_GetDouble( cf, self->name, "frequency", 1.0 );
+	}
+	else
+		_SurfaceAdaptor_Init( self );
+}
+
+void _SurfaceAdaptor_Build( void* adaptor, void* data ) {
+	_MeshAdaptor_Build( adaptor, data );
+}
+
+void _SurfaceAdaptor_Initialise( void* adaptor, void* data ) {
+	_MeshAdaptor_Initialise( adaptor, data );
+}
+
+void _SurfaceAdaptor_Execute( void* adaptor, void* data ) {
+}
+
+void _SurfaceAdaptor_Destroy( void* adaptor, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void SurfaceAdaptor_Generate( void* adaptor, void* _mesh ) {
+	SurfaceAdaptor*			self = (SurfaceAdaptor*)adaptor;
+	Mesh*				mesh = (Mesh*)_mesh;
+	const Sync*			sync;
+	SurfaceAdaptor_DeformFunc*	deformFunc;
+	Grid				*grid;
+	unsigned*			inds;
+	unsigned			n_i;
+
+	/* Build base mesh, which is assumed to be cartesian. */
+	MeshGenerator_Generate( self->generator, mesh );
+
+	/* If we're not 2D or 3D, forget about it. */
+	if( mesh->topo->nDims != 2 && mesh->topo->nDims != 3 )
+		return;
+
+	/* What kind of surface do we want? */
+	switch( self->surfaceType ) {
+	case SurfaceAdaptor_SurfaceType_Wedge:
+		deformFunc = SurfaceAdaptor_Wedge;
+		break;
+	case SurfaceAdaptor_SurfaceType_Sine:
+		deformFunc = SurfaceAdaptor_Sine;
+		break;
+	case SurfaceAdaptor_SurfaceType_Cosine:
+		deformFunc = SurfaceAdaptor_Cosine;
+		break;
+	default:
+		break;
+	};
+
+	/* Extract the cartesian information. */
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+	inds = AllocArray( unsigned, Mesh_GetDimSize( mesh ) );
+
+	/* Loop over domain nodes. */
+	sync = IGraph_GetDomain( mesh->topo, MT_VERTEX );
+	for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
+		unsigned	gNode;
+		double		height;
+
+		gNode = Sync_DomainToGlobal( sync, n_i );
+		Grid_Lift( grid, gNode, inds );
+
+		/* Calculate a height percentage. */
+		height = (double)inds[1] / (double)(grid->sizes[1] - 1);
+
+		/* Deform this node. */
+		mesh->verts[n_i][1] += height * deformFunc( self, mesh, grid->sizes, n_i, inds );
+	}
+
+	/* Free resources. */
+	FreeArray( inds );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+double SurfaceAdaptor_Wedge( SurfaceAdaptor* self, Mesh* mesh, 
+			     unsigned* globalSize, unsigned vertex, unsigned* vertexInds )
+{
+	if( mesh->verts[vertex][0] >= self->info.wedge.offs )
+		return (mesh->verts[vertex][0] - self->info.wedge.offs) * self->info.wedge.grad;
+	else
+		return 0.0;
+}
+
+double SurfaceAdaptor_Sine( SurfaceAdaptor* self, Mesh* mesh, 
+			    unsigned* globalSize, unsigned vertex, unsigned* vertexInds )
+{
+	double	dx, dy;
+	double	rad;
+
+	dx = mesh->verts[vertex][0] - self->info.trig.origin[0];
+	rad = dx * dx;
+	if( mesh->topo->nDims == 3 ) {
+		dy = mesh->verts[vertex][1] - self->info.trig.origin[1];
+		rad += dy * dy;
+	}
+	rad = sqrt( rad );
+
+	return self->info.trig.amp * sin( self->info.trig.freq * rad );
+}
+
+double SurfaceAdaptor_Cosine( SurfaceAdaptor* self, Mesh* mesh, 
+			      unsigned* globalSize, unsigned vertex, unsigned* vertexInds )
+{
+	double	dx, dy;
+	double	rad;
+
+	dx = mesh->verts[vertex][0] - self->info.trig.origin[0];
+	rad = dx * dx;
+	if( mesh->topo->nDims == 3 ) {
+		dy = mesh->verts[vertex][1] - self->info.trig.origin[1];
+		rad += dy * dy;
+	}
+	rad = sqrt( rad );
+
+	return self->info.trig.amp * cos( self->info.trig.freq * rad );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/SurfaceAdaptor.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/SurfaceAdaptor.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,128 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: SurfaceAdaptor.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_SurfaceAdaptor_h__
+#define __Domain_Mesh_SurfaceAdaptor_h__
+
+	/** Textual name of this class */
+	extern const Type SurfaceAdaptor_Type;
+
+	/** Virtual function types */
+
+	/** SurfaceAdaptor class contents */
+	typedef enum {
+		SurfaceAdaptor_SurfaceType_Wedge, 
+		SurfaceAdaptor_SurfaceType_Sine, 
+		SurfaceAdaptor_SurfaceType_Cosine, 
+		SurfaceAdaptor_SurfaceType_Invalid
+	} SurfaceAdaptor_SurfaceType;
+
+	typedef struct {
+		double	offs;
+		double	grad;
+	} SurfaceAdaptor_WedgeInfo;
+
+	typedef struct {
+		double	origin[2];
+		double	amp;
+		double	freq;
+	} SurfaceAdaptor_TrigInfo;
+
+	typedef union {
+		SurfaceAdaptor_WedgeInfo	wedge;
+		SurfaceAdaptor_TrigInfo		trig;
+	} SurfaceAdaptor_SurfaceInfo;
+
+	#define __SurfaceAdaptor				\
+		/* General info */				\
+		__MeshAdaptor					\
+								\
+		/* Virtual info */				\
+								\
+		/* SurfaceAdaptor info */			\
+		SurfaceAdaptor_SurfaceType	surfaceType;	\
+		SurfaceAdaptor_SurfaceInfo	info;
+
+	struct SurfaceAdaptor { __SurfaceAdaptor };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define SURFACEADAPTOR_DEFARGS	\
+		MESHADAPTOR_DEFARGS
+
+	#define SURFACEADAPTOR_PASSARGS	\
+		MESHADAPTOR_PASSARGS
+
+	SurfaceAdaptor* SurfaceAdaptor_New( Name name );
+	SurfaceAdaptor* _SurfaceAdaptor_New( SURFACEADAPTOR_DEFARGS );
+	void _SurfaceAdaptor_Init( SurfaceAdaptor* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _SurfaceAdaptor_Delete( void* adaptor );
+	void _SurfaceAdaptor_Print( void* adaptor, Stream* stream );
+	void _SurfaceAdaptor_Construct( void* adaptor, Stg_ComponentFactory* cf, void* data );
+	void _SurfaceAdaptor_Build( void* adaptor, void* data );
+	void _SurfaceAdaptor_Initialise( void* adaptor, void* data );
+	void _SurfaceAdaptor_Execute( void* adaptor, void* data );
+	void _SurfaceAdaptor_Destroy( void* adaptor, void* data );
+
+	void SurfaceAdaptor_Generate( void* adaptor, void* _mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	double SurfaceAdaptor_Wedge( SurfaceAdaptor* self, Mesh* mesh, 
+				     unsigned* globalSize, unsigned vertex, unsigned* vertexInds );
+	double SurfaceAdaptor_Sine( SurfaceAdaptor* self, Mesh* mesh, 
+				    unsigned* globalSize, unsigned vertex, unsigned* vertexInds );
+	double SurfaceAdaptor_Cosine( SurfaceAdaptor* self, Mesh* mesh, 
+				      unsigned* globalSize, unsigned vertex, unsigned* vertexInds );
+
+#endif /* __Domain_Mesh_SurfaceAdaptor_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/SurfaceAdaptor.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/SurfaceAdaptor.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SurfaceAdaptor</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Mesh/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Sync.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Sync.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,628 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Sync.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "StGermain/StGermain.h"
+#include "types.h"
+#include "Decomp.h"
+#include "Sync.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void Sync_UpdateTables( Sync* self );
+void Sync_UpdateShared( Sync* self );
+void Sync_UpdateOwners( Sync* self );
+void Sync_ClearTables( Sync* self );
+void Sync_ClearShared( Sync* self );
+void Sync_ClearOwners( Sync* self );
+
+
+void _Sync_Init( void* _self ) {
+   Sync* self = (Sync*)_self;
+
+   _NewClass_Init( self );
+   self->decomp = NULL;
+   self->comm = NULL;
+   self->nDomains = 0;
+   self->remotes = &self->remotesObj;
+   IArray_Construct( self->remotes );
+   self->owners = NULL;
+   self->nShared = 0;
+   self->shared = NULL;
+   self->nSharers = NULL;
+   self->sharers = NULL;
+   self->gr = &self->grObj;
+   IMap_Construct( self->gr );
+   self->ls = &self->lsObj;
+   IMap_Construct( self->ls );
+   self->nSrcs = NULL;
+   self->srcs = NULL;
+   self->nSnks = NULL;
+   self->snks = NULL;
+}
+
+void _Sync_Destruct( void* _self ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_Clear( self );
+   IArray_Destruct( self->remotes );
+   IMap_Destruct( self->gr );
+   IMap_Destruct( self->ls );
+   _NewClass_Destruct( self );
+}
+
+void _Sync_Copy( void* _self, const void* op ) {
+   /*Sync* self = (Sync*)_self;*/
+
+   /* TODO: Method body goes here */
+   assert( 0 );
+}
+
+SizeT _Sync_CalcMem( const void* _self, PtrMap* ptrs ) {
+   const Sync* self = (const Sync*)_self;
+   SizeT mem;
+
+   if( PtrMap_Find( ptrs, (void*)self ) )
+      return 0;
+   mem = _NewClass_CalcMem( self, ptrs );
+   if( self->decomp )
+      mem += NewClass_CalcMem( self->decomp, ptrs );
+   mem += NewClass_CalcMem( self->remotes, ptrs );
+   mem += NewClass_CalcMem( self->gr, ptrs );
+   mem += NewClass_CalcMem( self->ls, ptrs );
+   return mem;
+}
+
+void Sync_SetDecomp( void* _self, const Decomp* decomp ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearDecomp( self );
+   self->decomp = (Decomp*)decomp;
+   if( self->decomp ) {
+      NewClass_AddRef( self->decomp );
+      self->nDomains = Decomp_GetNumLocals( self->decomp );
+      Sync_UpdateTables( self );
+      Sync_UpdateShared( self );
+      Sync_UpdateOwners( self );
+   }
+}
+
+void Sync_FindRemotes( void* _self, int nRemotes, const int* remotes ) {
+   Sync *self = Class_Cast( _self, Sync );
+   int *owners;
+   ISet nbrSetObj, *nbrSet = &nbrSetObj;
+   Comm* comm;
+   int nNbrs, *nbrs;
+   int nRanks;
+   Bool *sendFlags, *recvFlags;
+   MPI_Comm mpiComm;
+   int r_i;
+
+   assert( !nRemotes || remotes );
+
+   mpiComm = Decomp_GetMPIComm( self->decomp );
+   insist( MPI_Comm_size( mpiComm, &nRanks ), == MPI_SUCCESS );
+
+   owners = Class_Array( self, int, nRemotes );
+   Decomp_FindOwners( self->decomp, nRemotes, remotes, owners );
+   ISet_Construct( nbrSet );
+   ISet_SetMaxSize( nbrSet, nRemotes );
+   for( r_i = 0; r_i < nRemotes; r_i++ )
+      ISet_TryInsert( nbrSet, owners[r_i] );
+   Class_Free( self, owners );
+
+   sendFlags = Class_Array( self, Bool, nRanks );
+   recvFlags = Class_Array( self, Bool, nRanks );
+   for( r_i = 0; r_i < nRanks; r_i++ )
+      sendFlags[r_i] = ISet_Has( nbrSet, r_i );
+   insist( MPI_Alltoall( sendFlags, 1, MPI_INT, 
+			 recvFlags, 1, MPI_INT, 
+			 mpiComm ), == MPI_SUCCESS );
+   Class_Free( self, sendFlags );
+   for( r_i = 0; r_i < nRanks; r_i++ ) {
+      if( recvFlags[r_i] )
+	 ISet_TryInsert( nbrSet, r_i );
+   }
+   Class_Free( self, recvFlags );
+
+   nNbrs = ISet_GetSize( nbrSet );
+   nbrs = Class_Array( self, int, nNbrs );
+   ISet_GetArray( nbrSet, nbrs );
+   ISet_Destruct( nbrSet );
+
+   comm = Comm_New();
+   Comm_SetMPIComm( comm, Decomp_GetMPIComm( self->decomp ) );
+   Comm_SetNeighbours( comm, nNbrs, nbrs );
+   Class_Free( self, nbrs );
+   Sync_SetComm( self, comm );
+
+   Sync_SetRemotes( self, nRemotes, remotes );
+}
+
+void Sync_SetComm( void* _self, const Comm* comm ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearComm( self );
+   self->comm = (Comm*)comm;
+   if( self->comm ) {
+      NewClass_AddRef( self->comm );
+      Sync_UpdateTables( self );
+      Sync_UpdateShared( self );
+      Sync_UpdateOwners( self );
+   }
+}
+
+void Sync_SetRemotes( void* _self, int nRemotes, const int* remotes ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearRemotes( self );
+   Sync_AddRemotes( self, nRemotes, remotes );
+}
+
+void Sync_AddRemotes( void* _self, int nRemotes, const int* remotes ) {
+   Sync* self = (Sync*)_self;
+   int nOldRems;
+   int r_i;
+
+   assert( self && self->decomp && self->comm );
+   nOldRems = IArray_GetSize( self->remotes );
+   IMap_SetMaxSize( self->gr, IArray_GetSize( self->remotes ) + nRemotes );
+   IArray_Add( self->remotes, nRemotes, remotes );
+   for( r_i = 0; r_i < nRemotes; r_i++ )
+      IMap_Insert( self->gr, remotes[r_i], nOldRems + r_i );
+   Sync_UpdateTables( self );
+   Sync_UpdateShared( self );
+   Sync_UpdateOwners( self );
+   self->nDomains += nRemotes;
+}
+
+void Sync_RemoveRemotes( void* _self, int nRemotes, const int* remotes, IMap* map ) {
+   Sync* self = (Sync*)_self;
+
+   assert( self && self->decomp && self->comm );
+   IArray_Remove( self->remotes, nRemotes, remotes, map );
+   Sync_UpdateTables( self );
+   Sync_UpdateShared( self );
+   Sync_UpdateOwners( self );
+   self->nDomains -= nRemotes;
+}
+
+void Sync_Clear( void* _self ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearRemotes( self );
+   NewClass_RemoveRef( self->decomp );
+   self->decomp = NULL;
+   NewClass_RemoveRef( self->comm );
+   self->comm = NULL;
+   self->nDomains = 0;
+}
+
+void Sync_ClearDecomp( void* _self ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearRemotes( self );
+   NewClass_RemoveRef( self->decomp );
+   self->decomp = NULL;
+   self->nDomains = 0;
+}
+
+void Sync_ClearComm( void* _self ) {
+   Sync* self = (Sync*)_self;
+
+   Sync_ClearRemotes( self );
+   NewClass_RemoveRef( self->comm );
+   self->comm = NULL;
+   if( self->decomp )
+      self->nDomains = Decomp_GetNumLocals( self->decomp );
+   else
+      self->nDomains = 0;
+}
+
+void Sync_ClearRemotes( void* _self ) {
+   Sync* self = (Sync*)_self;
+   int s_i;
+
+   Sync_ClearTables( self );
+   IArray_Clear( self->remotes );
+   for( s_i = 0; s_i < self->nShared; s_i++ )
+      Class_Free( self, self->sharers[s_i] );
+   Class_Free( self, self->shared );
+   Class_Free( self, self->nSharers );
+   Class_Free( self, self->sharers );
+   Class_Free( self, self->owners );
+   IMap_Clear( self->gr );
+   IMap_Clear( self->ls );
+   if( self->decomp )
+      self->nDomains = Decomp_GetNumLocals( self->decomp );
+   else
+      self->nDomains = 0;
+   self->nShared = 0;
+   self->shared = NULL;
+   self->nSharers = NULL;
+   self->sharers = NULL;
+   self->owners = NULL;
+}
+
+const Decomp* Sync_GetDecomp( const void* self ) {
+   assert( self );
+   return ((Sync*)self)->decomp;
+}
+
+const Comm* Sync_GetComm( const void* self ) {
+   assert( self );
+   return ((Sync*)self)->comm;
+}
+
+int Sync_GetNumRemotes( const void* self ) {
+   assert( self );
+   return IArray_GetSize( ((Sync*)self)->remotes );
+}
+
+int Sync_GetNumDomains( const void* self ) {
+   assert( self );
+   return ((Sync*)self)->nDomains;
+}
+
+int Sync_GetNumShared( const void* self ) {
+   assert( self );
+   return ((Sync*)self)->nShared;
+}
+
+int Sync_GetNumSharers( const void* self, int shared ) {
+   assert( self && shared < ((Sync*)self)->nShared );
+   assert( ((Sync*)self)->nSharers );
+   return ((Sync*)self)->nSharers[shared];
+}
+
+void Sync_GetRemotes( const void* self, int* nRemotes, const int** remotes ) {
+   assert( self );
+   *nRemotes = IArray_GetSize( ((Sync*)self)->remotes );
+   *remotes = IArray_GetPtr( ((Sync*)self)->remotes );
+}
+
+int Sync_GetOwner( const void* self, int remote ) {
+   assert( self && remote < IArray_GetSize( ((Sync*)self)->remotes ) );
+   assert( ((Sync*)self)->owners );
+   return ((Sync*)self)->owners[remote];
+}
+
+void Sync_GetShared( const void* self, int* nShared, const int** shared ) {
+   assert( self );
+   assert( !((Sync*)self)->nShared || shared );
+   if( nShared )
+      *nShared = ((Sync*)self)->nShared;
+   *shared = ((Sync*)self)->shared;
+}
+
+void Sync_GetSharers( const void* self, int shared, int* nSharers, const int** sharers ) {
+   assert( self && shared < ((Sync*)self)->nShared );
+   assert( ((Sync*)self)->nSharers && sharers );
+   if( nSharers )
+      *nSharers = ((Sync*)self)->nSharers[shared];
+   *sharers = ((Sync*)self)->sharers[shared];
+}
+
+int Sync_RemoteToGlobal( const void* self, int remote ) {
+   assert( self && remote < IArray_GetSize( ((Sync*)self)->remotes ) );
+   return IArray_GetPtr( ((Sync*)self)->remotes )[remote];
+}
+
+int Sync_GlobalToRemote( const void* self, int global ) {
+   assert( self && global < Decomp_GetNumGlobals( ((Sync*)self)->decomp ) );
+   return IMap_Map( ((Sync*)self)->gr, global );
+}
+
+Bool Sync_TryGlobalToRemote( const void* self, int global, int* remote ) {
+   assert( self && remote );
+   assert( global < Decomp_GetNumGlobals( ((Sync*)self)->decomp ) );
+   return IMap_TryMap( ((Sync*)self)->gr, global, remote );
+}
+
+int Sync_DomainToGlobal( const void* self, int domain ) {
+   assert( self );
+   assert( domain < Decomp_GetNumLocals( ((Sync*)self)->decomp ) + 
+	   IArray_GetSize( ((Sync*)self)->remotes ) );
+   if( domain < Decomp_GetNumLocals( ((Sync*)self)->decomp ) )
+      return Decomp_LocalToGlobal( ((Sync*)self)->decomp, domain );
+   else {
+      return IArray_GetPtr( ((Sync*)self)->remotes )
+	 [domain - Decomp_GetNumLocals( ((Sync*)self)->decomp )];
+   }
+}
+
+int Sync_GlobalToDomain( const void* self, int global ) {
+  int domain;
+
+   assert( self );
+   assert( global < Decomp_GetNumGlobals( ((Sync*)self)->decomp ) );
+   if( !Decomp_TryGlobalToLocal( ((Sync*)self)->decomp, global, &domain ) ) {
+      if( !IMap_Has( ((Sync*)self)->gr, global ) )
+	 abort();
+      return IMap_Map( ((Sync*)self)->gr, global ) + 
+	 Decomp_GetNumLocals( ((Sync*)self)->decomp );
+   }
+   else
+      return domain;
+}
+
+Bool Sync_TryGlobalToDomain( const void* self, int global, int* domain ) {
+   assert( self && domain );
+   assert( global < Decomp_GetNumGlobals( ((Sync*)self)->decomp ) );
+   if( !Decomp_TryGlobalToLocal( ((Sync*)self)->decomp, global, domain ) ) {
+      if( IMap_TryMap( ((Sync*)self)->gr, global, domain ) ) {
+	 *domain += Decomp_GetNumLocals( ((Sync*)self)->decomp );
+	 return True;
+      }
+      else
+	 return False;
+   }
+   else
+      return True;
+}
+
+int Sync_SharedToLocal( const void* self, int shared ) {
+   assert( self && shared < ((Sync*)self)->nShared );
+   return ((Sync*)self)->shared[shared];
+}
+
+int Sync_LocalToShared( const void* self, int local ) {
+   assert( self && local < Decomp_GetNumLocals( ((Sync*)self)->decomp ) );
+   return IMap_Map( ((Sync*)self)->ls, local );
+}
+
+Bool Sync_TryLocalToShared( const void* self, int local, int* shared ) {
+   assert( self && local < Decomp_GetNumLocals( ((Sync*)self)->decomp ) );
+   assert( shared );
+   return IMap_TryMap( ((Sync*)self)->ls, local, shared );
+}
+
+void Sync_SyncArray( const void* _self, 
+		     const void* local, size_t localStride, 
+		     const void* remote, size_t remoteStride, 
+		     size_t itmSize )
+{
+   Sync* self = (Sync*)_self;
+   int nNbrs;
+   int* nSrcs;
+   stgByte **srcs, **snks;
+   int n_i, s_i;
+
+   assert( self );
+   nNbrs = Comm_GetNumNeighbours( self->comm );
+   snks = Class_Array( self, stgByte*, nNbrs );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      snks[n_i] = Class_Array( self, stgByte, self->nSnks[n_i] * itmSize );
+      for( s_i = 0; s_i < self->nSnks[n_i]; s_i++ ) {
+	 memcpy( snks[n_i] + s_i * itmSize, 
+		 (stgByte*)local + self->snks[n_i][s_i] * localStride, 
+		 itmSize );
+      }
+   }
+
+   nSrcs = Class_Array( self, int, nNbrs );
+   Comm_AlltoallInit( self->comm, self->nSnks, nSrcs, itmSize );
+   srcs = Class_Array( self, stgByte*, nNbrs );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      srcs[n_i] = Class_Array( self, stgByte, nSrcs[n_i] * itmSize );
+   Comm_AlltoallBegin( self->comm, (const void**)snks, (void**)srcs );
+   Comm_AlltoallEnd( self->comm );
+   Class_Free( self, nSrcs );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      Class_Free( self, snks[n_i] );
+   Class_Free( self, snks );
+
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSrcs[n_i]; s_i++ ) {
+	 memcpy( (stgByte*)remote + self->srcs[n_i][s_i] * remoteStride, 
+		 srcs[n_i] + s_i * itmSize, 
+		 itmSize );
+      }
+      Class_Free( self, srcs[n_i] );
+   }
+   Class_Free( self, srcs );
+}
+
+void Sync_UpdateTables( Sync* self ) {
+   int nNbrs;
+   ISet theirRemsObj, *theirRems = &theirRemsObj;
+   ISet myLocsObj, *myLocs = &myLocsObj;
+   int nLocals, nRems;
+   const int *locals, *rems;
+   int* nAllRems, **allRems;
+   int* nFnds, **fnds;
+   int n_i, s_i;
+
+   Sync_ClearTables( self );
+   if( !self->comm || !self->decomp )
+      return;
+
+   nNbrs = Comm_GetNumNeighbours( self->comm );
+   ISet_Construct( theirRems );
+   ISet_Construct( myLocs );
+   Decomp_GetLocals( self->decomp, &nLocals, &locals );
+   ISet_UseArray( myLocs, nLocals, locals );
+   nRems = IArray_GetSize( self->remotes );
+   rems = IArray_GetPtr( self->remotes );
+
+   nAllRems = Class_Array( self, int, nNbrs );
+   allRems = Class_Array( self, int*, nNbrs );
+   Comm_AllgatherInit( self->comm, nRems, nAllRems, sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      allRems[n_i] = Class_Array( self, int, nAllRems[n_i] );
+   Comm_AllgatherBegin( self->comm, rems, (void**)allRems );
+   Comm_AllgatherEnd( self->comm );
+
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      ISet_UseArray( theirRems, nAllRems[n_i], allRems[n_i] );
+      ISet_Isect( theirRems, myLocs );
+      nAllRems[n_i] = ISet_GetSize( theirRems );
+      allRems[n_i] = Class_Rearray( self, allRems[n_i], int, nAllRems[n_i] );
+      ISet_GetArray( theirRems, allRems[n_i] );
+   }
+   ISet_Destruct( theirRems );
+   ISet_Destruct( myLocs );
+
+   nFnds = Class_Array( self, int, nNbrs );
+   fnds = Class_Array( self, int*, nNbrs );
+   Comm_AlltoallInit( self->comm, nAllRems, nFnds, sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ )
+      fnds[n_i] = Class_Array( self, int, nFnds[n_i] );
+   Comm_AlltoallBegin( self->comm, (const void**)allRems, (void**)fnds );
+   Comm_AlltoallEnd( self->comm );
+
+   self->nSrcs = nFnds;
+   self->srcs = fnds;
+   self->nSnks = nAllRems;
+   self->snks = allRems;
+
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSrcs[n_i]; s_i++ ) {
+	 self->srcs[n_i][s_i] = Sync_GlobalToRemote( self, 
+						     self->srcs[n_i][s_i] ); 
+      }
+      for( s_i = 0; s_i < self->nSnks[n_i]; s_i++ ) {
+	 self->snks[n_i][s_i] = Decomp_GlobalToLocal( self->decomp, 
+						      self->snks[n_i][s_i] );
+      }
+   }
+}
+
+void Sync_UpdateShared( Sync* self ) {
+   ISet sharedSetObj, *sharedSet = &sharedSetObj;
+   int shared, nNbrs;
+   int n_i, s_i;
+
+   assert( self );
+   Sync_ClearShared( self );
+   if( !self->comm || !self->decomp )
+      return;
+
+   nNbrs = Comm_GetNumNeighbours( self->comm );
+   ISet_Construct( sharedSet );
+   ISet_SetMaxSize( sharedSet, Decomp_GetNumLocals( self->decomp ) );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSnks[n_i]; s_i++ )
+	 ISet_TryInsert( sharedSet, self->snks[n_i][s_i] );
+   }
+   self->nShared = ISet_GetSize( sharedSet );
+   self->shared = Class_Rearray( self, self->shared, int, self->nShared );
+   ISet_GetArray( sharedSet, self->shared );
+   ISet_Destruct( sharedSet );
+
+   IMap_Clear( self->ls );
+   IMap_SetMaxSize( self->ls, self->nShared );
+   for( s_i = 0; s_i < self->nShared; s_i++ )
+      IMap_Insert( self->ls, self->shared[s_i], s_i );
+
+   self->nSharers = Class_Rearray( self, self->nSharers, int, self->nShared );
+   memset( self->nSharers, 0, self->nShared * sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSnks[n_i]; s_i++ ) {
+	 shared = IMap_Map( self->ls, self->snks[n_i][s_i] );
+	 self->nSharers[shared]++;
+      }
+   }
+   self->sharers = Class_Rearray( self, self->sharers, int*, self->nShared );
+   for( s_i = 0; s_i < self->nShared; s_i++ )
+      self->sharers[s_i] = Class_Array( self, int, self->nSharers[s_i] );
+   memset( self->nSharers, 0, self->nShared * sizeof(int) );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSnks[n_i]; s_i++ ) {
+	 shared = IMap_Map( self->ls, self->snks[n_i][s_i] );
+	 self->sharers[shared][self->nSharers[shared]++] = n_i;
+      }
+   }
+}
+
+void Sync_UpdateOwners( Sync* self ) {
+   int nRemotes, nNbrs;
+   int n_i, s_i;
+
+   assert( self );
+   Sync_ClearOwners( self );
+   if( !self->comm || !self->decomp )
+      return;
+
+   nNbrs = Comm_GetNumNeighbours( self->comm );
+   nRemotes = IArray_GetSize( self->remotes );
+   self->owners = Class_Rearray( self, self->owners, int, nRemotes );
+   for( n_i = 0; n_i < nNbrs; n_i++ ) {
+      for( s_i = 0; s_i < self->nSrcs[n_i]; s_i++ )
+	 self->owners[self->srcs[n_i][s_i]] = n_i;
+   }
+}
+
+void Sync_ClearTables( Sync* self ) {
+   int n_i;
+
+   assert( self );
+   if( self->decomp ) {
+      if( self->comm ) {
+	 for( n_i = 0; n_i < Comm_GetNumNeighbours( self->comm ); n_i++ ) {
+	    if( self->srcs )
+	       Class_Free( self, self->srcs[n_i] );
+	    if( self->snks )
+	       Class_Free( self, self->snks[n_i] );
+	 }
+      }
+   }
+   Class_Free( self, self->nSrcs );
+   Class_Free( self, self->srcs );
+   Class_Free( self, self->nSnks );
+   Class_Free( self, self->snks );
+   self->nSrcs = NULL;
+   self->srcs = NULL;
+   self->nSnks = NULL;
+   self->snks = NULL;
+}
+
+void Sync_ClearShared( Sync* self ) {
+   int s_i;
+
+   assert( self );
+   for( s_i = 0; s_i < self->nShared; s_i++ )
+      Class_Free( self, self->sharers[s_i] );
+   Class_Free( self, self->shared );
+   Class_Free( self, self->nSharers );
+   Class_Free( self, self->sharers );
+   self->nShared = 0;
+   self->shared = NULL;
+   self->nSharers = NULL;
+   self->sharers = NULL;
+}
+
+void Sync_ClearOwners( Sync* self ) {
+   assert( self );
+   Class_Free( self, self->owners );
+   self->owners = NULL;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Sync.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Sync.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,80 @@
+#include INHERIT( StGermain/Base/Foundation/NewClass )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+#define PARENTDIR StGermain/Base/Foundation
+#define PARENT NewClass
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME Sync
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+VOIDOVERRIDE( Init, void, (void* self), (self) )
+VOIDOVERRIDE( Destruct, void, (void* self), (self) )
+VOIDOVERRIDE( Copy, void, (void* self, const void* op), (self, op) )
+OVERRIDE( CalcMem, SizeT, (const void* self, PtrMap* ptrs), (self, ptrs) )
+
+METHOD( SetDecomp, void, (void* self, const Decomp* decomp), (self, decomp) )
+METHOD( FindRemotes, void, (void* self, int nRemotes, const int* remotes), 
+	(self, nRemotes, remotes) )
+METHOD( SetComm, void, (void* self, const Comm* comm), (self, comm) )
+METHOD( SetRemotes, void, (void* self, int nRemotes, const int* remotes), 
+	(self, nRemotes, remotes) )
+METHOD( AddRemotes, void, (void* self, int nRemotes, const int* remotes), 
+	(self, nRemotes, remotes) )
+METHOD( RemoveRemotes, void, (void* self, int nRemotes, const int* remotes, IMap* map), 
+	(self, nRemotes, remotes, map) )
+METHOD( Clear, void, (void* self), (self) )
+METHOD( ClearDecomp, void, (void* self), (self) )
+METHOD( ClearComm, void, (void* self), (self) )
+METHOD( ClearRemotes, void, (void* self), (self) )
+
+METHOD( GetDecomp, const Decomp*, (const void* self), (self) )
+METHOD( GetComm, const Comm*, (const void* self), (self) )
+METHOD( GetNumRemotes, int, (const void* self), (self) )
+METHOD( GetNumDomains, int, (const void* self), (self) )
+METHOD( GetNumShared, int, (const void* self), (self) )
+METHOD( GetNumSharers, int, (const void* self, int shared), (self, shared) )
+METHOD( GetRemotes, void, (const void* self, int* nRemotes, const int** remotes), 
+	(self, nRemotes, remotes) )
+METHOD( GetOwner, int, (const void* self, int remote), (self, remote) )
+METHOD( GetShared, void, (const void* self, int* nShared, const int** shared), 
+	(self, nShared, shared) )
+METHOD( GetSharers, void, (const void* self, int shared, 
+			   int* nSharers, const int** sharers), 
+	(self, shared, nSharers, sharers) )
+
+METHOD( RemoteToGlobal, int, (const void* self, int remote), (self, remote) )
+METHOD( GlobalToRemote, int, (const void* self, int global), (self, global) )
+METHOD( TryGlobalToRemote, Bool, (const void* self, int global, int* remote), 
+	(self, global, remote) )
+METHOD( DomainToGlobal, int, (const void* self, int domain), (self, domain) )
+METHOD( GlobalToDomain, int, (const void* self, int global), (self, global) )
+METHOD( TryGlobalToDomain, Bool, (const void* self, int global, int* domain), 
+	(self, global, domain) )
+METHOD( SharedToLocal, int, (const void* self, int shared), (self, shared) )
+METHOD( LocalToShared, int, (const void* self, int local), (self, global) )
+METHOD( TryLocalToShared, Bool, (const void* self, int local, int* shared), 
+	(self, global, shared) )
+METHOD( SyncArray, void, (const void* self, 
+			  const void* local, size_t localStride, 
+			  const void* remote, size_t remoteStride, 
+			  size_t itmSize), 
+	(self, local, localStride, remote, remoteStride, itmSize) )
+
+MEMBER( Decomp*, decomp )
+MEMBER( Comm*, comm )
+MEMBER( int, nDomains )
+MEMBER( IArray*, remotes )
+MEMBER( IArray, remotesObj )
+MEMBER( int*, owners )
+MEMBER( int, nShared )
+MEMBER( int*, shared )
+MEMBER( int*, nSharers )
+MEMBER( int**, sharers )
+MEMBER( IMap*, gr )
+MEMBER( IMap, grObj )
+MEMBER( IMap*, ls )
+MEMBER( IMap, lsObj )
+MEMBER( int*, nSrcs )
+MEMBER( int**, srcs )
+MEMBER( int*, nSnks )
+MEMBER( int**, snks )
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/Sync.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/Sync.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: Sync.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Mesh_Sync_h__
+#define __StGermain_Domain_Mesh_Sync_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Mesh
+#define CLASSNAME Sync
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Mesh_Sync_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,105 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+lib = StgDomainMesh
+libstatic = yes
+libdynamic = yes
+includes = StgDomain/Mesh
+
+SRCS = 				\
+	Grid.c				\
+	Decomp.c			\
+	Sync.c				\
+	MeshTopology.c			\
+	IGraph.c			\
+	Mesh_ElementType.c		\
+	Mesh_HexType.c			\
+	Mesh_CentroidType.c		\
+	Mesh_Algorithms.c		\
+	Mesh_HexAlgorithms.c		\
+	Mesh_RegularAlgorithms.c	\
+	Mesh_CentroidAlgorithms.c	\
+	MeshClass.c			\
+	MeshGenerator.c			\
+	CartesianGenerator.c		\
+	MeshAdaptor.c			\
+	SurfaceAdaptor.c		\
+	CompressionAdaptor.c		\
+	MeshVariable.c			\
+	Init.c				\
+	Finalise.c
+
+HDRS = 				\
+	types.h				\
+	shortcuts.h			\
+	Grid.h				\
+	Decomp.def			\
+	Decomp.h			\
+	Sync.def			\
+	Sync.h				\
+	MeshTopology.def		\
+	MeshTopology.h			\
+	IGraph.def			\
+	IGraph.h			\
+	Mesh.h				\
+	Mesh_ElementType.h		\
+	Mesh_HexType.h			\
+	Mesh_CentroidType.h		\
+	Mesh_Algorithms.h		\
+	Mesh_HexAlgorithms.h		\
+	Mesh_RegularAlgorithms.h	\
+	Mesh_CentroidAlgorithms.h	\
+	MeshClass.h			\
+	MeshGenerator.h			\
+	CartesianGenerator.h		\
+	MeshAdaptor.h			\
+	SurfaceAdaptor.h		\
+	CompressionAdaptor.h		\
+	MeshVariable.h			\
+	Init.h				\
+	Finalise.h
+
+EXTERNAL_INCLUDES = 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/shortcuts.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/shortcuts.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,56 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Shortcuts to complex types in the eyes of the Base user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_shortcuts_h__
+#define __Domain_Mesh_shortcuts_h__
+	
+	/* Mesh shortcuts */
+	#define Mesh_Node_Neighbour_I( mesh, node, index )		mesh->nodeNeighbourTbl[node][index]
+	#define Mesh_Node_Element_I( mesh, node, index )		mesh->nodeElementTbl[node][index]
+	#define Mesh_Element_Neighbour_I( mesh, element, index )	mesh->elementNeighbourTbl[element][index]
+	#define Mesh_Element_Node_I( mesh, element, index )		mesh->elementNodeTbl[element][index]
+	
+	#define Mesh_Node_Neighbour_P( mesh, node, index )		Mesh_NodeAt( mesh, Mesh_Node_Neighbour_I( mesh, node, index ) )
+	#define Mesh_Node_Element_P( mesh, node, index )		Mesh_ElementAt( mesh, Mesh_Node_Element_I( mesh, node, index ) )
+	#define Mesh_Element_Neighbour_P( mesh, element, index )	Mesh_ElementAt( mesh, Mesh_Element_Neighbour_I( mesh, node, index ) )
+	#define Mesh_Element_Node_P( mesh, element, index )		Mesh_NodeAt( mesh, Mesh_Element_Node_I( mesh, element, index ) )
+	
+#endif /* __Domain_Mesh_shortcuts_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/src/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/src/types.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,146 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_types_h__
+#define __Domain_Mesh_types_h__
+
+typedef struct Grid Grid;
+typedef struct Decomp Decomp;
+typedef struct Sync Sync;
+typedef struct MeshTopology MeshTopology;
+typedef struct IGraph IGraph;
+
+typedef enum {
+   MT_VERTEX, 
+   MT_EDGE, 
+   MT_FACE, 
+   MT_VOLUME
+} MeshTopology_Dim;
+
+	/* Basic indexes */
+	typedef unsigned int			GlobalIndex;			/* global 1D index, not constrained */
+	typedef unsigned int			DomainIndex;			/* domain (local + shadow) 1D index, not 
+											constrained */
+	typedef unsigned int			LocalIndex;			/* local 1D index, not constrained */
+	typedef unsigned int			ShadowIndex;			/* shadow 1D index, not constrained */
+
+	/* Basic Node types */
+	typedef GlobalIndex			Node_GlobalIndex;		/* global 1D, 0 -> globalNodeCount, > is error */
+	typedef Index				Node_Index;			/* index, positive, not constrained */
+	typedef DomainIndex			Node_DomainIndex;		/* domain 1D, 0 -> (local_shadow)NodeCount, > is 
+											error */
+	typedef LocalIndex			Node_LocalIndex;		/* local 1D, 0 -> localNodeCount, > is error */
+	typedef ShadowIndex			Node_ShadowIndex;		/* shadow 1D, 0 -> shadowNodeCount, > is error */
+	typedef Index				Node_ElementLocalIndex;		/* element local 1D, 0 -> count at given el.*/
+	typedef Node_GlobalIndex		Node_GlobalIJK[3];
+	typedef Node_LocalIndex			Node_LocalIJK[3];
+	typedef Node_ShadowIndex		Node_ShadowIJK[3];
+	typedef Node_DomainIndex		Node_DomainIJK[3];
+	
+	/* Basic Element types */
+	typedef GlobalIndex			Element_GlobalIndex;		/* global 1D, 0 -> globalNodeCount, > is error  */
+	typedef DomainIndex			Element_DomainIndex;		/* domain 1D, 0 -> (local_shadow)NodeCount, > is 
+											error */
+	typedef Element_GlobalIndex		Element_Index;			/* index, positive, not constrained */
+	typedef LocalIndex			Element_LocalIndex;		/* local 1D, 0 -> localNodeCount, > is error */
+	typedef ShadowIndex			Element_ShadowIndex;		/* shadow 1D, 0 -> shadowNodeCount, > is error */
+	typedef Element_GlobalIndex		Element_GlobalIJK[3];
+	typedef Element_LocalIndex		Element_LocalIJK[3];
+	typedef Element_ShadowIndex		Element_ShadowIJK[3];
+	typedef Element_DomainIndex		Element_DomainIJK[3];
+	
+	/* Advanced Node types */
+	typedef Node_DomainIndex*		Node_Neighbours;		/* array of domain indices of neighbouring nodes */
+	typedef Index				Node_NeighbourIndex; 		/* index of a "node's neighbours" array */
+	typedef Node_Neighbours*		Node_NeighboursList;		/* array of "node's neighbours" */
+	typedef Node_NeighbourIndex*		Node_NeighbourIndexList;	/* array of counts of "node's neighbours" */
+	
+	typedef Element_DomainIndex*		Node_Elements;			/* array of domain indices of adjoining elements */
+	typedef Index				Node_ElementIndex; 		/* index of a "node's elements" array */
+	typedef Node_Elements*			Node_ElementsList;		/* array of "node's elements" */
+	typedef Node_ElementIndex*		Node_ElementIndexList;		/* array of counts of "node's elements" */
+	
+	/* Advanced Element types */
+	typedef Node_DomainIndex*		Element_Nodes;			/* array of domain indices of element nodes */
+	typedef Index				Element_NodeIndex;		/* index of an "element's nodes" array */
+	typedef Element_Nodes*			Element_NodesList;		/* array of "element's nodes" */
+	typedef Element_NodeIndex*		Element_NodeIndexList;		/* array of counts of "element's nodes" */
+	
+	typedef Element_DomainIndex*		Element_Neighbours;		/* array of domain indices of neighbouring 
+											elements */
+	typedef Index				Element_NeighbourIndex;		/* index of an "element's neighbours" array */
+	typedef Element_Neighbours*		Element_NeighboursList;		/* array of "element's neighbours" */
+	typedef Element_NeighbourIndex*		Element_NeighbourIndexList;	/* array of counts of "element's neighbours" */
+	
+	/* Parallel types */
+	typedef Index 				Partition_Index;			/* rank / domain partition index */
+	typedef Partition_Index			PartitionIndex;
+	typedef Partition_Index			Processor_Index;
+	typedef Partition_Index			ProcessorIndex;
+	typedef Partition_Index			Partition_IJK[3];
+	/* For indexing processors by their neighbour number, not their
+	global rank (ie in shadowing) */
+	typedef Index				Neighbour_Index; 
+	typedef Neighbour_Index			Nbr_Index;
+	
+	/* Classes */
+	typedef struct Mesh_ElementType			Mesh_ElementType;
+	typedef struct Mesh_HexType			Mesh_HexType;
+	typedef struct Mesh_CentroidType		Mesh_CentroidType;
+	typedef struct Mesh_Algorithms			Mesh_Algorithms;
+	typedef struct Mesh_HexAlgorithms		Mesh_HexAlgorithms;
+	typedef struct Mesh_RegularAlgorithms		Mesh_RegularAlgorithms;
+	typedef struct Mesh_CentroidAlgorithms		Mesh_CentroidAlgorithms;
+	typedef struct Mesh				Mesh;
+	typedef struct MeshGenerator			MeshGenerator;
+	typedef struct CartesianGenerator		CartesianGenerator;
+	typedef struct MeshAdaptor			MeshAdaptor;
+	typedef struct SurfaceAdaptor			SurfaceAdaptor;
+	typedef struct CompressionAdaptor		CompressionAdaptor;
+	typedef struct MeshVariable			MeshVariable;
+
+	/* Streams */
+	extern Stream*	Mesh_VerboseConfig;
+	extern Stream*	Mesh_Debug; 	
+	extern Stream*	Mesh_Warning; 
+	extern Stream*	Mesh_Error;
+	
+#endif /* __Domain_Mesh_types_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/data/trisurf.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/data/trisurf.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<!-- using an <asciidata> tag without specifying syntax:- will read in
+	according to the data structure already defined in the code, or else just
+	add as a set of strings-->
+	<list name="geometry">
+		<asciidata>
+			<columnDefinition name="x" type="double"/>
+			<columnDefinition name="y" type="double"/>
+			<columnDefinition name="z" type="double"/>
+0.0 0.0 0.0
+1.0 0.0 0.0
+2.0 0.0 0.0
+0.5 1.0 0.5
+1.5 1.0 0.5
+2.5 1.0 0.5
+		</asciidata>
+	</list>
+	
+	<list name="topology">
+		<list>
+			<param> 1 </param>
+			<param> 2 </param>
+		</list>
+		<list>
+			<param> 0 </param>
+			<param> 2 </param>
+			<param> 3 </param>
+		</list>
+		<list>
+			<param> 0 </param>
+			<param> 1 </param>
+			<param> 3 </param>
+		</list>
+		<list>
+			<param> 1 </param>
+			<param> 2 </param>
+		</list>
+	</list>
+
+	<!-- with types -->
+	<struct name="elements">
+		<param name="elementCornerCount"> 3 </param>
+		<list name="elementList">
+			<list>
+				<param> 0 </param>
+				<param> 1 </param>
+				<param> 3 </param>
+			</list>
+			<list>
+				<param> 1 </param>
+				<param> 4 </param>
+				<param> 3 </param>
+			</list>
+			<list>
+				<param> 1 </param>
+				<param> 2 </param>
+				<param> 4 </param>
+			</list>
+			<list>
+				<param> 2 </param>
+				<param> 5 </param>
+				<param> 4 </param>
+			</list>
+		</list>
+	</struct>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+tests = lib${PROJECT}_DomainMesh
+
+SRCS = \
+	testCartesianGenerator.c \
+	testDecomp.c \
+	testMesh.c \
+	testMeshTopology.c
+
+
+checks = \
+	testCartesianGenerator.0of1.sh \
+	testDecomp.0of1.sh \
+	testMesh.0of1.sh \
+	testCartesianGenerator.0of2.sh \
+	testDecomp.0of2.sh \
+	testMesh.0of2.sh \
+	testCartesianGenerator.0of3.sh \
+	testDecomp.0of3.sh \
+	testMesh.0of3.sh \
+	testCartesianGenerator.0of4.sh \
+	testDecomp.0of4.sh \
+	testMesh.0of4.sh
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainMesh -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+        ifneq (Darwin,${SYSTEM})
+	       EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,4 @@
+StGermain Framework revision 3913. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'generate'... passed
+   Running test 'incidence'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCartesianGenerator " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,4 @@
+StGermain Framework revision 3913. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'generate'... passed
+   Running test 'incidence'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCartesianGenerator " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,4 @@
+StGermain Framework revision 3913. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'generate'... passed
+   Running test 'incidence'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCartesianGenerator " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of4.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of4.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,4 @@
+StGermain Framework revision 3913. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'generate'... passed
+   Running test 'incidence'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.0of4.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.0of4.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCartesianGenerator " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testCartesianGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testCartesianGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,225 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testSync.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "StGermain/Base/Foundation/TestBegin.h"
+
+
+Mesh* buildMesh() {
+   CartesianGenerator* gen;
+   int nRanks;
+   unsigned sizes[3];
+   double minCrd[3];
+   double maxCrd[3];
+   Mesh* mesh;
+   int rank;
+
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+   sizes[0] = sizes[1] = sizes[2] = nRanks * 4;
+   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+   maxCrd[0] = minCrd[1] = minCrd[2] = (double)nRanks;
+
+   gen = CartesianGenerator_New( "" );
+   MeshGenerator_SetDimSize( gen, 3 );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+   mesh = Mesh_New( "" );
+   CartesianGenerator_Generate( gen, mesh );
+   FreeObject( gen );
+
+   return mesh;
+}
+
+void testSetup( int* argc, char** argv[] ) {
+   StGermain_Init( argc, argv );
+   StgDomainMesh_Init( argc, argv );
+   Stream_Enable( Journal_GetTypedStream( Debug_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Info_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Dump_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Error_Type ), False );
+}
+
+void testTeardown() {
+   StgDomainMesh_Finalise();
+   StGermain_Finalise();
+}
+
+TestBegin( Construct ) {
+   CartesianGenerator* gen;
+
+   TestNoAssert( gen = CartesianGenerator_New( "" ) );
+   TestTrue( gen );
+
+  done:
+   FreeObject( gen );
+}
+TestEnd
+
+TestBegin( Gen ) {
+   CartesianGenerator* gen;
+   int nRanks;
+   unsigned sizes[3];
+   double minCrd[3];
+   double maxCrd[3];
+   Mesh* mesh;
+   int rank;
+   unsigned long netMem, mem, syncMem;
+
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+   sizes[0] = sizes[1] = sizes[2] = nRanks * 4;
+   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+   maxCrd[0] = minCrd[1] = minCrd[2] = (double)nRanks;
+
+   gen = CartesianGenerator_New( "" );
+   MeshGenerator_SetDimSize( gen, 3 );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+   mesh = Mesh_New( "" );
+   TestNoAssert( CartesianGenerator_Generate( gen, mesh ) );
+
+  done:
+   FreeObject( gen );
+   FreeObject( mesh );
+}
+TestEnd
+
+TestBegin( Inc ) {
+   Mesh* mesh;
+   IGraph* topo;
+   const Sync *elSync, *vertSync;
+   Grid *elGrid, *vertGrid;
+   int nEls, nDims;
+   int* elParam;
+   int nIncEls;
+   const int* incEls;
+   int elGlobal, incGlobal, vertGlobal;
+   IArray* inc;
+   int e_i;
+
+   mesh = buildMesh();
+   inc = IArray_New();
+   topo = (IGraph*)mesh->topo;
+   nDims = MeshTopology_GetNumDims( topo );
+   elSync = IGraph_GetDomain( topo, nDims );
+   elGrid = *Mesh_GetExtension( mesh, Grid**, "elementGrid" );
+   vertSync = IGraph_GetDomain( topo, 0 );
+   vertGrid = *Mesh_GetExtension( mesh, Grid**, "vertexGrid" );
+   nEls = Sync_GetNumDomains( elSync );
+   elParam = MemArray( int, nDims, "testInc" );
+   for( e_i = 0; e_i < nEls; e_i++ ) {
+      elGlobal = Sync_DomainToGlobal( elSync, e_i );
+      Grid_Lift( elGrid, elGlobal, elParam );
+      MeshTopology_GetIncidence( topo, nDims, e_i, 0, inc );
+      nIncEls = IArray_GetSize( inc );
+      incEls = IArray_GetPtr( inc );
+      if( nIncEls != 8 )
+	 break;
+
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[0] );
+      if( incGlobal != vertGlobal )
+	 break;
+
+      elParam[0]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[1] );
+      if( incGlobal != vertGlobal )
+	 break;
+      elParam[0]--;
+
+      elParam[1]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[2] );
+      if( incGlobal != vertGlobal )
+	 break;
+
+      elParam[0]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[3] );
+      if( incGlobal != vertGlobal )
+	 break;
+      elParam[0]--;
+      elParam[1]--;
+
+      elParam[2]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[4] );
+      if( incGlobal != vertGlobal )
+	 break;
+
+      elParam[0]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[5] );
+      if( incGlobal != vertGlobal )
+	 break;
+      elParam[0]--;
+
+      elParam[1]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[6] );
+      if( incGlobal != vertGlobal )
+	 break;
+
+      elParam[0]++;
+      vertGlobal = Grid_Project( vertGrid, elParam );
+      incGlobal = Sync_DomainToGlobal( vertSync, incEls[7] );
+      if( incGlobal != vertGlobal )
+	 break;
+      elParam[0]--;
+      elParam[1]--;
+      elParam[2]--;
+   }
+   TestTrue( e_i == nEls );
+
+  done:
+   MemFree( elParam );
+   FreeObject( mesh );
+}
+TestEnd
+
+
+#define nTests 3
+TestSuite_Test tests[nTests] = {{"construct", testConstruct}, 
+				{"generate", testGen}, 
+				{"incidence", testInc}};
+
+
+#include <StGermain/Base/Foundation/TestEnd.h>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'owners'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDecomp " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'owners'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDecomp " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'owners'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDecomp " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of4.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of4.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'construct'... passed
+   Running test 'owners'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.0of4.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.0of4.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDecomp " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecomp.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecomp.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,138 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDecomp.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "StGermain/Base/Foundation/TestBegin.h"
+
+
+void testSetup( int* argc, char** argv[] ) {
+   StGermain_Init( argc, argv );
+   StgDomainMesh_Init( argc, argv );
+}
+
+void testTeardown() {
+   StgDomainMesh_Finalise();
+   StGermain_Finalise();
+}
+
+TestBegin( Construct ) {
+   Decomp* decomp;
+   int nLocs;
+   const int *locs;
+
+   TestNoAssert( decomp = Decomp_New() );
+   TestTrue( decomp );
+   TestTrue( Decomp_GetMPIComm( decomp ) == MPI_COMM_WORLD );
+   TestTrue( Decomp_GetNumGlobals( decomp ) == 0 );
+   TestTrue( Decomp_GetNumLocals( decomp ) == 0 );
+   TestNoAssert( Decomp_GetLocals( decomp, &nLocs, &locs ) );
+   TestTrue( nLocs == 0 && locs == NULL );
+
+  done:
+   NewClass_Delete( decomp );
+}
+TestEnd
+
+TestBegin( Owners ) {
+   Decomp* decomp;
+   int rank, nRanks;
+   int nLocs, *locs, *ranks;
+   int l_i, g_i;
+
+   insist( MPI_Comm_rank( MPI_COMM_WORLD, &rank ), == MPI_SUCCESS );
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+
+   nLocs = 10;
+   locs = MemArray( int, nLocs, "testDecomp" );
+
+   decomp = Decomp_New();
+   for( l_i = 0; l_i < nLocs; l_i++ )
+      locs[l_i] = rank * nLocs + l_i;
+   TestNoAssert( Decomp_SetLocals( decomp, nLocs, locs ) );
+   for( g_i = 0; g_i < nRanks * nLocs; g_i++ ) {
+      if( g_i >= rank * nLocs && g_i < (rank + 1) * nLocs ) {
+	 TestTrue( IMap_Map( decomp->owners, g_i ) == rank );
+      }
+      else {
+	 TestTrue( !IMap_Has( decomp->owners, g_i ) );
+      }
+   }
+
+   for( l_i = 0; l_i < nLocs; l_i++ ) {
+      locs[l_i] = (rank * nLocs + nLocs / 2 + l_i) % 
+	 (nRanks * nLocs);
+   }
+   TestNoAssert( Decomp_SetLocals( decomp, nLocs, locs ) );
+   for( g_i = 0; g_i < nRanks * nLocs; g_i++ ) {
+      if( g_i >= rank * nLocs && g_i < (rank + 1) * nLocs ) {
+	 if( g_i < rank * nLocs + nLocs / 2 ) {
+	    if( rank > 0 ) {
+	       TestTrue( IMap_Map( decomp->owners, g_i ) == rank - 1 );
+	    }
+	    else {
+	       TestTrue( IMap_Map( decomp->owners, g_i ) == nRanks - 1 );
+	    }
+	 }
+	 else {
+	    TestTrue( IMap_Map( decomp->owners, g_i ) == rank );
+	 }
+      }
+      else {
+	 TestTrue( !IMap_Has( decomp->owners, g_i ) );
+      }
+   }
+
+   locs = MemRearray( locs, int, nRanks * nLocs, "testDecomp" );
+   ranks = MemArray( int, nRanks * nLocs, "testDecomp" );
+   for( g_i = 0; g_i < nRanks * nLocs; g_i++ )
+      locs[g_i] = g_i;
+   TestNoAssert( Decomp_FindOwners( decomp, nRanks * nLocs, locs, ranks ) );
+
+  done:
+   NewClass_Delete( decomp );
+   MemFree( locs );
+   MemFree( ranks );
+}
+TestEnd
+
+
+#define nTests 2
+TestSuite_Test tests[nTests] = {{"construct", testConstruct}, 
+				{"owners", testOwners }};
+
+
+#include <StGermain/Base/Foundation/TestEnd.h>
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testDecompTransfer.c.tmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testDecompTransfer.c.tmp	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,124 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDecompTransfer.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+Bool testAll( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool		result = True;
+	DecompTransfer*	transfer;
+	Decomp*		decomps[2];
+	UIntMap*	map;
+	unsigned	nLocals[2];
+	unsigned*	locals[2];
+	unsigned	l_i, ind_i;
+
+	nLocals[0] = 10;
+	locals[0] = Memory_Alloc_Array_Unnamed( unsigned, nLocals[0] );
+	for( l_i = 0; l_i < nLocals[0]; l_i++ )
+		locals[0][l_i] = rank * nLocals[0] + l_i;
+
+	decomps[0] = Decomp_New( "" );
+	Decomp_SetLocals( decomps[0], nLocals[0], locals[0] );
+
+	nLocals[1] = 10;
+	locals[1] = Memory_Alloc_Array_Unnamed( unsigned, nLocals[1] );
+	for( l_i = 0; l_i < nLocals[0]; l_i++ )
+		locals[1][l_i] = (nProcs - rank - 1) * nLocals[1] + l_i;
+
+	decomps[1] = Decomp_New( "" );
+	Decomp_SetLocals( decomps[1], nLocals[1], locals[1] );
+
+	map = UIntMap_New();
+	for( ind_i = 0; ind_i < nLocals[0]; ind_i++ ) {
+		unsigned	 mappedInd;
+
+		insist( Decomp_GlobalToLocal( decomps[0], locals[0][ind_i], &mappedInd ) );
+		UIntMap_Insert( map, mappedInd, locals[1][ind_i] );
+	}
+
+	transfer = DecompTransfer_New( "" );
+	DecompTransfer_SetDecomps( transfer, decomps[0], decomps[1], map );
+
+	if( rank == watch ) {
+	}
+
+done:
+	FreeObject( transfer );
+
+	return result;
+}
+
+
+#define nTests	1
+
+TestSuite_Test	tests[nTests] = {{"everything", testAll, 10}};
+
+
+int main( int argc, char* argv[] ) {
+	TestSuite*	suite;
+
+	/* Initialise MPI, get world info. */
+	MPI_Init( &argc, &argv );
+
+	/* Initialise StGermain. */
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	/* Create the test suite. */
+	suite = TestSuite_New();
+	TestSuite_SetProcToWatch( suite, (argc >= 2) ? atoi( argv[1] ) : 0 );
+	TestSuite_SetTests( suite, nTests, tests );
+
+	/* Run the tests. */
+	TestSuite_Run( suite );
+
+	/* Destroy test suites. */
+	FreeObject( suite );
+
+	/* Finalise StGermain. */
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return MPI_SUCCESS;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'nearest vertex'... passed
+   Running test 'search'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testMesh " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'nearest vertex'... passed
+   Running test 'search'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testMesh " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'nearest vertex'... passed
+   Running test 'search'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testMesh " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of4.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of4.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework revision 4139. Copyright (C) 2003-2005 VPAC.
+   Running test 'nearest vertex'... passed
+   Running test 'search'... passed
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.0of4.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.0of4.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testMesh " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,357 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testSync.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "StGermain/Base/Foundation/TestBegin.h"
+
+
+void testSetup( int* argc, char** argv[] ) {
+   StGermain_Init( argc, argv );
+   StgDomainMesh_Init( argc, argv );
+   Stream_Enable( Journal_GetTypedStream( Debug_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Info_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Dump_Type ), False );
+   Stream_Enable( Journal_GetTypedStream( Error_Type ), False );
+}
+
+void testTeardown() {
+   StgDomainMesh_Finalise();
+   StGermain_Finalise();
+}
+
+TestBegin( NearVert ) {
+   CartesianGenerator* gen;
+   Mesh* mesh;
+   int nDims;
+   int sizes[3];
+   double minCrd[3];
+   double maxCrd[3];
+   int nRanks;
+   int nInc, *inc;
+   IArray* incArray;
+   double* vert;
+   int e_i, inc_i;
+
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+   sizes[0] = sizes[1] = sizes[2] = 4 * nRanks;
+   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+   maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nRanks;
+
+   nDims = 1;
+   gen = CartesianGenerator_New( "" );
+   MeshGenerator_SetDimSize( gen, nDims );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   mesh = Mesh_New( "" );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, False );
+   incArray = IArray_New();
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_NearestVertex( mesh, vert ) == inc[inc_i] ) break;
+      }
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   nDims = 2;
+   MeshGenerator_SetDimSize( gen, nDims );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, True );
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_NearestVertex( mesh, vert ) == inc[inc_i] ) break;
+      }
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   nDims = 3;
+   MeshGenerator_SetDimSize( gen, nDims );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, True );
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_NearestVertex( mesh, vert ) == inc[inc_i] ) break;
+      }
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   NewClass_Delete( incArray );
+
+done:
+   FreeObject( gen );
+   FreeObject( mesh );
+}
+TestEnd
+
+TestBegin( Search ) {
+   CartesianGenerator* gen;
+   Mesh* mesh;
+   int nDims;
+   int sizes[3];
+   double minCrd[3];
+   double maxCrd[3];
+   int nRanks;
+   int nInc, *inc;
+   double* vert;
+   double point[3];
+   unsigned elDim, elInd;
+   int nEdgeInc, *edgeInc;
+   int nFaceInc, *faceInc;
+   IArray *incArray, *edgeIncArray, *faceIncArray;
+   int e_i, inc_i, inc_j, d_i;
+
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+   sizes[0] = sizes[1] = sizes[2] = 4 * nRanks;
+   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+   maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nRanks;
+
+   nDims = 1;
+   gen = CartesianGenerator_New( "" );
+   MeshGenerator_SetDimSize( gen, nDims );
+   MeshGenerator_SetFullIncidence( gen );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   mesh = Mesh_New( "" );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, False );
+
+   incArray = IArray_New();
+   edgeIncArray = IArray_New();
+   faceIncArray = IArray_New();
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_Search( mesh, vert, &elDim, &elInd ) ) break;
+	 if( elDim != MT_VERTEX ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] = 0.0;
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] += Mesh_GetVertex( mesh, inc[inc_i] )[d_i];
+      }
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] /= (double)nInc;
+      if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+      if( elDim != nDims ) break;
+      if( elInd != e_i ) break;
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   nDims = 2;
+   MeshGenerator_SetDimSize( gen, nDims );
+   MeshGenerator_SetFullIncidence( gen );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, True );
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_Search( mesh, vert, &elDim, &elInd ) ) break;
+	 if( elDim != MT_VERTEX ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_EDGE, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, edgeIncArray );
+	 nEdgeInc = IArray_GetSize( edgeIncArray );
+	 edgeInc = IArray_GetPtr( edgeIncArray );
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] = 0.0;
+	 for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+	    for( d_i = 0; d_i < nDims; d_i++ )
+	       point[d_i] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[d_i];
+	 }
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] /= (double)nEdgeInc;
+	 if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+	 if( elDim != MT_EDGE ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] = 0.0;
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] += Mesh_GetVertex( mesh, inc[inc_i] )[d_i];
+      }
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] /= (double)nInc;
+      if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+      if( elDim != nDims ) break;
+      if( elInd != e_i ) break;
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   nDims = 3;
+   MeshGenerator_SetDimSize( gen, nDims );
+   MeshGenerator_SetFullIncidence( gen );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+   Mesh_SetGenerator( mesh, gen );
+   Stg_Component_Build( mesh, NULL, True );
+
+   for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, nDims ); e_i++ ) {
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 vert = Mesh_GetVertex( mesh, inc[inc_i] );
+	 if( !Mesh_Search( mesh, vert, &elDim, &elInd ) ) break;
+	 if( elDim != MT_VERTEX ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_EDGE, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, edgeIncArray );
+	 nEdgeInc = IArray_GetSize( edgeIncArray );
+	 edgeInc = IArray_GetPtr( edgeIncArray );
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] = 0.0;
+	 for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+	    for( d_i = 0; d_i < nDims; d_i++ )
+	       point[d_i] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[d_i];
+	 }
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] /= (double)nEdgeInc;
+	 if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+	 if( elDim != MT_EDGE ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_FACE, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 Mesh_GetIncidence( mesh, MT_FACE, inc[inc_i], MT_VERTEX, faceIncArray );
+	 nFaceInc = IArray_GetSize( faceIncArray );
+	 faceInc = IArray_GetPtr( faceIncArray );
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] = 0.0;
+	 for( inc_j = 0; inc_j < nFaceInc; inc_j++ ) {
+	    for( d_i = 0; d_i < nDims; d_i++ )
+	       point[d_i] += Mesh_GetVertex( mesh, faceInc[inc_j] )[d_i];
+	 }
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] /= (double)nFaceInc;
+	 if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+	 if( elDim != MT_FACE ) break;
+	 if( elInd != inc[inc_i] ) break;
+      }
+
+      Mesh_GetIncidence( mesh, nDims, e_i, MT_VERTEX, incArray );
+      nInc = IArray_GetSize( incArray );
+      inc = IArray_GetPtr( incArray );
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] = 0.0;
+      for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+	 for( d_i = 0; d_i < nDims; d_i++ )
+	    point[d_i] += Mesh_GetVertex( mesh, inc[inc_i] )[d_i];
+      }
+      for( d_i = 0; d_i < nDims; d_i++ )
+	 point[d_i] /= (double)nInc;
+      if( !Mesh_Search( mesh, point, &elDim, &elInd ) ) break;
+      if( elDim != nDims ) break;
+      if( elInd != e_i ) break;
+   }
+   TestTrue( e_i == Mesh_GetDomainSize( mesh, nDims ) );
+
+   NewClass_Delete( incArray );
+   NewClass_Delete( edgeIncArray );
+   NewClass_Delete( faceIncArray );
+
+done:
+   FreeObject( gen );
+   FreeObject( mesh );
+}
+TestEnd
+
+
+#define nTests 2
+TestSuite_Test tests[nTests] = {{"nearest vertex", testNearVert}, 
+				{"search", testSearch}};
+
+
+#include "StGermain/Base/Foundation/TestEnd.h"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh.c.tmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh.c.tmp	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,536 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testMesh.c.tmp 4105 2007-05-16 02:53:43Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+#include <mpi.h>
+
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+Bool testNearVert( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool			result = True;
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[3];
+	double			minCrd[3];
+	double			maxCrd[3];
+
+	sizes[0] = sizes[1] = sizes[2] = nProcs;
+	minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+	maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nProcs;
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, 3 );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Build( mesh, NULL, False );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_VOLUME ); e_i++ ) {
+			unsigned	nInc, *inc;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( Mesh_NearestVertex( mesh, vert ) != inc[inc_i] ) {
+					result = False;
+					goto done;
+				}
+			}
+		}
+	}
+
+done:
+	FreeObject( gen );
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testElSearch1D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool			result = True;
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[1];
+	double			minCrd[1];
+	double			maxCrd[1];
+
+	sizes[0] = nProcs * 5;
+	minCrd[0] = 0.0;
+	maxCrd[0] = (double)nProcs;
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, 1 );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Build( mesh, NULL, False );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_EDGE ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[1];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_EDGE, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_EDGE, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ )
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+			point[0] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_EDGE || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( gen );
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testElSearch2D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool			result = True;
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[2];
+	double			minCrd[2];
+	double			maxCrd[2];
+
+	sizes[0] = sizes[1] = nProcs * 3;
+	minCrd[0] = minCrd[1] = 0.0;
+	maxCrd[0] = maxCrd[1] = (double)nProcs;
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, 2 );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Build( mesh, NULL, False );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_FACE ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[2];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_EDGE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nEdgeInc, *edgeInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, &nEdgeInc, &edgeInc );
+				point[0] = point[1] = 0.0;
+				for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[1];
+				}
+				point[0] /= (double)nEdgeInc;
+				point[1] /= (double)nEdgeInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_EDGE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = point[1] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+				point[1] += Mesh_GetVertex( mesh, inc[inc_i] )[1];
+			}
+			point[0] /= (double)nInc;
+			point[1] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_FACE || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( gen );
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testElSearch3D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool			result = True;
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[3];
+	double			minCrd[3];
+	double			maxCrd[3];
+
+	sizes[0] = sizes[1] = sizes[2] = nProcs;
+	minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+	maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nProcs;
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, 3 );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Build( mesh, NULL, False );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_VOLUME ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[3];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_EDGE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nEdgeInc, *edgeInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, &nEdgeInc, &edgeInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[2];
+				}
+				point[0] /= (double)nEdgeInc;
+				point[1] /= (double)nEdgeInc;
+				point[2] /= (double)nEdgeInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_EDGE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_FACE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nFaceInc, *faceInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_FACE, inc[inc_i], MT_VERTEX, &nFaceInc, &faceInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nFaceInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, faceInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, faceInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, faceInc[inc_j] )[2];
+				}
+				point[0] /= (double)nFaceInc;
+				point[1] /= (double)nFaceInc;
+				point[2] /= (double)nFaceInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_FACE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = point[1] = point[2] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+				point[1] += Mesh_GetVertex( mesh, inc[inc_i] )[1];
+				point[2] += Mesh_GetVertex( mesh, inc[inc_i] )[2];
+			}
+			point[0] /= (double)nInc;
+			point[1] /= (double)nInc;
+			point[2] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_VOLUME || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( gen );
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testMinElSearch3D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool			result = True;
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[3];
+	double			minCrd[3];
+	double			maxCrd[3];
+
+	sizes[0] = sizes[1] = sizes[2] = nProcs;
+	minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+	maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nProcs;
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, 3 );
+	MeshGenerator_SetDimState( gen, 2, False );
+	MeshGenerator_SetDimState( gen, 1, True );
+	MeshGenerator_ClearIncidenceStates( gen );
+	MeshGenerator_SetIncidenceState( gen, 3, 0, True );
+	MeshGenerator_SetIncidenceState( gen, 1, 0, True );
+	MeshGenerator_SetIncidenceState( gen, 0, 3, True );
+	MeshGenerator_SetIncidenceState( gen, 0, 1, True );
+	MeshGenerator_SetIncidenceState( gen, 0, 0, True );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Build( mesh, NULL, False );
+
+#if 0
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_VOLUME ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[3];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_EDGE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nEdgeInc, *edgeInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, &nEdgeInc, &edgeInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[2];
+				}
+				point[0] /= (double)nEdgeInc;
+				point[1] /= (double)nEdgeInc;
+				point[2] /= (double)nEdgeInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_EDGE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_FACE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nFaceInc, *faceInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_FACE, inc[inc_i], MT_VERTEX, &nFaceInc, &faceInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nFaceInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, faceInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, faceInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, faceInc[inc_j] )[2];
+				}
+				point[0] /= (double)nFaceInc;
+				point[1] /= (double)nFaceInc;
+				point[2] /= (double)nFaceInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_FACE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = point[1] = point[2] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+				point[1] += Mesh_GetVertex( mesh, inc[inc_i] )[1];
+				point[2] += Mesh_GetVertex( mesh, inc[inc_i] )[2];
+			}
+			point[0] /= (double)nInc;
+			point[1] /= (double)nInc;
+			point[2] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_VOLUME || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+#endif
+
+done:
+	FreeObject( gen );
+	FreeObject( mesh );
+
+	return result;
+}
+
+
+#define nTests	5
+
+TestSuite_Test	tests[nTests] = {{"test nearest vertex", testNearVert, 1}, 
+				 {"test element search (1D)", testElSearch1D, 1}, 
+				 {"test element search (2D)", testElSearch2D, 1}, 
+				 {"test element search (3D)", testElSearch3D, 1}, 
+				 {"test minimum element search (3D)", testMinElSearch3D, 1}};
+
+
+int main( int argc, char* argv[] ) {
+	TestSuite*	suite;
+
+	/* Initialise MPI, get world info. */
+	MPI_Init( &argc, &argv );
+
+	/* Initialise StGermain. */
+	Base_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+
+	/* Create the test suite. */
+	suite = TestSuite_New();
+	TestSuite_SetProcToWatch( suite, (argc >= 2) ? atoi( argv[1] ) : 0 );
+	TestSuite_SetTests( suite, nTests, tests );
+
+	/* Run the tests. */
+	TestSuite_Run( suite );
+
+	/* Destroy test suites. */
+	FreeObject( suite );
+
+	/* Finalise StGermain. */
+	DiscretisationMesh_Finalise();
+	Base_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return MPI_SUCCESS;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMeshTopology.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMeshTopology.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,119 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testMeshTopology.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "StGermain/Base/Foundation/TestBegin.h"
+
+
+void testSetup( int* argc, char** argv[] ) {
+   StGermain_Init( argc, argv );
+   /*DomainMesh_Init( argc, argv );*/
+}
+
+void testTeardown() {
+   /*DomainMesh_Finalise();*/
+   StGermain_Finalise();
+}
+
+TestBegin( Construct ) {
+   MeshTopology* topo;
+
+   TestNoAssert( topo = MeshTopology_New() );
+   TestTrue( topo );
+
+  done:
+   NewClass_Delete( topo );
+}
+TestEnd
+
+TestBegin( SetDims ) {
+   IGraph *topo;
+   int d_i, d_j;
+
+   topo = IGraph_New();
+   TestNoAssert( MeshTopology_SetNumDims( topo, 3 ) );
+   TestTrue( MeshTopology_GetNumDims( topo ) == 3 && topo->nTDims == 4 );
+   TestTrue( topo->locals && topo->remotes );
+   TestTrue( topo->nIncEls && topo->incEls );
+   for( d_i = 0; d_i < 4; d_i++ ) {
+      TestTrue( topo->locals[d_i] && topo->remotes[d_i] );
+      TestTrue( Sync_GetDecomp( topo->remotes[d_i] ) == topo->locals[d_i] );
+      TestTrue( topo->nIncEls[d_i] && topo->incEls[d_i] );
+      TestTrue( topo->incEls[d_i] );
+      for( d_j = 0; d_j < 4; d_j++ ) {
+	 TestTrue( !topo->nIncEls[d_i][d_j] && !topo->incEls[d_i][d_j] );
+      }
+   }
+
+   TestNoAssert( MeshTopology_SetNumDims( topo, 0 ) );
+   TestTrue( !MeshTopology_GetNumDims( topo ) && !topo->nTDims );
+   TestTrue( !topo->locals && !topo->remotes );
+   TestTrue( !topo->nIncEls && !topo->incEls );
+
+  done:
+   NewClass_Delete( topo );
+}
+TestEnd
+
+TestBegin( SetComm ) {
+   IGraph* topo;
+   Comm* comm;
+   int d_i;
+
+   comm = Comm_New();
+   topo = IGraph_New();
+   MeshTopology_SetNumDims( topo, 3 );
+
+   TestNoAssert( MeshTopology_SetComm( topo, comm ) );
+   TestTrue( MeshTopology_GetComm( topo ) == comm );
+   for( d_i = 0; d_i < 4; d_i++ ) {
+      TestTrue( Sync_GetComm( topo->remotes[d_i] ) == comm );
+   }
+
+  done:
+   NewClass_Delete( topo );
+}
+TestEnd
+
+
+#define nTests 3
+TestSuite_Test tests[nTests] = {{"construct", testConstruct}, 
+				{"set number of dimensions", testSetDims}, 
+				{"set communicator", testSetComm}};
+
+
+#include "StGermain/Base/Foundation/TestEnd.h"
diff -r 9f22ec4f42ee -r 5667007f4799 Mesh/tests/testMesh_RegularAlgorithms.c.tmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mesh/tests/testMesh_RegularAlgorithms.c.tmp	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,344 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testMesh.c 3911 2006-12-22 01:37:13Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+#include <mpi.h>
+
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+Mesh* buildMesh( unsigned nProcs, unsigned nDims ) {
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned*		sizes;
+	double			*minCrd, *maxCrd;
+	unsigned		d_i;
+
+	sizes = AllocArray( unsigned, nDims );
+	minCrd = AllocArray( double, nDims );
+	maxCrd = AllocArray( double, nDims );
+	for( d_i = 0; d_i < nDims; d_i++ ) {
+		sizes[d_i] = nProcs;
+		minCrd[d_i] = 0.0;
+		maxCrd[d_i] = (double)nProcs;
+	}
+
+	gen = CartesianGenerator_New( "" );
+	MeshGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetGenerator( mesh, gen );
+	Mesh_SetAlgorithms( mesh, Mesh_RegularAlgorithms_New( "" ) );
+	Build( mesh, NULL, False );
+
+	FreeObject( gen );
+	FreeArray( sizes );
+	FreeArray( minCrd );
+	FreeArray( maxCrd );
+
+	return mesh;
+}
+
+
+Bool testElSearch1D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool	result = True;
+	Mesh*	mesh;
+
+	mesh = buildMesh( nProcs, 1 );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_EDGE ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[1];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_EDGE, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_EDGE, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ )
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+			point[0] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_EDGE || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testElSearch2D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool	result = True;
+	Mesh*	mesh;
+
+	mesh = buildMesh( nProcs, 2 );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_FACE ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[2];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_EDGE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nEdgeInc, *edgeInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, &nEdgeInc, &edgeInc );
+				point[0] = point[1] = 0.0;
+				for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[1];
+				}
+				point[0] /= (double)nEdgeInc;
+				point[1] /= (double)nEdgeInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_EDGE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_FACE, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = point[1] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+				point[1] += Mesh_GetVertex( mesh, inc[inc_i] )[1];
+			}
+			point[0] /= (double)nInc;
+			point[1] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_FACE || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( mesh );
+
+	return result;
+}
+
+Bool testElSearch3D( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool	result = True;
+	Mesh*	mesh;
+
+	mesh = buildMesh( nProcs, 3 );
+
+	if( rank == watch ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < Mesh_GetDomainSize( mesh, MT_VOLUME ); e_i++ ) {
+			unsigned	nInc, *inc;
+			double		point[3];
+			unsigned	elDim, elInd;
+			unsigned	inc_i;
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				double*	vert;
+
+				vert = Mesh_GetVertex( mesh, inc[inc_i] );
+				if( !Mesh_Search( mesh, vert, &elDim, &elInd ) || 
+				    elDim != MT_VERTEX || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_EDGE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nEdgeInc, *edgeInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_EDGE, inc[inc_i], MT_VERTEX, &nEdgeInc, &edgeInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nEdgeInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, edgeInc[inc_j] )[2];
+				}
+				point[0] /= (double)nEdgeInc;
+				point[1] /= (double)nEdgeInc;
+				point[2] /= (double)nEdgeInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_EDGE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_FACE, &nInc, &inc );
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				unsigned	nFaceInc, *faceInc;
+				unsigned	inc_j;
+
+				Mesh_GetIncidence( mesh, MT_FACE, inc[inc_i], MT_VERTEX, &nFaceInc, &faceInc );
+				point[0] = point[1] = point[2] = 0.0;
+				for( inc_j = 0; inc_j < nFaceInc; inc_j++ ) {
+					point[0] += Mesh_GetVertex( mesh, faceInc[inc_j] )[0];
+					point[1] += Mesh_GetVertex( mesh, faceInc[inc_j] )[1];
+					point[2] += Mesh_GetVertex( mesh, faceInc[inc_j] )[2];
+				}
+				point[0] /= (double)nFaceInc;
+				point[1] /= (double)nFaceInc;
+				point[2] /= (double)nFaceInc;
+				if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+				    elDim != MT_FACE || 
+				    elInd != inc[inc_i] )
+				{
+					result = False;
+					goto done;
+				}
+			}
+
+			Mesh_GetIncidence( mesh, MT_VOLUME, e_i, MT_VERTEX, &nInc, &inc );
+			point[0] = point[1] = point[2] = 0.0;
+			for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+				point[0] += Mesh_GetVertex( mesh, inc[inc_i] )[0];
+				point[1] += Mesh_GetVertex( mesh, inc[inc_i] )[1];
+				point[2] += Mesh_GetVertex( mesh, inc[inc_i] )[2];
+			}
+			point[0] /= (double)nInc;
+			point[1] /= (double)nInc;
+			point[2] /= (double)nInc;
+			if( !Mesh_Search( mesh, point, &elDim, &elInd ) || 
+			    elDim != MT_VOLUME || 
+			    elInd != e_i )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( mesh );
+
+	return result;
+}
+
+
+#define nTests	3
+
+TestSuite_Test	tests[nTests] = {{"test element search (1D)", testElSearch1D, 5}, 
+				 {"test element search (2D)", testElSearch2D, 5}, 
+				 {"test element search (3D)", testElSearch3D, 5}};
+
+
+int main( int argc, char* argv[] ) {
+	TestSuite*	suite;
+
+	/* Initialise MPI, get world info. */
+	MPI_Init( &argc, &argv );
+
+	/* Initialise StGermain. */
+	Base_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+
+	/* Create the test suite. */
+	suite = TestSuite_New();
+	TestSuite_SetProcToWatch( suite, (argc >= 2) ? atoi( argv[1] ) : 0 );
+	TestSuite_SetTests( suite, nTests, tests );
+
+	/* Run the tests. */
+	TestSuite_Run( suite );
+
+	/* Destroy test suites. */
+	FreeObject( suite );
+
+	/* Finalise StGermain. */
+	DiscretisationMesh_Finalise();
+	Base_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return MPI_SUCCESS;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,34 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = Mesh
+
+def_pyc_package = StGermain/Discretisation/Bindings
+def_pyc = __init__.py
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,42 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_pyb = Mesh
+def_pyb_package = StGermain/Discretisation/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/bindings.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/bindings.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,118 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: bindings.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+
+#include <mpi.h>
+#include "StGermain/StGermain/StGermain.h"
+#include "StGermain/Discretisation/Discretisation.h"
+#include <limits.h>
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef Mesh_Python_Methods[] = {
+	{ Mesh_Python_copyright__name__,	Mesh_Python_copyright,		METH_VARARGS, Mesh_Python_copyright__doc__	},
+#if 0
+	{ Mesh_Python_New__name__,		Mesh_Python_New,		METH_VARARGS, Mesh_Python_New__doc__		},
+#endif
+	{ Mesh_Python_Print__name__,		Mesh_Python_Print,		METH_VARARGS, Mesh_Python_Print__doc__		},
+	{ Mesh_Python_Delete__name__,		Mesh_Python_Delete,		METH_VARARGS, Mesh_Python_Delete__doc__		},
+	{ Mesh_Python_GetDictionary__name__,	Mesh_Python_GetDictionary,	METH_VARARGS, Mesh_Python_GetDictionary__doc__	},
+	{ 0, 0, 0, 0 }
+};
+
+
+#if 0
+/* "New" member */
+char Mesh_Python_New__doc__[] = "Create a new Mesh";
+char Mesh_Python_New__name__[] = "New";
+PyObject* Mesh_Python_New( PyObject* self, PyObject* args ) {
+	return PyCObject_FromVoidPtr( Mesh_New(), 0 );
+}
+#endif
+
+/* "Print" member */
+char Mesh_Python_Print__doc__[] = "Print the Mesh";
+char Mesh_Python_Print__name__[] = "Print";
+PyObject* Mesh_Python_Print( PyObject* self, PyObject* args ) {
+	PyObject*	pyMesh;
+	Mesh*		mesh;
+	Stream*		stream = Journal_Register (Info_Type, "myStream");
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMesh ) ) {
+		return NULL;
+	}
+	mesh = (Mesh*)( PyCObject_AsVoidPtr( pyMesh ) );
+	
+	/* Run function */
+	Print( mesh, stream );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Stg_Class_Delete" member */
+char Mesh_Python_Delete__doc__[] = "Stg_Class_Delete/destroy the Mesh";
+char Mesh_Python_Delete__name__[] = "Stg_Class_Delete";
+PyObject* Mesh_Python_Delete( PyObject* self, PyObject* args ) {
+	PyObject*	pyMesh;
+	Mesh*		mesh;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMesh ) ) {
+		return NULL;
+	}
+	mesh = (Mesh*)( PyCObject_AsVoidPtr( pyMesh ) );
+	
+	/* Run function */
+	Stg_Class_Delete( mesh );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "GetDictionary" member */
+char Mesh_Python_GetDictionary__doc__[] = "Get the Dictionary of the Mesh";
+char Mesh_Python_GetDictionary__name__[] = "GetDictionary";
+PyObject* Mesh_Python_GetDictionary( PyObject* self, PyObject* args ) {
+	PyObject*	pyMesh;
+	Mesh*		mesh;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMesh ) ) {
+		return NULL;
+	}
+	mesh = (Mesh*)( PyCObject_AsVoidPtr( pyMesh ) );
+	
+	return PyCObject_FromVoidPtr( mesh->dictionary, 0 );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/bindings.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/bindings.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,63 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Build the binding table(s).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: bindings.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Python_bindings_h__
+#define __Domain_Mesh_Python_bindings_h__
+	
+	extern struct PyMethodDef Mesh_Python_Methods[];
+
+#if 0	/*.... requires bindings to DofLayout and MeshLayout first*/
+	extern char Mesh_Python_New__name__[];
+	extern char Mesh_Python_New__doc__[];
+	PyObject* Mesh_Python_New( PyObject* self, PyObject* args );
+#endif
+	
+	extern char Mesh_Python_Print__name__[];
+	extern char Mesh_Python_Print__doc__[];
+	PyObject* Mesh_Python_Print( PyObject* self, PyObject* args );
+	
+	extern char Mesh_Python_Delete__name__[];
+	extern char Mesh_Python_Delete__doc__[];
+	PyObject* Mesh_Python_Delete( PyObject* self, PyObject* args );
+	
+	extern char Mesh_Python_GetDictionary__name__[];
+	extern char Mesh_Python_GetDictionary__doc__[];
+	PyObject* Mesh_Python_GetDictionary( PyObject* self, PyObject* args );
+	
+#endif /* __Domain_Mesh_Python_bindings_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,43 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+#include "bindings.h"
+#include "misc.h"
+
+char Mesh_Python__doc__[] = "Mesh maintains the state of the discretised information in terms of nodes and elements. ";
+
+void initMesh() {
+	Py_InitModule4( "Mesh", Mesh_Python_Methods, Mesh_Python__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "Can't initialize module Mesh" );
+	}
+	return;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,49 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../../../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+include Makefile.def
+
+pyb = ${def_pyb}
+
+SRCS = ${def_srcs}
+PYTHON_PACKAGE = ${def_pyb_package}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_LIBS = -lStGermainDiscretisation -lStGermainBase
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/misc.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/misc.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,40 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: misc.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+#include "misc.h"
+
+
+char Mesh_Python_copyright__doc__[] = "";
+char Mesh_Python_copyright__name__[] = "copyright";
+
+PyObject* Mesh_Python_copyright( PyObject* self, PyObject* args ) {
+	return Py_BuildValue( "s", "StGermain.Discretisation.Bindings.Mesh Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/Mesh/misc.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/Mesh/misc.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Miscellaneous module things.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: misc.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_Python_misc_h__
+#define __Domain_Mesh_Python_misc_h__
+	
+	/* "copyright" member */
+	extern char Mesh_Python_copyright__name__[];
+	extern char Mesh_Python_copyright__doc__[];
+	PyObject* Mesh_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __Domain_Mesh_Python_misc_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/__init__.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/__init__.py	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def copyright():
+	return "StGermain.Discretisation.Bindings Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $"
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Bindings/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Bindings/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,43 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+include Makefile.def
+
+subdirs = ${def_sub}
+
+PYTHON_PACKAGE = ${def_pyc_package}
+pyc = ${def_pyc}
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Python/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,34 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = Bindings
+
+def_pyc_package = StGermain/Discretisation
+def_pyc = __init__.py
diff -r 9f22ec4f42ee -r 5667007f4799 Python/__init__.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/__init__.py	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def copyright():
+	return "StGermain.Discretisation Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $"
diff -r 9f22ec4f42ee -r 5667007f4799 Python/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Python/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,45 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3864 2006-10-16 09:21:03Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+include Makefile.def
+
+ifdef HAVE_PYTHON
+	subdirs = ${def_sub}
+
+	PYTHON_PACKAGE = ${def_pyc_package}
+	pyc = ${def_pyc}
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,10 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+subdirs := src tests
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowCosinePlane.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowCosinePlane.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,295 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) )
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: BelowCosinePlane.c 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "BelowPlane.h"
+#include "BelowCosinePlane.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type BelowCosinePlane_Type = "BelowCosinePlane";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+BelowCosinePlane* BelowCosinePlane_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue,
+		double                                amplitude,
+		double                                period,
+		double                                phase )
+{
+	BelowCosinePlane* self = (BelowCosinePlane*) _BelowCosinePlane_DefaultNew( name );
+
+	BelowCosinePlane_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		offset,
+		width,
+		minValue,
+		maxValue,
+		amplitude,
+		period,
+		phase ) ;
+	return self;
+}
+
+BelowCosinePlane* _BelowCosinePlane_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	BelowCosinePlane* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(BelowCosinePlane) );
+	self = (BelowCosinePlane*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _BelowCosinePlane_Init( void* belowPlane, double offset, XYZ width, double amplitude, double period, double phase ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+
+	self->amplitude = amplitude;
+	self->period = period;
+	self->phase = phase;
+}
+
+
+void BelowCosinePlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset, 
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue,
+		double                                amplitude,
+		double                                period,
+		double                                phase )
+{
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+
+	BelowPlane_InitAll( self, dim, centre, alpha, beta, gamma, offset, width, minValue, maxValue );
+	_BelowCosinePlane_Init( self, offset, width, amplitude, period, phase );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _BelowCosinePlane_Delete( void* belowPlane ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _BelowCosinePlane_Print( void* belowPlane, Stream* stream ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _BelowCosinePlane_Copy( void* belowPlane, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	BelowCosinePlane*	self = (BelowCosinePlane*)belowPlane;
+	BelowCosinePlane*	newBelowCosinePlane;
+	
+	newBelowCosinePlane = (BelowCosinePlane*)_BelowPlane_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newBelowCosinePlane->amplitude = self->amplitude;
+	newBelowCosinePlane->period = self->period;
+	newBelowCosinePlane->phase = self->phase;
+	
+	return (void*)newBelowCosinePlane;
+}
+
+void* _BelowCosinePlane_DefaultNew( Name name ) {
+	return (void*) _BelowCosinePlane_New(
+			sizeof(BelowCosinePlane),
+			BelowCosinePlane_Type,
+			_BelowCosinePlane_Delete,
+			_BelowCosinePlane_Print,
+			_BelowCosinePlane_Copy,
+			_BelowCosinePlane_DefaultNew,
+			_BelowCosinePlane_Construct,
+			_BelowCosinePlane_Build,
+			_BelowCosinePlane_Initialise,
+			_BelowCosinePlane_Execute,
+			_BelowCosinePlane_Destroy,
+			_BelowCosinePlane_IsCoordInside,
+			_BelowCosinePlane_CalculateVolume,
+			name );
+}
+
+
+void _BelowCosinePlane_Construct( void* belowPlane, Stg_ComponentFactory* cf, void* data ) {
+	BelowCosinePlane*            self          = (BelowCosinePlane*) belowPlane;
+	double                       amplitude;
+	double                       period;
+	double                       phase;
+
+	_BelowPlane_Construct( self, cf, data );
+
+	amplitude = Stg_ComponentFactory_GetDouble( cf, self->name, "amplitude", 0.1 );
+	period = Stg_ComponentFactory_GetDouble( cf, self->name, "period", 2*M_PI );
+	phase = Stg_ComponentFactory_GetDouble( cf, self->name, "phase", 0.0 );
+
+	_BelowCosinePlane_Init( self, self->offset, self->width, amplitude, period, phase );
+}
+
+void _BelowCosinePlane_Build( void* belowPlane, void* data ) {
+	BelowCosinePlane*	self = (BelowCosinePlane*)belowPlane;
+
+	_Stg_Shape_Build( self, data );
+}
+void _BelowCosinePlane_Initialise( void* belowPlane, void* data ) {
+	BelowCosinePlane*	self = (BelowCosinePlane*)belowPlane;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _BelowCosinePlane_Execute( void* belowPlane, void* data ) {
+	BelowCosinePlane*	self = (BelowCosinePlane*)belowPlane;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _BelowCosinePlane_Destroy( void* belowPlane, void* data ) {
+	BelowCosinePlane*	self = (BelowCosinePlane*)belowPlane;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _BelowCosinePlane_IsCoordInside( void* belowPlane, Coord coord ) {
+	BelowCosinePlane*            self       = (BelowCosinePlane*)belowPlane;
+	Coord                        newCoord;
+
+	double                       x, y;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+
+	x = newCoord[ I_AXIS ];
+
+	y =  self->offset + self->amplitude * cos( (2*M_PI * x /self->period)  + self->phase );
+
+	if ( fabs( newCoord[ J_AXIS ] < y) ) {
+		return True;
+	}
+	return False;
+}
+
+double _BelowCosinePlane_CalculateVolume( void* belowPlane ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+	double volume;
+	double period = self->period;
+	double dx = self->width[ I_AXIS ];
+
+	/* using the identity sin(u)-sin(v) = 2 * cos( (u+v)/2 ) * sin( (u-v)/2 ) */
+
+	volume = self->offset*dx + 2 * self->amplitude * period / (2*M_PI) *
+				 (
+				 cos( (M_PI/period) * (self->maxValue[I_AXIS] - self->minValue[I_AXIS] ) + self->phase) *
+				 sin( (M_PI/period) * (self->maxValue[I_AXIS] - self->minValue[I_AXIS]) )
+				 );
+
+	if ( self->dim == 3 ) 
+		volume = self->width[ K_AXIS ] * volume;
+	
+	return volume;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowCosinePlane.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowCosinePlane.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: BelowCosinePlane.h 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_BelowCosinePlaneClass_h__
+#define __StGermain_Domain_Shape_BelowCosinePlaneClass_h__
+
+	/* Textual name of this class */
+	extern const Type BelowCosinePlane_Type;
+
+	/* BelowCosinePlane information */
+	#define __BelowCosinePlane \
+		/* General info */ \
+		__BelowPlane \
+		/* Virtual Info */\
+		\
+		double                  amplitude;  \
+		double                  period; \
+		double                  phase;
+
+	struct BelowCosinePlane { __BelowCosinePlane };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	BelowCosinePlane* _BelowCosinePlane_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _BelowCosinePlane_Init( void* belowPlane, double offset, XYZ width, double amplitude, double period, double phase ) ;
+	void BelowCosinePlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue,
+		double                                amplitude,
+		double                                period,
+		double                                phase );
+
+	/* Stg_Class_Delete BelowCosinePlane implementation */
+	void _BelowCosinePlane_Delete( void* belowPlane );
+	void _BelowCosinePlane_Print( void* belowPlane, Stream* stream );
+	#define BelowCosinePlane_Copy( self ) \
+		(BelowCosinePlane*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define BelowCosinePlane_DeepCopy( self ) \
+		(BelowCosinePlane*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _BelowCosinePlane_Copy( void* belowPlane, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _BelowCosinePlane_DefaultNew( Name name ) ;
+	void _BelowCosinePlane_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _BelowCosinePlane_Build( void* belowPlane, void* data ) ;
+	void _BelowCosinePlane_Initialise( void* belowPlane, void* data ) ;
+	void _BelowCosinePlane_Execute( void* belowPlane, void* data );
+	void _BelowCosinePlane_Destroy( void* belowPlane, void* data ) ;
+	
+	Bool _BelowCosinePlane_IsCoordInside( void* belowPlane, Coord coord ) ;
+
+	double _BelowCosinePlane_CalculateVolume( void* belowPlane );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowCosinePlane.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowCosinePlane.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">BelowCosinePlane</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">BelowPlane</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">Defines a cosine shape, with the region less than the function included</param>
+<param name="Equation">$y \leq a_0 + b_0sin( (2\pi/T) x + \phi)$</param>
+
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">offset</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">The offset in the dependent variable, $ a_0 $ in the equation. Traditionally this would be the y-axis.</param>
+	</struct>
+	<struct>
+		<param name="Name">amplitude</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.1</param>
+		<param name="Description">Is the amplitude of the oscillations, $ b_0 $ in the equation</param>
+	</struct>
+	<struct>
+		<param name="Name">period</param>
+		<param name="Type">Double</param>
+		<param name="Default">2*&pi;</param>
+		<param name="Description"> $ T $ in the equation</param>
+	</struct>
+	<struct>
+		<param name="Name">phase</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">$ \phi $ in the equation</param>
+	</struct>
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowPlane.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowPlane.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,284 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) )
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: BelowPlane.c 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "BelowPlane.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type BelowPlane_Type = "BelowPlane";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+BelowPlane* BelowPlane_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue )
+{
+	BelowPlane* self = (BelowPlane*) _BelowPlane_DefaultNew( name );
+
+	BelowPlane_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		offset,
+		width,
+		minValue,
+		maxValue );
+	return self;
+}
+
+BelowPlane* _BelowPlane_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	BelowPlane* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(BelowPlane) );
+	self = (BelowPlane*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _BelowPlane_Init( void* belowPlane, double offset, XYZ width, XYZ minValue, XYZ maxValue ) {
+	BelowPlane* self = (BelowPlane*)belowPlane;
+
+	self->offset = offset;
+
+	memcpy( self->width, width, sizeof(XYZ) );
+	memcpy( self->minValue, maxValue, sizeof(XYZ) );
+	memcpy( self->maxValue, maxValue, sizeof(XYZ) );
+}
+
+
+void BelowPlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offest,
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue)
+{
+	BelowPlane* self = (BelowPlane*)belowPlane;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_BelowPlane_Init( self, offest, width, minValue, maxValue );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _BelowPlane_Delete( void* belowPlane ) {
+	BelowPlane* self = (BelowPlane*)belowPlane;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _BelowPlane_Print( void* belowPlane, Stream* stream ) {
+	BelowPlane* self = (BelowPlane*)belowPlane;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _BelowPlane_Copy( void* belowPlane, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	BelowPlane*	self = (BelowPlane*)belowPlane;
+	BelowPlane*	newBelowPlane;
+	
+	newBelowPlane = (BelowPlane*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newBelowPlane->offset = self->offset;
+	
+	return (void*)newBelowPlane;
+}
+
+void* _BelowPlane_DefaultNew( Name name ) {
+	return (void*) _BelowPlane_New(
+			sizeof(BelowPlane),
+			BelowPlane_Type,
+			_BelowPlane_Delete,
+			_BelowPlane_Print,
+			_BelowPlane_Copy,
+			_BelowPlane_DefaultNew,
+			_BelowPlane_Construct,
+			_BelowPlane_Build,
+			_BelowPlane_Initialise,
+			_BelowPlane_Execute,
+			_BelowPlane_Destroy,
+			_BelowPlane_IsCoordInside,
+			_BelowPlane_CalculateVolume,
+			name );
+}
+
+
+void _BelowPlane_Construct( void* belowPlane, Stg_ComponentFactory* cf, void* data ) {
+	BelowPlane*	             self          = (BelowPlane*) belowPlane;
+	double                       offset;
+	XYZ                          minValue;
+	XYZ                          maxValue;
+	XYZ                          width;
+
+	_Stg_Shape_Construct( self, cf, data );
+
+	offset = Stg_ComponentFactory_GetDouble( cf, self->name, "offset", 0.5 );
+
+	minValue[ I_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "minX", 0.0 );
+	minValue[ J_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "minY", 0.0 );
+	minValue[ K_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "minZ", 0.0 );
+
+	maxValue[ I_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "maxX", 1.0 );
+	maxValue[ J_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "maxY", 1.0 );
+	maxValue[ K_AXIS ] = Stg_ComponentFactory_GetRootDictDouble( cf, "maxZ", 1.0 );
+
+	width[ I_AXIS ] = maxValue[ I_AXIS ] - minValue[ I_AXIS ] ;
+	width[ J_AXIS ] = maxValue[ J_AXIS ] - minValue[ J_AXIS ] ;
+	width[ K_AXIS ] = maxValue[ K_AXIS ] - minValue[ K_AXIS ] ;
+
+	_BelowPlane_Init( self, offset, width, minValue, maxValue );
+}
+
+void _BelowPlane_Build( void* belowPlane, void* data ) {
+	BelowPlane*	self = (BelowPlane*)belowPlane;
+
+	_Stg_Shape_Build( self, data );
+}
+void _BelowPlane_Initialise( void* belowPlane, void* data ) {
+	BelowPlane*	self = (BelowPlane*)belowPlane;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _BelowPlane_Execute( void* belowPlane, void* data ) {
+	BelowPlane*	self = (BelowPlane*)belowPlane;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _BelowPlane_Destroy( void* belowPlane, void* data ) {
+	BelowPlane*	self = (BelowPlane*)belowPlane;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _BelowPlane_IsCoordInside( void* belowPlane, Coord coord ) {
+	BelowPlane*            self       = (BelowPlane*)belowPlane;
+	Coord           newCoord;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+
+	if ( fabs( newCoord[ J_AXIS ] < self->offset ) ) {
+		return True;
+	}
+	return False;
+}
+
+double _BelowPlane_CalculateVolume( void* belowPlane ) {
+	BelowPlane* self = (BelowPlane*)belowPlane;
+	double volume;
+
+	if ( self->dim == 2 ) {
+		volume = self->width[ I_AXIS ] * self->offset;
+	}
+	else {
+		volume = self->width[ I_AXIS ] * self->width[ K_AXIS ] * self->offset;
+	}
+
+	return volume;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowPlane.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowPlane.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: BelowPlane.h 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_BelowPlaneClass_h__
+#define __StGermain_Domain_Shape_BelowPlaneClass_h__
+
+	/* Textual name of this class */
+	extern const Type BelowPlane_Type;
+
+	/* BelowPlane information */
+	#define __BelowPlane \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		double                  offset; \
+		XYZ                     width; /* The dimesions of a cubiod mesh, for calc volume */ \
+		XYZ                     minValue; \
+		XYZ                     maxValue; \
+
+	struct BelowPlane { __BelowPlane };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	BelowPlane* _BelowPlane_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _BelowPlane_Init( void* belowPlane, double offset, XYZ width, XYZ minValue, XYZ maxValue ) ;
+	void BelowPlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width,
+		XYZ                                   minValue,
+		XYZ                                   maxValue );
+
+	/* Stg_Class_Delete BelowPlane implementation */
+	void _BelowPlane_Delete( void* belowPlane );
+	void _BelowPlane_Print( void* belowPlane, Stream* stream );
+	#define BelowPlane_Copy( self ) \
+		(BelowPlane*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define BelowPlane_DeepCopy( self ) \
+		(BelowPlane*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _BelowPlane_Copy( void* belowPlane, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _BelowPlane_DefaultNew( Name name ) ;
+	void _BelowPlane_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _BelowPlane_Build( void* belowPlane, void* data ) ;
+	void _BelowPlane_Initialise( void* belowPlane, void* data ) ;
+	void _BelowPlane_Execute( void* belowPlane, void* data );
+	void _BelowPlane_Destroy( void* belowPlane, void* data ) ;
+	
+	Bool _BelowPlane_IsCoordInside( void* belowPlane, Coord coord ) ;
+
+	double _BelowPlane_CalculateVolume( void* belowPlane );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/BelowPlane.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/BelowPlane.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">BelowPlane</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">offset</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.5</param>
+		<param name="Description">...</param>
+	</struct>
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Box.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Box.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,284 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) )
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Box.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Box.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type Box_Type = "Box";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+Box* Box_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		XYZ                                   width )
+{
+	Box* self = (Box*) _Box_DefaultNew( name );
+
+	Box_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		width) ;
+	return self;
+}
+
+Box* _Box_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Box* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Box) );
+	self = (Box*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Box_Init( void* box, XYZ width ) {
+	Box* self = (Box*)box;
+	
+	memcpy( self->width, width, sizeof(XYZ));
+}
+
+
+void Box_InitAll( 
+		void*                                 box, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		XYZ                                   width) 
+{
+	Box* self = (Box*)box;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_Box_Init( self, width );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Box_Delete( void* box ) {
+	Box* self = (Box*)box;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Box_Print( void* box, Stream* stream ) {
+	Box* self = (Box*)box;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Box_Copy( void* box, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Box*	self = (Box*)box;
+	Box*	newBox;
+	
+	newBox = (Box*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	memcpy( newBox->width, self->width, sizeof(XYZ));
+	
+	return (void*)newBox;
+}
+
+void* _Box_DefaultNew( Name name ) {
+	return (void*) _Box_New(
+			sizeof(Box),
+			Box_Type,
+			_Box_Delete,
+			_Box_Print,
+			_Box_Copy,
+			_Box_DefaultNew,
+			_Box_Construct,
+			_Box_Build,
+			_Box_Initialise,
+			_Box_Execute,
+			_Box_Destroy,
+			_Box_IsCoordInside,
+			_Box_CalculateVolume,
+			name );
+}
+
+
+void _Box_Construct( void* box, Stg_ComponentFactory* cf, void* data ) {
+	Box*	             self          = (Box*) box;
+	Dictionary*          dictionary    = Dictionary_GetDictionary( cf->componentDict, self->name );
+	XYZ                  width;
+	double               start, end;
+	Dictionary_Entry_Key startKey      = StG_Strdup("startX");
+	Dictionary_Entry_Key endKey        = StG_Strdup("endX");
+	Dictionary_Entry_Key widthKey      = StG_Strdup("widthX");
+	char*                startCharPtr  = strchr( startKey, 'X' );
+	char*                endCharPtr    = strchr( endKey, 'X' );
+	char*                widthCharPtr  = strchr( widthKey, 'X' );
+	char                 axisLetters[] = {'X','Y','Z'};
+	Dimension_Index      dim_I;
+
+	_Stg_Shape_Construct( self, cf, data );
+
+	for ( dim_I = 0 ; dim_I < 3 ; dim_I++ ) {
+		*startCharPtr = axisLetters[ dim_I ];
+		*endCharPtr   = axisLetters[ dim_I ];
+		*widthCharPtr = axisLetters[ dim_I ];
+
+		/* Check to see whether the user wants to specify the start and end explicitly */
+		if ( Dictionary_Get( dictionary, startKey ) && Dictionary_Get( dictionary, endKey ) ) {
+			start = Stg_ComponentFactory_GetDouble( cf, self->name, startKey, 0.0 );
+			end   = Stg_ComponentFactory_GetDouble( cf, self->name, endKey,   0.0 );
+
+			width[ dim_I ] = end - start;
+			self->centre[ dim_I ] = start + 0.5 * width[dim_I];
+		}
+		else 
+			width[ dim_I ] = Stg_ComponentFactory_GetDouble( cf, self->name, widthKey, 0.0 );
+	}
+
+	Memory_Free( startKey );
+	Memory_Free( endKey );
+	Memory_Free( widthKey );
+
+	_Box_Init( self, width );
+}
+
+void _Box_Build( void* box, void* data ) {
+	Box*	self = (Box*)box;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Box_Initialise( void* box, void* data ) {
+	Box*	self = (Box*)box;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Box_Execute( void* box, void* data ) {
+	Box*	self = (Box*)box;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Box_Destroy( void* box, void* data ) {
+	Box*	self = (Box*)box;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _Box_IsCoordInside( void* box, Coord coord ) {
+	Box*            self       = (Box*)box;
+	Coord           newCoord;
+	Dimension_Index dim_I;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+	
+	for ( dim_I = 0 ; dim_I < self->dim ; dim_I++ ) {
+		if ( fabs( newCoord[ dim_I ] ) > 0.5 * self->width[ dim_I ] ) 
+			return False;
+	}
+	return True;
+}
+
+double _Box_CalculateVolume( void* box ) {
+	Box* self = (Box*)box;
+	Dimension_Index dim_I;
+	double result;
+	result = 1.0;
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		result *= self->width[dim_I];
+	}
+	return result;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Box.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Box.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Box.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_BoxClass_h__
+#define __StGermain_Domain_Shape_BoxClass_h__
+
+	/* Textual name of this class */
+	extern const Type Box_Type;
+
+	/* Box information */
+	#define __Box \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		XYZ                                   width;            \
+
+	struct Box { __Box };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Box* _Box_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Box_Init( void* box, XYZ width ) ;
+	void Box_InitAll( 
+		void*                                 box, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		XYZ                                   width) ;
+
+	/* Stg_Class_Delete Box implementation */
+	void _Box_Delete( void* box );
+	void _Box_Print( void* box, Stream* stream );
+	#define Box_Copy( self ) \
+		(Box*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Box_DeepCopy( self ) \
+		(Box*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Box_Copy( void* box, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Box_DefaultNew( Name name ) ;
+	void _Box_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Box_Build( void* box, void* data ) ;
+	void _Box_Initialise( void* box, void* data ) ;
+	void _Box_Execute( void* box, void* data );
+	void _Box_Destroy( void* box, void* data ) ;
+	
+	Bool _Box_IsCoordInside( void* box, Coord coord ) ;
+
+	double _Box_CalculateVolume( void* box );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Box.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Box.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Box</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">startKey</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">endKey</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">widthKey</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ConvexHull.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ConvexHull.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,358 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ConvexHull.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "ConvexHull.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type ConvexHull_Type = "ConvexHull";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+ConvexHull* ConvexHull_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount
+		)
+{
+	ConvexHull* self = (ConvexHull*)_ConvexHull_DefaultNew( name );
+
+	ConvexHull_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		vertexList,
+		vertexCount);
+	return self;
+}
+
+ConvexHull* _ConvexHull_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	ConvexHull* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ConvexHull) );
+	self = (ConvexHull*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	
+	return self;
+}
+
+void _ConvexHull_Init( void* convexHull, Coord_List vertexList, Index vertexCount) {
+	ConvexHull* self = (ConvexHull*)convexHull;
+	Index       numberOfFaces;
+	Index       dimensions; /* this probably doesn't need to be here */
+	Index       vertex_I;
+	
+	double        tmpVector1[3];
+	double        tmpVector2[3];
+	double        tmpVector3[3];
+	
+	dimensions = 3;
+	/* Copy vertexCount */
+	self->vertexCount = vertexCount;
+	/* Copy vertexList */
+	self->vertexList = Memory_Alloc_Array( Coord, vertexCount, "vertexList" );
+	memcpy( self->vertexList , vertexList, sizeof(Coord) * vertexCount );
+	
+	/* Now Construct normal and store them in self->facesList */
+	
+	/* 1st allocate memory	 */
+	if(vertexCount == 3) numberOfFaces = 3; 
+	else                 numberOfFaces = 4; 
+	
+	self->facesList = Memory_Alloc_Array( XYZ, numberOfFaces, "facesList" );
+
+	/* 2nd Calculate Normals on faces */
+	/* in 2-D */
+	if( numberOfFaces == 3 ) {
+	printf("THE VERTEXCOUNT IS %d\n", vertexCount);
+		for( vertex_I = 0; vertex_I < vertexCount ; vertex_I++ ) {
+			
+			StGermain_VectorSubtraction(tmpVector1, vertexList[ vertex_I % 3 ], vertexList[ (vertex_I+1) % 3 ], dimensions);
+			StGermain_VectorSubtraction(tmpVector2, vertexList[ vertex_I % 3 ], vertexList[ (vertex_I+2) % 3 ], dimensions);
+				
+			tmpVector3[0] = tmpVector1[1];
+			tmpVector3[1] = -1 * tmpVector1[0];
+			tmpVector3[2] = 0;
+                        /*			Now Vec3 is possibly normal vector */
+				if( StGermain_VectorDotProduct(tmpVector3, tmpVector2, dimensions) < 0 )
+				{ tmpVector3[0] = -1*tmpVector3[0]; tmpVector3[1] = -1 * tmpVector3[1]; }
+			
+			printf("vector normal = (%g, %g, %g)\n", tmpVector3[0], tmpVector3[1],  tmpVector3[2] ); 
+			memcpy( self->facesList[ vertex_I ], tmpVector3, sizeof(XYZ) );
+		}
+	}
+	else {
+		for( vertex_I = 0 ; vertex_I < vertexCount ; vertex_I++ ) {
+			StGermain_NormalToPlane( tmpVector3, vertexList[ vertex_I % 4], vertexList[ (vertex_I+1) % 4], vertexList[ (vertex_I+2) % 4]);
+			StGermain_VectorSubtraction( tmpVector2, vertexList[ vertex_I % 4 ], vertexList[ (vertex_I+3) % 4 ], dimensions);
+
+			if( StGermain_VectorDotProduct(tmpVector3, tmpVector2, dimensions) < 0 ) 
+				{ Vec_Div3D( tmpVector3, tmpVector3, -1.0 ); }
+			printf("vector normal = (%g, %g, %g)\n", tmpVector3[0], tmpVector3[1],  tmpVector3[2] ); 
+			memcpy( self->facesList[ vertex_I ], tmpVector3, sizeof(XYZ) );
+
+		}
+	}
+}
+	
+void ConvexHull_InitAll( 
+		void*                                 convexHull, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount
+		)
+{
+	ConvexHull* self = (ConvexHull*)convexHull;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma);
+	_ConvexHull_Init( self, vertexList, vertexCount);
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _ConvexHull_Delete( void* convexHull ) {
+	ConvexHull*       self       = (ConvexHull*)convexHull;
+	Coord_List        vertexList = self->vertexList;
+	XYZ*              facesList  = self->facesList;
+	
+
+	Memory_Free( vertexList );
+	Memory_Free( facesList );
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _ConvexHull_Print( void* convexHull, Stream* stream ) {
+	ConvexHull* self = (ConvexHull*)convexHull;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _ConvexHull_Copy( void* convexHull, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ConvexHull*	self = (ConvexHull*)convexHull;
+	ConvexHull*	newConvexHull;
+	
+	newConvexHull = (ConvexHull*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newConvexHull->vertexList = Memory_Alloc_Array( Coord, self->vertexCount, "vertexList" );
+	memcpy( newConvexHull->vertexList , self->vertexList, sizeof(Coord) * self->vertexCount );
+
+	newConvexHull->facesList = Memory_Alloc_Array( XYZ, self->vertexCount, "facesList" );
+	memcpy( newConvexHull->facesList, self->facesList, sizeof(XYZ) * self->vertexCount );
+
+	newConvexHull->vertexList  = self->vertexList;
+	newConvexHull->vertexCount = self->vertexCount;
+	newConvexHull->facesList   = self->facesList;
+	
+	return (void*)newConvexHull;
+}
+
+void* _ConvexHull_DefaultNew( Name name ) {
+	return (void*) _ConvexHull_New(
+			sizeof(ConvexHull),
+			ConvexHull_Type,
+			_ConvexHull_Delete,
+			_ConvexHull_Print,
+			_ConvexHull_Copy,
+			_ConvexHull_DefaultNew,
+			_ConvexHull_Construct,
+			_ConvexHull_Build,
+			_ConvexHull_Initialise,
+			_ConvexHull_Execute,
+			_ConvexHull_Destroy,
+			_ConvexHull_IsCoordInside,
+			_ConvexHull_CalculateVolume,
+			name );
+}
+
+
+void _ConvexHull_Construct( void* convexHull, Stg_ComponentFactory* cf, void* data ) {
+	ConvexHull*             self       = (ConvexHull*)convexHull;
+	Index                   vertexCount;
+	Index                   vertex_I;
+	Coord_List              vertexList;
+	double*                 coord;
+	Dictionary_Entry_Value* optionSet;
+	Dictionary_Entry_Value* optionsList;
+	Dictionary*             dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+	Stream*                 stream     = cf->infoStream;
+
+	
+	_Stg_Shape_Construct( self, cf, data );
+
+	optionsList = Dictionary_Get( dictionary, "verticies" );
+	Journal_Firewall( optionsList != NULL, 
+		Journal_Register( Error_Type, self->type ),
+		"In func %s: The list 'verticies' specifying the convexHull is NULL.\n", __func__);
+
+	vertexCount = Dictionary_Entry_Value_GetCount(optionsList);
+	Journal_Firewall( ( self->dim == 2 && vertexCount < 4 ) || ( self->dim == 3 && vertexCount < 5 ),
+		Journal_Register( Error_Type, self->type ),
+		"In func %s: Sorry, but we got lazy, you can only specify 3 (2D) or 4 (3D) points. " 
+		"Please feel free to hassle developers for this feature.\n", __func__);
+
+	/* Allocate space */
+	vertexList = Memory_Alloc_Array( Coord , vertexCount, "Vertex Array" );
+	memset( vertexList, 0, vertexCount * sizeof(Coord) );
+	
+	Stream_Indent( stream );
+	for ( vertex_I = 0 ; vertex_I < vertexCount ; vertex_I++) { 
+		optionSet = Dictionary_Entry_Value_GetElement(optionsList, vertex_I );
+		coord = vertexList[vertex_I];
+
+		/* Read Vertex */
+		coord[ I_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "x"));
+		coord[ J_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "y"));
+		
+		coord[ K_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "z"));
+		Journal_PrintfL( stream, 2, "(%0.3g, %0.3g, %0.3g)\n", coord[ I_AXIS ], coord[ J_AXIS ], coord[ K_AXIS ] );
+		optionSet = optionSet->next;
+	}
+	Stream_UnIndent( stream );
+
+
+	_ConvexHull_Init( self, vertexList, vertexCount);
+}
+
+void _ConvexHull_Build( void* convexHull, void* data ) {
+	ConvexHull*	self = (ConvexHull*)convexHull;
+
+	_Stg_Shape_Build( self, data );
+}
+void _ConvexHull_Initialise( void* convexHull, void* data ) {
+	ConvexHull*	self = (ConvexHull*)convexHull;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _ConvexHull_Execute( void* convexHull, void* data ) {
+	ConvexHull*	self = (ConvexHull*)convexHull;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _ConvexHull_Destroy( void* convexHull, void* data ) {
+	ConvexHull*	self = (ConvexHull*)convexHull;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+Bool _ConvexHull_IsCoordInside( void* convexHull, Coord point ) {
+	ConvexHull*     self                 = (ConvexHull*)convexHull;
+	Index           vertex_I;
+	XYZ             tmpVector;
+	/*Stream*                 stream     = cf->infoStream; */
+
+
+	/* for the particle to be inside the shape, the dot product of its position vector with the shape face normal's must be non-positive */
+	for( vertex_I = 0 ; vertex_I < self->vertexCount ; vertex_I++ ) {
+		StGermain_VectorSubtraction(tmpVector, point, self->vertexList[ vertex_I ], self->dim );
+		if( StGermain_VectorDotProduct(self->facesList[ vertex_I ], tmpVector, self->dim ) > 0 ) {
+			return False;
+		}
+	}
+	return True;
+}
+
+double _ConvexHull_CalculateVolume( void* convexHull ) {
+	assert( 0 );
+	return 0.0;
+}
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ConvexHull.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ConvexHull.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,126 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ConvexHull.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_ConvexHullClass_h__
+#define __StGermain_Domain_Shape_ConvexHullClass_h__
+
+	/* Textual name of this class */
+	extern const Type ConvexHull_Type;
+
+	/* ConvexHull information */
+	#define __ConvexHull \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		Coord_List              vertexList;    \
+		Index                   vertexCount;   \
+		XYZ*                    facesList;     \
+
+	struct ConvexHull { __ConvexHull };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	ConvexHull* ConvexHull_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount);
+		
+	ConvexHull* _ConvexHull_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _ConvexHull_Init( void* convexHull, Coord_List vertexList, Index vertexCount);
+	void ConvexHull_InitAll( 
+		void*                                 convexHull, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount) ;
+		
+	/* Stg_Class_Delete ConvexHull implementation */
+	void _ConvexHull_Delete( void* convexHull );
+	void _ConvexHull_Print( void* convexHull, Stream* stream );
+	#define ConvexHull_Copy( self ) \
+		(ConvexHull*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ConvexHull_DeepCopy( self ) \
+		(ConvexHull*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _ConvexHull_Copy( void* convexHull, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _ConvexHull_DefaultNew( Name name ) ;
+	void _ConvexHull_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _ConvexHull_Build( void* convexHull, void* data ) ;
+	void _ConvexHull_Initialise( void* convexHull, void* data ) ;
+	void _ConvexHull_Execute( void* convexHull, void* data );
+	void _ConvexHull_Destroy( void* convexHull, void* data ) ;
+	
+	Bool _ConvexHull_IsCoordInside( void* convexHull, Coord coord ) ;
+	double _ConvexHull_CalculateVolume( void* convexHull );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ConvexHull.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ConvexHull.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ConvexHull</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Cylinder.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Cylinder.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,306 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Cylinder.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Cylinder.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type Cylinder_Type = "Cylinder";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+Cylinder* Cylinder_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius, 
+		XYZ                                   start, 
+		XYZ                                   end, 
+		Axis                                  perpendicularAxis )
+{
+	Cylinder* self = (Cylinder*) _Cylinder_DefaultNew( name );
+
+	Cylinder_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		radius,
+		start,
+		end,
+		perpendicularAxis ) ;
+	return self;
+}
+
+Cylinder* _Cylinder_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Cylinder* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Cylinder) );
+	self = (Cylinder*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	
+	return self;
+}
+
+void _Cylinder_Init( Cylinder* self, double radius, XYZ start, XYZ end, Axis perpendicularAxis ) {
+	memcpy( self->start, start, sizeof(XYZ));
+	memcpy( self->end, end, sizeof(XYZ));
+	self->perpendicularAxis = perpendicularAxis;
+	self->radius = radius;
+}
+
+
+void Cylinder_InitAll( 
+		void*                                 cylinder, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius, 
+		XYZ                                   start, 
+		XYZ                                   end, 
+		Axis                                  perpendicularAxis )
+{
+	Cylinder* self = (Cylinder*)cylinder;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_Cylinder_Init( self, radius, start, end, perpendicularAxis );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Cylinder_Delete( void* cylinder ) {
+	Cylinder* self = (Cylinder*)cylinder;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Cylinder_Print( void* cylinder, Stream* stream ) {
+	Cylinder* self = (Cylinder*)cylinder;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Cylinder_Copy( void* cylinder, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Cylinder*	self = (Cylinder*)cylinder;
+	Cylinder*	newCylinder;
+	
+	newCylinder = (Cylinder*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	memcpy( newCylinder->start, self->start, sizeof(XYZ));
+	memcpy( newCylinder->end, self->end, sizeof(XYZ));
+
+	newCylinder->radius = self->radius;
+	newCylinder->perpendicularAxis = self->perpendicularAxis;
+	
+	return (void*)newCylinder;
+}
+
+void* _Cylinder_DefaultNew( Name name ) {
+	return (void*) _Cylinder_New(
+			sizeof(Cylinder),
+			Cylinder_Type,
+			_Cylinder_Delete,
+			_Cylinder_Print,
+			_Cylinder_Copy,
+			_Cylinder_DefaultNew,
+			_Cylinder_Construct,
+			_Cylinder_Build,
+			_Cylinder_Initialise,
+			_Cylinder_Execute,
+			_Cylinder_Destroy,
+			_Cylinder_IsCoordInside,
+			_Cylinder_CalculateVolume,
+			name );
+}
+
+#define BIG 1.0e99
+
+void _Cylinder_Construct( void* cylinder, Stg_ComponentFactory* cf, void* data ) {
+	Cylinder*            self                     = (Cylinder*) cylinder;
+	XYZ                  start                    = { -BIG, -BIG, -BIG }; 
+	XYZ                  end                      = {  BIG,  BIG,  BIG };
+	double               radius                   = 0.0;
+	Axis                 perpendicularAxis        = I_AXIS;
+	char*                perpendicularAxisName    = NULL;
+
+	_Stg_Shape_Construct( self, cf, data );
+	
+	radius = Stg_ComponentFactory_GetDouble( cf, self->name, "radius", 0.0 );
+
+	start[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "startX", -BIG );
+	start[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "startY", -BIG );
+	start[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "startZ", -BIG );
+	end[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "endX", BIG );
+	end[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "endY", BIG );
+	end[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "endZ", BIG );
+
+	perpendicularAxisName = Stg_ComponentFactory_GetString( cf, self->name, "perpendicularAxis", "x" );
+	switch ( perpendicularAxisName[0] ) {
+		case 'x': case 'X': case 'i': case 'I': case '0':
+			perpendicularAxis = I_AXIS; break;
+		case 'y': case 'Y': case 'j': case 'J': case '1':
+			perpendicularAxis = J_AXIS; break;
+		case 'z': case 'Z': case 'k': case 'K': case '2':
+			perpendicularAxis = K_AXIS; break;
+		default:
+			Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Cannot understand perpendicularAxis '%s'\n", perpendicularAxisName );
+	}
+	
+	_Cylinder_Init( self, radius, start, end, perpendicularAxis );
+}
+
+void _Cylinder_Build( void* cylinder, void* data ) {
+	Cylinder*	self = (Cylinder*)cylinder;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Cylinder_Initialise( void* cylinder, void* data ) {
+	Cylinder*	self = (Cylinder*)cylinder;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Cylinder_Execute( void* cylinder, void* data ) {
+	Cylinder*	self = (Cylinder*)cylinder;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Cylinder_Destroy( void* cylinder, void* data ) {
+	Cylinder*	self = (Cylinder*)cylinder;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _Cylinder_IsCoordInside( void* cylinder, Coord coord ) {
+	Cylinder*       self       = (Cylinder*)cylinder;
+	Coord           newCoord;
+	double          insideOutsideValue;
+	double          x, y, z;
+	Axis            axis_I;
+
+	/* Check whether coord is within min and max values */
+	for ( axis_I = 0 ; axis_I < self->dim ; axis_I++ ) {
+		if ( coord[ axis_I ] < self->start[ axis_I ] || coord[ axis_I ] > self->end[ axis_I ] )
+			return False;
+	}
+	
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+	
+	newCoord[ self->perpendicularAxis ] = 0.0;
+
+	/* Check if coord is within radius */
+	x = newCoord[ I_AXIS ];
+	y = newCoord[ J_AXIS ];
+	if(self->dim == 2)
+		insideOutsideValue = x*x + y*y;
+	else {
+		z = newCoord[ K_AXIS ];
+		insideOutsideValue = x*x + y*y + z*z;
+	}
+	if ( insideOutsideValue > (self->radius * self->radius) )
+		return False;
+
+
+	return True;
+}
+
+double _Cylinder_CalculateVolume( void* cylinder ) {
+	assert( 0 /* unsure how this cylinder is setup...but shouldn't be hard to implement -- Alan */ );
+	return 0.0;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Cylinder.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Cylinder.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,130 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Cylinder.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_CylinderClass_h__
+#define __StGermain_Domain_Shape_CylinderClass_h__
+
+	/* Textual name of this class */
+	extern const Type Cylinder_Type;
+
+	/* Cylinder information */
+	#define __Cylinder \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		double                                radius;           \
+		XYZ                                   start;            \
+		XYZ                                   end;              \
+		Axis                                  perpendicularAxis;
+
+	struct Cylinder { __Cylinder };
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Cylinder* Cylinder_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius, 
+		XYZ                                   start, 
+		XYZ                                   end, 
+		Axis                                  perpendicularAxis );
+
+	Cylinder* _Cylinder_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Cylinder_Init( Cylinder* self, double radius, XYZ start, XYZ end, Axis perpendicularAxis ) ;
+	void Cylinder_InitAll( 
+		void*                                 cylinder, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius, 
+		XYZ                                   start, 
+		XYZ                                   end, 
+		Axis                                  perpendicularAxis );
+
+	/* Stg_Class_Delete Cylinder implementation */
+	void _Cylinder_Delete( void* cylinder );
+	void _Cylinder_Print( void* cylinder, Stream* stream );
+	#define Cylinder_Copy( self ) \
+		(Cylinder*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Cylinder_DeepCopy( self ) \
+		(Cylinder*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Cylinder_Copy( void* cylinder, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Cylinder_DefaultNew( Name name ) ;
+	void _Cylinder_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Cylinder_Build( void* cylinder, void* data ) ;
+	void _Cylinder_Initialise( void* cylinder, void* data ) ;
+	void _Cylinder_Execute( void* cylinder, void* data );
+	void _Cylinder_Destroy( void* cylinder, void* data ) ;
+	
+	Bool _Cylinder_IsCoordInside( void* cylinder, Coord coord ) ;
+	double _Cylinder_CalculateVolume( void* cylinder );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Cylinder.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Cylinder.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Cylinder</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">radius</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">startX</param>
+		<param name="Type">Double</param>
+		<param name="Default">-BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">startY</param>
+		<param name="Type">Double</param>
+		<param name="Default">-BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">startZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">-BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">endX</param>
+		<param name="Type">Double</param>
+		<param name="Default">BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">endY</param>
+		<param name="Type">Double</param>
+		<param name="Default">BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">endZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">BIG</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">perpendicularAxis</param>
+		<param name="Type">String</param>
+		<param name="Default">"x"</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Everywhere.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Everywhere.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,219 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) {
+	IrregTopology* self = (IrregTopology*)ir
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Everywhere.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Everywhere.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type Everywhere_Type = "Everywhere";
+
+/*-------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+Everywhere* Everywhere_New(
+		Name                                  name,
+		Dimension_Index                       dim )
+{
+	Everywhere* self = (Everywhere*) _Everywhere_DefaultNew( name );
+	XYZ         centre = { 0.0,0.0,0.0 };
+
+	Everywhere_InitAll( 
+		self, 
+		dim,
+		centre,
+		0.0,
+		0.0,
+		0.0 );
+	return self;
+}
+
+Everywhere* _Everywhere_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Everywhere* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Everywhere) );
+	self = (Everywhere*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Everywhere_Init( void* everywhere ) {
+}
+
+
+void Everywhere_InitAll( 
+		void*                                 everywhere, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma )
+{
+	Everywhere* self = (Everywhere*)everywhere;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_Everywhere_Init( self );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Everywhere_Delete( void* everywhere ) {
+	Everywhere* self = (Everywhere*)everywhere;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+void _Everywhere_Print( void* everywhere, Stream* stream ) {
+	Everywhere* self = (Everywhere*)everywhere;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+void* _Everywhere_Copy( void* everywhere, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Everywhere*	self = (Everywhere*)everywhere;
+	Everywhere*	newEverywhere;
+	
+	newEverywhere = (Everywhere*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	return (void*)newEverywhere;
+}
+
+void* _Everywhere_DefaultNew( Name name ) {
+	return (void*) _Everywhere_New(
+			sizeof(Everywhere),
+			Everywhere_Type,
+			_Everywhere_Delete,
+			_Everywhere_Print,
+			_Everywhere_Copy,
+			_Everywhere_DefaultNew,
+			_Everywhere_Construct,
+			_Everywhere_Build,
+			_Everywhere_Initialise,
+			_Everywhere_Execute,
+			_Everywhere_Destroy,
+			_Everywhere_IsCoordInside,
+			_Everywhere_CalculateVolume,
+			name );
+}
+
+
+void _Everywhere_Construct( void* everywhere, Stg_ComponentFactory* cf, void* data ) {
+	Everywhere*	self          = (Everywhere*) everywhere;
+
+	_Stg_Shape_Construct( self, cf, data );
+	_Everywhere_Init( self );
+}
+
+void _Everywhere_Build( void* everywhere, void* data ) {
+	Everywhere*	self = (Everywhere*)everywhere;
+	_Stg_Shape_Build( self, data );
+}
+void _Everywhere_Initialise( void* everywhere, void* data ) {
+	Everywhere*	self = (Everywhere*)everywhere;
+	_Stg_Shape_Initialise( self, data );
+}
+void _Everywhere_Execute( void* everywhere, void* data ) {
+	Everywhere*	self = (Everywhere*)everywhere;
+	_Stg_Shape_Execute( self, data );
+}
+void _Everywhere_Destroy( void* everywhere, void* data ) {
+	Everywhere*	self = (Everywhere*)everywhere;
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _Everywhere_IsCoordInside( void* everywhere, Coord coord ) {
+	return True;
+}
+
+double _Everywhere_CalculateVolume( void* everywhere ) {
+	return 1.0;
+}	
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Everywhere.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Everywhere.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Everywhere.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_EverywhereClass_h__
+#define __StGermain_Domain_Shape_EverywhereClass_h__
+
+	/* Textual name of this class */
+	extern const Type Everywhere_Type;
+
+	/* Everywhere information */
+	#define __Everywhere \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+
+	struct Everywhere { __Everywhere };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Everywhere* Everywhere_New(
+		Name                                  name,
+		Dimension_Index                       dim );
+
+	Everywhere* _Everywhere_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Everywhere_Init( void* everywhere ) ;
+	void Everywhere_InitAll( 
+		void*                                 everywhere, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma );
+
+	/* Stg_Class_Delete Everywhere implementation */
+	void _Everywhere_Delete( void* everywhere );
+	void _Everywhere_Print( void* everywhere, Stream* stream );
+	#define Everywhere_Copy( self ) \
+		(Everywhere*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Everywhere_DeepCopy( self ) \
+		(Everywhere*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Everywhere_Copy( void* everywhere, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Everywhere_DefaultNew( Name name ) ;
+	void _Everywhere_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Everywhere_Build( void* everywhere, void* data ) ;
+	void _Everywhere_Initialise( void* everywhere, void* data ) ;
+	void _Everywhere_Execute( void* everywhere, void* data );
+	void _Everywhere_Destroy( void* everywhere, void* data ) ;
+	
+	Bool _Everywhere_IsCoordInside( void* everywhere, Coord coord ) ;
+	double _Everywhere_CalculateVolume( void* everywhere );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Everywhere.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Everywhere.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Everywhere</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,45 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StgDomainShape_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_Finalise_h__
+#define __StGermain_Domain_Shape_Finalise_h__
+	
+	Bool StgDomainShape_Finalise( void ) ;
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,78 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 3599 2006-05-22 00:25:46Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+
+#include "Shape.h"
+
+#include <stdio.h>
+
+Bool StgDomainShape_Init( int* argc, char** argv[] ) {
+	Stg_ComponentRegister* componentRegister = Stg_ComponentRegister_Get_ComponentRegister();
+
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+
+	Stg_ComponentRegister_Add( componentRegister, Superellipsoid_Type, "0", _Superellipsoid_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Box_Type,            "0", _Box_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Everywhere_Type,     "0", _Everywhere_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, ConvexHull_Type,     "0", _ConvexHull_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Sphere_Type,         "0", _Sphere_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, PolygonShape_Type,        "0", _PolygonShape_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Union_Type,          "0", _Union_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Intersection_Type,   "0", _Intersection_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, Cylinder_Type,       "0", _Cylinder_DefaultNew );
+	
+	Stg_ComponentRegister_Add( componentRegister, BelowPlane_Type,     "0", _BelowPlane_DefaultNew );
+	Stg_ComponentRegister_Add( componentRegister, BelowCosinePlane_Type,     "0", _BelowCosinePlane_DefaultNew );
+	
+	#ifdef HAVE_PYTHON
+		Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), PythonShape_Type, "0", _PythonShape_DefaultNew );
+		RegisterParent( PythonShape_Type, Stg_Shape_Type);
+	#endif
+
+	RegisterParent( Stg_Shape_Type,                 Stg_Component_Type );
+	RegisterParent( Superellipsoid_Type,            Stg_Shape_Type );
+	RegisterParent( Box_Type,                       Stg_Shape_Type );
+	RegisterParent( Everywhere_Type,                Stg_Shape_Type );
+	RegisterParent( ConvexHull_Type,                Stg_Shape_Type );
+	RegisterParent( Sphere_Type,                    Stg_Shape_Type );
+	RegisterParent( PolygonShape_Type,                   Stg_Shape_Type );
+	RegisterParent( Union_Type,                     Stg_Shape_Type );
+	RegisterParent( Intersection_Type,              Stg_Shape_Type );
+	RegisterParent( Cylinder_Type,                  Stg_Shape_Type );
+	
+	RegisterParent( BelowPlane_Type,                  Stg_Shape_Type );
+	RegisterParent( BelowCosinePlane_Type,            BelowPlane_Type );
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_Init_h__
+#define __StGermain_Domain_Shape_Init_h__
+	
+	Bool StgDomainShape_Init( int* argc, char** argv[] );
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Intersection.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Intersection.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,326 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Intersection.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Intersection.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type Intersection_Type = "Intersection";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Intersection* Intersection_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		)
+{
+	Intersection* self = (Intersection*)_Intersection_DefaultNew( name );
+
+	Intersection_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		shapeList,
+		shapeCount,
+		isComplement);
+	return self;
+}
+
+Intersection* _Intersection_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Intersection* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Intersection) );
+	self = (Intersection*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside ,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Intersection_Init( void* intersection,  Stg_Shape** shapeList, Index shapeCount, Bool* isComplement ) {
+	Intersection* self = (Intersection*)intersection;
+	
+	self->shapeList    = Memory_Alloc_Array( Stg_Shape* , shapeCount , "shapeList" );
+	self->isComplement = Memory_Alloc_Array( Bool,        shapeCount , "isComplement" );
+
+	memcpy( self->shapeList , shapeList, sizeof(Stg_Shape*) * shapeCount );
+	memcpy( self->isComplement , isComplement, sizeof(Bool) * shapeCount );
+	self->shapeCount = shapeCount;
+}
+
+
+void Intersection_InitAll( 
+		void*                                 intersection, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		)
+{
+	Intersection* self = (Intersection*)intersection;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma);
+	_Intersection_Init( self, shapeList, shapeCount, isComplement );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Intersection_Delete( void* intersection ) {
+	Intersection*       self = (Intersection*)intersection;
+
+	Memory_Free( self->shapeList );
+	Memory_Free( self->isComplement );
+
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Intersection_Print( void* intersection, Stream* stream ) {
+	Intersection* self = (Intersection*)intersection;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Intersection_Copy( void* intersection, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Intersection*	self = (Intersection*)intersection;
+	Intersection*	newIntersection;
+	
+	newIntersection = (Intersection*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newIntersection->shapeList = Memory_Alloc_Array( Stg_Shape*, self->shapeCount, "shapeList" );
+	memcpy( newIntersection->shapeList , self->shapeList, sizeof(Stg_Shape*) * self->shapeCount );
+	
+	newIntersection->isComplement = Memory_Alloc_Array( Bool , self->shapeCount, "isComplement" );
+	memcpy( newIntersection->isComplement , self->isComplement, sizeof(Bool) * self->shapeCount );
+
+	newIntersection->isComplement = self->isComplement;
+	newIntersection->shapeList = self->shapeList;
+	newIntersection->shapeCount = self->shapeCount;
+	
+	return (void*)newIntersection;
+}
+
+void* _Intersection_DefaultNew( Name name ) {
+	return (void*) _Intersection_New(
+			sizeof(Intersection),
+			Intersection_Type,
+			_Intersection_Delete,
+			_Intersection_Print,
+			_Intersection_Copy,
+			_Intersection_DefaultNew,
+			_Intersection_Construct,
+			_Intersection_Build,
+			_Intersection_Initialise,
+			_Intersection_Execute,
+			_Intersection_Destroy,
+			_Intersection_IsCoordInside,
+			_Intersection_CalculateVolume,
+			name );
+}
+
+
+void _Intersection_Construct( void* intersection, Stg_ComponentFactory* cf, void* data ) {
+	Intersection*	        self       = (Intersection*)intersection;
+	Index                   shapeCount;
+	Stg_Shape**             shapeList;
+	Bool*                   isComplement;
+	Index                   shape_I;
+	Dictionary_Entry_Value* optionsList;
+	Dictionary*             dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+	char*                   nameShape;
+	Stream*                 stream     = Journal_Register( Info_Type, CURR_MODULE_NAME );
+	
+	_Stg_Shape_Construct( self, cf, data );
+
+	optionsList = Dictionary_Get( dictionary, "shapes" );
+/*	Journal_Firewall( vertexList != NULL, 
+		Journal_Register( Error_Type, self->type ),
+		"In func %s: vertexList specifying the intersection is NULL.\n",
+		__func__);
+
+*/	shapeCount = Dictionary_Entry_Value_GetCount(optionsList);
+
+	/* Allocate space */
+	shapeList     = Memory_Alloc_Array( Stg_Shape* , shapeCount, "Shape Array" );
+	isComplement  = Memory_Alloc_Array( Bool, shapeCount, "Complement Array" );
+	memset( shapeList,     0, shapeCount * sizeof(Stg_Shape*) );
+	memset( isComplement,  0, shapeCount * sizeof(Bool) );
+	
+	/* TALK ABOUT WITH ROB, will there be some Flag for Union or Intersection type in the XML file. */
+	/* If so do we need another variable on the intersection class which is this flag, and then use that flag  */
+	/* to determine the method of test if a particle is inside or outside the shape */
+
+
+	
+	Stream_Indent( stream );
+	for ( shape_I = 0 ; shape_I < shapeCount ; shape_I++) { 
+          /* gets the textual name corresponding to the shape elements	 */
+		nameShape = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( optionsList, shape_I));
+
+		if ( nameShape[0] == '!' ) {
+			shapeList[ shape_I ] =  Stg_ComponentFactory_ConstructByName( cf, &nameShape[1], Stg_Shape, True, data ) ;
+			isComplement[ shape_I ] = True;
+		}
+		else {
+			shapeList[ shape_I ] =  Stg_ComponentFactory_ConstructByName( cf, nameShape, Stg_Shape, True, data ) ;
+			isComplement[ shape_I ] = False;
+		}
+		
+	}
+	Stream_UnIndent( stream );
+
+	_Intersection_Init( self, shapeList, shapeCount, isComplement );
+
+	Memory_Free( shapeList );
+	Memory_Free( isComplement );
+}
+
+void _Intersection_Build( void* intersection, void* data ) {
+	Intersection*	self = (Intersection*)intersection;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Intersection_Initialise( void* intersection, void* data ) {
+	Intersection*	self = (Intersection*)intersection;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Intersection_Execute( void* intersection, void* data ) {
+	Intersection*	self = (Intersection*)intersection;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Intersection_Destroy( void* intersection, void* data ) {
+	Intersection*	self = (Intersection*)intersection;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+Bool _Intersection_IsCoordInside( void* intersection, Coord coord ) {
+	Intersection*   self           = (Intersection*)intersection;
+	Index           shapeCount     = self->shapeCount;
+	Index           shape_I;
+	Bool            value;
+
+	for( shape_I = 0 ; shape_I < shapeCount ; shape_I++ ) {
+		value = Stg_Shape_IsCoordInside( self->shapeList[ shape_I ], coord );
+
+		
+		if ( self->isComplement[ shape_I ] )
+			value = !value;
+			
+		if ( ! value )
+			return False;
+	}
+	return True;
+}	
+
+double _Intersection_CalculateVolume( void* intersection ) {
+	assert( 0 /* not impossible as long as you have other shapes with volum */ );
+	return 0.0;
+}
+	
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Intersection.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Intersection.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,129 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Intersection.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_IntersectionClass_h__
+#define __StGermain_Domain_Shape_IntersectionClass_h__
+
+	/* Textual name of this class */
+	extern const Type Intersection_Type;
+
+	/* Intersection information */
+	#define __Intersection \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		Stg_Shape**                   shapeList;     \
+		Index                         shapeCount;    \
+		Bool*                         isComplement; \
+
+	struct Intersection { __Intersection };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Intersection* Intersection_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement);
+		
+	Intersection* _Intersection_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Intersection_Init( void* intersection, Stg_Shape** shapeList, Index shapeCount, Bool* isComplement ) ;
+	void Intersection_InitAll( 
+		void*                                 intersection, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		) ;
+		
+	/* Stg_Class_Delete Intersection implementation */
+	void _Intersection_Delete( void* intersection );
+	void _Intersection_Print( void* intersection, Stream* stream );
+	#define Intersection_Copy( self ) \
+		(Intersection*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Intersection_DeepCopy( self ) \
+		(Intersection*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Intersection_Copy( void* intersection, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Intersection_DefaultNew( Name name ) ;
+	void _Intersection_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Intersection_Build( void* intersection, void* data ) ;
+	void _Intersection_Initialise( void* intersection, void* data ) ;
+	void _Intersection_Execute( void* intersection, void* data );
+	void _Intersection_Destroy( void* intersection, void* data ) ;
+	
+	Bool _Intersection_IsCoordInside( void* intersection, Coord coord ) ;
+	double _Intersection_CalculateVolume( void* intersection );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Intersection.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Intersection.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Intersection</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">&nameShape[1]</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 243 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">nameShape</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 247 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PolygonShape.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PolygonShape.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,381 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: PolygonShape.c 4056 2007-03-29 04:55:51Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "PolygonShape.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type PolygonShape_Type = "PolygonShape";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+PolygonShape* PolygonShape_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		XYZ                                   start,
+		XYZ                                   end,
+	        Axis                                  perpendicularAxis	)
+{ 
+	PolygonShape* self = (PolygonShape*)_PolygonShape_DefaultNew( name );
+
+	PolygonShape_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		vertexList,
+		vertexCount,
+		start,
+		end,
+		perpendicularAxis);
+	return self;
+}
+
+PolygonShape* _PolygonShape_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	PolygonShape* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(PolygonShape) );
+	self = (PolygonShape*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside ,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _PolygonShape_Init( void* polygon, Coord_List vertexList, Index vertexCount, XYZ start, XYZ end, Axis perpendicularAxis ) {
+	PolygonShape* self = (PolygonShape*)polygon;
+	
+	self->vertexList = Memory_Alloc_Array( Coord, vertexCount, "vertexList" );
+	memcpy( self->vertexList , vertexList, sizeof(Coord) * vertexCount );
+	self->vertexCount = vertexCount;
+	memcpy( self->start , start, sizeof(XYZ) );
+	memcpy( self->end , end, sizeof(XYZ) );
+	self->perpendicularAxis = perpendicularAxis;
+}
+
+
+void PolygonShape_InitAll( 
+		void*                                 polygon, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		XYZ                                   start,
+		XYZ                                   end,
+		Axis                                  perpendicularAxis	)
+{
+	PolygonShape* self = (PolygonShape*)polygon;
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma);
+	_PolygonShape_Init( self, vertexList, vertexCount, start, end, perpendicularAxis );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _PolygonShape_Delete( void* polygon ) {
+	PolygonShape*       self = (PolygonShape*)polygon;
+	Coord_List     vertexList = self->vertexList;
+
+	Memory_Free( vertexList );
+
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _PolygonShape_Print( void* polygon, Stream* stream ) {
+	PolygonShape* self = (PolygonShape*)polygon;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _PolygonShape_Copy( void* polygon, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	PolygonShape*	self = (PolygonShape*)polygon;
+	PolygonShape*	newPolygonShape;
+	
+	newPolygonShape = (PolygonShape*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newPolygonShape->vertexList = Memory_Alloc_Array( Coord, self->vertexCount, "vertexList" );
+	memcpy( newPolygonShape->vertexList , self->vertexList, sizeof(Coord) * self->vertexCount );
+
+	newPolygonShape->vertexList  = self->vertexList;
+	newPolygonShape->vertexCount = self->vertexCount;
+	memcpy( newPolygonShape->start, self->start, sizeof(XYZ) );
+	memcpy( newPolygonShape->end, self->end, sizeof(XYZ) );
+	
+	return (void*)newPolygonShape;
+}
+
+void* _PolygonShape_DefaultNew( Name name ) {
+	return (void*) _PolygonShape_New(
+			sizeof(PolygonShape),
+			PolygonShape_Type,
+			_PolygonShape_Delete,
+			_PolygonShape_Print,
+			_PolygonShape_Copy,
+			_PolygonShape_DefaultNew,
+			_PolygonShape_Construct,
+			_PolygonShape_Build,
+			_PolygonShape_Initialise,
+			_PolygonShape_Execute,
+			_PolygonShape_Destroy,
+			_PolygonShape_IsCoordInside,
+			_PolygonShape_CalculateVolume,
+			name );
+}
+
+
+void _PolygonShape_Construct( void* polygon, Stg_ComponentFactory* cf, void* data ) {
+	PolygonShape*           self       = (PolygonShape*)polygon;
+	Index                   vertexCount;
+	Index                   vertex_I;
+	Coord_List              vertexList;
+	XYZ                     start;
+	XYZ                     end;
+	Axis                    perpendicularAxis;
+	char*                   perpendicularAxisName;
+	double*                 coord;
+	Dictionary_Entry_Value* optionSet;
+	Dictionary_Entry_Value* optionsList;
+	Dictionary*             dictionary  = Dictionary_GetDictionary( cf->componentDict, self->name );
+	Stream*                 stream      = cf->infoStream;
+	Stream*                 errorStream = Journal_Register( Error_Type, self->type );
+	
+	_Stg_Shape_Construct( self, cf, data );
+
+	start[I_AXIS] = Stg_ComponentFactory_GetDouble( cf, self->name, "startX", 0.0 );
+	end[I_AXIS]   = Stg_ComponentFactory_GetDouble( cf, self->name, "endX",   0.0 );
+	start[J_AXIS] = Stg_ComponentFactory_GetDouble( cf, self->name, "startY", 0.0 );
+	end[J_AXIS]   = Stg_ComponentFactory_GetDouble( cf, self->name, "endY",   0.0 );
+	start[K_AXIS] = Stg_ComponentFactory_GetDouble( cf, self->name, "startZ", 0.0 );
+	end[K_AXIS]   = Stg_ComponentFactory_GetDouble( cf, self->name, "endZ",   0.0 );
+
+	perpendicularAxisName = Stg_ComponentFactory_GetString( cf, self->name, "perpendicularAxis", "z" );
+	switch ( perpendicularAxisName[0] ) {
+		case 'x': case 'X': case 'i': case 'I': case '0':
+			perpendicularAxis = I_AXIS; break;
+		case 'y': case 'Y': case 'j': case 'J': case '1':
+			perpendicularAxis = J_AXIS; break;
+		case 'z': case 'Z': case 'k': case 'K': case '2':
+			perpendicularAxis = K_AXIS; break;
+		default:
+			Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Cannot understand perpendicularAxis '%s'\n", perpendicularAxisName );
+	}
+	if( self->dim == 3 && ( start[perpendicularAxis] == 0 && end[perpendicularAxis] == 0 ) ) {
+		Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+		"Problem with %s.\n"
+		"You've set the perpendicular axis to be %s, but you've not given the polygon any depth in that axis\n",
+	        self->name, perpendicularAxisName );
+	}	
+
+	optionsList = Dictionary_Get( dictionary, "verticies" );
+	
+	vertexCount = Dictionary_Entry_Value_GetCount(optionsList);
+	Journal_Firewall( vertexCount >= 3, errorStream, 
+			"To few verticies given in trying to build shape '%s' named '%s'.\n"
+			"A polygon needs at least three verticies.\n",
+			self->type, self->name );
+
+	/* Allocate space */
+	vertexList = Memory_Alloc_Array( Coord , vertexCount, "Vertex Array" );
+	memset( vertexList, 0, vertexCount * sizeof(Coord) );
+
+	Stream_Indent( stream );
+	for ( vertex_I = 0 ; vertex_I < vertexCount ; vertex_I++) { 
+		optionSet = Dictionary_Entry_Value_GetElement(optionsList, vertex_I );
+		coord = vertexList[vertex_I];
+		/* Read Vertex */
+		if( perpendicularAxis != I_AXIS )
+			coord[ I_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "x"));
+		if( perpendicularAxis != J_AXIS )
+			coord[ J_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "y"));
+		if( perpendicularAxis != K_AXIS )
+			coord[ K_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( optionSet, "z"));
+
+		/* Print Position */
+		Journal_PrintfL( stream, 2, "(%0.3g, %0.3g, %0.3g)\n", coord[I_AXIS], coord[J_AXIS], coord[K_AXIS] );
+	}
+	Stream_UnIndent( stream );
+
+	_PolygonShape_Init( self, vertexList, vertexCount, start, end, perpendicularAxis );
+
+	Memory_Free( vertexList );
+}
+
+void _PolygonShape_Build( void* polygon, void* data ) {
+	PolygonShape*	self = (PolygonShape*)polygon;
+
+	_Stg_Shape_Build( self, data );
+}
+void _PolygonShape_Initialise( void* polygon, void* data ) {
+	PolygonShape*	self = (PolygonShape*)polygon;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _PolygonShape_Execute( void* polygon, void* data ) {
+	PolygonShape*	self = (PolygonShape*)polygon;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _PolygonShape_Destroy( void* polygon, void* data ) {
+	PolygonShape*	self = (PolygonShape*)polygon;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+/* Algorithm describe Paul Bourke's page http://astronomy.swin.edu.au/~pbourke/geometry/insidepoly/ (see solution 2)
+ *
+ * Algorithm works by summing the angles between the test coordinate and each pair of verticies that make up an edge 
+ * in the polygon. An inside point will give an angle of 2pi and and outside point will give an angle of 0 */
+
+Bool _PolygonShape_IsCoordInside( void* polygon, Coord testCoord ) {
+	PolygonShape*        self                = (PolygonShape*) polygon;
+	Index           vertexCount         = self->vertexCount;
+	Coord_List      vertexList          = self->vertexList;
+	Axis            perpendicularAxis   = self->perpendicularAxis;
+	XYZ             vectorToStartVertex = { 0.0, 0.0, 0.0 };
+	XYZ             vectorToEndVertex   = { 0.0, 0.0, 0.0 };
+	XYZ             crossproduct        = { 0.0, 0.0, 0.0 };
+	double          currAngle;
+	double          totalAngle          = 0.0;
+	Index           vertex_I;
+	double*         startVertex;
+	double*         endVertex;
+
+	/* Check to make sure that the coordinate is within startZ and endZ in 3D */
+	if ( self->dim == 3 && ( testCoord[ perpendicularAxis ] < self->start[perpendicularAxis] || testCoord[ perpendicularAxis ] > self->end[perpendicularAxis] ))
+		return False;	
+
+	for ( vertex_I = 0 ; vertex_I < vertexCount ; vertex_I++ ) {
+		/* Get verticies of current edge */
+		startVertex = vertexList[ vertex_I ];
+		endVertex   = vertexList[ (vertex_I + 1) % vertexCount ];
+
+		/* Work out vectors */
+		StGermain_VectorSubtraction( vectorToStartVertex, testCoord, startVertex, 3 );
+		StGermain_VectorSubtraction( vectorToEndVertex,   testCoord, endVertex,  3 );
+
+		vectorToStartVertex[ perpendicularAxis ] = 0;
+		vectorToEndVertex[ perpendicularAxis ] = 0;
+
+		/* Work out angle - just by doing dot product - will always be positive */
+		currAngle = StGermain_AngleBetweenVectors( vectorToStartVertex, vectorToEndVertex, 3 );
+
+		/* Work out 'sign' of angle but working out cross product */
+		StGermain_VectorCrossProduct( crossproduct, vectorToEndVertex, vectorToStartVertex );
+
+		if ( crossproduct[ perpendicularAxis ] > 0.0 )
+			totalAngle += currAngle;
+		else
+			totalAngle -= currAngle;
+	}
+
+
+	/* work out whether the coord is within the polygon */
+	if ( fabs( totalAngle ) < M_PI )
+		return False;
+	else  
+		return True;
+}
+
+
+double _PolygonShape_CalculateVolume( void* polygon ) {
+	assert( 0 );
+	return 0.0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PolygonShape.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PolygonShape.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,135 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: PolygonShape.h 4054 2007-03-28 06:46:32Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_PolygonShapeClass_h__
+#define __StGermain_Domain_Shape_PolygonShapeClass_h__
+
+	/* Textual name of this class */
+	extern const Type PolygonShape_Type;
+
+	/* PolygonShape information */
+	#define __PolygonShape \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		Coord_List              vertexList;    \
+		Index                   vertexCount;   \
+		XYZ                     start;        \
+		XYZ                     end;          \
+		Axis                    perpendicularAxis; \
+
+	struct PolygonShape { __PolygonShape };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	PolygonShape* PolygonShape_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		XYZ                                   start,
+		XYZ                                   end,
+		Axis                                  perpendicularAxis);
+		
+	PolygonShape* _PolygonShape_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _PolygonShape_Init( void* polygon, Coord_List vertexList, Index vertexCount, XYZ start, XYZ end, Axis perpendicular ) ;
+	void PolygonShape_InitAll( 
+		void*                                 polygon, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		XYZ                                   start,
+		XYZ                                   end,
+		Axis                                  perpendicularAxis
+		) ;
+		
+	/* Stg_Class_Delete PolygonShape implementation */
+	void _PolygonShape_Delete( void* polygon );
+	void _PolygonShape_Print( void* polygon, Stream* stream );
+	#define PolygonShape_Copy( self ) \
+		(PolygonShape*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define PolygonShape_DeepCopy( self ) \
+		(PolygonShape*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _PolygonShape_Copy( void* polygon, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _PolygonShape_DefaultNew( Name name ) ;
+	void _PolygonShape_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _PolygonShape_Build( void* polygon, void* data ) ;
+	void _PolygonShape_Initialise( void* polygon, void* data ) ;
+	void _PolygonShape_Execute( void* polygon, void* data );
+	void _PolygonShape_Destroy( void* polygon, void* data ) ;
+	
+	Bool _PolygonShape_IsCoordInside( void* polygon, Coord coord ) ;
+	double _PolygonShape_CalculateVolume( void* polygon );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PolygonShape.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PolygonShape.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">PolygonShape</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">Constructs a polygon shape, if dimension equals 2, or a prism shape, if dimension equals 3. A list of vertices is supplied and is used to construct the polgon face of the shape, if the simulation is 3D the length and orientation of the depth of the polygon can be customised. </param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">vertices</param>
+		<param name="Type">list</param>
+		<param name="Default">N/A</param>
+		<param name="Description">Vertices used to construct the polygon in 2D or prism base in 3D. Must be more than 3 vertices specified.</param>
+	</struct>
+	<struct>
+		<param name="Name">perpendicularAxis</param>
+		<param name="Type">char</param>
+		<param name="Default">z</param>
+		<param name="Description">The axis in which the polygon or prism base will be perpendicular to. Can choose from x,y,z.</param>
+	</struct>
+	<struct>
+		<param name="Name">startX</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to x</param>
+	</struct>
+	<struct>
+		<param name="Name">endX</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to x</param>
+	</struct>
+	<struct>
+		<param name="Name">startY</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to y</param>
+	</struct>
+	<struct>
+		<param name="Name">endY</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to y</param>
+	</struct>
+	<struct>
+		<param name="Name">startZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to z</param>
+	</struct>
+	<struct>
+		<param name="Name">endZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">Only used in 3-D. The starting depth of the prism, if the perpendicularAxis is set to z</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">./StGermain/Discretisation/Shape/src/testPolygonShape.xml</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PythonShape.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PythonShape.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,278 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: PythonShape.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifdef HAVE_PYTHON
+#include <Python.h>
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "PythonShape.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type PythonShape_Type = "PythonShape";
+
+char* PYTHONSHAPE_TEST_CONDITION_NAME = "testCondition";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+PythonShape* PythonShape_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		char*                                 conditionFunction )
+{
+	PythonShape* self = (PythonShape*) _PythonShape_DefaultNew( name );
+
+	PythonShape_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		conditionFunction );
+	return self;
+}
+
+PythonShape* _PythonShape_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	PythonShape* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(PythonShape) );
+	self = (PythonShape*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside ,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	
+	return self;
+}
+
+void _PythonShape_Init( void* pythonShape, char* conditionFunction ) {
+	PythonShape* self = (PythonShape*)pythonShape;
+	
+	Stg_asprintf( &self->testCondition, "%s = %s", PYTHONSHAPE_TEST_CONDITION_NAME, conditionFunction );
+	
+	/* Python Stuff */
+	self->pythonDictionary = PyModule_GetDict(PyImport_AddModule("__main__"));
+	PyRun_SimpleString( "from math import *" );
+}
+
+
+void PythonShape_InitAll( 
+		void*                                 pythonShape, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		char*                                 conditionFunction )
+{
+	PythonShape* self = (PythonShape*)pythonShape;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_PythonShape_Init( self, conditionFunction );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _PythonShape_Delete( void* pythonShape ) {
+	PythonShape* self = (PythonShape*)pythonShape;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+
+	Memory_Free( self->testCondition );
+}
+
+
+void _PythonShape_Print( void* pythonShape, Stream* stream ) {
+	PythonShape* self = (PythonShape*)pythonShape;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _PythonShape_Copy( void* pythonShape, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	PythonShape*	self = (PythonShape*)pythonShape;
+	PythonShape*	newPythonShape;
+	
+	newPythonShape = (PythonShape*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	abort();
+	
+	return (void*)newPythonShape;
+}
+
+void* _PythonShape_DefaultNew( Name name ) {
+	return (void*) _PythonShape_New(
+			sizeof(PythonShape),
+			PythonShape_Type,
+			_PythonShape_Delete,
+			_PythonShape_Print,
+			_PythonShape_Copy,
+			_PythonShape_DefaultNew,
+			_PythonShape_Construct,
+			_PythonShape_Build,
+			_PythonShape_Initialise,
+			_PythonShape_Execute,
+			_PythonShape_Destroy,
+			_PythonShape_IsCoordInside,
+			_PythonShape_CalculateVolume,
+			name );
+}
+
+
+void _PythonShape_Construct( void* pythonShape, Stg_ComponentFactory* cf, void* data ) {
+	PythonShape*	self      = (PythonShape*) pythonShape;
+	char*           conditionFunction;
+
+	_Stg_Shape_Construct( self, cf, data );
+
+	conditionFunction = Stg_ComponentFactory_GetString( cf, self->name, "Function", "0" );
+
+	_PythonShape_Init( self, conditionFunction );
+}
+
+void _PythonShape_Build( void* pythonShape, void* data ) {
+	PythonShape*	self = (PythonShape*)pythonShape;
+
+	_Stg_Shape_Build( self, data );
+}
+void _PythonShape_Initialise( void* pythonShape, void* data ) {
+	PythonShape*	self = (PythonShape*)pythonShape;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _PythonShape_Execute( void* pythonShape, void* data ) {
+	PythonShape*	self = (PythonShape*)pythonShape;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _PythonShape_Destroy( void* pythonShape, void* data ) {
+	PythonShape*	self = (PythonShape*)pythonShape;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _PythonShape_IsCoordInside( void* pythonShape, Coord coord ) {
+	PythonShape*          self                   = (PythonShape*)pythonShape;
+	Coord                 newCoord;
+	PyObject*             xCoord;
+	PyObject*             yCoord;
+	PyObject*             zCoord;
+	PyObject*             testConditionValue;
+    PyObject*             pythonDictionary       = (PyObject*) self->pythonDictionary;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+	
+	/* Add values to dictionary */
+	xCoord = PyFloat_FromDouble( newCoord[ I_AXIS ] );
+	PyMapping_SetItemString( self->pythonDictionary, "x", xCoord );
+	yCoord = PyFloat_FromDouble( newCoord[ J_AXIS ] );
+	PyMapping_SetItemString( self->pythonDictionary, "y", yCoord );
+	zCoord = PyFloat_FromDouble( newCoord[ K_AXIS ] );
+	PyMapping_SetItemString( self->pythonDictionary, "z", zCoord );
+
+	/* Evaluate Test Condition Using Python */
+	PyRun_SimpleString(self->testCondition);
+
+	/* Get Value Out of Python */
+	testConditionValue = PyMapping_GetItemString(pythonDictionary, PYTHONSHAPE_TEST_CONDITION_NAME);
+	Journal_Firewall( 
+			testConditionValue != NULL, 
+			Journal_Register( Error_Type, self->type), 
+			"In func %s: Cannot Evalutate Function '%s'.\n", __func__, self->testCondition );
+
+	return PyObject_IsTrue( testConditionValue );
+}
+
+double _PythonShape_CalculateVolume( void* pythonShape ) {
+	assert( 0 );
+	return 0.0;
+}
+
+#endif /* HAVE_PYTHON */
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PythonShape.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PythonShape.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,125 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: PythonShape.h 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifdef HAVE_PYTHON
+#ifndef __StGermain_Domain_Shape_PythonShapeClass_h__
+#define __StGermain_Domain_Shape_PythonShapeClass_h__
+
+	/* Textual name of this class */
+	extern const Type PythonShape_Type;
+
+	/* PythonShape information */
+	#define __PythonShape \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		char*                                 testCondition;           \
+		void*                                 pythonDictionary;        \
+
+	struct PythonShape { __PythonShape };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	PythonShape* PythonShape_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		char*                                 conditionFunction );
+
+	PythonShape* _PythonShape_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _PythonShape_Init( void* pythonShape, char* conditionFunction ) ;
+	void PythonShape_InitAll( 
+		void*                                 pythonShape, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		char*                                 conditionFunction );
+
+	/* Stg_Class_Delete PythonShape implementation */
+	void _PythonShape_Delete( void* pythonShape );
+	void _PythonShape_Print( void* pythonShape, Stream* stream );
+	#define PythonShape_Copy( self ) \
+		(PythonShape*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define PythonShape_DeepCopy( self ) \
+		(PythonShape*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _PythonShape_Copy( void* pythonShape, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _PythonShape_DefaultNew( Name name ) ;
+	void _PythonShape_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _PythonShape_Build( void* pythonShape, void* data ) ;
+	void _PythonShape_Initialise( void* pythonShape, void* data ) ;
+	void _PythonShape_Execute( void* pythonShape, void* data );
+	void _PythonShape_Destroy( void* pythonShape, void* data ) ;
+	
+	Bool _PythonShape_IsCoordInside( void* pythonShape, Coord coord ) ;
+	double _PythonShape_CalculateVolume( void* pythonShape );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
+#endif /* HAVE_PYTHON */
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/PythonShape.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/PythonShape.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">PythonShape</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">Function</param>
+		<param name="Type">String</param>
+		<param name="Default">"0"</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Shape.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Shape.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,59 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Shape.h 3599 2006-05-22 00:25:46Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_h__
+#define __StGermain_Domain_Shape_h__
+
+	#include "types.h"
+	#include "ShapeClass.h"
+	#include "Superellipsoid.h"
+	#include "Box.h"
+	#include "ConvexHull.h"
+	#include "Sphere.h"
+	#include "Everywhere.h"
+	#include "PolygonShape.h"
+	#include "Union.h"
+	#include "Intersection.h"
+	#include "PythonShape.h"
+	#include "Cylinder.h"
+	#include "BelowPlane.h"
+	#include "BelowCosinePlane.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ShapeClass.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ShapeClass.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,282 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ShapeClass.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type Stg_Shape_Type = "Stg_Shape";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Stg_Shape* _Stg_Shape_New(
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy, 
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		Stg_Shape_IsCoordInsideFunction*            _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*          _calculateVolume,
+		Name                                        name )
+{
+	Stg_Shape* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_Shape) );
+	self = (Stg_Shape*)_Stg_Component_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build, 
+			_initialise,
+			_execute,
+			_destroy, 
+			name,
+			NON_GLOBAL );
+		
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	self->_calculateVolume = _calculateVolume;
+
+	self->invert = False;
+	
+	return self;
+}
+	
+void _Stg_Shape_Init( void* shape, Dimension_Index dim, Coord centre, Bool invert, double alpha, double beta, double gamma ) {
+	Stg_Shape* self = (Stg_Shape*) shape;
+
+	self->isConstructed = True;
+
+	self->dim = dim;
+	memcpy( self->centre, centre, sizeof(Coord) );
+
+	self->invert = invert;
+
+	self->rotationMatrix[I_AXIS][0] = cos(alpha) * cos(beta) * cos(gamma) - sin(alpha) * sin(gamma);
+	self->rotationMatrix[I_AXIS][1] = sin(alpha) * cos(beta) * cos(gamma) + cos(alpha) * sin(gamma);
+	self->rotationMatrix[I_AXIS][2] = - sin(beta) * cos(gamma);
+
+	self->rotationMatrix[J_AXIS][0] = -cos(alpha) * cos(beta) * sin(gamma) - sin(alpha) * cos(gamma);
+	self->rotationMatrix[J_AXIS][1] = -sin(alpha) * cos(beta) * sin(gamma) + cos(alpha) * cos(gamma);
+	self->rotationMatrix[J_AXIS][2] = sin(beta) * sin(gamma);
+
+	self->rotationMatrix[K_AXIS][0] = cos(alpha) * sin(beta);
+	self->rotationMatrix[K_AXIS][1] = sin(alpha) * sin(beta);
+	self->rotationMatrix[K_AXIS][2] = cos(beta);
+}
+
+
+void Stg_Shape_InitAll( void* shape, Dimension_Index dim, Coord centre, double alpha, double beta, double gamma ) {
+	Stg_Shape* self = (Stg_Shape*) shape;
+	
+	_Stg_Shape_Init( self, dim, centre, False, alpha, beta, gamma );
+}
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Stg_Shape_Delete( void* shape ) {
+	Stg_Shape* self = (Stg_Shape*) shape;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Stg_Shape_Print( void* superellipsoid, Stream* stream ) {
+	Stg_Shape* self = (Stg_Shape*)superellipsoid;
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Stg_Shape (ptr): (%p)\n", self );
+
+	Journal_PrintPointer( stream, self->_isCoordInside );
+	
+
+}
+
+void* _Stg_Shape_Copy( void* shape, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_Shape*	self = (Stg_Shape*) shape;
+	Stg_Shape*	newStg_Shape;
+	
+	newStg_Shape = (Stg_Shape*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newStg_Shape->_isCoordInside = self->_isCoordInside;
+	newStg_Shape->dim = self->dim;
+
+	memcpy( newStg_Shape->centre, self->centre, sizeof(XYZ));
+
+	return (void*)newStg_Shape;
+}
+
+void _Stg_Shape_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) {
+	Stg_Shape*	    self      = (Stg_Shape*) shape;
+	Dimension_Index dim;
+	Coord           centre;
+	Bool            invert        = False;
+	double          alpha, beta, gamma;
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+	
+	centre[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "CentreX", 0.0 );
+	centre[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "CentreY", 0.0 );
+	centre[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "CentreZ", 0.0 );
+
+	invert = Stg_ComponentFactory_GetBool( cf, self->name, "invert", False );
+
+	alpha = Stg_ComponentFactory_GetDouble( cf, self->name, "alpha", 0.0 );
+	beta  = Stg_ComponentFactory_GetDouble( cf, self->name, "beta", 0.0 );
+	gamma = Stg_ComponentFactory_GetDouble( cf, self->name, "gamma", 0.0 );
+
+	_Stg_Shape_Init( self, dim, centre, invert, alpha, beta, gamma );
+}
+
+
+void StGermain_GetEulerAngles( 
+		XYZ     newYDirection,
+		XYZ     oldYDirection,
+		XYZ     newXDirection,
+		XYZ     oldXDirection, 
+		double* alpha,
+		double* beta,
+		double* gamma ) 
+{
+	/* TODO */
+	*alpha = 0.0;
+	*beta  = 0.0;
+	*gamma = 0.0;
+}
+
+void _Stg_Shape_Build( void* shape, void* data ) {
+}
+void _Stg_Shape_Initialise( void* shape, void* data ) {
+}
+void _Stg_Shape_Execute( void* shape, void* data ) {
+}
+void _Stg_Shape_Destroy( void* shape, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual Functions
+*/
+Bool Stg_Shape_IsCoordInside( void* shape, Coord coord ) {
+	Stg_Shape* self              = (Stg_Shape*)shape;
+
+	/* XOR the output */
+	/* Truth table:
+	 * | invert | isCoordInside | output | 
+	 * | 0      | 0             | 0      | With invert off, leave the result as it is
+	 * | 0      | 1             | 1      |
+	 * | 1      | 0             | 1      | With invert on, flip the result
+	 * | 1      | 1             | 0      |
+	 *
+	 * bitwise xor is used because ^^ (logical) is not ansi-c
+	 */
+	return (self->invert != 0) ^ (self->_isCoordInside( self, coord ) != 0);
+}	
+
+double Stg_Shape_CalculateVolume( void* shape ) {
+	Stg_Shape* self = (Stg_Shape*)shape;
+	if ( self->invert ) {
+		return 1.0 - self->_calculateVolume( self );
+	}
+	else {
+		return self->_calculateVolume( self );
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+void Stg_Shape_TransformCoord( void* shape, Coord coord, Coord transformedCoord ) {
+	Stg_Shape* self              = (Stg_Shape*)shape;
+	Coord      rotatedCoord;
+
+	Stg_Shape_TranslateCoord( self, coord, transformedCoord );
+
+	/* Rotate Using Rotation Matrix */
+	rotatedCoord[ I_AXIS ] = 
+		  self->rotationMatrix[I_AXIS][0] * transformedCoord[0] 
+		+ self->rotationMatrix[I_AXIS][1] * transformedCoord[1];
+	
+	rotatedCoord[ J_AXIS ] = 
+		  self->rotationMatrix[J_AXIS][0] * transformedCoord[0] 
+		+ self->rotationMatrix[J_AXIS][1] * transformedCoord[1];
+	
+	rotatedCoord[ K_AXIS ] = 
+		  self->rotationMatrix[K_AXIS][0] * transformedCoord[0] 
+		+ self->rotationMatrix[K_AXIS][1] * transformedCoord[1];
+
+	if ( self->dim > 2 ) {
+		rotatedCoord[ I_AXIS ] += self->rotationMatrix[I_AXIS][2] * transformedCoord[2];
+		rotatedCoord[ J_AXIS ] += self->rotationMatrix[J_AXIS][2] * transformedCoord[2];
+		rotatedCoord[ K_AXIS ] += self->rotationMatrix[K_AXIS][2] * transformedCoord[2];
+	}
+
+	memcpy( transformedCoord, rotatedCoord, sizeof(Coord));
+
+}
+
+void Stg_Shape_TranslateCoord( void* shape, Coord coord, Coord translatedCoord ) {
+	Stg_Shape* self              = (Stg_Shape*)shape;
+
+	Vec_Sub3D( translatedCoord, coord, self->centre );
+}
+
+
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ShapeClass.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ShapeClass.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,117 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ShapeClass.h 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_Shape_h__
+#define __StGermain_Domain_Shape_Shape_h__
+
+	typedef Bool (Stg_Shape_IsCoordInsideFunction) ( void* shape, Coord coord );
+
+	typedef double (Stg_Shape_CalculateVolumeFunction) ( void* shape );
+
+
+	/* Textual name of this class */
+	extern const Type Stg_Shape_Type;
+
+	/* Stg_Shape information */
+	#define __Stg_Shape \
+		/* General info */ \
+		__Stg_Component \
+		/* Virtual Info */                                         \
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside;      \
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume;    \
+		/* Other info */                                           \
+		Dimension_Index                       dim;                 \
+		XYZ                                   centre;              \
+		Bool                                  invert;              \
+		double                                rotationMatrix[3][3];
+
+	struct Stg_Shape { __Stg_Shape };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Stg_Shape* _Stg_Shape_New(
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy, 
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		Stg_Shape_IsCoordInsideFunction*            _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*          _calculateVolume,
+		Name                                        name );
+	
+	void _Stg_Shape_Init( void* shape, Dimension_Index dim, Coord centre, Bool invert, double alpha, double beta, double gamma ) ;
+	void Stg_Shape_InitAll( void* shape, Dimension_Index dim, Coord centre, double alpha, double beta, double gamma );
+
+	void _Stg_Shape_Delete( void* shape );
+	void _Stg_Shape_Print( void* shape, Stream* stream );
+	#define Stg_Shape_Copy( self ) \
+		(Stg_Shape*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Stg_Shape_DeepCopy( self ) \
+		(Stg_Shape*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Stg_Shape_Copy( void* shape, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/* 'Stg_Component' Virtual Function Implementations */
+	void _Stg_Shape_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Stg_Shape_Build( void* shape, void* data ) ;
+	void _Stg_Shape_Initialise( void* shape, void* data ) ;
+	void _Stg_Shape_Execute( void* shape, void* data ) ;
+	void _Stg_Shape_Destroy( void* shape, void* data ) ;
+
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Virtual Function Implementation 
+	*/
+	Bool Stg_Shape_IsCoordInside( void* shape, Coord coord ) ;
+
+	double Stg_Shape_CalculateVolume( void* shape );
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	void Stg_Shape_TransformCoord( void* shape, Coord coord, Coord transformedCoord ) ;
+	void Stg_Shape_TranslateCoord( void* shape, Coord coord, Coord translatedCoord ) ;
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/ShapeClass.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/ShapeClass.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Stg_Shape</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">CentreX</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">CentreY</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">CentreZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">alpha</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">beta</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">gamma</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Sphere.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Sphere.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,263 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Sphere.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Sphere.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type Sphere_Type = "Sphere";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Sphere* Sphere_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius )
+{
+	Sphere* self = (Sphere*) _Sphere_DefaultNew( name );
+
+	Sphere_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		radius) ;
+	return self;
+}
+
+Sphere* _Sphere_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Sphere* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Sphere) );
+	self = (Sphere*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside ,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Sphere_Init( void* sphere, double radius ) {
+	Sphere* self = (Sphere*)sphere;
+	self->radius        = radius;
+	self->radiusSquared = radius * radius;
+}
+
+
+void Sphere_InitAll( 
+		void*                                 sphere, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius)
+{
+	Sphere* self = (Sphere*)sphere;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_Sphere_Init( self, radius );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Sphere_Delete( void* sphere ) {
+	Sphere* self = (Sphere*)sphere;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Sphere_Print( void* sphere, Stream* stream ) {
+	Sphere* self = (Sphere*)sphere;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Sphere_Copy( void* sphere, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Sphere*	self = (Sphere*)sphere;
+	Sphere*	newSphere;
+	
+	newSphere = (Sphere*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newSphere->radiusSquared = self->radiusSquared;
+	
+	return (void*)newSphere;
+}
+
+void* _Sphere_DefaultNew( Name name ) {
+	return (void*) _Sphere_New(
+			sizeof(Sphere),
+			Sphere_Type,
+			_Sphere_Delete,
+			_Sphere_Print,
+			_Sphere_Copy,
+			_Sphere_DefaultNew,
+			_Sphere_Construct,
+			_Sphere_Build,
+			_Sphere_Initialise,
+			_Sphere_Execute,
+			_Sphere_Destroy,
+			_Sphere_IsCoordInside,
+			_Sphere_CalculateVolume,
+			name );
+}
+
+
+void _Sphere_Construct( void* sphere, Stg_ComponentFactory* cf, void* data ) {
+	Sphere*	self      = (Sphere*) sphere;
+	double             radius;
+
+	_Stg_Shape_Construct( self, cf, data );
+
+	radius = Stg_ComponentFactory_GetDouble( cf, self->name, "radius", 0.0 );
+
+
+	_Sphere_Init( self, radius );
+}
+
+void _Sphere_Build( void* sphere, void* data ) {
+	Sphere*	self = (Sphere*)sphere;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Sphere_Initialise( void* sphere, void* data ) {
+	Sphere*	self = (Sphere*)sphere;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Sphere_Execute( void* sphere, void* data ) {
+	Sphere*	self = (Sphere*)sphere;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Sphere_Destroy( void* sphere, void* data ) {
+	Sphere*	self = (Sphere*)sphere;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _Sphere_IsCoordInside( void* sphere, Coord coord ) {
+	Sphere*         self              = (Sphere*)sphere;
+	Coord           newCoord;
+	double          insideOutsideValue;
+	double          x, y, z;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+
+	x = newCoord[ I_AXIS ];
+	y = newCoord[ J_AXIS ];
+	if(self->dim == 2)
+		insideOutsideValue = x*x + y*y;
+	else {
+		z = newCoord[ K_AXIS ];
+		insideOutsideValue = x*x + y*y + z*z;
+	}
+
+	return (insideOutsideValue <= self->radiusSquared);
+	
+}
+
+double _Sphere_CalculateVolume( void* sphere ) {
+	Sphere* self = sphere;
+	if ( self->dim == 2 ) {
+		return M_PI * self->radiusSquared;
+	}
+	else {
+		return (4.0/3.0) * M_PI * self->radiusSquared * self->radius;
+	}
+}
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Sphere.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Sphere.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,123 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Sphere.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_SphereClass_h__
+#define __StGermain_Domain_Shape_SphereClass_h__
+
+	/* Textual name of this class */
+	extern const Type Sphere_Type;
+
+	/* Sphere information */
+	#define __Sphere \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		double          radius;         \
+		double		radiusSquared;  \
+
+	struct Sphere { __Sphere };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Sphere* Sphere_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius );
+
+	Sphere* _Sphere_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Sphere_Init( void* sphere, double radius ) ;
+	void Sphere_InitAll( 
+		void*                                 sphere, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                radius) ;
+
+	/* Stg_Class_Delete Sphere implementation */
+	void _Sphere_Delete( void* sphere );
+	void _Sphere_Print( void* sphere, Stream* stream );
+	#define Sphere_Copy( self ) \
+		(Sphere*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Sphere_DeepCopy( self ) \
+		(Sphere*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Sphere_Copy( void* sphere, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Sphere_DefaultNew( Name name ) ;
+	void _Sphere_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Sphere_Build( void* sphere, void* data ) ;
+	void _Sphere_Initialise( void* sphere, void* data ) ;
+	void _Sphere_Execute( void* sphere, void* data );
+	void _Sphere_Destroy( void* sphere, void* data ) ;
+	
+	Bool _Sphere_IsCoordInside( void* sphere, Coord coord ) ;
+	double _Sphere_CalculateVolume( void* sphere );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Sphere.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Sphere.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Sphere</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">radius</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Superellipsoid.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Superellipsoid.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,280 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Superellipsoid.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Superellipsoid.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type Superellipsoid_Type = "Superellipsoid";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Superellipsoid* Superellipsoid_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                epsilon1,
+		double                                epsilon2,   
+		XYZ                                   radius )
+{
+	Superellipsoid* self = (Superellipsoid*) _Superellipsoid_DefaultNew( name );
+
+	Superellipsoid_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		epsilon1, 
+		epsilon2,
+		radius) ;
+	return self;
+}
+
+Superellipsoid* _Superellipsoid_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Superellipsoid* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Superellipsoid) );
+	self = (Superellipsoid*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Superellipsoid_Init( void* superellipsoid, double epsilon1, double epsilon2, XYZ radius ) {
+	Superellipsoid* self = (Superellipsoid*)superellipsoid;
+	
+	self->epsilon1 = epsilon1;
+	self->epsilon2 = epsilon2;
+
+	memcpy( self->radius, radius, sizeof(XYZ));
+}
+
+
+void Superellipsoid_InitAll( 
+		void*                                 superellipsoid, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                epsilon1, 
+		double                                epsilon2,
+		XYZ                                   radius)
+{
+	Superellipsoid* self = (Superellipsoid*)superellipsoid;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_Superellipsoid_Init( self, epsilon1, epsilon2, radius );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Superellipsoid_Delete( void* superellipsoid ) {
+	Superellipsoid* self = (Superellipsoid*)superellipsoid;
+	
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Superellipsoid_Print( void* superellipsoid, Stream* stream ) {
+	Superellipsoid* self = (Superellipsoid*)superellipsoid;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Superellipsoid_Copy( void* superellipsoid, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Superellipsoid*	self = (Superellipsoid*)superellipsoid;
+	Superellipsoid*	newSuperellipsoid;
+	
+	newSuperellipsoid = (Superellipsoid*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newSuperellipsoid->epsilon1 = self->epsilon1;
+	newSuperellipsoid->epsilon2 = self->epsilon2;
+	
+	memcpy( newSuperellipsoid->radius, self->radius, sizeof(XYZ));
+	
+	return (void*)newSuperellipsoid;
+}
+
+void* _Superellipsoid_DefaultNew( Name name ) {
+	return (void*) _Superellipsoid_New(
+			sizeof(Superellipsoid),
+			Superellipsoid_Type,
+			_Superellipsoid_Delete,
+			_Superellipsoid_Print,
+			_Superellipsoid_Copy,
+			_Superellipsoid_DefaultNew,
+			_Superellipsoid_Construct,
+			_Superellipsoid_Build,
+			_Superellipsoid_Initialise,
+			_Superellipsoid_Execute,
+			_Superellipsoid_Destroy,
+			_Superellipsoid_IsCoordInside,
+			_Superellipsoid_CalculateVolume,
+			name );
+}
+
+
+void _Superellipsoid_Construct( void* superellipsoid, Stg_ComponentFactory* cf, void* data ) {
+	Superellipsoid*	self      = (Superellipsoid*) superellipsoid;
+	XYZ             radius;
+	double          epsilon1;
+	double          epsilon2;
+
+	_Stg_Shape_Construct( self, cf, data );
+
+	radius[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "radiusX", 1.0 );
+	radius[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "radiusY", 1.0 );
+	radius[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "radiusZ", 1.0 );
+
+	epsilon1 = Stg_ComponentFactory_GetDouble( cf, self->name, "epsilon1", 1.0 );
+	epsilon2 = Stg_ComponentFactory_GetDouble( cf, self->name, "epsilon2", 1.0 );
+
+	_Superellipsoid_Init( self, epsilon1, epsilon2, radius );
+}
+
+void _Superellipsoid_Build( void* superellipsoid, void* data ) {
+	Superellipsoid*	self = (Superellipsoid*)superellipsoid;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Superellipsoid_Initialise( void* superellipsoid, void* data ) {
+	Superellipsoid*	self = (Superellipsoid*)superellipsoid;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Superellipsoid_Execute( void* superellipsoid, void* data ) {
+	Superellipsoid*	self = (Superellipsoid*)superellipsoid;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Superellipsoid_Destroy( void* superellipsoid, void* data ) {
+	Superellipsoid*	self = (Superellipsoid*)superellipsoid;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+Bool _Superellipsoid_IsCoordInside( void* superellipsoid, Coord coord ) {
+	Superellipsoid* self              = (Superellipsoid*)superellipsoid;
+	Coord           newCoord;
+	double          insideOutsideValue;
+	double          epsilon1          = self->epsilon1;
+	double          epsilon2          = self->epsilon2;
+	double          x, y, z;
+
+	/* Transform coordinate into canonical reference frame */
+	Stg_Shape_TransformCoord( self, coord, newCoord );
+	
+	x = newCoord[ I_AXIS ]/self->radius[ I_AXIS ];
+	y = newCoord[ J_AXIS ]/self->radius[ J_AXIS ];
+	z = newCoord[ K_AXIS ]/self->radius[ K_AXIS ];
+
+	/* Evaluate Inside-Outside Function */
+	if (self->dim == 2)
+		insideOutsideValue = pow( x*x, 1.0/epsilon1 ) + pow( y*y, 1.0/epsilon1 );
+	else 
+		insideOutsideValue = pow( pow( x*x, 1.0/epsilon2 ) + pow( y*y, 1.0/epsilon2 ) , epsilon2/epsilon1 )
+			+ pow( z*z, 1.0/epsilon1 );
+
+	/* Return True if coord is inside and False otherwise */
+	return ( insideOutsideValue <= 1.0 );
+}
+
+double _Superellipsoid_CalculateVolume( void* superellipsoid ) {
+	assert( 0  );
+	return 0.0;
+}
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Superellipsoid.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Superellipsoid.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,128 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Superellipsoid.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_SuperellipsoidClass_h__
+#define __StGermain_Domain_Shape_SuperellipsoidClass_h__
+
+	/* Textual name of this class */
+	extern const Type Superellipsoid_Type;
+
+	/* Superellipsoid information */
+	#define __Superellipsoid \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		double                                epsilon1;            \
+		double                                epsilon2;            \
+		XYZ                                   radius;		   \
+
+	struct Superellipsoid { __Superellipsoid };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Superellipsoid* Superellipsoid_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                epsilon1,
+		double                                epsilon2,   
+		XYZ                                   radius );
+
+	Superellipsoid* _Superellipsoid_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Superellipsoid_Init( void* superellipsoid, double epsilon1, double epsilon2, XYZ radius ) ;
+	void Superellipsoid_InitAll( 
+		void*                                 superellipsoid, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                epsilon1, 
+		double                                epsilon2,
+		XYZ                                   radius) ;
+
+	/* Stg_Class_Delete Superellipsoid implementation */
+	void _Superellipsoid_Delete( void* superellipsoid );
+	void _Superellipsoid_Print( void* superellipsoid, Stream* stream );
+	#define Superellipsoid_Copy( self ) \
+		(Superellipsoid*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Superellipsoid_DeepCopy( self ) \
+		(Superellipsoid*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Superellipsoid_Copy( void* superellipsoid, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Superellipsoid_DefaultNew( Name name ) ;
+	void _Superellipsoid_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Superellipsoid_Build( void* superellipsoid, void* data ) ;
+	void _Superellipsoid_Initialise( void* superellipsoid, void* data ) ;
+	void _Superellipsoid_Execute( void* superellipsoid, void* data );
+	void _Superellipsoid_Destroy( void* superellipsoid, void* data ) ;
+	
+	Bool _Superellipsoid_IsCoordInside( void* superellipsoid, Coord coord ) ;
+	double _Superellipsoid_CalculateVolume( void* superellipsoid );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Superellipsoid.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Superellipsoid.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Superellipsoid</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">radiusX</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">radiusY</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">radiusZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">epsilon1</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">epsilon2</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Union.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Union.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,322 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) 
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Union.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+
+#include "types.h"
+#include "ShapeClass.h"
+#include "Union.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type Union_Type = "Union";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Union* Union_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		)
+{
+	Union* self = (Union*)_Union_DefaultNew( name );
+
+	Union_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		shapeList,
+		shapeCount,
+		isComplement);
+	return self;
+}
+
+Union* _Union_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name )
+{
+	Union* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Union) );
+	self = (Union*)_Stg_Shape_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			_isCoordInside ,
+			_calculateVolume,
+			name );
+	
+	/* General info */
+
+	/* Virtual Info */
+	self->_isCoordInside = _isCoordInside;
+	
+	return self;
+}
+
+void _Union_Init( void* combination,  Stg_Shape** shapeList, Index shapeCount, Bool* isComplement ) {
+	Union* self = (Union*)combination;
+	
+	self->shapeList    = Memory_Alloc_Array( Stg_Shape* , shapeCount , "shapeList" );
+	self->isComplement = Memory_Alloc_Array( Bool,        shapeCount , "isComplement" );
+
+	memcpy( self->shapeList , shapeList, sizeof(Stg_Shape*) * shapeCount );
+	memcpy( self->isComplement , isComplement, sizeof(Bool) * shapeCount );
+	self->shapeCount = shapeCount;
+}
+
+
+void Union_InitAll( 
+		void*                                 combination, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		)
+{
+	Union* self = (Union*)combination;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma);
+	_Union_Init( self, shapeList, shapeCount, isComplement );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Union_Delete( void* combination ) {
+	Union*       self = (Union*)combination;
+
+	Memory_Free( self->shapeList );
+	Memory_Free( self->isComplement );
+
+	/* Delete parent */
+	_Stg_Shape_Delete( self );
+}
+
+
+void _Union_Print( void* combination, Stream* stream ) {
+	Union* self = (Union*)combination;
+	
+	/* Print parent */
+	_Stg_Shape_Print( self, stream );
+}
+
+
+
+void* _Union_Copy( void* combination, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Union*	self = (Union*)combination;
+	Union*	newUnion;
+	
+	newUnion = (Union*)_Stg_Shape_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newUnion->shapeList = Memory_Alloc_Array( Stg_Shape*, self->shapeCount, "shapeList" );
+	memcpy( newUnion->shapeList , self->shapeList, sizeof(Stg_Shape*) * self->shapeCount );
+	
+	newUnion->isComplement = Memory_Alloc_Array( Bool , self->shapeCount, "isComplement" );
+	memcpy( newUnion->isComplement , self->isComplement, sizeof(Bool) * self->shapeCount );
+
+	newUnion->isComplement = self->isComplement;
+	newUnion->shapeList = self->shapeList;
+	newUnion->shapeCount = self->shapeCount;
+	
+	return (void*)newUnion;
+}
+
+void* _Union_DefaultNew( Name name ) {
+	return (void*) _Union_New(
+			sizeof(Union),
+			Union_Type,
+			_Union_Delete,
+			_Union_Print,
+			_Union_Copy,
+			_Union_DefaultNew,
+			_Union_Construct,
+			_Union_Build,
+			_Union_Initialise,
+			_Union_Execute,
+			_Union_Destroy,
+			_Union_IsCoordInside,
+			_Union_CalculateVolume,
+			name );
+}
+
+
+void _Union_Construct( void* combination, Stg_ComponentFactory* cf, void* data ) {
+	Union*                  self       = (Union*)combination;
+	Index                   shapeCount;
+	Stg_Shape**             shapeList;
+	Bool*                   isComplement;
+	Index                   shape_I;
+	Dictionary_Entry_Value* optionsList;
+	Dictionary*             dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+	char*                   nameShape;
+	Stream*                 stream     = Journal_Register( Info_Type, CURR_MODULE_NAME );
+	
+	_Stg_Shape_Construct( self, cf, data );
+
+	optionsList = Dictionary_Get( dictionary, "shapes" );
+        /*	Journal_Firewall( vertexList != NULL,  */
+        /*		Journal_Register( Error_Type, self->type ), */
+        /*		"In func %s: vertexList specifying the combination is NULL.\n", */
+        /*		__func__); */
+
+	shapeCount = Dictionary_Entry_Value_GetCount(optionsList);
+
+	/* Allocate space */
+	shapeList     = Memory_Alloc_Array( Stg_Shape* , shapeCount, "Shape Array" );
+	isComplement  = Memory_Alloc_Array( Bool, shapeCount, "Complement Array" );
+	memset( shapeList,     0, shapeCount * sizeof(Stg_Shape*) );
+	memset( isComplement,  0, shapeCount * sizeof(Bool) );
+	
+	/* TALK ABOUT WITH ROB, will there be some Flag for Union or Intersection type in the XML file. */
+	/* If so do we need another variable on the combination class which is this flag, and then use that flag  */
+	/* to determine the method of test if a particle is inside or outside the shape */
+
+
+	
+	Stream_Indent( stream );
+	for ( shape_I = 0 ; shape_I < shapeCount ; shape_I++) { 
+          /* gets the textual name corresponding to the shape elements	 */
+		nameShape = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( optionsList, shape_I));
+
+		if ( nameShape[0] == '!' ) {
+			shapeList[ shape_I ] =  Stg_ComponentFactory_ConstructByName( cf, &nameShape[1], Stg_Shape, True, data ) ;
+			isComplement[ shape_I ] = True;
+		}
+		else {
+			shapeList[ shape_I ] =  Stg_ComponentFactory_ConstructByName( cf, nameShape, Stg_Shape, True, data ) ;
+			isComplement[ shape_I ] = False;
+		}
+		
+	}
+	Stream_UnIndent( stream );
+
+	_Union_Init( self, shapeList, shapeCount, isComplement );
+
+	Memory_Free( shapeList );
+	Memory_Free( isComplement );
+}
+
+void _Union_Build( void* combination, void* data ) {
+	Union*	self = (Union*)combination;
+
+	_Stg_Shape_Build( self, data );
+}
+void _Union_Initialise( void* combination, void* data ) {
+	Union*	self = (Union*)combination;
+	
+	_Stg_Shape_Initialise( self, data );
+}
+void _Union_Execute( void* combination, void* data ) {
+	Union*	self = (Union*)combination;
+	
+	_Stg_Shape_Execute( self, data );
+}
+void _Union_Destroy( void* combination, void* data ) {
+	Union*	self = (Union*)combination;
+	
+	_Stg_Shape_Destroy( self, data );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+	
+/*---------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+Bool _Union_IsCoordInside( void* combination, Coord coord ) {
+	Union*    self           = (Union*)combination;
+	Index           shapeCount     = self->shapeCount;
+	Index           shape_I;
+	Bool            value;
+
+	for( shape_I = 0 ; shape_I < shapeCount ; shape_I++ ) {
+		value = Stg_Shape_IsCoordInside( self->shapeList[ shape_I ], coord );
+
+		
+		if ( self->isComplement[ shape_I ] )
+			value = !value;
+			
+		if ( value )
+			return True;
+	}
+	return False;
+}	
+
+
+double _Union_CalculateVolume( void* combination ) {
+	assert ( 0 );
+	return 0.0;
+}
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Union.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Union.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,129 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Union.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_UnionClass_h__
+#define __StGermain_Domain_Shape_UnionClass_h__
+
+	/* Textual name of this class */
+	extern const Type Union_Type;
+
+	/* Union information */
+	#define __Union \
+		/* General info */ \
+		__Stg_Shape \
+		/* Virtual Info */\
+		\
+		Stg_Shape**                   shapeList;     \
+		Index                         shapeCount;    \
+		Bool*                         isComplement; \
+
+	struct Union { __Union };
+	
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	Union* Union_New(
+		Name                                  name,
+		Dimension_Index                       dim,
+		XYZ                                   centre, 
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement);
+		
+	Union* _Union_New(
+		SizeT                                 _sizeOfSelf, 
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,		
+		Stg_Shape_IsCoordInsideFunction*      _isCoordInside,
+		Stg_Shape_CalculateVolumeFunction*    _calculateVolume,
+		Name                                  name );
+	
+	void _Union_Init( void* combination, Stg_Shape** shapeList, Index shapeCount, Bool* isComplement ) ;
+	void Union_InitAll( 
+		void*                                 combination, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Stg_Shape**                           shapeList,
+		Index                                 shapeCount,
+		Bool*                                 isComplement
+		) ;
+		
+	/* Stg_Class_Delete Union implementation */
+	void _Union_Delete( void* combination );
+	void _Union_Print( void* combination, Stream* stream );
+	#define Union_Copy( self ) \
+		(Union*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Union_DeepCopy( self ) \
+		(Union*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Union_Copy( void* combination, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Union_DefaultNew( Name name ) ;
+	void _Union_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _Union_Build( void* combination, void* data ) ;
+	void _Union_Initialise( void* combination, void* data ) ;
+	void _Union_Execute( void* combination, void* data );
+	void _Union_Destroy( void* combination, void* data ) ;
+	
+	Bool _Union_IsCoordInside( void* combination, Coord coord ) ;
+	double _Union_CalculateVolume( void* combination );
+
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/Union.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/Union.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Union</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Shape/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Shape</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">&nameShape[1]</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 243 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">nameShape</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 247 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,89 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+lib = StgDomainShape
+libstatic = yes
+libdynamic = yes
+includes = StgDomain/Shape
+
+SRCS = \
+	BelowCosinePlane.c \
+	Cylinder.c \
+	Intersection.c \
+	Sphere.c \
+	BelowPlane.c \
+	Everywhere.c \
+	PolygonShape.c \
+	Superellipsoid.c \
+	Box.c \
+	Finalise.c \
+	PythonShape.c \
+	Union.c \
+	ConvexHull.c \
+	Init.c \
+	ShapeClass.c
+
+
+HDRS = \
+	BelowCosinePlane.h \
+	Cylinder.h \
+	Intersection.h \
+	ShapeClass.h \
+	types.h \
+	BelowPlane.h \
+	Everywhere.h \
+	PolygonShape.h \
+	Sphere.h \
+	Box.h \
+	Finalise.h \
+	PythonShape.h \
+	Superellipsoid.h \
+	ConvexHull.h \
+	Init.h \
+	Shape.h \
+	Union.h
+
+EXTERNAL_INCLUDES = 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/src/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/src/types.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,61 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3599 2006-05-22 00:25:46Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Shape_types_h__
+#define __StGermain_Domain_Shape_types_h__
+
+	typedef struct Stg_Shape                    Stg_Shape;
+	typedef struct Superellipsoid               Superellipsoid;
+	typedef struct PythonShape                  PythonShape;
+	typedef struct Everywhere                   Everywhere;
+	typedef struct Box                          Box;
+	typedef struct Sphere                       Sphere;
+	typedef struct PolygonShape                      PolygonShape;
+	typedef struct Union                        Union;
+	typedef struct Intersection                 Intersection;
+	typedef struct ConvexHull                   ConvexHull;
+	typedef struct Cylinder                     Cylinder;
+
+	typedef struct BelowPlane                   BelowPlane;
+	typedef struct BelowCosinePlane             BelowCosinePlane;
+
+#endif
+
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/Viewport.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/Viewport.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,49 @@
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera" mergeType="merge">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">-0.35531</param>
+			<param name="coordY">0.7451</param> 
+			<param name="coordZ">2.0</param> 
+			<param name="focalPointX">0</param> 
+			<param name="focalPointY">0.0</param>
+			<param name="focalPointZ">0.0</param>
+			<param name="focalLength">0</param>			
+		</struct>
+		<!-- Drawing Objects -->
+		<struct name="particleDots">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="colour">blue</param>
+			<param name="pointSize">2.0</param>
+			<param name="MaskVariable">swarm-OwningCell</param>
+			<param name="maskType">EqualTo</param>
+			<param name="maskValue">1.0</param>
+		</struct>	
+		<struct name="ShapeTestVP">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particleDots</param>
+			</list>
+		</struct>		
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<param name="height">400</param>
+			<param name="width">400</param>
+			<param name="interactive">t</param>
+			<param name="backgroundColour">white</param>
+			<param name="Viewport">ShapeTestVP</param>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testBox2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testBox2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,217 @@
+188
+232
+294
+334
+342
+440
+454
+546
+665
+668
+748
+753
+771
+799
+819
+837
+877
+891
+999
+1000
+1226
+1235
+1239
+1302
+1404
+1422
+1455
+1571
+1585
+1596
+1618
+1669
+1682
+1690
+1738
+1758
+1813
+1867
+1963
+2109
+2234
+2265
+2286
+2383
+2384
+2402
+2530
+2541
+2568
+2649
+2671
+2690
+2742
+2808
+2829
+2874
+2924
+3009
+3190
+3284
+3325
+3470
+3493
+3579
+3746
+3774
+3907
+3936
+3948
+3958
+4049
+4066
+4073
+4114
+4117
+4164
+4233
+4237
+4335
+4372
+4390
+4415
+4431
+4440
+4453
+4488
+4489
+4564
+4681
+4708
+4716
+4717
+4733
+4765
+4858
+4881
+4898
+4946
+4967
+5000
+5007
+5022
+5101
+5115
+5170
+5193
+5214
+5217
+5245
+5268
+5300
+5370
+5371
+5378
+5384
+5500
+5510
+5513
+5559
+5686
+5693
+5697
+5770
+5838
+5867
+5916
+6038
+6052
+6073
+6089
+6105
+6188
+6189
+6207
+6230
+6259
+6292
+6300
+6360
+6381
+6423
+6435
+6609
+6624
+6626
+6662
+6684
+6694
+6771
+6797
+6803
+6858
+6870
+6875
+6894
+7067
+7121
+7182
+7225
+7254
+7270
+7335
+7412
+7437
+7659
+7709
+7763
+7805
+7848
+7930
+8076
+8078
+8081
+8141
+8276
+8394
+8402
+8452
+8498
+8645
+8701
+8728
+8788
+8851
+8913
+8930
+8952
+8955
+8972
+8980
+8986
+9079
+9112
+9165
+9187
+9199
+9224
+9247
+9270
+9367
+9393
+9423
+9443
+9456
+9471
+9475
+9492
+9527
+9552
+9573
+9609
+9618
+9730
+9838
+9910
+9926
+9933
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testBox3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testBox3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,112 @@
+196
+502
+507
+514
+533
+546
+666
+811
+826
+868
+948
+1159
+1406
+1569
+1587
+1589
+1629
+1665
+1694
+1712
+1729
+1916
+2006
+2127
+2259
+2516
+2624
+2745
+2776
+2793
+2890
+2915
+2954
+2960
+2979
+2992
+3144
+3251
+3254
+3348
+3349
+3379
+3462
+3497
+3580
+3791
+3798
+3821
+3847
+3892
+4045
+4061
+4125
+4126
+4200
+4254
+4282
+4339
+4405
+4416
+4441
+4445
+4456
+4533
+4561
+4580
+4623
+4836
+4915
+5157
+5175
+5203
+5232
+5381
+5491
+5693
+5970
+6067
+6110
+6165
+6282
+6304
+6314
+6328
+6382
+6649
+6799
+7057
+7121
+7133
+7182
+7251
+7436
+7496
+7769
+7791
+7831
+7840
+7931
+7945
+7980
+8023
+8087
+8101
+8207
+8445
+8715
+8768
+9193
+9233
+9418
+9743
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,242 @@
+44
+50
+101
+170
+179
+217
+240
+414
+443
+445
+507
+537
+585
+666
+669
+673
+677
+695
+769
+771
+798
+801
+811
+817
+865
+968
+971
+1024
+1056
+1194
+1201
+1245
+1349
+1366
+1373
+1458
+1471
+1489
+1514
+1589
+1599
+1601
+1646
+1665
+1697
+1712
+1729
+1822
+1918
+1927
+1934
+1949
+2006
+2147
+2161
+2170
+2172
+2180
+2189
+2267
+2270
+2313
+2497
+2604
+2679
+2695
+2699
+2743
+2798
+2867
+2890
+2893
+2939
+2959
+2967
+2992
+3011
+3113
+3134
+3144
+3154
+3155
+3183
+3186
+3239
+3251
+3265
+3333
+3446
+3550
+3580
+3585
+3673
+3676
+3695
+3727
+3746
+3769
+3780
+3847
+3861
+3908
+4007
+4032
+4043
+4067
+4102
+4125
+4126
+4142
+4177
+4201
+4239
+4246
+4254
+4285
+4343
+4412
+4421
+4441
+4445
+4456
+4510
+4561
+4580
+4583
+4618
+4717
+5001
+5050
+5151
+5153
+5175
+5203
+5321
+5323
+5328
+5553
+5608
+5637
+5654
+5692
+5719
+5741
+5753
+5770
+5808
+5878
+5904
+5970
+6074
+6087
+6110
+6165
+6414
+6431
+6574
+6617
+6635
+6652
+6653
+6685
+6688
+6799
+6804
+6823
+6835
+6915
+7010
+7049
+7054
+7057
+7112
+7121
+7133
+7154
+7212
+7268
+7270
+7277
+7284
+7410
+7436
+7457
+7473
+7486
+7495
+7497
+7510
+7625
+7721
+7745
+7775
+7828
+7829
+7831
+7840
+7910
+7920
+7924
+7945
+7964
+7972
+7999
+8027
+8135
+8143
+8318
+8411
+8433
+8435
+8464
+8507
+8530
+8673
+8725
+8727
+8783
+8807
+8870
+8872
+8881
+9006
+9099
+9171
+9193
+9274
+9325
+9347
+9383
+9396
+9399
+9418
+9429
+9528
+9736
+9743
+9747
+9967
+9980
+9995
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,223 @@
+68
+122
+186
+188
+255
+342
+440
+454
+665
+668
+748
+753
+761
+765
+771
+799
+819
+999
+1000
+1154
+1226
+1239
+1298
+1302
+1387
+1404
+1433
+1469
+1571
+1585
+1596
+1618
+1669
+1682
+1690
+1738
+1758
+1813
+1818
+1867
+1868
+1963
+2185
+2207
+2286
+2383
+2384
+2541
+2546
+2568
+2569
+2649
+2671
+2674
+2690
+2742
+2808
+2874
+2924
+2944
+3108
+3190
+3284
+3296
+3325
+3470
+3579
+3626
+3746
+3774
+3936
+3958
+4049
+4066
+4073
+4114
+4117
+4182
+4233
+4237
+4298
+4335
+4372
+4390
+4415
+4431
+4488
+4489
+4517
+4555
+4670
+4708
+4716
+4717
+4733
+4737
+4765
+4779
+4858
+4881
+4934
+4946
+4967
+5000
+5007
+5045
+5115
+5138
+5170
+5193
+5214
+5245
+5268
+5300
+5371
+5378
+5384
+5500
+5686
+5693
+5697
+5770
+5838
+5867
+5872
+5887
+5916
+5965
+6052
+6073
+6089
+6143
+6148
+6188
+6189
+6207
+6230
+6259
+6270
+6292
+6300
+6360
+6381
+6395
+6423
+6435
+6662
+6694
+6734
+6771
+6797
+6803
+6858
+6870
+6875
+6973
+7013
+7121
+7182
+7225
+7270
+7412
+7659
+7671
+7699
+7763
+7774
+7805
+7809
+7848
+7930
+7982
+7992
+8076
+8078
+8081
+8103
+8141
+8276
+8394
+8402
+8452
+8498
+8645
+8701
+8728
+8735
+8788
+8911
+8913
+8928
+8955
+8972
+8986
+9079
+9112
+9165
+9187
+9199
+9224
+9237
+9247
+9261
+9270
+9367
+9393
+9423
+9443
+9456
+9471
+9475
+9492
+9527
+9539
+9552
+9573
+9609
+9618
+9730
+9838
+9910
+9926
+9933
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,8580 @@
+0
+1
+2
+3
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+39
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+61
+62
+63
+65
+67
+69
+70
+71
+72
+73
+75
+77
+78
+80
+81
+82
+84
+85
+86
+87
+88
+89
+90
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+124
+125
+126
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+144
+145
+146
+147
+149
+153
+154
+155
+156
+157
+158
+160
+161
+162
+163
+164
+165
+167
+168
+169
+170
+171
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+187
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+216
+217
+218
+219
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+233
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+256
+257
+259
+260
+261
+262
+263
+264
+265
+266
+267
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+296
+297
+298
+299
+300
+301
+302
+303
+304
+306
+307
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+323
+324
+325
+327
+328
+329
+330
+331
+332
+333
+335
+337
+338
+340
+341
+343
+344
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+402
+403
+404
+405
+406
+407
+408
+409
+410
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+426
+428
+429
+430
+431
+433
+434
+435
+437
+438
+439
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+455
+456
+458
+459
+460
+461
+464
+465
+466
+467
+468
+469
+470
+471
+472
+474
+475
+476
+477
+479
+480
+481
+483
+486
+487
+489
+490
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+539
+540
+542
+543
+544
+545
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+594
+596
+597
+598
+599
+600
+601
+602
+603
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+622
+624
+625
+626
+627
+628
+630
+631
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+645
+647
+648
+649
+650
+651
+652
+653
+654
+655
+657
+658
+659
+660
+661
+662
+663
+664
+666
+667
+669
+671
+672
+673
+674
+675
+677
+678
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+739
+740
+741
+742
+743
+744
+745
+746
+747
+749
+750
+751
+752
+754
+755
+756
+757
+758
+759
+760
+763
+764
+766
+768
+770
+772
+773
+774
+775
+777
+778
+779
+781
+782
+783
+784
+785
+786
+787
+789
+791
+792
+793
+794
+795
+796
+798
+801
+802
+803
+804
+807
+808
+809
+810
+811
+813
+815
+816
+817
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+833
+834
+835
+836
+838
+839
+840
+841
+842
+844
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+857
+858
+861
+862
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+879
+880
+881
+883
+884
+885
+886
+887
+888
+889
+890
+892
+893
+894
+895
+896
+897
+898
+899
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+974
+975
+976
+977
+978
+979
+980
+981
+983
+984
+985
+986
+987
+988
+989
+990
+991
+993
+994
+995
+996
+997
+998
+1001
+1003
+1006
+1007
+1011
+1012
+1013
+1014
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1030
+1031
+1032
+1033
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1044
+1046
+1047
+1048
+1049
+1050
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1106
+1107
+1108
+1109
+1110
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1156
+1159
+1160
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1198
+1199
+1200
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1236
+1237
+1238
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1288
+1289
+1291
+1292
+1294
+1295
+1296
+1297
+1299
+1301
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1323
+1324
+1325
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1345
+1346
+1347
+1348
+1349
+1350
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1365
+1366
+1367
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1381
+1382
+1383
+1384
+1385
+1386
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1403
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1453
+1454
+1456
+1458
+1459
+1460
+1461
+1462
+1463
+1465
+1466
+1467
+1468
+1470
+1472
+1473
+1474
+1475
+1476
+1477
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1489
+1490
+1491
+1492
+1493
+1494
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1505
+1507
+1509
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1524
+1525
+1526
+1528
+1529
+1530
+1531
+1532
+1534
+1535
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1572
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1595
+1597
+1599
+1600
+1601
+1603
+1605
+1606
+1607
+1608
+1609
+1611
+1612
+1613
+1614
+1615
+1617
+1619
+1620
+1621
+1622
+1623
+1625
+1626
+1627
+1628
+1629
+1630
+1632
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1649
+1650
+1651
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1664
+1665
+1666
+1667
+1668
+1670
+1671
+1672
+1673
+1674
+1675
+1677
+1678
+1679
+1680
+1681
+1683
+1684
+1685
+1686
+1688
+1689
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1714
+1715
+1716
+1717
+1718
+1719
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1735
+1736
+1737
+1740
+1741
+1742
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1757
+1759
+1760
+1761
+1762
+1763
+1764
+1766
+1767
+1769
+1771
+1772
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1814
+1817
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1839
+1840
+1841
+1842
+1843
+1844
+1846
+1847
+1848
+1851
+1852
+1853
+1854
+1855
+1856
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1958
+1959
+1960
+1961
+1962
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1982
+1983
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+2000
+2001
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2016
+2017
+2019
+2020
+2021
+2022
+2023
+2025
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2087
+2089
+2090
+2091
+2092
+2094
+2096
+2098
+2099
+2100
+2101
+2102
+2103
+2105
+2106
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2156
+2158
+2159
+2161
+2162
+2164
+2165
+2166
+2167
+2168
+2169
+2171
+2172
+2173
+2174
+2175
+2177
+2178
+2179
+2180
+2181
+2184
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2202
+2203
+2204
+2206
+2208
+2210
+2211
+2212
+2213
+2214
+2215
+2217
+2218
+2219
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2231
+2232
+2233
+2235
+2236
+2237
+2238
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2250
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2266
+2268
+2269
+2270
+2272
+2275
+2276
+2277
+2278
+2280
+2281
+2282
+2283
+2284
+2285
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2310
+2311
+2312
+2313
+2314
+2315
+2317
+2318
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2333
+2334
+2336
+2337
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2382
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2400
+2401
+2403
+2405
+2406
+2407
+2408
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2438
+2439
+2440
+2441
+2442
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2542
+2543
+2544
+2545
+2547
+2548
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2561
+2562
+2564
+2565
+2566
+2567
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2595
+2596
+2597
+2598
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2609
+2612
+2613
+2614
+2615
+2617
+2618
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2650
+2651
+2652
+2654
+2655
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2666
+2668
+2669
+2670
+2672
+2673
+2675
+2676
+2677
+2678
+2679
+2680
+2682
+2684
+2685
+2686
+2687
+2688
+2689
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2731
+2732
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2743
+2744
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2783
+2784
+2785
+2786
+2787
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2826
+2827
+2828
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2871
+2875
+2876
+2878
+2879
+2880
+2881
+2882
+2883
+2885
+2886
+2887
+2888
+2889
+2890
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2914
+2915
+2916
+2917
+2919
+2921
+2922
+2923
+2925
+2926
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2937
+2938
+2939
+2940
+2941
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2963
+2965
+2966
+2967
+2968
+2969
+2970
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2996
+2997
+2998
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3024
+3025
+3026
+3027
+3028
+3029
+3031
+3032
+3033
+3034
+3035
+3036
+3038
+3039
+3040
+3041
+3042
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3100
+3102
+3103
+3104
+3105
+3106
+3107
+3109
+3110
+3111
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3140
+3141
+3142
+3144
+3145
+3147
+3148
+3149
+3150
+3151
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3161
+3163
+3164
+3165
+3166
+3167
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3222
+3223
+3225
+3226
+3228
+3229
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3256
+3257
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3297
+3298
+3299
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3317
+3319
+3320
+3321
+3322
+3324
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3402
+3403
+3404
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3424
+3425
+3426
+3427
+3429
+3430
+3431
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3442
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3466
+3467
+3468
+3469
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3484
+3485
+3487
+3488
+3489
+3490
+3491
+3492
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3590
+3591
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3622
+3623
+3624
+3625
+3627
+3628
+3629
+3630
+3631
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3740
+3741
+3742
+3743
+3745
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3765
+3766
+3767
+3768
+3769
+3771
+3772
+3773
+3775
+3776
+3777
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3842
+3843
+3844
+3845
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3858
+3859
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3938
+3939
+3940
+3942
+3943
+3944
+3945
+3946
+3949
+3950
+3951
+3952
+3955
+3956
+3957
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3979
+3980
+3981
+3982
+3983
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3994
+3995
+3996
+3997
+3998
+3999
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4016
+4017
+4020
+4021
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4039
+4040
+4041
+4042
+4044
+4045
+4046
+4047
+4048
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4067
+4068
+4069
+4070
+4071
+4072
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4109
+4110
+4113
+4116
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4139
+4140
+4141
+4142
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4162
+4163
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4183
+4184
+4185
+4187
+4189
+4190
+4191
+4192
+4193
+4194
+4196
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4234
+4235
+4236
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4280
+4281
+4283
+4284
+4285
+4286
+4287
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4322
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4332
+4333
+4334
+4337
+4338
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4362
+4363
+4364
+4365
+4366
+4367
+4369
+4370
+4371
+4374
+4375
+4376
+4377
+4379
+4380
+4381
+4382
+4383
+4385
+4386
+4387
+4388
+4389
+4392
+4394
+4395
+4396
+4397
+4398
+4399
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4411
+4413
+4414
+4416
+4417
+4418
+4419
+4420
+4423
+4424
+4426
+4427
+4428
+4429
+4430
+4432
+4433
+4434
+4435
+4436
+4438
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4452
+4454
+4455
+4457
+4459
+4460
+4461
+4462
+4464
+4465
+4466
+4468
+4469
+4470
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4486
+4487
+4490
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4511
+4513
+4514
+4515
+4516
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4541
+4542
+4544
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4565
+4567
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4591
+4592
+4593
+4594
+4595
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4634
+4635
+4637
+4638
+4639
+4640
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4671
+4672
+4673
+4674
+4677
+4678
+4679
+4680
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4702
+4703
+4704
+4705
+4706
+4707
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4734
+4736
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4752
+4753
+4754
+4755
+4756
+4757
+4759
+4760
+4761
+4762
+4763
+4764
+4766
+4767
+4768
+4769
+4770
+4772
+4773
+4776
+4777
+4778
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4800
+4801
+4802
+4803
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4817
+4818
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4836
+4837
+4838
+4839
+4841
+4842
+4843
+4845
+4846
+4847
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4860
+4861
+4862
+4863
+4864
+4865
+4867
+4868
+4869
+4871
+4873
+4874
+4875
+4876
+4878
+4879
+4880
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4944
+4945
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4961
+4962
+4963
+4964
+4965
+4966
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4992
+4993
+4995
+4996
+4997
+4998
+4999
+5001
+5002
+5003
+5005
+5006
+5008
+5009
+5010
+5011
+5012
+5014
+5015
+5016
+5017
+5019
+5020
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5039
+5040
+5041
+5042
+5043
+5044
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5070
+5071
+5072
+5073
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5100
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5112
+5113
+5114
+5116
+5117
+5118
+5119
+5120
+5122
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5171
+5173
+5174
+5175
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5194
+5195
+5197
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5215
+5216
+5218
+5219
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5237
+5238
+5239
+5240
+5241
+5243
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5260
+5262
+5264
+5265
+5266
+5267
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5295
+5296
+5297
+5298
+5299
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5311
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5321
+5322
+5324
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5350
+5351
+5352
+5353
+5354
+5356
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5372
+5373
+5374
+5375
+5376
+5377
+5379
+5380
+5381
+5383
+5385
+5386
+5387
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5403
+5404
+5405
+5407
+5408
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5426
+5427
+5428
+5429
+5430
+5431
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5442
+5443
+5444
+5445
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5502
+5503
+5504
+5505
+5507
+5508
+5511
+5512
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5545
+5546
+5547
+5548
+5549
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5578
+5579
+5581
+5582
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5621
+5622
+5623
+5625
+5626
+5627
+5628
+5629
+5630
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5656
+5657
+5658
+5659
+5660
+5661
+5663
+5665
+5666
+5667
+5668
+5671
+5672
+5673
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5688
+5689
+5690
+5691
+5692
+5694
+5696
+5699
+5700
+5701
+5702
+5704
+5705
+5707
+5708
+5709
+5710
+5711
+5713
+5714
+5715
+5716
+5717
+5718
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5755
+5756
+5757
+5758
+5759
+5761
+5762
+5764
+5765
+5766
+5767
+5768
+5769
+5774
+5776
+5777
+5778
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5808
+5810
+5812
+5814
+5815
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5833
+5834
+5835
+5836
+5837
+5839
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5856
+5857
+5858
+5859
+5860
+5861
+5863
+5864
+5866
+5868
+5869
+5870
+5871
+5873
+5875
+5876
+5877
+5878
+5879
+5880
+5882
+5884
+5885
+5886
+5889
+5890
+5891
+5892
+5893
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5901
+5903
+5904
+5905
+5906
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5917
+5918
+5919
+5920
+5921
+5922
+5923
+5924
+5926
+5927
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+5939
+5940
+5941
+5942
+5943
+5944
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5956
+5957
+5958
+5959
+5961
+5962
+5963
+5964
+5966
+5967
+5968
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5979
+5981
+5982
+5983
+5984
+5985
+5986
+5988
+5989
+5990
+5992
+5993
+5994
+5995
+5997
+5998
+5999
+6000
+6001
+6002
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6010
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6027
+6028
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6039
+6040
+6041
+6042
+6043
+6044
+6045
+6046
+6047
+6049
+6050
+6051
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6061
+6062
+6063
+6064
+6066
+6067
+6069
+6071
+6072
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6083
+6084
+6085
+6086
+6087
+6088
+6090
+6091
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6102
+6103
+6104
+6106
+6107
+6109
+6110
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6123
+6124
+6125
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6138
+6139
+6141
+6142
+6144
+6146
+6147
+6149
+6150
+6152
+6155
+6156
+6157
+6158
+6159
+6160
+6163
+6164
+6165
+6166
+6167
+6169
+6170
+6171
+6172
+6173
+6174
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6183
+6185
+6186
+6190
+6191
+6193
+6194
+6195
+6196
+6198
+6199
+6200
+6201
+6202
+6203
+6204
+6205
+6208
+6209
+6210
+6211
+6214
+6215
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6225
+6226
+6227
+6228
+6229
+6231
+6232
+6233
+6234
+6235
+6236
+6238
+6239
+6240
+6242
+6243
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6260
+6261
+6263
+6264
+6267
+6269
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6280
+6281
+6282
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6303
+6304
+6306
+6307
+6308
+6309
+6310
+6311
+6312
+6313
+6314
+6315
+6316
+6317
+6318
+6319
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6328
+6329
+6330
+6331
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6361
+6362
+6363
+6364
+6365
+6366
+6367
+6368
+6370
+6371
+6372
+6373
+6374
+6375
+6377
+6378
+6379
+6380
+6382
+6383
+6384
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6403
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6412
+6413
+6414
+6415
+6416
+6417
+6418
+6419
+6420
+6421
+6424
+6425
+6426
+6427
+6429
+6430
+6431
+6432
+6433
+6434
+6436
+6437
+6438
+6439
+6440
+6441
+6442
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6459
+6460
+6461
+6462
+6463
+6464
+6465
+6467
+6469
+6470
+6471
+6472
+6475
+6476
+6477
+6478
+6479
+6480
+6482
+6483
+6484
+6485
+6486
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6496
+6497
+6498
+6499
+6500
+6501
+6503
+6504
+6505
+6506
+6507
+6509
+6510
+6511
+6512
+6513
+6514
+6517
+6518
+6519
+6520
+6521
+6522
+6523
+6524
+6525
+6526
+6527
+6528
+6529
+6530
+6532
+6533
+6534
+6535
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6545
+6546
+6547
+6548
+6549
+6551
+6552
+6553
+6554
+6555
+6556
+6557
+6558
+6559
+6560
+6561
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6571
+6572
+6573
+6574
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6583
+6585
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6604
+6605
+6606
+6607
+6608
+6610
+6611
+6612
+6613
+6614
+6616
+6617
+6620
+6622
+6623
+6625
+6627
+6628
+6629
+6630
+6631
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6643
+6644
+6645
+6646
+6647
+6648
+6649
+6650
+6651
+6652
+6653
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6663
+6664
+6665
+6666
+6667
+6669
+6670
+6671
+6672
+6675
+6676
+6677
+6678
+6679
+6681
+6683
+6685
+6686
+6687
+6688
+6689
+6690
+6691
+6692
+6695
+6696
+6697
+6698
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6711
+6712
+6714
+6715
+6716
+6717
+6718
+6719
+6720
+6722
+6724
+6725
+6726
+6727
+6728
+6729
+6731
+6732
+6733
+6735
+6736
+6737
+6738
+6739
+6740
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6766
+6767
+6768
+6769
+6770
+6772
+6773
+6774
+6776
+6777
+6778
+6779
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6798
+6801
+6802
+6804
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6817
+6818
+6820
+6822
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6835
+6836
+6837
+6839
+6840
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6851
+6852
+6853
+6854
+6856
+6857
+6859
+6860
+6861
+6862
+6863
+6864
+6865
+6866
+6867
+6868
+6869
+6871
+6872
+6873
+6874
+6876
+6877
+6878
+6881
+6882
+6883
+6884
+6887
+6888
+6889
+6890
+6891
+6892
+6893
+6895
+6896
+6897
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6909
+6910
+6911
+6912
+6913
+6915
+6916
+6917
+6918
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6927
+6928
+6929
+6930
+6931
+6932
+6933
+6934
+6936
+6937
+6938
+6939
+6941
+6942
+6943
+6945
+6946
+6947
+6948
+6949
+6950
+6952
+6953
+6954
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6965
+6966
+6967
+6968
+6969
+6970
+6972
+6974
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6996
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7007
+7008
+7009
+7010
+7011
+7012
+7014
+7015
+7016
+7017
+7018
+7019
+7021
+7022
+7023
+7025
+7026
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7045
+7046
+7049
+7050
+7051
+7052
+7053
+7054
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7065
+7066
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7077
+7078
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7086
+7087
+7088
+7089
+7091
+7092
+7093
+7094
+7095
+7097
+7099
+7100
+7101
+7102
+7103
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7112
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7122
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7133
+7134
+7135
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7144
+7145
+7146
+7147
+7148
+7149
+7152
+7153
+7154
+7155
+7156
+7157
+7159
+7161
+7162
+7163
+7164
+7166
+7167
+7168
+7169
+7170
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7183
+7184
+7186
+7187
+7188
+7189
+7190
+7191
+7193
+7194
+7196
+7197
+7198
+7199
+7201
+7202
+7203
+7204
+7205
+7207
+7208
+7209
+7210
+7211
+7212
+7213
+7214
+7215
+7216
+7217
+7218
+7219
+7220
+7222
+7223
+7224
+7226
+7227
+7228
+7230
+7231
+7232
+7233
+7234
+7235
+7237
+7238
+7239
+7240
+7242
+7243
+7244
+7246
+7247
+7248
+7249
+7250
+7252
+7253
+7255
+7256
+7257
+7258
+7259
+7261
+7263
+7264
+7265
+7266
+7267
+7268
+7269
+7271
+7272
+7273
+7274
+7275
+7276
+7277
+7278
+7279
+7280
+7281
+7282
+7283
+7284
+7285
+7287
+7288
+7289
+7290
+7291
+7292
+7293
+7294
+7295
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7304
+7305
+7306
+7307
+7308
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7317
+7318
+7319
+7320
+7321
+7322
+7324
+7325
+7327
+7328
+7330
+7331
+7332
+7333
+7334
+7336
+7337
+7338
+7339
+7340
+7341
+7343
+7344
+7345
+7347
+7349
+7350
+7351
+7352
+7354
+7355
+7357
+7358
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7382
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7402
+7404
+7405
+7406
+7407
+7408
+7409
+7410
+7415
+7417
+7418
+7419
+7420
+7421
+7422
+7423
+7425
+7426
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7436
+7438
+7439
+7440
+7442
+7443
+7444
+7445
+7446
+7447
+7449
+7450
+7451
+7452
+7453
+7454
+7455
+7456
+7457
+7460
+7461
+7462
+7463
+7464
+7465
+7466
+7467
+7468
+7470
+7471
+7472
+7473
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7482
+7483
+7484
+7485
+7487
+7488
+7489
+7490
+7492
+7493
+7494
+7495
+7496
+7497
+7498
+7499
+7500
+7503
+7504
+7505
+7506
+7507
+7508
+7510
+7511
+7512
+7513
+7514
+7515
+7517
+7518
+7519
+7520
+7522
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7556
+7557
+7558
+7559
+7560
+7561
+7562
+7563
+7564
+7565
+7566
+7567
+7568
+7569
+7570
+7571
+7572
+7573
+7574
+7576
+7577
+7578
+7579
+7581
+7582
+7583
+7584
+7585
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7606
+7607
+7608
+7609
+7610
+7611
+7612
+7613
+7614
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7625
+7627
+7628
+7630
+7631
+7632
+7634
+7635
+7636
+7637
+7638
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7655
+7656
+7658
+7660
+7661
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7670
+7672
+7673
+7674
+7675
+7677
+7678
+7679
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7693
+7694
+7695
+7696
+7697
+7698
+7700
+7701
+7702
+7703
+7704
+7705
+7706
+7708
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7721
+7722
+7723
+7725
+7726
+7728
+7731
+7732
+7733
+7734
+7735
+7737
+7738
+7739
+7740
+7741
+7743
+7744
+7745
+7746
+7747
+7748
+7749
+7751
+7752
+7753
+7756
+7757
+7758
+7759
+7760
+7761
+7765
+7766
+7767
+7768
+7769
+7770
+7771
+7772
+7773
+7775
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7806
+7807
+7808
+7810
+7811
+7812
+7813
+7815
+7816
+7817
+7818
+7819
+7820
+7821
+7822
+7823
+7824
+7826
+7827
+7828
+7829
+7830
+7831
+7832
+7833
+7834
+7835
+7836
+7837
+7838
+7839
+7840
+7841
+7842
+7843
+7845
+7846
+7847
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7858
+7859
+7860
+7862
+7863
+7864
+7865
+7866
+7867
+7868
+7869
+7870
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7895
+7896
+7897
+7898
+7900
+7901
+7904
+7905
+7906
+7907
+7908
+7909
+7910
+7911
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7920
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7931
+7932
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7942
+7944
+7945
+7946
+7947
+7948
+7949
+7950
+7953
+7955
+7956
+7958
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7968
+7969
+7970
+7971
+7972
+7973
+7974
+7975
+7978
+7979
+7980
+7981
+7983
+7984
+7986
+7987
+7988
+7989
+7990
+7991
+7993
+7994
+7995
+7996
+7997
+7998
+7999
+8001
+8002
+8004
+8005
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8023
+8024
+8025
+8026
+8027
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8036
+8037
+8039
+8042
+8043
+8044
+8045
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8064
+8065
+8066
+8067
+8068
+8069
+8071
+8073
+8075
+8077
+8080
+8082
+8083
+8084
+8085
+8086
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8094
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8113
+8114
+8115
+8116
+8118
+8119
+8120
+8121
+8122
+8123
+8124
+8125
+8127
+8128
+8129
+8130
+8132
+8133
+8134
+8135
+8137
+8138
+8139
+8140
+8142
+8143
+8144
+8146
+8147
+8148
+8149
+8150
+8151
+8152
+8153
+8154
+8155
+8158
+8159
+8160
+8161
+8162
+8163
+8164
+8166
+8167
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8192
+8194
+8195
+8196
+8197
+8198
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8207
+8208
+8209
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8223
+8224
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8263
+8264
+8265
+8267
+8268
+8269
+8270
+8271
+8272
+8274
+8275
+8277
+8280
+8281
+8282
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8297
+8299
+8300
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8309
+8310
+8311
+8312
+8313
+8315
+8316
+8317
+8318
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8328
+8329
+8331
+8332
+8333
+8334
+8335
+8338
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8353
+8354
+8355
+8356
+8357
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8369
+8370
+8371
+8372
+8374
+8375
+8377
+8378
+8379
+8380
+8381
+8382
+8383
+8384
+8385
+8386
+8387
+8388
+8390
+8392
+8393
+8395
+8396
+8397
+8399
+8400
+8401
+8403
+8404
+8407
+8408
+8409
+8410
+8413
+8414
+8415
+8416
+8417
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8429
+8431
+8432
+8433
+8434
+8435
+8436
+8438
+8439
+8440
+8442
+8443
+8444
+8445
+8447
+8448
+8449
+8450
+8451
+8453
+8454
+8455
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8464
+8465
+8467
+8468
+8469
+8472
+8473
+8474
+8475
+8477
+8478
+8479
+8480
+8482
+8483
+8485
+8486
+8487
+8488
+8489
+8490
+8491
+8492
+8493
+8494
+8495
+8496
+8497
+8500
+8502
+8503
+8504
+8505
+8506
+8507
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8516
+8517
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8530
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8542
+8543
+8544
+8545
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8564
+8566
+8567
+8568
+8569
+8570
+8571
+8572
+8573
+8574
+8575
+8576
+8577
+8578
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8613
+8614
+8615
+8616
+8617
+8618
+8620
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8631
+8633
+8634
+8635
+8636
+8637
+8638
+8639
+8640
+8641
+8643
+8644
+8646
+8647
+8648
+8649
+8650
+8651
+8652
+8653
+8654
+8657
+8658
+8659
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8669
+8671
+8672
+8673
+8674
+8675
+8676
+8677
+8678
+8679
+8680
+8681
+8682
+8684
+8685
+8687
+8689
+8690
+8691
+8692
+8693
+8695
+8696
+8697
+8698
+8699
+8700
+8702
+8703
+8704
+8706
+8707
+8708
+8709
+8710
+8711
+8713
+8714
+8715
+8717
+8718
+8719
+8720
+8721
+8722
+8724
+8725
+8726
+8727
+8729
+8731
+8732
+8733
+8734
+8736
+8737
+8738
+8739
+8740
+8741
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8784
+8785
+8786
+8787
+8789
+8790
+8791
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8803
+8804
+8805
+8806
+8808
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8833
+8834
+8835
+8836
+8837
+8838
+8839
+8841
+8842
+8843
+8844
+8846
+8847
+8848
+8849
+8850
+8852
+8853
+8854
+8858
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8870
+8871
+8872
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8881
+8882
+8883
+8884
+8885
+8886
+8887
+8888
+8889
+8890
+8891
+8892
+8893
+8894
+8895
+8896
+8897
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8910
+8912
+8914
+8916
+8917
+8918
+8919
+8920
+8921
+8923
+8924
+8925
+8926
+8927
+8929
+8931
+8932
+8933
+8936
+8937
+8938
+8939
+8940
+8941
+8943
+8944
+8945
+8946
+8948
+8949
+8950
+8951
+8953
+8954
+8956
+8957
+8958
+8959
+8960
+8962
+8963
+8965
+8966
+8967
+8969
+8970
+8971
+8973
+8974
+8976
+8977
+8979
+8981
+8982
+8983
+8984
+8985
+8987
+8988
+8989
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8998
+8999
+9000
+9001
+9002
+9003
+9005
+9006
+9007
+9008
+9009
+9010
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9031
+9032
+9033
+9034
+9035
+9036
+9038
+9040
+9041
+9042
+9043
+9044
+9045
+9047
+9048
+9049
+9051
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9066
+9067
+9069
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9080
+9082
+9083
+9084
+9086
+9087
+9088
+9089
+9090
+9091
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9102
+9103
+9105
+9106
+9107
+9108
+9109
+9110
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9128
+9129
+9130
+9133
+9134
+9135
+9137
+9138
+9139
+9140
+9141
+9143
+9144
+9146
+9147
+9148
+9149
+9150
+9151
+9152
+9154
+9155
+9156
+9157
+9159
+9160
+9161
+9162
+9163
+9164
+9166
+9167
+9168
+9169
+9170
+9171
+9172
+9173
+9174
+9175
+9176
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9210
+9211
+9212
+9213
+9214
+9215
+9216
+9218
+9219
+9220
+9221
+9223
+9225
+9226
+9228
+9229
+9230
+9231
+9234
+9236
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9249
+9250
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9258
+9259
+9260
+9262
+9265
+9266
+9267
+9268
+9269
+9271
+9272
+9273
+9274
+9275
+9276
+9277
+9278
+9279
+9280
+9282
+9283
+9284
+9285
+9286
+9287
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9297
+9298
+9299
+9300
+9301
+9302
+9304
+9306
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9315
+9316
+9318
+9319
+9321
+9322
+9323
+9324
+9325
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9338
+9340
+9341
+9342
+9343
+9344
+9345
+9347
+9348
+9349
+9351
+9353
+9354
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9368
+9369
+9371
+9372
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9386
+9388
+9389
+9390
+9391
+9392
+9394
+9395
+9396
+9397
+9399
+9400
+9401
+9402
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9417
+9418
+9419
+9420
+9421
+9422
+9424
+9425
+9426
+9427
+9428
+9429
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9445
+9446
+9447
+9448
+9449
+9450
+9451
+9452
+9453
+9454
+9455
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9464
+9465
+9466
+9470
+9472
+9474
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9484
+9485
+9486
+9487
+9488
+9489
+9491
+9493
+9494
+9495
+9496
+9498
+9499
+9500
+9502
+9503
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9524
+9525
+9526
+9528
+9529
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9540
+9542
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9553
+9554
+9555
+9556
+9557
+9558
+9560
+9561
+9562
+9563
+9564
+9565
+9567
+9568
+9569
+9570
+9571
+9572
+9574
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9584
+9585
+9587
+9589
+9590
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9600
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+9608
+9610
+9611
+9613
+9614
+9615
+9616
+9617
+9619
+9620
+9622
+9623
+9625
+9626
+9627
+9628
+9629
+9631
+9632
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9646
+9648
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9659
+9660
+9663
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9680
+9681
+9682
+9683
+9684
+9685
+9687
+9688
+9690
+9691
+9692
+9693
+9694
+9695
+9697
+9698
+9699
+9700
+9701
+9702
+9703
+9704
+9705
+9706
+9707
+9710
+9711
+9712
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9722
+9723
+9724
+9725
+9726
+9727
+9729
+9731
+9732
+9733
+9734
+9735
+9736
+9737
+9738
+9739
+9740
+9741
+9744
+9745
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9761
+9762
+9763
+9764
+9765
+9766
+9767
+9769
+9770
+9771
+9773
+9774
+9775
+9777
+9778
+9779
+9780
+9781
+9782
+9783
+9784
+9786
+9787
+9788
+9789
+9790
+9791
+9792
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9801
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9828
+9829
+9830
+9831
+9833
+9834
+9835
+9836
+9837
+9839
+9840
+9841
+9842
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9857
+9858
+9859
+9860
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9872
+9873
+9876
+9878
+9879
+9881
+9882
+9883
+9884
+9885
+9886
+9887
+9888
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9898
+9899
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9927
+9928
+9929
+9931
+9932
+9934
+9935
+9937
+9938
+9939
+9940
+9941
+9942
+9943
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9962
+9963
+9964
+9965
+9966
+9968
+9969
+9970
+9971
+9972
+9973
+9975
+9976
+9977
+9981
+9982
+9983
+9984
+9985
+9986
+9987
+9988
+9990
+9991
+9992
+9993
+9994
+9995
+9996
+9997
+9998
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1197 @@
+4
+26
+38
+40
+60
+64
+66
+74
+76
+79
+83
+91
+110
+123
+127
+143
+148
+150
+151
+152
+159
+166
+172
+215
+220
+221
+232
+234
+258
+268
+269
+294
+295
+305
+308
+322
+326
+334
+336
+339
+345
+360
+361
+401
+411
+425
+427
+432
+436
+457
+462
+463
+473
+478
+482
+484
+485
+488
+491
+502
+538
+541
+546
+561
+575
+593
+595
+604
+621
+623
+629
+632
+633
+644
+646
+656
+670
+676
+679
+691
+703
+723
+738
+762
+767
+769
+776
+780
+788
+790
+797
+800
+805
+806
+812
+814
+818
+820
+832
+837
+843
+845
+856
+859
+860
+863
+864
+876
+877
+878
+882
+891
+900
+925
+944
+956
+973
+982
+992
+1002
+1004
+1005
+1008
+1009
+1010
+1015
+1016
+1017
+1029
+1034
+1035
+1043
+1045
+1051
+1105
+1111
+1132
+1155
+1157
+1158
+1161
+1175
+1176
+1197
+1201
+1202
+1217
+1218
+1235
+1247
+1279
+1287
+1290
+1293
+1300
+1322
+1326
+1344
+1351
+1363
+1364
+1368
+1380
+1402
+1422
+1434
+1452
+1455
+1457
+1464
+1471
+1478
+1488
+1495
+1504
+1506
+1508
+1510
+1523
+1527
+1533
+1536
+1573
+1584
+1594
+1598
+1602
+1604
+1610
+1616
+1624
+1631
+1633
+1648
+1652
+1662
+1663
+1676
+1687
+1703
+1713
+1720
+1734
+1739
+1743
+1756
+1765
+1768
+1770
+1773
+1782
+1791
+1801
+1802
+1815
+1816
+1838
+1845
+1849
+1850
+1857
+1877
+1910
+1944
+1957
+1981
+1984
+1999
+2002
+2015
+2018
+2024
+2026
+2049
+2060
+2086
+2088
+2093
+2095
+2097
+2104
+2107
+2108
+2109
+2119
+2143
+2155
+2157
+2160
+2163
+2170
+2176
+2182
+2183
+2200
+2201
+2205
+2209
+2216
+2220
+2230
+2234
+2239
+2249
+2251
+2252
+2265
+2267
+2271
+2273
+2274
+2279
+2309
+2316
+2319
+2332
+2335
+2338
+2351
+2362
+2371
+2380
+2381
+2398
+2399
+2402
+2404
+2409
+2437
+2443
+2444
+2469
+2479
+2490
+2498
+2508
+2522
+2530
+2549
+2560
+2563
+2594
+2599
+2608
+2610
+2611
+2616
+2619
+2633
+2647
+2648
+2653
+2656
+2665
+2667
+2681
+2683
+2704
+2729
+2730
+2733
+2745
+2757
+2782
+2788
+2824
+2825
+2829
+2840
+2870
+2872
+2873
+2877
+2884
+2891
+2892
+2901
+2911
+2912
+2913
+2918
+2920
+2927
+2936
+2942
+2943
+2962
+2964
+2971
+2995
+2999
+3008
+3009
+3023
+3030
+3037
+3043
+3054
+3077
+3091
+3099
+3101
+3112
+3121
+3139
+3143
+3146
+3152
+3160
+3162
+3168
+3189
+3221
+3224
+3227
+3230
+3231
+3242
+3255
+3258
+3300
+3316
+3318
+3323
+3344
+3372
+3380
+3389
+3390
+3391
+3401
+3405
+3423
+3428
+3432
+3440
+3441
+3443
+3465
+3471
+3483
+3486
+3493
+3525
+3526
+3534
+3552
+3564
+3589
+3592
+3604
+3612
+3621
+3632
+3656
+3699
+3720
+3721
+3731
+3739
+3744
+3756
+3764
+3770
+3778
+3797
+3841
+3846
+3857
+3860
+3895
+3906
+3907
+3922
+3937
+3941
+3947
+3948
+3953
+3954
+3968
+3978
+3984
+3992
+3993
+4000
+4015
+4018
+4019
+4022
+4030
+4038
+4043
+4107
+4108
+4111
+4112
+4115
+4129
+4138
+4143
+4161
+4164
+4186
+4188
+4195
+4197
+4198
+4199
+4207
+4221
+4249
+4257
+4267
+4278
+4279
+4282
+4288
+4299
+4300
+4301
+4313
+4321
+4323
+4331
+4336
+4339
+4340
+4361
+4368
+4373
+4378
+4384
+4391
+4393
+4400
+4409
+4410
+4412
+4421
+4422
+4425
+4437
+4439
+4440
+4451
+4453
+4456
+4458
+4463
+4467
+4471
+4485
+4491
+4510
+4512
+4518
+4528
+4540
+4543
+4545
+4564
+4566
+4568
+4590
+4596
+4609
+4620
+4632
+4633
+4636
+4641
+4669
+4675
+4676
+4681
+4689
+4701
+4732
+4735
+4751
+4758
+4771
+4774
+4775
+4780
+4789
+4799
+4804
+4814
+4815
+4816
+4819
+4835
+4840
+4844
+4848
+4859
+4866
+4870
+4872
+4877
+4898
+4906
+4918
+4943
+4960
+4981
+4991
+4994
+5004
+5013
+5018
+5021
+5022
+5023
+5024
+5038
+5068
+5069
+5074
+5098
+5099
+5101
+5111
+5121
+5123
+5150
+5169
+5172
+5196
+5198
+5217
+5220
+5236
+5242
+5244
+5246
+5258
+5259
+5261
+5263
+5294
+5310
+5312
+5320
+5323
+5325
+5349
+5355
+5370
+5382
+5388
+5389
+5402
+5406
+5409
+5425
+5432
+5441
+5460
+5486
+5501
+5506
+5509
+5510
+5513
+5514
+5531
+5542
+5543
+5544
+5550
+5559
+5567
+5577
+5580
+5590
+5591
+5607
+5619
+5620
+5624
+5631
+5653
+5654
+5655
+5662
+5664
+5669
+5670
+5674
+5687
+5695
+5698
+5703
+5706
+5712
+5719
+5732
+5754
+5760
+5763
+5771
+5772
+5773
+5775
+5779
+5780
+5792
+5800
+5809
+5811
+5813
+5823
+5832
+5840
+5862
+5865
+5874
+5881
+5883
+5888
+5902
+5907
+5925
+5945
+5960
+5978
+5980
+5987
+5991
+5996
+6011
+6029
+6038
+6048
+6060
+6065
+6068
+6070
+6074
+6092
+6101
+6105
+6108
+6122
+6137
+6140
+6145
+6151
+6153
+6154
+6161
+6162
+6168
+6182
+6184
+6187
+6192
+6197
+6206
+6212
+6213
+6216
+6237
+6241
+6262
+6265
+6266
+6268
+6279
+6283
+6291
+6301
+6302
+6305
+6320
+6332
+6343
+6358
+6359
+6369
+6376
+6385
+6411
+6422
+6428
+6443
+6466
+6468
+6473
+6474
+6481
+6487
+6495
+6502
+6508
+6515
+6516
+6531
+6536
+6550
+6562
+6570
+6582
+6584
+6586
+6603
+6609
+6615
+6618
+6619
+6621
+6624
+6626
+6632
+6668
+6673
+6674
+6680
+6682
+6684
+6693
+6699
+6710
+6713
+6721
+6723
+6730
+6765
+6775
+6799
+6800
+6805
+6819
+6821
+6838
+6841
+6842
+6850
+6855
+6879
+6880
+6885
+6886
+6894
+6914
+6935
+6940
+6944
+6951
+6955
+6964
+6971
+6997
+7006
+7020
+7024
+7027
+7044
+7047
+7048
+7067
+7068
+7076
+7090
+7096
+7098
+7104
+7113
+7132
+7136
+7150
+7151
+7158
+7160
+7165
+7171
+7181
+7185
+7192
+7195
+7200
+7206
+7221
+7229
+7236
+7241
+7245
+7251
+7254
+7260
+7262
+7286
+7296
+7309
+7323
+7326
+7329
+7335
+7342
+7346
+7348
+7353
+7356
+7373
+7383
+7392
+7401
+7403
+7411
+7413
+7414
+7416
+7424
+7427
+7437
+7441
+7448
+7458
+7459
+7469
+7481
+7486
+7491
+7501
+7502
+7509
+7516
+7521
+7539
+7555
+7575
+7580
+7586
+7605
+7615
+7626
+7629
+7633
+7654
+7657
+7669
+7676
+7680
+7692
+7707
+7709
+7720
+7724
+7727
+7729
+7730
+7736
+7742
+7750
+7754
+7755
+7762
+7764
+7804
+7814
+7825
+7844
+7857
+7861
+7871
+7884
+7899
+7902
+7903
+7912
+7921
+7933
+7943
+7951
+7952
+7954
+7957
+7967
+7976
+7977
+7985
+8000
+8003
+8006
+8022
+8038
+8040
+8041
+8063
+8070
+8072
+8074
+8079
+8112
+8117
+8126
+8131
+8136
+8145
+8156
+8157
+8165
+8168
+8169
+8183
+8191
+8193
+8199
+8237
+8248
+8262
+8266
+8273
+8278
+8279
+8298
+8308
+8314
+8327
+8330
+8336
+8337
+8352
+8368
+8373
+8376
+8389
+8391
+8398
+8405
+8406
+8411
+8412
+8428
+8430
+8437
+8441
+8446
+8456
+8466
+8470
+8471
+8476
+8481
+8484
+8499
+8501
+8515
+8518
+8519
+8538
+8539
+8540
+8541
+8563
+8565
+8579
+8604
+8612
+8619
+8621
+8630
+8632
+8642
+8655
+8656
+8660
+8668
+8670
+8683
+8686
+8688
+8694
+8705
+8712
+8716
+8723
+8730
+8742
+8750
+8758
+8783
+8792
+8801
+8802
+8807
+8809
+8818
+8819
+8840
+8845
+8851
+8855
+8856
+8857
+8898
+8909
+8915
+8922
+8930
+8934
+8935
+8942
+8947
+8952
+8961
+8964
+8968
+8975
+8978
+8980
+8997
+9004
+9011
+9029
+9030
+9037
+9039
+9046
+9050
+9068
+9070
+9081
+9085
+9101
+9104
+9111
+9131
+9132
+9136
+9142
+9145
+9153
+9158
+9177
+9188
+9209
+9217
+9222
+9227
+9232
+9233
+9235
+9238
+9248
+9263
+9264
+9281
+9288
+9296
+9303
+9305
+9314
+9317
+9320
+9326
+9337
+9339
+9346
+9350
+9352
+9370
+9385
+9387
+9398
+9403
+9444
+9467
+9468
+9469
+9473
+9476
+9490
+9497
+9501
+9504
+9523
+9541
+9543
+9551
+9559
+9566
+9575
+9583
+9586
+9588
+9591
+9612
+9621
+9624
+9630
+9633
+9647
+9649
+9658
+9661
+9662
+9686
+9689
+9696
+9708
+9709
+9713
+9728
+9742
+9743
+9768
+9772
+9776
+9785
+9800
+9809
+9827
+9832
+9861
+9862
+9874
+9875
+9877
+9880
+9889
+9900
+9925
+9930
+9936
+9944
+9953
+9961
+9967
+9974
+9978
+9979
+9980
+9989
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+1589
+2497
+4125
+4126
+4441
+6110
+7057
+7121
+7133
+7945
+9743
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9538 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+45
+46
+47
+48
+50
+51
+52
+53
+54
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+171
+172
+173
+174
+175
+176
+177
+178
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+309
+310
+311
+312
+313
+314
+316
+317
+318
+319
+320
+321
+322
+324
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+438
+439
+440
+441
+442
+444
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+503
+504
+505
+506
+508
+509
+510
+512
+513
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+526
+527
+528
+529
+530
+531
+532
+534
+535
+536
+538
+539
+540
+542
+543
+544
+545
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+667
+668
+670
+671
+672
+674
+675
+676
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+690
+691
+692
+693
+694
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+770
+771
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+799
+800
+802
+803
+804
+805
+806
+807
+808
+809
+810
+812
+813
+814
+815
+816
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+866
+867
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+969
+970
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1195
+1196
+1197
+1198
+1199
+1200
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1367
+1368
+1369
+1370
+1371
+1372
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1468
+1469
+1470
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1515
+1516
+1517
+1518
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1588
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1820
+1821
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1916
+1917
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1928
+1929
+1930
+1931
+1932
+1933
+1935
+1936
+1937
+1938
+1939
+1940
+1943
+1944
+1945
+1946
+1947
+1948
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2171
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2261
+2262
+2263
+2264
+2265
+2266
+2268
+2269
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2311
+2312
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2351
+2352
+2353
+2354
+2355
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2625
+2626
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2696
+2697
+2698
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2739
+2740
+2742
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2891
+2892
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2940
+2942
+2943
+2944
+2945
+2946
+2948
+2949
+2951
+2952
+2953
+2955
+2956
+2957
+2958
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2968
+2969
+2970
+2971
+2973
+2974
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3184
+3185
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3252
+3253
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3346
+3347
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3463
+3464
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3581
+3582
+3583
+3584
+3586
+3587
+3589
+3590
+3591
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3668
+3669
+3670
+3671
+3672
+3674
+3675
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3770
+3771
+3772
+3773
+3774
+3775
+3777
+3778
+3779
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3792
+3793
+3794
+3795
+3796
+3797
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3841
+3842
+3843
+3844
+3845
+3846
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3889
+3890
+3891
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4044
+4046
+4047
+4048
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4062
+4063
+4064
+4065
+4066
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4122
+4123
+4124
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4143
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4195
+4196
+4197
+4198
+4199
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4240
+4241
+4242
+4243
+4244
+4245
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4283
+4284
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4442
+4443
+4444
+4446
+4447
+4448
+4450
+4451
+4452
+4454
+4455
+4457
+4458
+4459
+4460
+4461
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4581
+4582
+4584
+4585
+4586
+4587
+4588
+4589
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4835
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
+5002
+5003
+5004
+5005
+5006
+5007
+5008
+5009
+5010
+5011
+5012
+5013
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5022
+5023
+5024
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5068
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5115
+5116
+5117
+5118
+5119
+5120
+5121
+5122
+5123
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5150
+5152
+5154
+5155
+5156
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5169
+5170
+5171
+5172
+5173
+5174
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5196
+5197
+5198
+5199
+5200
+5201
+5202
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5214
+5215
+5216
+5217
+5218
+5219
+5220
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5233
+5234
+5235
+5236
+5237
+5238
+5239
+5240
+5241
+5242
+5243
+5244
+5245
+5246
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5258
+5259
+5260
+5261
+5262
+5263
+5264
+5265
+5266
+5267
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5300
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5311
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5320
+5322
+5323
+5324
+5325
+5326
+5327
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5358
+5359
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5370
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5379
+5380
+5382
+5383
+5384
+5385
+5386
+5387
+5388
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5402
+5403
+5404
+5405
+5406
+5407
+5409
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5428
+5429
+5430
+5431
+5432
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5441
+5442
+5443
+5444
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5486
+5487
+5488
+5489
+5490
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5500
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5509
+5510
+5511
+5512
+5513
+5514
+5515
+5516
+5517
+5518
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5531
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5543
+5544
+5545
+5546
+5547
+5548
+5549
+5550
+5551
+5552
+5554
+5555
+5556
+5557
+5558
+5559
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5581
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5590
+5591
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5607
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5631
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5648
+5649
+5650
+5651
+5652
+5653
+5655
+5656
+5657
+5658
+5659
+5660
+5661
+5662
+5663
+5664
+5665
+5666
+5668
+5669
+5670
+5671
+5672
+5673
+5674
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5686
+5687
+5688
+5689
+5690
+5691
+5694
+5695
+5696
+5697
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+5711
+5712
+5713
+5714
+5715
+5716
+5717
+5718
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5732
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5754
+5755
+5756
+5757
+5758
+5759
+5760
+5761
+5762
+5763
+5764
+5765
+5766
+5767
+5768
+5769
+5771
+5772
+5773
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5792
+5793
+5794
+5795
+5797
+5798
+5799
+5800
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5809
+5810
+5811
+5812
+5813
+5814
+5816
+5817
+5818
+5819
+5821
+5822
+5823
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5832
+5833
+5834
+5835
+5836
+5837
+5838
+5839
+5840
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5856
+5857
+5858
+5859
+5860
+5861
+5862
+5863
+5864
+5865
+5866
+5867
+5868
+5869
+5870
+5871
+5872
+5873
+5874
+5875
+5876
+5877
+5878
+5880
+5881
+5882
+5883
+5884
+5885
+5886
+5887
+5888
+5889
+5890
+5891
+5892
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5901
+5902
+5903
+5905
+5906
+5907
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5916
+5917
+5918
+5919
+5920
+5921
+5922
+5923
+5924
+5925
+5926
+5927
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+5939
+5940
+5941
+5942
+5944
+5945
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5956
+5957
+5958
+5959
+5960
+5961
+5962
+5963
+5964
+5965
+5966
+5967
+5968
+5969
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5978
+5979
+5980
+5981
+5982
+5983
+5984
+5985
+5986
+5987
+5988
+5989
+5990
+5991
+5992
+5993
+5994
+5995
+5996
+5997
+5998
+5999
+6000
+6001
+6002
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6010
+6011
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6027
+6028
+6029
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6038
+6039
+6040
+6041
+6042
+6043
+6044
+6045
+6046
+6047
+6048
+6049
+6050
+6051
+6052
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6060
+6061
+6062
+6063
+6064
+6065
+6066
+6068
+6069
+6070
+6071
+6072
+6073
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6083
+6084
+6085
+6086
+6087
+6088
+6089
+6090
+6091
+6092
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6101
+6102
+6103
+6104
+6105
+6106
+6107
+6108
+6109
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6122
+6123
+6124
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6137
+6138
+6139
+6140
+6141
+6142
+6143
+6144
+6145
+6146
+6147
+6148
+6149
+6150
+6151
+6152
+6153
+6154
+6156
+6157
+6159
+6160
+6161
+6162
+6163
+6164
+6166
+6167
+6168
+6169
+6170
+6171
+6172
+6173
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6182
+6183
+6184
+6185
+6186
+6187
+6188
+6189
+6190
+6191
+6192
+6193
+6194
+6195
+6196
+6198
+6199
+6200
+6201
+6203
+6204
+6205
+6206
+6207
+6208
+6209
+6210
+6211
+6212
+6213
+6214
+6215
+6216
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6225
+6226
+6227
+6228
+6229
+6230
+6231
+6232
+6233
+6234
+6235
+6236
+6237
+6238
+6239
+6240
+6241
+6242
+6243
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6259
+6260
+6261
+6262
+6263
+6264
+6265
+6266
+6267
+6268
+6269
+6270
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6279
+6280
+6281
+6282
+6283
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6291
+6292
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6300
+6301
+6302
+6303
+6305
+6306
+6307
+6308
+6309
+6310
+6312
+6313
+6315
+6316
+6318
+6319
+6320
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6329
+6330
+6332
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6343
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6358
+6359
+6360
+6361
+6362
+6363
+6364
+6365
+6366
+6367
+6368
+6369
+6370
+6371
+6372
+6373
+6374
+6375
+6376
+6377
+6378
+6379
+6380
+6381
+6383
+6384
+6385
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6395
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6403
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6411
+6412
+6413
+6415
+6416
+6417
+6418
+6419
+6420
+6421
+6423
+6424
+6425
+6426
+6427
+6428
+6429
+6430
+6432
+6433
+6434
+6435
+6436
+6437
+6438
+6439
+6440
+6442
+6443
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6460
+6461
+6462
+6463
+6464
+6465
+6466
+6467
+6468
+6469
+6470
+6471
+6473
+6474
+6475
+6476
+6477
+6478
+6479
+6480
+6481
+6482
+6483
+6484
+6485
+6486
+6487
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6496
+6497
+6498
+6499
+6500
+6501
+6502
+6503
+6504
+6505
+6506
+6507
+6508
+6509
+6510
+6511
+6512
+6513
+6514
+6515
+6516
+6517
+6518
+6519
+6520
+6521
+6522
+6523
+6524
+6525
+6526
+6527
+6528
+6529
+6530
+6531
+6532
+6533
+6534
+6535
+6536
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6545
+6546
+6547
+6548
+6549
+6550
+6551
+6552
+6553
+6554
+6555
+6556
+6557
+6558
+6559
+6560
+6561
+6562
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6570
+6571
+6572
+6573
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6582
+6583
+6584
+6585
+6586
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6603
+6604
+6605
+6606
+6607
+6608
+6609
+6610
+6611
+6612
+6613
+6614
+6615
+6616
+6618
+6619
+6621
+6622
+6623
+6624
+6625
+6626
+6627
+6628
+6629
+6630
+6631
+6632
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6643
+6644
+6645
+6646
+6647
+6648
+6650
+6651
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6662
+6663
+6664
+6665
+6666
+6667
+6668
+6670
+6671
+6672
+6673
+6674
+6675
+6676
+6678
+6679
+6680
+6681
+6682
+6683
+6684
+6686
+6687
+6689
+6690
+6691
+6692
+6693
+6694
+6695
+6696
+6697
+6698
+6699
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6710
+6711
+6712
+6713
+6714
+6715
+6716
+6717
+6718
+6719
+6720
+6721
+6722
+6723
+6724
+6725
+6726
+6727
+6728
+6729
+6730
+6731
+6732
+6733
+6734
+6735
+6736
+6737
+6738
+6740
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6765
+6766
+6767
+6768
+6769
+6770
+6771
+6772
+6773
+6774
+6775
+6776
+6777
+6778
+6779
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6797
+6798
+6800
+6801
+6802
+6805
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6817
+6819
+6820
+6821
+6822
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6836
+6837
+6838
+6839
+6840
+6841
+6842
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6850
+6851
+6852
+6853
+6854
+6855
+6856
+6857
+6858
+6859
+6860
+6861
+6862
+6863
+6865
+6866
+6867
+6868
+6869
+6870
+6871
+6872
+6873
+6874
+6875
+6876
+6877
+6878
+6879
+6880
+6881
+6882
+6883
+6884
+6885
+6886
+6887
+6888
+6889
+6890
+6891
+6892
+6893
+6895
+6896
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6910
+6911
+6912
+6913
+6914
+6916
+6917
+6918
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6927
+6928
+6929
+6930
+6931
+6932
+6933
+6934
+6935
+6936
+6937
+6938
+6939
+6940
+6941
+6942
+6943
+6944
+6945
+6946
+6947
+6948
+6949
+6950
+6951
+6952
+6953
+6954
+6955
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6964
+6965
+6966
+6967
+6968
+6969
+6970
+6971
+6972
+6973
+6974
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6996
+6997
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7006
+7007
+7008
+7009
+7011
+7012
+7013
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+7023
+7024
+7025
+7027
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7044
+7045
+7046
+7047
+7048
+7050
+7051
+7052
+7053
+7055
+7056
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7065
+7066
+7067
+7068
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7076
+7077
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7086
+7087
+7088
+7089
+7090
+7091
+7092
+7093
+7094
+7095
+7096
+7097
+7098
+7099
+7100
+7101
+7102
+7103
+7104
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7113
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7122
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7132
+7134
+7135
+7136
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7145
+7146
+7147
+7148
+7149
+7150
+7151
+7152
+7153
+7155
+7156
+7157
+7158
+7159
+7160
+7161
+7162
+7163
+7164
+7165
+7167
+7168
+7169
+7170
+7171
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7181
+7183
+7184
+7185
+7186
+7187
+7188
+7189
+7190
+7191
+7192
+7193
+7194
+7195
+7196
+7197
+7198
+7199
+7200
+7201
+7202
+7203
+7204
+7205
+7206
+7207
+7208
+7209
+7210
+7211
+7213
+7214
+7215
+7216
+7217
+7218
+7219
+7220
+7222
+7223
+7224
+7225
+7226
+7227
+7228
+7229
+7230
+7231
+7233
+7234
+7235
+7236
+7237
+7238
+7239
+7240
+7241
+7242
+7243
+7244
+7245
+7246
+7247
+7248
+7249
+7250
+7252
+7253
+7254
+7255
+7256
+7257
+7258
+7259
+7260
+7261
+7262
+7263
+7264
+7265
+7266
+7267
+7269
+7271
+7272
+7273
+7274
+7275
+7276
+7278
+7279
+7280
+7281
+7282
+7283
+7285
+7286
+7287
+7288
+7289
+7290
+7291
+7292
+7293
+7294
+7295
+7296
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7304
+7305
+7306
+7307
+7308
+7309
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7317
+7318
+7319
+7320
+7321
+7322
+7323
+7324
+7325
+7326
+7327
+7328
+7329
+7330
+7331
+7332
+7333
+7334
+7336
+7337
+7338
+7339
+7340
+7342
+7343
+7344
+7345
+7346
+7347
+7348
+7349
+7350
+7351
+7352
+7353
+7354
+7355
+7356
+7357
+7358
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7373
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7382
+7383
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7392
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7401
+7402
+7403
+7404
+7405
+7406
+7407
+7408
+7409
+7411
+7412
+7413
+7414
+7415
+7416
+7417
+7418
+7419
+7420
+7421
+7422
+7423
+7424
+7425
+7426
+7427
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7437
+7438
+7439
+7440
+7441
+7442
+7443
+7444
+7445
+7446
+7447
+7448
+7449
+7450
+7451
+7452
+7453
+7454
+7455
+7456
+7458
+7459
+7460
+7461
+7462
+7463
+7464
+7465
+7466
+7467
+7468
+7469
+7470
+7471
+7472
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7481
+7482
+7483
+7484
+7485
+7486
+7487
+7489
+7490
+7491
+7492
+7493
+7494
+7498
+7499
+7500
+7501
+7502
+7503
+7504
+7505
+7506
+7507
+7508
+7509
+7511
+7512
+7513
+7514
+7515
+7516
+7517
+7518
+7519
+7520
+7521
+7522
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7539
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7555
+7556
+7557
+7558
+7559
+7560
+7562
+7563
+7564
+7565
+7566
+7567
+7568
+7569
+7571
+7572
+7573
+7574
+7575
+7576
+7577
+7578
+7579
+7580
+7581
+7582
+7583
+7584
+7585
+7586
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7605
+7606
+7607
+7608
+7609
+7610
+7611
+7612
+7613
+7614
+7615
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7626
+7627
+7628
+7629
+7630
+7631
+7632
+7633
+7634
+7635
+7636
+7637
+7638
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7654
+7655
+7656
+7657
+7658
+7659
+7660
+7661
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7669
+7670
+7671
+7672
+7673
+7674
+7675
+7676
+7677
+7678
+7679
+7680
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7692
+7693
+7694
+7695
+7696
+7697
+7698
+7699
+7700
+7701
+7702
+7703
+7704
+7705
+7706
+7707
+7708
+7709
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7720
+7722
+7723
+7724
+7725
+7726
+7727
+7728
+7729
+7730
+7731
+7732
+7733
+7734
+7735
+7736
+7737
+7738
+7739
+7740
+7741
+7742
+7743
+7744
+7746
+7747
+7748
+7749
+7750
+7751
+7752
+7753
+7754
+7755
+7756
+7757
+7758
+7759
+7760
+7761
+7762
+7763
+7764
+7765
+7766
+7767
+7768
+7770
+7771
+7772
+7773
+7774
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7804
+7805
+7806
+7807
+7808
+7809
+7810
+7811
+7812
+7813
+7814
+7815
+7816
+7817
+7818
+7819
+7820
+7821
+7822
+7823
+7824
+7825
+7826
+7827
+7830
+7832
+7833
+7834
+7835
+7836
+7838
+7841
+7842
+7843
+7844
+7845
+7846
+7847
+7848
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7857
+7858
+7859
+7860
+7861
+7862
+7863
+7864
+7865
+7866
+7867
+7868
+7869
+7870
+7871
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7884
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7895
+7896
+7897
+7898
+7899
+7900
+7901
+7902
+7903
+7904
+7905
+7906
+7907
+7908
+7909
+7911
+7912
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7920
+7921
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7930
+7932
+7933
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7942
+7943
+7944
+7946
+7947
+7948
+7949
+7951
+7952
+7953
+7954
+7956
+7957
+7958
+7959
+7960
+7961
+7962
+7963
+7965
+7966
+7967
+7968
+7969
+7970
+7971
+7973
+7974
+7975
+7976
+7977
+7978
+7979
+7980
+7981
+7982
+7983
+7984
+7985
+7986
+7987
+7988
+7989
+7990
+7991
+7992
+7993
+7994
+7995
+7996
+7997
+7998
+8000
+8002
+8003
+8004
+8005
+8006
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8022
+8023
+8024
+8025
+8026
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8036
+8037
+8038
+8039
+8040
+8041
+8042
+8043
+8044
+8045
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8064
+8066
+8067
+8068
+8069
+8070
+8071
+8072
+8073
+8074
+8075
+8076
+8077
+8079
+8080
+8081
+8082
+8083
+8084
+8085
+8086
+8088
+8089
+8090
+8091
+8092
+8093
+8094
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8103
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8112
+8113
+8114
+8115
+8116
+8117
+8118
+8119
+8120
+8121
+8122
+8123
+8124
+8126
+8127
+8128
+8129
+8130
+8131
+8132
+8133
+8134
+8135
+8136
+8137
+8138
+8139
+8140
+8141
+8142
+8144
+8145
+8146
+8147
+8148
+8149
+8150
+8151
+8152
+8153
+8154
+8155
+8156
+8157
+8158
+8159
+8160
+8161
+8162
+8163
+8164
+8165
+8166
+8167
+8168
+8169
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8183
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8191
+8192
+8193
+8194
+8195
+8196
+8197
+8198
+8199
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8208
+8209
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8223
+8224
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8237
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8248
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8262
+8263
+8264
+8265
+8266
+8267
+8269
+8270
+8271
+8272
+8273
+8274
+8275
+8276
+8277
+8278
+8279
+8281
+8282
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8298
+8299
+8300
+8301
+8302
+8304
+8305
+8306
+8307
+8308
+8309
+8310
+8311
+8312
+8313
+8314
+8315
+8316
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8327
+8328
+8329
+8330
+8331
+8332
+8333
+8334
+8335
+8336
+8337
+8338
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8352
+8353
+8354
+8355
+8356
+8357
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8368
+8369
+8370
+8371
+8372
+8373
+8374
+8375
+8376
+8377
+8378
+8379
+8380
+8381
+8382
+8383
+8384
+8385
+8386
+8387
+8388
+8389
+8391
+8392
+8393
+8394
+8395
+8396
+8397
+8398
+8399
+8400
+8401
+8402
+8403
+8404
+8405
+8406
+8407
+8408
+8409
+8410
+8412
+8413
+8414
+8415
+8416
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8428
+8429
+8430
+8431
+8432
+8434
+8436
+8437
+8438
+8439
+8440
+8441
+8442
+8443
+8444
+8446
+8447
+8448
+8449
+8450
+8451
+8452
+8453
+8454
+8455
+8456
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8465
+8466
+8467
+8468
+8469
+8470
+8471
+8472
+8473
+8474
+8475
+8476
+8477
+8478
+8479
+8480
+8481
+8482
+8483
+8484
+8485
+8486
+8487
+8488
+8489
+8491
+8492
+8493
+8494
+8495
+8497
+8498
+8499
+8500
+8501
+8502
+8503
+8504
+8505
+8506
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8515
+8516
+8517
+8518
+8519
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8538
+8539
+8540
+8541
+8542
+8543
+8544
+8545
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8563
+8564
+8565
+8566
+8567
+8568
+8569
+8570
+8571
+8572
+8573
+8574
+8575
+8576
+8578
+8579
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8604
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8612
+8613
+8614
+8615
+8616
+8617
+8618
+8619
+8620
+8621
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8630
+8631
+8632
+8633
+8634
+8635
+8636
+8637
+8638
+8639
+8640
+8641
+8642
+8643
+8644
+8645
+8646
+8648
+8649
+8650
+8651
+8652
+8653
+8654
+8655
+8656
+8657
+8658
+8659
+8660
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8668
+8669
+8670
+8671
+8672
+8674
+8675
+8676
+8677
+8678
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+8687
+8688
+8689
+8690
+8691
+8692
+8693
+8694
+8695
+8696
+8697
+8698
+8699
+8700
+8701
+8702
+8703
+8704
+8705
+8706
+8708
+8709
+8710
+8711
+8712
+8713
+8714
+8716
+8717
+8718
+8719
+8720
+8721
+8723
+8724
+8726
+8728
+8729
+8730
+8731
+8732
+8733
+8734
+8735
+8736
+8737
+8738
+8739
+8740
+8741
+8742
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8750
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8758
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8784
+8785
+8786
+8787
+8788
+8789
+8790
+8791
+8792
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8801
+8802
+8803
+8804
+8805
+8806
+8808
+8809
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8818
+8819
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8834
+8835
+8836
+8837
+8838
+8840
+8841
+8842
+8843
+8844
+8845
+8846
+8847
+8848
+8849
+8850
+8851
+8852
+8853
+8854
+8855
+8856
+8857
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8871
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8882
+8883
+8886
+8887
+8888
+8889
+8890
+8891
+8892
+8893
+8894
+8895
+8896
+8897
+8898
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8909
+8910
+8911
+8912
+8913
+8914
+8915
+8916
+8917
+8918
+8919
+8920
+8921
+8922
+8923
+8924
+8925
+8926
+8927
+8928
+8929
+8930
+8931
+8932
+8933
+8934
+8935
+8936
+8937
+8938
+8939
+8940
+8941
+8942
+8943
+8944
+8945
+8946
+8947
+8948
+8949
+8950
+8951
+8952
+8953
+8954
+8955
+8956
+8957
+8958
+8959
+8960
+8961
+8962
+8963
+8964
+8965
+8966
+8967
+8968
+8969
+8970
+8971
+8972
+8973
+8974
+8975
+8976
+8977
+8978
+8979
+8980
+8981
+8982
+8983
+8984
+8985
+8986
+8987
+8988
+8989
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8997
+8998
+8999
+9000
+9001
+9002
+9003
+9004
+9005
+9007
+9008
+9009
+9010
+9011
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9029
+9030
+9031
+9032
+9033
+9034
+9035
+9036
+9037
+9038
+9039
+9040
+9041
+9042
+9043
+9044
+9045
+9046
+9047
+9048
+9049
+9050
+9051
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9066
+9067
+9068
+9069
+9070
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9079
+9080
+9081
+9082
+9083
+9084
+9085
+9086
+9087
+9088
+9089
+9090
+9091
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9100
+9101
+9102
+9103
+9104
+9105
+9106
+9107
+9108
+9109
+9110
+9111
+9112
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9128
+9129
+9130
+9131
+9133
+9134
+9135
+9136
+9137
+9138
+9139
+9140
+9141
+9142
+9143
+9144
+9145
+9146
+9147
+9148
+9149
+9150
+9151
+9152
+9153
+9154
+9155
+9156
+9157
+9158
+9159
+9160
+9161
+9162
+9163
+9164
+9165
+9166
+9167
+9168
+9169
+9170
+9171
+9172
+9173
+9174
+9175
+9176
+9177
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9187
+9188
+9189
+9190
+9191
+9192
+9194
+9195
+9196
+9197
+9198
+9199
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9209
+9210
+9211
+9212
+9213
+9214
+9215
+9216
+9217
+9218
+9219
+9220
+9221
+9222
+9223
+9224
+9225
+9226
+9227
+9228
+9229
+9230
+9231
+9232
+9234
+9235
+9236
+9237
+9238
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9247
+9248
+9249
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9259
+9260
+9261
+9262
+9263
+9264
+9265
+9266
+9267
+9268
+9269
+9270
+9272
+9273
+9275
+9276
+9277
+9278
+9279
+9280
+9281
+9282
+9283
+9284
+9285
+9286
+9287
+9288
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9296
+9297
+9298
+9299
+9300
+9301
+9302
+9303
+9304
+9305
+9306
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9315
+9316
+9317
+9318
+9319
+9320
+9321
+9322
+9323
+9324
+9326
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9337
+9338
+9339
+9340
+9341
+9342
+9343
+9344
+9345
+9346
+9348
+9349
+9350
+9351
+9352
+9353
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9367
+9368
+9369
+9370
+9371
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9384
+9385
+9386
+9387
+9388
+9389
+9390
+9391
+9392
+9393
+9394
+9395
+9397
+9398
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9417
+9419
+9420
+9421
+9422
+9423
+9424
+9425
+9426
+9427
+9428
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9443
+9444
+9445
+9446
+9447
+9448
+9449
+9450
+9451
+9452
+9453
+9454
+9455
+9456
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9464
+9465
+9466
+9467
+9468
+9469
+9470
+9471
+9472
+9473
+9474
+9475
+9476
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9485
+9486
+9488
+9489
+9490
+9491
+9492
+9493
+9494
+9495
+9496
+9497
+9498
+9499
+9500
+9501
+9502
+9503
+9504
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9521
+9522
+9523
+9524
+9525
+9526
+9527
+9529
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9539
+9540
+9541
+9542
+9543
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9551
+9552
+9553
+9554
+9555
+9556
+9557
+9558
+9559
+9560
+9561
+9562
+9563
+9564
+9565
+9566
+9567
+9568
+9569
+9570
+9571
+9572
+9573
+9574
+9575
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9583
+9584
+9585
+9586
+9587
+9588
+9590
+9591
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9600
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+9608
+9609
+9610
+9611
+9612
+9614
+9615
+9616
+9617
+9618
+9619
+9620
+9621
+9622
+9623
+9624
+9625
+9626
+9627
+9628
+9629
+9630
+9631
+9632
+9633
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9646
+9647
+9648
+9649
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9658
+9659
+9660
+9661
+9662
+9663
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9680
+9681
+9682
+9683
+9684
+9685
+9686
+9687
+9688
+9689
+9690
+9691
+9692
+9693
+9694
+9695
+9696
+9697
+9698
+9699
+9700
+9701
+9702
+9703
+9704
+9705
+9706
+9707
+9708
+9709
+9710
+9711
+9712
+9713
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9723
+9724
+9725
+9726
+9727
+9728
+9729
+9730
+9731
+9733
+9734
+9735
+9737
+9738
+9739
+9740
+9741
+9742
+9744
+9745
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9761
+9762
+9763
+9764
+9765
+9766
+9767
+9768
+9769
+9770
+9771
+9772
+9773
+9774
+9775
+9776
+9777
+9778
+9779
+9780
+9781
+9782
+9783
+9784
+9785
+9786
+9787
+9788
+9789
+9790
+9791
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9800
+9801
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9809
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9827
+9828
+9829
+9830
+9831
+9832
+9833
+9834
+9835
+9836
+9837
+9838
+9839
+9840
+9841
+9842
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9858
+9859
+9860
+9861
+9862
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9873
+9874
+9875
+9876
+9877
+9878
+9879
+9880
+9881
+9882
+9883
+9884
+9885
+9886
+9887
+9888
+9889
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9898
+9899
+9900
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9910
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9925
+9926
+9928
+9929
+9930
+9931
+9932
+9933
+9934
+9935
+9936
+9937
+9938
+9939
+9940
+9941
+9942
+9943
+9944
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9953
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9961
+9962
+9963
+9964
+9965
+9966
+9967
+9968
+9969
+9970
+9971
+9972
+9973
+9974
+9975
+9976
+9977
+9978
+9979
+9981
+9982
+9984
+9985
+9987
+9988
+9989
+9990
+9991
+9992
+9993
+9994
+9996
+9997
+9998
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,451 @@
+44
+49
+55
+101
+147
+170
+179
+196
+217
+240
+308
+315
+323
+325
+414
+437
+443
+445
+502
+507
+511
+514
+525
+533
+537
+541
+546
+573
+584
+585
+666
+669
+673
+677
+689
+695
+769
+772
+798
+801
+811
+817
+865
+868
+909
+968
+971
+1004
+1024
+1056
+1068
+1087
+1108
+1159
+1180
+1194
+1201
+1233
+1245
+1273
+1349
+1366
+1373
+1405
+1455
+1467
+1471
+1489
+1501
+1514
+1519
+1587
+1601
+1629
+1646
+1665
+1697
+1712
+1729
+1740
+1819
+1822
+1883
+1915
+1918
+1927
+1934
+1941
+1942
+1949
+2006
+2095
+2147
+2170
+2172
+2189
+2215
+2259
+2260
+2267
+2270
+2310
+2313
+2322
+2350
+2356
+2466
+2480
+2516
+2571
+2604
+2624
+2627
+2662
+2679
+2695
+2699
+2738
+2741
+2743
+2798
+2799
+2852
+2867
+2890
+2893
+2915
+2927
+2939
+2941
+2947
+2950
+2954
+2959
+2967
+2972
+2975
+2992
+3011
+3045
+3064
+3113
+3134
+3144
+3155
+3183
+3186
+3223
+3239
+3251
+3254
+3265
+3333
+3345
+3348
+3349
+3379
+3446
+3462
+3465
+3496
+3497
+3550
+3580
+3585
+3588
+3592
+3667
+3673
+3676
+3687
+3695
+3696
+3727
+3746
+3769
+3776
+3780
+3791
+3798
+3821
+3840
+3847
+3848
+3861
+3888
+3892
+3908
+3925
+4007
+4032
+4043
+4045
+4049
+4061
+4067
+4102
+4121
+4142
+4144
+4177
+4194
+4200
+4201
+4239
+4246
+4254
+4282
+4285
+4343
+4412
+4421
+4445
+4449
+4453
+4456
+4462
+4473
+4489
+4510
+4533
+4561
+4580
+4583
+4590
+4623
+4717
+4773
+4787
+4804
+4819
+4834
+4836
+4884
+4915
+4941
+4942
+4972
+5001
+5050
+5151
+5153
+5157
+5175
+5203
+5232
+5268
+5321
+5328
+5360
+5381
+5408
+5427
+5445
+5491
+5519
+5532
+5553
+5568
+5582
+5608
+5647
+5654
+5667
+5692
+5693
+5719
+5770
+5796
+5808
+5815
+5820
+5879
+5893
+5904
+5943
+5970
+6067
+6074
+6125
+6155
+6158
+6165
+6174
+6197
+6202
+6304
+6311
+6314
+6317
+6328
+6331
+6382
+6414
+6422
+6431
+6441
+6459
+6472
+6495
+6574
+6617
+6620
+6649
+6652
+6653
+6669
+6677
+6685
+6688
+6739
+6799
+6803
+6804
+6818
+6835
+6864
+6894
+6897
+6909
+6915
+7010
+7026
+7049
+7054
+7078
+7112
+7144
+7154
+7166
+7182
+7212
+7221
+7232
+7251
+7268
+7270
+7277
+7284
+7335
+7341
+7410
+7436
+7457
+7473
+7488
+7495
+7496
+7497
+7510
+7561
+7570
+7625
+7721
+7745
+7769
+7775
+7828
+7829
+7831
+7837
+7839
+7840
+7910
+7931
+7950
+7955
+7964
+7972
+7999
+8001
+8027
+8063
+8065
+8078
+8087
+8125
+8143
+8207
+8268
+8280
+8297
+8303
+8317
+8318
+8390
+8411
+8417
+8433
+8435
+8445
+8464
+8490
+8496
+8507
+8530
+8577
+8647
+8673
+8707
+8715
+8722
+8725
+8727
+8783
+8807
+8833
+8839
+8858
+8870
+8872
+8881
+8884
+8885
+9006
+9099
+9132
+9193
+9233
+9250
+9258
+9271
+9274
+9314
+9325
+9347
+9354
+9372
+9383
+9396
+9399
+9418
+9429
+9484
+9487
+9520
+9528
+9589
+9613
+9722
+9732
+9736
+9792
+9857
+9872
+9927
+9980
+9983
+9986
+9995
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,171 @@
+68
+122
+186
+188
+255
+633
+668
+679
+748
+753
+761
+765
+790
+799
+1000
+1043
+1154
+1217
+1226
+1239
+1298
+1302
+1387
+1433
+1457
+1571
+1585
+1690
+1770
+1802
+1813
+1818
+1849
+1868
+1963
+1981
+2026
+2060
+2143
+2185
+2207
+2332
+2338
+2380
+2383
+2384
+2443
+2498
+2546
+2568
+2569
+2594
+2674
+2690
+2808
+2872
+2927
+2944
+3108
+3139
+3190
+3296
+3325
+3470
+3579
+3626
+3721
+3746
+3797
+3984
+4015
+4111
+4114
+4182
+4237
+4282
+4298
+4372
+4384
+4489
+4491
+4517
+4717
+4737
+4765
+4881
+4934
+4943
+4946
+4967
+5007
+5045
+5115
+5123
+5138
+5150
+5300
+5686
+5693
+5754
+5792
+5872
+5887
+5965
+6029
+6143
+6145
+6148
+6188
+6189
+6259
+6270
+6292
+6359
+6395
+6536
+6615
+6619
+6662
+6668
+6694
+6734
+6841
+6842
+6973
+7013
+7200
+7286
+7412
+7555
+7605
+7659
+7671
+7699
+7774
+7809
+7977
+7982
+7992
+8078
+8103
+8266
+8376
+8402
+8694
+8701
+8735
+8758
+8856
+8911
+8928
+9070
+9112
+9153
+9165
+9199
+9237
+9247
+9261
+9281
+9370
+9423
+9475
+9527
+9539
+9573
+9696
+9832
+9838
+9861
+9910
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testPython2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testPython2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1213 @@
+4
+36
+38
+40
+60
+64
+66
+68
+71
+74
+76
+79
+83
+91
+97
+122
+123
+152
+166
+172
+186
+188
+195
+215
+216
+221
+232
+255
+258
+294
+295
+304
+305
+308
+322
+326
+334
+336
+339
+342
+345
+360
+371
+381
+401
+411
+425
+427
+436
+440
+454
+462
+463
+478
+484
+488
+518
+541
+546
+561
+563
+575
+595
+621
+623
+625
+629
+633
+644
+646
+665
+666
+668
+670
+676
+679
+691
+703
+723
+748
+753
+756
+761
+762
+765
+769
+771
+776
+780
+788
+790
+799
+800
+805
+806
+812
+819
+837
+843
+852
+859
+860
+863
+864
+876
+877
+878
+882
+891
+903
+922
+925
+944
+973
+992
+999
+1000
+1002
+1004
+1005
+1008
+1010
+1012
+1016
+1017
+1034
+1035
+1043
+1051
+1105
+1111
+1132
+1154
+1155
+1161
+1175
+1197
+1201
+1202
+1217
+1226
+1235
+1239
+1287
+1290
+1298
+1300
+1302
+1326
+1344
+1368
+1380
+1387
+1404
+1422
+1433
+1434
+1452
+1455
+1457
+1464
+1469
+1476
+1478
+1486
+1488
+1495
+1504
+1506
+1508
+1527
+1536
+1537
+1560
+1571
+1573
+1584
+1585
+1594
+1596
+1598
+1602
+1610
+1617
+1618
+1619
+1624
+1633
+1662
+1669
+1676
+1682
+1687
+1690
+1703
+1715
+1734
+1738
+1739
+1756
+1758
+1770
+1772
+1773
+1782
+1791
+1801
+1802
+1813
+1815
+1816
+1818
+1834
+1838
+1845
+1849
+1850
+1852
+1857
+1859
+1867
+1868
+1877
+1910
+1944
+1957
+1963
+1981
+1999
+2002
+2004
+2024
+2026
+2049
+2060
+2091
+2093
+2097
+2104
+2107
+2109
+2119
+2142
+2143
+2151
+2155
+2160
+2163
+2182
+2183
+2185
+2205
+2207
+2216
+2220
+2234
+2239
+2249
+2251
+2264
+2265
+2271
+2273
+2274
+2286
+2307
+2309
+2332
+2335
+2338
+2371
+2374
+2380
+2381
+2383
+2384
+2398
+2399
+2402
+2409
+2417
+2431
+2437
+2443
+2444
+2470
+2479
+2494
+2498
+2508
+2530
+2541
+2546
+2549
+2560
+2563
+2567
+2568
+2569
+2587
+2594
+2599
+2608
+2611
+2616
+2619
+2633
+2639
+2642
+2647
+2649
+2653
+2665
+2667
+2671
+2674
+2690
+2704
+2729
+2730
+2733
+2737
+2742
+2745
+2747
+2757
+2782
+2808
+2824
+2829
+2840
+2860
+2870
+2872
+2874
+2877
+2891
+2901
+2911
+2912
+2913
+2918
+2920
+2924
+2927
+2942
+2944
+2962
+2964
+2971
+2999
+3009
+3010
+3023
+3043
+3054
+3077
+3091
+3099
+3108
+3112
+3121
+3139
+3143
+3146
+3160
+3162
+3168
+3189
+3190
+3191
+3212
+3221
+3224
+3227
+3230
+3231
+3255
+3258
+3264
+3276
+3284
+3296
+3304
+3310
+3318
+3323
+3325
+3344
+3380
+3389
+3390
+3391
+3401
+3405
+3423
+3428
+3432
+3443
+3449
+3465
+3470
+3471
+3483
+3486
+3489
+3493
+3525
+3526
+3552
+3564
+3579
+3589
+3604
+3612
+3621
+3626
+3630
+3632
+3656
+3682
+3700
+3720
+3721
+3725
+3739
+3744
+3746
+3764
+3770
+3774
+3797
+3857
+3860
+3873
+3895
+3906
+3907
+3922
+3936
+3937
+3941
+3948
+3953
+3954
+3958
+3963
+3968
+3978
+3984
+3992
+4000
+4015
+4019
+4022
+4030
+4038
+4043
+4049
+4066
+4073
+4077
+4092
+4108
+4111
+4114
+4115
+4117
+4138
+4143
+4161
+4163
+4164
+4182
+4188
+4195
+4197
+4198
+4199
+4207
+4221
+4233
+4237
+4249
+4267
+4278
+4279
+4282
+4298
+4300
+4301
+4321
+4331
+4335
+4336
+4339
+4340
+4368
+4372
+4373
+4379
+4384
+4390
+4391
+4393
+4409
+4412
+4415
+4421
+4422
+4431
+4439
+4440
+4451
+4453
+4463
+4465
+4467
+4469
+4470
+4471
+4474
+4482
+4485
+4488
+4489
+4491
+4510
+4512
+4517
+4518
+4540
+4545
+4555
+4564
+4566
+4568
+4590
+4592
+4596
+4609
+4620
+4633
+4636
+4657
+4663
+4669
+4670
+4675
+4676
+4681
+4689
+4701
+4708
+4716
+4717
+4723
+4732
+4733
+4735
+4737
+4751
+4765
+4768
+4774
+4775
+4779
+4780
+4790
+4799
+4804
+4814
+4815
+4819
+4820
+4840
+4848
+4858
+4859
+4866
+4870
+4872
+4877
+4880
+4881
+4898
+4918
+4934
+4943
+4946
+4967
+4981
+4991
+4992
+4994
+5000
+5002
+5007
+5013
+5021
+5022
+5023
+5024
+5038
+5045
+5068
+5069
+5074
+5101
+5115
+5121
+5123
+5138
+5150
+5169
+5170
+5172
+5190
+5193
+5198
+5214
+5217
+5220
+5236
+5244
+5245
+5246
+5258
+5263
+5268
+5296
+5300
+5309
+5320
+5349
+5370
+5371
+5378
+5382
+5384
+5388
+5402
+5403
+5406
+5409
+5419
+5425
+5441
+5460
+5486
+5500
+5501
+5509
+5510
+5513
+5514
+5515
+5531
+5542
+5543
+5544
+5559
+5577
+5591
+5607
+5620
+5631
+5653
+5655
+5662
+5664
+5669
+5670
+5674
+5686
+5687
+5693
+5695
+5697
+5703
+5706
+5712
+5719
+5732
+5754
+5763
+5770
+5771
+5772
+5773
+5792
+5800
+5809
+5811
+5813
+5832
+5838
+5840
+5853
+5862
+5865
+5867
+5872
+5874
+5881
+5887
+5888
+5902
+5907
+5916
+5918
+5925
+5929
+5945
+5962
+5965
+5978
+5980
+5991
+5996
+6011
+6029
+6038
+6052
+6060
+6065
+6068
+6073
+6089
+6092
+6101
+6105
+6108
+6137
+6140
+6143
+6145
+6148
+6151
+6154
+6187
+6188
+6189
+6192
+6197
+6206
+6207
+6213
+6216
+6230
+6234
+6237
+6241
+6245
+6259
+6262
+6265
+6266
+6268
+6270
+6279
+6283
+6292
+6300
+6301
+6302
+6305
+6320
+6332
+6358
+6359
+6360
+6369
+6381
+6395
+6423
+6428
+6435
+6450
+6465
+6466
+6468
+6481
+6483
+6487
+6509
+6515
+6516
+6531
+6536
+6550
+6557
+6570
+6582
+6586
+6589
+6603
+6608
+6609
+6615
+6618
+6619
+6621
+6624
+6626
+6632
+6662
+6668
+6673
+6682
+6684
+6694
+6699
+6710
+6712
+6713
+6721
+6723
+6730
+6734
+6765
+6771
+6775
+6797
+6799
+6800
+6803
+6805
+6821
+6838
+6841
+6842
+6850
+6858
+6870
+6875
+6877
+6886
+6894
+6914
+6935
+6944
+6951
+6955
+6964
+6971
+6973
+6997
+7013
+7020
+7027
+7048
+7052
+7067
+7076
+7078
+7090
+7096
+7113
+7121
+7132
+7136
+7150
+7160
+7165
+7171
+7182
+7185
+7192
+7195
+7200
+7206
+7221
+7225
+7229
+7236
+7245
+7251
+7254
+7270
+7286
+7296
+7309
+7326
+7335
+7342
+7348
+7353
+7356
+7373
+7383
+7392
+7403
+7411
+7412
+7413
+7416
+7424
+7437
+7441
+7448
+7457
+7458
+7459
+7469
+7481
+7502
+7509
+7521
+7539
+7555
+7577
+7580
+7586
+7605
+7615
+7633
+7657
+7659
+7669
+7671
+7676
+7699
+7709
+7719
+7730
+7736
+7742
+7755
+7761
+7762
+7763
+7774
+7804
+7805
+7809
+7825
+7844
+7848
+7861
+7899
+7902
+7903
+7912
+7921
+7930
+7933
+7943
+7951
+7952
+7976
+7977
+7982
+7985
+7992
+8003
+8006
+8022
+8038
+8040
+8041
+8055
+8063
+8070
+8072
+8076
+8078
+8079
+8081
+8097
+8103
+8112
+8126
+8131
+8136
+8141
+8145
+8155
+8157
+8168
+8183
+8191
+8193
+8237
+8248
+8266
+8272
+8273
+8276
+8279
+8298
+8308
+8314
+8327
+8330
+8336
+8337
+8352
+8367
+8368
+8373
+8376
+8391
+8394
+8398
+8402
+8405
+8406
+8411
+8412
+8437
+8441
+8452
+8456
+8470
+8471
+8476
+8478
+8481
+8484
+8498
+8515
+8518
+8519
+8538
+8539
+8540
+8541
+8565
+8579
+8612
+8621
+8632
+8642
+8645
+8656
+8668
+8670
+8686
+8694
+8701
+8712
+8716
+8728
+8735
+8742
+8750
+8758
+8783
+8788
+8792
+8801
+8807
+8818
+8819
+8828
+8840
+8845
+8851
+8856
+8857
+8898
+8909
+8911
+8913
+8915
+8922
+8928
+8930
+8931
+8935
+8952
+8955
+8961
+8964
+8968
+8972
+8975
+8980
+8986
+8997
+9004
+9011
+9012
+9029
+9030
+9037
+9039
+9046
+9068
+9070
+9079
+9085
+9101
+9111
+9112
+9132
+9142
+9145
+9153
+9158
+9165
+9177
+9187
+9199
+9217
+9218
+9221
+9222
+9224
+9227
+9235
+9237
+9239
+9247
+9248
+9261
+9263
+9264
+9270
+9281
+9288
+9296
+9303
+9304
+9317
+9320
+9326
+9337
+9339
+9350
+9352
+9357
+9367
+9370
+9387
+9393
+9398
+9403
+9423
+9443
+9444
+9456
+9462
+9467
+9469
+9471
+9473
+9475
+9490
+9492
+9523
+9526
+9527
+9539
+9543
+9552
+9559
+9566
+9573
+9575
+9583
+9585
+9588
+9609
+9612
+9618
+9621
+9630
+9633
+9647
+9662
+9669
+9686
+9694
+9696
+9700
+9709
+9730
+9742
+9743
+9768
+9772
+9776
+9781
+9785
+9794
+9800
+9803
+9809
+9825
+9832
+9837
+9838
+9861
+9862
+9874
+9875
+9877
+9889
+9900
+9910
+9925
+9926
+9933
+9936
+9953
+9961
+9967
+9974
+9978
+9979
+9989
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testPython3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testPython3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,174 @@
+170
+445
+502
+507
+511
+541
+585
+666
+673
+689
+695
+798
+801
+811
+817
+865
+868
+1024
+1056
+1159
+1180
+1201
+1245
+1373
+1467
+1471
+1489
+1589
+1601
+1665
+1697
+1712
+1729
+1819
+1822
+1918
+1934
+1949
+2006
+2126
+2147
+2170
+2172
+2189
+2259
+2313
+2497
+2695
+2699
+2743
+2798
+2890
+2967
+2975
+2992
+3011
+3134
+3144
+3186
+3239
+3251
+3254
+3333
+3349
+3379
+3462
+3496
+3580
+3585
+3676
+3727
+3780
+3798
+3821
+3847
+3861
+3888
+4007
+4045
+4125
+4126
+4142
+4200
+4201
+4239
+4254
+4282
+4285
+4421
+4441
+4445
+4453
+4456
+4510
+4561
+4580
+4583
+4717
+4884
+4915
+4972
+5157
+5175
+5203
+5328
+5553
+5608
+5692
+5693
+5719
+5904
+5970
+6110
+6158
+6165
+6174
+6304
+6328
+6414
+6431
+6574
+6617
+6649
+6652
+6685
+6799
+6804
+7010
+7049
+7054
+7057
+7121
+7133
+7182
+7212
+7251
+7270
+7277
+7284
+7410
+7436
+7473
+7495
+7497
+7721
+7769
+7828
+7829
+7831
+7840
+7945
+7964
+7972
+7999
+8087
+8268
+8303
+8390
+8445
+8530
+8673
+8707
+8715
+8727
+8783
+8870
+9099
+9193
+9383
+9396
+9418
+9743
+9857
+9986
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9259 @@
+0
+1
+2
+3
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+61
+62
+63
+65
+66
+67
+69
+70
+71
+72
+73
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+187
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+216
+217
+218
+219
+220
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+256
+257
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+327
+328
+329
+330
+331
+332
+333
+335
+337
+338
+340
+341
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+402
+403
+404
+405
+406
+407
+408
+409
+410
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+455
+456
+457
+458
+459
+460
+461
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+542
+543
+544
+545
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+624
+625
+626
+627
+628
+630
+631
+632
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+666
+667
+669
+670
+671
+672
+673
+674
+675
+677
+678
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+749
+750
+751
+752
+754
+755
+756
+757
+758
+759
+760
+763
+764
+766
+767
+768
+769
+770
+772
+773
+774
+775
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+791
+792
+793
+794
+795
+796
+797
+798
+801
+802
+803
+804
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+838
+839
+840
+841
+842
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+861
+862
+863
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+879
+880
+881
+883
+884
+885
+886
+887
+888
+889
+890
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+993
+994
+995
+996
+997
+998
+1001
+1003
+1006
+1007
+1008
+1009
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1156
+1157
+1158
+1159
+1160
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1198
+1199
+1200
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1236
+1237
+1238
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1288
+1289
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1299
+1301
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1453
+1454
+1456
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1572
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1597
+1598
+1599
+1600
+1601
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1663
+1664
+1665
+1666
+1667
+1668
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1683
+1684
+1685
+1686
+1688
+1689
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1757
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1814
+1815
+1816
+1817
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1846
+1847
+1848
+1851
+1852
+1853
+1854
+1855
+1856
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1958
+1959
+1960
+1961
+1962
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2105
+2106
+2108
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2206
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2235
+2236
+2237
+2238
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2250
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2266
+2267
+2268
+2269
+2270
+2272
+2273
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2333
+2334
+2335
+2336
+2337
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2381
+2382
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2400
+2401
+2403
+2404
+2405
+2406
+2407
+2408
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2542
+2543
+2544
+2545
+2547
+2548
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2561
+2562
+2564
+2565
+2566
+2567
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2648
+2650
+2651
+2652
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2672
+2673
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2731
+2732
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2825
+2826
+2827
+2828
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2873
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2921
+2922
+2923
+2925
+2926
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2943
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3109
+3110
+3111
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3163
+3164
+3165
+3166
+3167
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3222
+3223
+3225
+3226
+3227
+3228
+3229
+3230
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3390
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3487
+3488
+3489
+3490
+3491
+3492
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3622
+3623
+3624
+3625
+3627
+3628
+3629
+3630
+3631
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3949
+3950
+3951
+3952
+3953
+3955
+3956
+3957
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4039
+4040
+4041
+4042
+4044
+4045
+4046
+4047
+4048
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4067
+4068
+4069
+4070
+4071
+4072
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4109
+4110
+4112
+4113
+4116
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4139
+4140
+4141
+4142
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4183
+4184
+4185
+4186
+4187
+4189
+4190
+4191
+4192
+4193
+4194
+4196
+4198
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4234
+4235
+4236
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4280
+4281
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4299
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4332
+4333
+4334
+4336
+4337
+4338
+4339
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4385
+4386
+4387
+4388
+4389
+4391
+4392
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4410
+4411
+4413
+4414
+4416
+4417
+4418
+4419
+4420
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4452
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4490
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4565
+4566
+4567
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4702
+4703
+4704
+4705
+4706
+4707
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4734
+4736
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4878
+4879
+4880
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4944
+4945
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4995
+4996
+4997
+4998
+4999
+5001
+5002
+5003
+5004
+5005
+5006
+5008
+5009
+5010
+5011
+5012
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5116
+5117
+5118
+5119
+5120
+5122
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5169
+5171
+5172
+5173
+5174
+5175
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5194
+5195
+5196
+5197
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5215
+5216
+5218
+5219
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5237
+5238
+5239
+5240
+5241
+5242
+5243
+5244
+5246
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5259
+5260
+5261
+5262
+5264
+5265
+5266
+5267
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5311
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5321
+5322
+5323
+5324
+5325
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5372
+5373
+5374
+5375
+5376
+5377
+5379
+5380
+5381
+5383
+5385
+5386
+5387
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5402
+5403
+5404
+5405
+5407
+5408
+5409
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5427
+5428
+5429
+5430
+5431
+5432
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5442
+5443
+5444
+5445
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5511
+5512
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5545
+5546
+5547
+5548
+5549
+5550
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5581
+5582
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5590
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5654
+5656
+5657
+5658
+5659
+5660
+5661
+5663
+5665
+5666
+5667
+5668
+5669
+5671
+5672
+5673
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5687
+5688
+5689
+5690
+5691
+5692
+5694
+5695
+5696
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5707
+5708
+5709
+5710
+5711
+5713
+5714
+5715
+5716
+5717
+5718
+5719
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5755
+5756
+5757
+5758
+5759
+5760
+5761
+5762
+5764
+5765
+5766
+5767
+5768
+5769
+5772
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5800
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5808
+5810
+5812
+5813
+5814
+5815
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5823
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5832
+5833
+5834
+5835
+5836
+5837
+5839
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5856
+5857
+5858
+5859
+5860
+5861
+5862
+5863
+5864
+5865
+5866
+5868
+5869
+5870
+5871
+5873
+5874
+5875
+5876
+5877
+5878
+5879
+5880
+5881
+5882
+5883
+5884
+5885
+5886
+5888
+5889
+5890
+5891
+5892
+5893
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5901
+5902
+5903
+5904
+5905
+5906
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5917
+5918
+5919
+5920
+5921
+5922
+5923
+5924
+5926
+5927
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+5939
+5940
+5941
+5942
+5943
+5944
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5956
+5957
+5958
+5959
+5960
+5961
+5962
+5963
+5964
+5966
+5967
+5968
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5979
+5980
+5981
+5982
+5983
+5984
+5985
+5986
+5987
+5988
+5989
+5990
+5991
+5992
+5993
+5994
+5995
+5996
+5997
+5998
+5999
+6000
+6001
+6002
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6010
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6027
+6028
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6039
+6040
+6041
+6042
+6043
+6044
+6045
+6046
+6047
+6048
+6049
+6050
+6051
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6061
+6062
+6063
+6064
+6066
+6067
+6069
+6070
+6071
+6072
+6074
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6083
+6084
+6085
+6086
+6087
+6088
+6090
+6091
+6092
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6102
+6103
+6104
+6106
+6107
+6109
+6110
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6122
+6123
+6124
+6125
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6138
+6139
+6141
+6142
+6144
+6146
+6147
+6149
+6150
+6151
+6152
+6153
+6155
+6156
+6157
+6158
+6159
+6160
+6161
+6162
+6163
+6164
+6165
+6166
+6167
+6168
+6169
+6170
+6171
+6172
+6173
+6174
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6182
+6183
+6184
+6185
+6186
+6190
+6191
+6193
+6194
+6195
+6196
+6198
+6199
+6200
+6201
+6202
+6203
+6204
+6205
+6208
+6209
+6210
+6211
+6212
+6214
+6215
+6216
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6225
+6226
+6227
+6228
+6229
+6231
+6232
+6233
+6234
+6235
+6236
+6237
+6238
+6239
+6240
+6241
+6242
+6243
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6260
+6261
+6263
+6264
+6267
+6268
+6269
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6279
+6280
+6281
+6282
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6291
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6303
+6304
+6305
+6306
+6307
+6308
+6309
+6310
+6311
+6312
+6313
+6314
+6315
+6316
+6317
+6318
+6319
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6328
+6329
+6330
+6331
+6332
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6343
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6361
+6362
+6363
+6364
+6365
+6366
+6367
+6368
+6369
+6370
+6371
+6372
+6373
+6374
+6375
+6376
+6377
+6378
+6379
+6380
+6382
+6383
+6384
+6385
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6403
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6411
+6412
+6413
+6414
+6415
+6416
+6417
+6418
+6419
+6420
+6421
+6422
+6424
+6425
+6426
+6427
+6429
+6430
+6431
+6432
+6433
+6434
+6436
+6437
+6438
+6439
+6440
+6441
+6442
+6443
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6459
+6460
+6461
+6462
+6463
+6464
+6465
+6467
+6469
+6470
+6471
+6472
+6473
+6474
+6475
+6476
+6477
+6478
+6479
+6480
+6482
+6483
+6484
+6485
+6486
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6495
+6496
+6497
+6498
+6499
+6500
+6501
+6502
+6503
+6504
+6505
+6506
+6507
+6508
+6509
+6510
+6511
+6512
+6513
+6514
+6516
+6517
+6518
+6519
+6520
+6521
+6522
+6523
+6524
+6525
+6526
+6527
+6528
+6529
+6530
+6531
+6532
+6533
+6534
+6535
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6545
+6546
+6547
+6548
+6549
+6550
+6551
+6552
+6553
+6554
+6555
+6556
+6557
+6558
+6559
+6560
+6561
+6562
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6571
+6572
+6573
+6574
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6583
+6584
+6585
+6586
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6603
+6604
+6605
+6606
+6607
+6608
+6610
+6611
+6612
+6613
+6614
+6616
+6617
+6620
+6622
+6623
+6625
+6627
+6628
+6629
+6630
+6631
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6643
+6644
+6645
+6646
+6647
+6648
+6649
+6650
+6651
+6652
+6653
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6663
+6664
+6665
+6666
+6667
+6669
+6670
+6671
+6672
+6673
+6674
+6675
+6676
+6677
+6678
+6679
+6680
+6681
+6682
+6683
+6685
+6686
+6687
+6688
+6689
+6690
+6691
+6692
+6693
+6695
+6696
+6697
+6698
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6710
+6711
+6712
+6714
+6715
+6716
+6717
+6718
+6719
+6720
+6722
+6724
+6725
+6726
+6727
+6728
+6729
+6731
+6732
+6733
+6735
+6736
+6737
+6738
+6739
+6740
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6766
+6767
+6768
+6769
+6770
+6772
+6773
+6774
+6776
+6777
+6778
+6779
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6798
+6801
+6802
+6804
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6817
+6818
+6819
+6820
+6821
+6822
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6835
+6836
+6837
+6839
+6840
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6851
+6852
+6853
+6854
+6855
+6856
+6857
+6859
+6860
+6861
+6862
+6863
+6864
+6865
+6866
+6867
+6868
+6869
+6871
+6872
+6873
+6874
+6876
+6877
+6878
+6879
+6880
+6881
+6882
+6883
+6884
+6885
+6886
+6887
+6888
+6889
+6890
+6891
+6892
+6893
+6895
+6896
+6897
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6909
+6910
+6911
+6912
+6913
+6914
+6915
+6916
+6917
+6918
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6927
+6928
+6929
+6930
+6931
+6932
+6933
+6934
+6935
+6936
+6937
+6938
+6939
+6940
+6941
+6942
+6943
+6945
+6946
+6947
+6948
+6949
+6950
+6951
+6952
+6953
+6954
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6965
+6966
+6967
+6968
+6969
+6970
+6972
+6974
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6996
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7006
+7007
+7008
+7009
+7010
+7011
+7012
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+7023
+7024
+7025
+7026
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7044
+7045
+7046
+7047
+7049
+7050
+7051
+7052
+7053
+7054
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7065
+7066
+7068
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7077
+7078
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7086
+7087
+7088
+7089
+7091
+7092
+7093
+7094
+7095
+7097
+7098
+7099
+7100
+7101
+7102
+7103
+7104
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7112
+7113
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7122
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7132
+7133
+7134
+7135
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7144
+7145
+7146
+7147
+7148
+7149
+7151
+7152
+7153
+7154
+7155
+7156
+7157
+7158
+7159
+7160
+7161
+7162
+7163
+7164
+7165
+7166
+7167
+7168
+7169
+7170
+7171
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7181
+7183
+7184
+7186
+7187
+7188
+7189
+7190
+7191
+7192
+7193
+7194
+7196
+7197
+7198
+7199
+7201
+7202
+7203
+7204
+7205
+7206
+7207
+7208
+7209
+7210
+7211
+7212
+7213
+7214
+7215
+7216
+7217
+7218
+7219
+7220
+7221
+7222
+7223
+7224
+7226
+7227
+7228
+7230
+7231
+7232
+7233
+7234
+7235
+7236
+7237
+7238
+7239
+7240
+7241
+7242
+7243
+7244
+7245
+7246
+7247
+7248
+7249
+7250
+7252
+7253
+7255
+7256
+7257
+7258
+7259
+7260
+7261
+7262
+7263
+7264
+7265
+7266
+7267
+7268
+7269
+7271
+7272
+7273
+7274
+7275
+7276
+7277
+7278
+7279
+7280
+7281
+7282
+7283
+7284
+7285
+7287
+7288
+7289
+7290
+7291
+7292
+7293
+7294
+7295
+7296
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7304
+7305
+7306
+7307
+7308
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7317
+7318
+7319
+7320
+7321
+7322
+7323
+7324
+7325
+7326
+7327
+7328
+7329
+7330
+7331
+7332
+7333
+7334
+7336
+7337
+7338
+7339
+7340
+7341
+7342
+7343
+7344
+7345
+7346
+7347
+7348
+7349
+7350
+7351
+7352
+7354
+7355
+7357
+7358
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7382
+7383
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7392
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7401
+7402
+7404
+7405
+7406
+7407
+7408
+7409
+7410
+7411
+7414
+7415
+7417
+7418
+7419
+7420
+7421
+7422
+7423
+7425
+7426
+7427
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7436
+7438
+7439
+7440
+7442
+7443
+7444
+7445
+7446
+7447
+7449
+7450
+7451
+7452
+7453
+7454
+7455
+7456
+7457
+7458
+7459
+7460
+7461
+7462
+7463
+7464
+7465
+7466
+7467
+7468
+7469
+7470
+7471
+7472
+7473
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7482
+7483
+7484
+7485
+7486
+7487
+7488
+7489
+7490
+7491
+7492
+7493
+7494
+7495
+7496
+7497
+7498
+7499
+7500
+7501
+7503
+7504
+7505
+7506
+7507
+7508
+7510
+7511
+7512
+7513
+7514
+7515
+7516
+7517
+7518
+7519
+7520
+7522
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7556
+7557
+7558
+7559
+7560
+7561
+7562
+7563
+7564
+7565
+7566
+7567
+7568
+7569
+7570
+7571
+7572
+7573
+7574
+7575
+7576
+7577
+7578
+7579
+7581
+7582
+7583
+7584
+7585
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7606
+7607
+7608
+7609
+7610
+7611
+7612
+7613
+7614
+7615
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7625
+7626
+7627
+7628
+7629
+7630
+7631
+7632
+7633
+7634
+7635
+7636
+7637
+7638
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7654
+7655
+7656
+7658
+7660
+7661
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7669
+7670
+7672
+7673
+7674
+7675
+7677
+7678
+7679
+7680
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7692
+7693
+7694
+7695
+7696
+7697
+7698
+7700
+7701
+7702
+7703
+7704
+7705
+7706
+7707
+7708
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7720
+7721
+7722
+7723
+7724
+7725
+7726
+7727
+7728
+7729
+7731
+7732
+7733
+7734
+7735
+7737
+7738
+7739
+7740
+7741
+7743
+7744
+7745
+7746
+7747
+7748
+7749
+7750
+7751
+7752
+7753
+7754
+7756
+7757
+7758
+7759
+7760
+7761
+7764
+7765
+7766
+7767
+7768
+7769
+7770
+7771
+7772
+7773
+7775
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7806
+7807
+7808
+7810
+7811
+7812
+7813
+7814
+7815
+7816
+7817
+7818
+7819
+7820
+7821
+7822
+7823
+7824
+7825
+7826
+7827
+7828
+7829
+7830
+7831
+7832
+7833
+7834
+7835
+7836
+7837
+7838
+7839
+7840
+7841
+7842
+7843
+7844
+7845
+7846
+7847
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7857
+7858
+7859
+7860
+7861
+7862
+7863
+7864
+7865
+7866
+7867
+7868
+7869
+7870
+7871
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7884
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7895
+7896
+7897
+7898
+7899
+7900
+7901
+7904
+7905
+7906
+7907
+7908
+7909
+7910
+7911
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7920
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7931
+7932
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7942
+7943
+7944
+7945
+7946
+7947
+7948
+7949
+7950
+7951
+7952
+7953
+7954
+7955
+7956
+7957
+7958
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7967
+7968
+7969
+7970
+7971
+7972
+7973
+7974
+7975
+7978
+7979
+7980
+7981
+7983
+7984
+7986
+7987
+7988
+7989
+7990
+7991
+7993
+7994
+7995
+7996
+7997
+7998
+7999
+8000
+8001
+8002
+8004
+8005
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8022
+8023
+8024
+8025
+8026
+8027
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8036
+8037
+8039
+8040
+8041
+8042
+8043
+8044
+8045
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8064
+8065
+8066
+8067
+8068
+8069
+8071
+8072
+8073
+8074
+8075
+8077
+8080
+8082
+8083
+8084
+8085
+8086
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8094
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8112
+8113
+8114
+8115
+8116
+8117
+8118
+8119
+8120
+8121
+8122
+8123
+8124
+8125
+8126
+8127
+8128
+8129
+8130
+8132
+8133
+8134
+8135
+8136
+8137
+8138
+8139
+8140
+8142
+8143
+8144
+8145
+8146
+8147
+8148
+8149
+8150
+8151
+8152
+8153
+8154
+8155
+8156
+8157
+8158
+8159
+8160
+8161
+8162
+8163
+8164
+8165
+8166
+8167
+8169
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8192
+8194
+8195
+8196
+8197
+8198
+8199
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8207
+8208
+8209
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8223
+8224
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8237
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8262
+8263
+8264
+8265
+8267
+8268
+8269
+8270
+8271
+8272
+8274
+8275
+8277
+8278
+8279
+8280
+8281
+8282
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8297
+8299
+8300
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8308
+8309
+8310
+8311
+8312
+8313
+8315
+8316
+8317
+8318
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8327
+8328
+8329
+8331
+8332
+8333
+8334
+8335
+8337
+8338
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8352
+8353
+8354
+8355
+8356
+8357
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8369
+8370
+8371
+8372
+8374
+8375
+8377
+8378
+8379
+8380
+8381
+8382
+8383
+8384
+8385
+8386
+8387
+8388
+8389
+8390
+8391
+8392
+8393
+8395
+8396
+8397
+8399
+8400
+8401
+8403
+8404
+8405
+8407
+8408
+8409
+8410
+8413
+8414
+8415
+8416
+8417
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8428
+8429
+8430
+8431
+8432
+8433
+8434
+8435
+8436
+8438
+8439
+8440
+8442
+8443
+8444
+8445
+8446
+8447
+8448
+8449
+8450
+8451
+8453
+8454
+8455
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8464
+8465
+8466
+8467
+8468
+8469
+8471
+8472
+8473
+8474
+8475
+8476
+8477
+8478
+8479
+8480
+8481
+8482
+8483
+8485
+8486
+8487
+8488
+8489
+8490
+8491
+8492
+8493
+8494
+8495
+8496
+8497
+8499
+8500
+8501
+8502
+8503
+8504
+8505
+8506
+8507
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8516
+8517
+8518
+8519
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8530
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8542
+8543
+8544
+8545
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8563
+8564
+8565
+8566
+8567
+8568
+8569
+8570
+8571
+8572
+8573
+8574
+8575
+8576
+8577
+8578
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8604
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8613
+8614
+8615
+8616
+8617
+8618
+8619
+8620
+8621
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8630
+8631
+8632
+8633
+8634
+8635
+8636
+8637
+8638
+8639
+8640
+8641
+8643
+8644
+8646
+8647
+8648
+8649
+8650
+8651
+8652
+8653
+8654
+8655
+8656
+8657
+8658
+8659
+8660
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8669
+8671
+8672
+8673
+8674
+8675
+8676
+8677
+8678
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+8687
+8688
+8689
+8690
+8691
+8692
+8693
+8695
+8696
+8697
+8698
+8699
+8700
+8702
+8703
+8704
+8705
+8706
+8707
+8708
+8709
+8710
+8711
+8712
+8713
+8714
+8715
+8717
+8718
+8719
+8720
+8721
+8722
+8723
+8724
+8725
+8726
+8727
+8729
+8730
+8731
+8732
+8733
+8734
+8736
+8737
+8738
+8739
+8740
+8741
+8742
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8784
+8785
+8786
+8787
+8789
+8790
+8791
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8801
+8802
+8803
+8804
+8805
+8806
+8807
+8808
+8809
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8818
+8819
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8833
+8834
+8835
+8836
+8837
+8838
+8839
+8841
+8842
+8843
+8844
+8845
+8846
+8847
+8848
+8849
+8850
+8852
+8853
+8854
+8855
+8858
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8870
+8871
+8872
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8881
+8882
+8883
+8884
+8885
+8886
+8887
+8888
+8889
+8890
+8891
+8892
+8893
+8894
+8895
+8896
+8897
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8910
+8912
+8914
+8915
+8916
+8917
+8918
+8919
+8920
+8921
+8923
+8924
+8925
+8926
+8927
+8929
+8931
+8932
+8933
+8934
+8936
+8937
+8938
+8939
+8940
+8941
+8942
+8943
+8944
+8945
+8946
+8947
+8948
+8949
+8950
+8951
+8953
+8954
+8956
+8957
+8958
+8959
+8960
+8962
+8963
+8964
+8965
+8966
+8967
+8968
+8969
+8970
+8971
+8973
+8974
+8975
+8976
+8977
+8978
+8979
+8981
+8982
+8983
+8984
+8985
+8987
+8988
+8989
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8998
+8999
+9000
+9001
+9002
+9003
+9004
+9005
+9006
+9007
+9008
+9009
+9010
+9011
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9031
+9032
+9033
+9034
+9035
+9036
+9037
+9038
+9040
+9041
+9042
+9043
+9044
+9045
+9047
+9048
+9049
+9050
+9051
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9066
+9067
+9068
+9069
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9080
+9081
+9082
+9083
+9084
+9085
+9086
+9087
+9088
+9089
+9090
+9091
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9101
+9102
+9103
+9104
+9105
+9106
+9107
+9108
+9109
+9110
+9111
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9128
+9129
+9130
+9131
+9133
+9134
+9135
+9136
+9137
+9138
+9139
+9140
+9141
+9143
+9144
+9145
+9146
+9147
+9148
+9149
+9150
+9151
+9152
+9154
+9155
+9156
+9157
+9158
+9159
+9160
+9161
+9162
+9163
+9164
+9166
+9167
+9168
+9169
+9170
+9171
+9172
+9173
+9174
+9175
+9176
+9177
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9188
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9209
+9210
+9211
+9212
+9213
+9214
+9215
+9216
+9217
+9218
+9219
+9220
+9221
+9222
+9223
+9225
+9226
+9227
+9228
+9229
+9230
+9231
+9232
+9233
+9234
+9236
+9238
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9249
+9250
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9258
+9259
+9260
+9262
+9263
+9264
+9265
+9266
+9267
+9268
+9269
+9271
+9272
+9273
+9274
+9275
+9276
+9277
+9278
+9279
+9280
+9282
+9283
+9284
+9285
+9286
+9287
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9296
+9297
+9298
+9299
+9300
+9301
+9302
+9303
+9304
+9305
+9306
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9314
+9315
+9316
+9317
+9318
+9319
+9321
+9322
+9323
+9324
+9325
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9337
+9338
+9340
+9341
+9342
+9343
+9344
+9345
+9346
+9347
+9348
+9349
+9351
+9353
+9354
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9368
+9369
+9371
+9372
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9385
+9386
+9388
+9389
+9390
+9391
+9392
+9394
+9395
+9396
+9397
+9398
+9399
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9417
+9418
+9419
+9420
+9421
+9422
+9424
+9425
+9426
+9427
+9428
+9429
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9444
+9445
+9446
+9447
+9448
+9449
+9450
+9451
+9452
+9453
+9454
+9455
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9464
+9465
+9466
+9467
+9468
+9470
+9472
+9474
+9476
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9484
+9485
+9486
+9487
+9488
+9489
+9491
+9493
+9494
+9495
+9496
+9497
+9498
+9499
+9500
+9501
+9502
+9503
+9504
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9524
+9525
+9526
+9528
+9529
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9540
+9541
+9542
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9551
+9553
+9554
+9555
+9556
+9557
+9558
+9560
+9561
+9562
+9563
+9564
+9565
+9567
+9568
+9569
+9570
+9571
+9572
+9574
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9584
+9585
+9586
+9587
+9588
+9589
+9590
+9591
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9600
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+9608
+9610
+9611
+9612
+9613
+9614
+9615
+9616
+9617
+9619
+9620
+9622
+9623
+9624
+9625
+9626
+9627
+9628
+9629
+9631
+9632
+9633
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9646
+9648
+9649
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9658
+9659
+9660
+9661
+9662
+9663
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9680
+9681
+9682
+9683
+9684
+9685
+9687
+9688
+9689
+9690
+9691
+9692
+9693
+9694
+9695
+9697
+9698
+9699
+9700
+9701
+9702
+9703
+9704
+9705
+9706
+9707
+9708
+9709
+9710
+9711
+9712
+9713
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9722
+9723
+9724
+9725
+9726
+9727
+9728
+9729
+9731
+9732
+9733
+9734
+9735
+9736
+9737
+9738
+9739
+9740
+9741
+9743
+9744
+9745
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9761
+9762
+9763
+9764
+9765
+9766
+9767
+9768
+9769
+9770
+9771
+9773
+9774
+9775
+9776
+9777
+9778
+9779
+9780
+9781
+9782
+9783
+9784
+9785
+9786
+9787
+9788
+9789
+9790
+9791
+9792
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9800
+9801
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9809
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9827
+9828
+9829
+9830
+9831
+9833
+9834
+9835
+9836
+9837
+9839
+9840
+9841
+9842
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9857
+9858
+9859
+9860
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9872
+9873
+9874
+9875
+9876
+9877
+9878
+9879
+9880
+9881
+9882
+9883
+9884
+9885
+9886
+9887
+9888
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9898
+9899
+9900
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9927
+9928
+9929
+9930
+9931
+9932
+9934
+9935
+9936
+9937
+9938
+9939
+9940
+9941
+9942
+9943
+9944
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9962
+9963
+9964
+9965
+9966
+9967
+9968
+9969
+9970
+9971
+9972
+9973
+9975
+9976
+9977
+9980
+9981
+9982
+9983
+9984
+9985
+9986
+9987
+9988
+9989
+9990
+9991
+9992
+9993
+9994
+9995
+9996
+9997
+9998
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testSphere2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testSphere2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,741 @@
+4
+40
+60
+64
+68
+74
+91
+122
+152
+166
+186
+188
+215
+221
+232
+255
+258
+294
+305
+326
+334
+336
+339
+342
+360
+401
+411
+425
+440
+454
+462
+478
+541
+546
+561
+595
+623
+629
+633
+646
+665
+668
+676
+679
+691
+703
+748
+753
+761
+762
+765
+771
+776
+790
+799
+800
+805
+806
+819
+837
+843
+860
+864
+877
+878
+882
+891
+944
+973
+992
+999
+1000
+1002
+1004
+1005
+1010
+1034
+1043
+1051
+1105
+1132
+1154
+1155
+1161
+1197
+1201
+1202
+1217
+1226
+1235
+1239
+1287
+1290
+1298
+1300
+1302
+1326
+1344
+1387
+1404
+1422
+1433
+1434
+1452
+1455
+1457
+1469
+1478
+1488
+1508
+1536
+1571
+1573
+1585
+1596
+1602
+1618
+1662
+1669
+1682
+1687
+1690
+1738
+1739
+1756
+1758
+1770
+1782
+1801
+1802
+1813
+1818
+1845
+1849
+1850
+1857
+1867
+1868
+1944
+1957
+1963
+1981
+2002
+2026
+2049
+2060
+2104
+2107
+2109
+2143
+2155
+2185
+2205
+2207
+2216
+2234
+2239
+2249
+2251
+2265
+2271
+2274
+2286
+2332
+2338
+2371
+2380
+2383
+2384
+2399
+2402
+2409
+2443
+2498
+2530
+2541
+2546
+2549
+2560
+2563
+2568
+2569
+2594
+2616
+2633
+2647
+2649
+2653
+2671
+2674
+2690
+2704
+2730
+2733
+2742
+2782
+2808
+2824
+2829
+2840
+2872
+2874
+2891
+2901
+2920
+2924
+2927
+2942
+2944
+2971
+3009
+3043
+3108
+3112
+3139
+3162
+3168
+3190
+3221
+3224
+3231
+3258
+3284
+3296
+3325
+3344
+3380
+3389
+3391
+3401
+3423
+3432
+3470
+3471
+3486
+3493
+3552
+3564
+3579
+3604
+3621
+3626
+3632
+3721
+3746
+3764
+3774
+3797
+3895
+3907
+3922
+3936
+3948
+3954
+3958
+3984
+3992
+4015
+4030
+4038
+4043
+4049
+4066
+4073
+4108
+4111
+4114
+4115
+4117
+4138
+4143
+4164
+4182
+4188
+4195
+4197
+4199
+4207
+4233
+4237
+4278
+4279
+4282
+4298
+4300
+4301
+4331
+4335
+4340
+4372
+4384
+4390
+4393
+4409
+4412
+4415
+4421
+4422
+4431
+4439
+4440
+4451
+4453
+4463
+4471
+4488
+4489
+4491
+4517
+4540
+4555
+4564
+4568
+4596
+4609
+4633
+4669
+4670
+4681
+4689
+4701
+4708
+4716
+4717
+4733
+4735
+4737
+4765
+4779
+4799
+4819
+4840
+4858
+4859
+4877
+4881
+4898
+4918
+4934
+4943
+4946
+4967
+4981
+4994
+5000
+5007
+5013
+5022
+5023
+5024
+5045
+5068
+5101
+5115
+5121
+5123
+5138
+5150
+5170
+5193
+5198
+5214
+5217
+5220
+5236
+5245
+5258
+5263
+5268
+5300
+5320
+5370
+5371
+5378
+5382
+5384
+5388
+5406
+5441
+5486
+5500
+5509
+5510
+5513
+5514
+5531
+5543
+5544
+5559
+5591
+5607
+5631
+5653
+5655
+5662
+5664
+5670
+5674
+5686
+5693
+5697
+5706
+5712
+5732
+5754
+5763
+5770
+5771
+5773
+5792
+5809
+5811
+5838
+5840
+5867
+5872
+5887
+5907
+5916
+5925
+5945
+5965
+5978
+6011
+6029
+6038
+6052
+6060
+6065
+6068
+6073
+6089
+6101
+6105
+6108
+6137
+6140
+6143
+6145
+6148
+6154
+6187
+6188
+6189
+6192
+6197
+6206
+6207
+6213
+6230
+6259
+6262
+6265
+6266
+6270
+6283
+6292
+6300
+6301
+6302
+6320
+6358
+6359
+6360
+6381
+6395
+6423
+6428
+6435
+6466
+6468
+6481
+6487
+6515
+6536
+6570
+6582
+6609
+6615
+6618
+6619
+6621
+6624
+6626
+6632
+6662
+6668
+6684
+6694
+6699
+6713
+6721
+6723
+6730
+6734
+6765
+6771
+6775
+6797
+6799
+6800
+6803
+6805
+6838
+6841
+6842
+6850
+6858
+6870
+6875
+6894
+6944
+6955
+6964
+6971
+6973
+6997
+7013
+7027
+7048
+7067
+7076
+7090
+7096
+7121
+7136
+7150
+7182
+7185
+7195
+7200
+7225
+7229
+7251
+7254
+7270
+7286
+7309
+7335
+7353
+7356
+7373
+7403
+7412
+7413
+7416
+7424
+7437
+7441
+7448
+7481
+7502
+7509
+7521
+7539
+7555
+7580
+7586
+7605
+7657
+7659
+7671
+7676
+7699
+7709
+7730
+7736
+7742
+7755
+7762
+7763
+7774
+7804
+7805
+7809
+7848
+7902
+7903
+7912
+7921
+7930
+7933
+7976
+7977
+7982
+7985
+7992
+8003
+8006
+8038
+8063
+8070
+8076
+8078
+8079
+8081
+8103
+8131
+8141
+8168
+8183
+8191
+8193
+8248
+8266
+8273
+8276
+8298
+8314
+8330
+8336
+8368
+8373
+8376
+8394
+8398
+8402
+8406
+8411
+8412
+8437
+8441
+8452
+8456
+8470
+8484
+8498
+8515
+8538
+8539
+8540
+8541
+8579
+8612
+8642
+8645
+8668
+8670
+8694
+8701
+8716
+8728
+8735
+8750
+8758
+8783
+8788
+8792
+8840
+8851
+8856
+8857
+8898
+8909
+8911
+8913
+8922
+8928
+8930
+8935
+8952
+8955
+8961
+8972
+8980
+8986
+8997
+9029
+9030
+9039
+9046
+9070
+9079
+9112
+9132
+9142
+9153
+9165
+9187
+9199
+9224
+9235
+9237
+9247
+9248
+9261
+9270
+9281
+9288
+9320
+9326
+9339
+9350
+9352
+9367
+9370
+9387
+9393
+9423
+9443
+9456
+9469
+9471
+9473
+9475
+9490
+9492
+9523
+9527
+9539
+9543
+9552
+9559
+9566
+9573
+9575
+9583
+9609
+9618
+9621
+9630
+9647
+9686
+9696
+9730
+9742
+9772
+9832
+9838
+9861
+9862
+9889
+9910
+9925
+9926
+9933
+9953
+9961
+9974
+9978
+9979
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testSphere3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testSphere3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,157 @@
+170
+445
+502
+507
+533
+585
+666
+673
+689
+695
+769
+798
+811
+817
+865
+868
+1024
+1159
+1180
+1201
+1245
+1373
+1471
+1489
+1589
+1601
+1665
+1697
+1712
+1729
+1822
+1949
+2006
+2147
+2172
+2189
+2259
+2313
+2497
+2695
+2699
+2798
+2890
+2947
+2967
+2975
+2992
+3011
+3134
+3144
+3186
+3251
+3254
+3333
+3349
+3462
+3580
+3585
+3676
+3727
+3780
+3798
+3821
+3847
+3861
+4007
+4045
+4125
+4126
+4142
+4177
+4200
+4201
+4239
+4254
+4282
+4285
+4421
+4441
+4445
+4456
+4561
+4580
+4583
+4717
+4915
+5157
+5175
+5203
+5328
+5553
+5608
+5692
+5693
+5719
+5904
+5970
+6110
+6158
+6165
+6174
+6304
+6328
+6414
+6431
+6574
+6617
+6649
+6652
+6685
+6799
+6804
+6835
+7010
+7049
+7054
+7057
+7121
+7133
+7182
+7212
+7251
+7270
+7277
+7284
+7410
+7436
+7473
+7495
+7497
+7721
+7769
+7828
+7829
+7831
+7840
+7945
+7964
+7999
+8087
+8268
+8303
+8411
+8530
+8673
+8707
+8715
+8727
+8783
+8870
+9099
+9193
+9383
+9396
+9418
+9528
+9743
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1121 @@
+4
+38
+40
+60
+64
+66
+68
+74
+76
+83
+91
+122
+123
+152
+166
+172
+186
+188
+215
+221
+232
+255
+258
+294
+295
+305
+308
+322
+326
+334
+336
+339
+342
+345
+360
+361
+401
+411
+425
+427
+432
+436
+440
+454
+462
+463
+473
+478
+484
+488
+541
+546
+561
+575
+595
+621
+623
+629
+633
+644
+646
+656
+665
+668
+670
+676
+679
+691
+703
+723
+738
+748
+753
+761
+762
+765
+769
+771
+776
+780
+788
+790
+799
+800
+805
+806
+819
+837
+843
+859
+860
+863
+864
+877
+878
+882
+891
+925
+944
+956
+973
+992
+999
+1000
+1002
+1004
+1005
+1008
+1010
+1016
+1017
+1034
+1035
+1043
+1051
+1105
+1111
+1132
+1154
+1155
+1161
+1175
+1176
+1197
+1201
+1202
+1217
+1226
+1235
+1239
+1247
+1279
+1287
+1290
+1298
+1300
+1302
+1326
+1344
+1368
+1387
+1404
+1422
+1433
+1434
+1452
+1455
+1457
+1464
+1469
+1478
+1488
+1495
+1504
+1508
+1523
+1527
+1536
+1571
+1573
+1584
+1585
+1594
+1596
+1598
+1602
+1618
+1624
+1633
+1652
+1662
+1669
+1676
+1682
+1687
+1690
+1703
+1713
+1720
+1734
+1738
+1739
+1756
+1758
+1770
+1782
+1791
+1801
+1802
+1813
+1815
+1818
+1838
+1845
+1849
+1850
+1857
+1867
+1868
+1877
+1910
+1944
+1957
+1963
+1981
+2002
+2024
+2026
+2049
+2060
+2093
+2097
+2104
+2107
+2108
+2109
+2119
+2143
+2151
+2155
+2157
+2160
+2163
+2182
+2183
+2185
+2205
+2207
+2216
+2234
+2239
+2249
+2251
+2265
+2267
+2271
+2273
+2274
+2286
+2309
+2316
+2332
+2335
+2338
+2351
+2371
+2380
+2381
+2383
+2384
+2398
+2399
+2402
+2404
+2409
+2437
+2443
+2444
+2479
+2498
+2508
+2530
+2541
+2546
+2549
+2560
+2563
+2568
+2569
+2594
+2599
+2608
+2611
+2616
+2619
+2633
+2647
+2649
+2653
+2665
+2667
+2671
+2674
+2690
+2704
+2730
+2733
+2742
+2745
+2747
+2757
+2782
+2808
+2824
+2825
+2829
+2840
+2870
+2872
+2874
+2877
+2891
+2901
+2911
+2912
+2913
+2918
+2920
+2924
+2927
+2942
+2944
+2962
+2964
+2971
+2999
+3009
+3023
+3043
+3077
+3091
+3099
+3108
+3112
+3121
+3139
+3143
+3146
+3152
+3160
+3162
+3168
+3189
+3190
+3221
+3224
+3227
+3230
+3231
+3242
+3255
+3258
+3284
+3296
+3300
+3304
+3318
+3323
+3325
+3344
+3380
+3389
+3390
+3391
+3401
+3405
+3423
+3428
+3432
+3443
+3465
+3470
+3471
+3483
+3486
+3493
+3525
+3552
+3564
+3579
+3589
+3604
+3612
+3621
+3626
+3632
+3656
+3720
+3721
+3731
+3739
+3744
+3746
+3764
+3770
+3774
+3797
+3857
+3860
+3895
+3906
+3907
+3922
+3936
+3941
+3948
+3953
+3954
+3958
+3968
+3978
+3984
+3992
+4000
+4015
+4019
+4022
+4030
+4038
+4043
+4049
+4066
+4073
+4108
+4111
+4112
+4114
+4115
+4117
+4138
+4143
+4161
+4164
+4182
+4188
+4195
+4197
+4198
+4199
+4207
+4221
+4233
+4237
+4249
+4267
+4278
+4279
+4282
+4288
+4298
+4300
+4301
+4321
+4331
+4335
+4336
+4339
+4340
+4368
+4372
+4373
+4384
+4390
+4391
+4393
+4409
+4412
+4415
+4421
+4422
+4431
+4437
+4439
+4440
+4451
+4453
+4463
+4467
+4471
+4488
+4489
+4491
+4510
+4512
+4517
+4518
+4540
+4543
+4545
+4555
+4564
+4566
+4568
+4590
+4596
+4609
+4620
+4633
+4636
+4669
+4670
+4675
+4676
+4681
+4689
+4701
+4708
+4716
+4717
+4732
+4733
+4735
+4737
+4751
+4765
+4774
+4775
+4779
+4780
+4799
+4804
+4814
+4815
+4819
+4835
+4840
+4844
+4848
+4858
+4859
+4870
+4872
+4877
+4881
+4898
+4918
+4934
+4943
+4946
+4960
+4967
+4981
+4991
+4994
+5000
+5004
+5007
+5013
+5021
+5022
+5023
+5024
+5038
+5045
+5068
+5069
+5074
+5101
+5115
+5121
+5123
+5138
+5150
+5169
+5170
+5172
+5193
+5198
+5214
+5217
+5220
+5236
+5242
+5244
+5245
+5246
+5258
+5259
+5263
+5268
+5300
+5312
+5320
+5349
+5370
+5371
+5378
+5382
+5384
+5388
+5389
+5402
+5406
+5409
+5425
+5441
+5460
+5486
+5500
+5501
+5509
+5510
+5513
+5514
+5531
+5543
+5544
+5559
+5567
+5577
+5591
+5607
+5620
+5631
+5653
+5654
+5655
+5662
+5664
+5670
+5674
+5686
+5687
+5693
+5695
+5697
+5698
+5703
+5706
+5712
+5719
+5732
+5754
+5760
+5763
+5770
+5771
+5772
+5773
+5779
+5792
+5800
+5809
+5811
+5813
+5832
+5838
+5840
+5862
+5865
+5867
+5872
+5874
+5881
+5883
+5887
+5888
+5902
+5907
+5916
+5925
+5945
+5965
+5978
+5980
+5991
+5996
+6011
+6029
+6038
+6052
+6060
+6065
+6068
+6070
+6073
+6089
+6092
+6101
+6105
+6108
+6122
+6137
+6140
+6143
+6145
+6148
+6151
+6153
+6154
+6162
+6168
+6184
+6187
+6188
+6189
+6192
+6197
+6206
+6207
+6212
+6213
+6216
+6230
+6237
+6241
+6259
+6262
+6265
+6266
+6268
+6270
+6279
+6283
+6292
+6300
+6301
+6302
+6305
+6320
+6358
+6359
+6360
+6369
+6381
+6385
+6395
+6422
+6423
+6428
+6435
+6466
+6468
+6481
+6487
+6515
+6516
+6531
+6536
+6550
+6570
+6582
+6609
+6615
+6618
+6619
+6621
+6624
+6626
+6632
+6662
+6668
+6673
+6682
+6684
+6694
+6699
+6710
+6713
+6721
+6723
+6730
+6734
+6765
+6771
+6775
+6797
+6799
+6800
+6803
+6805
+6819
+6821
+6838
+6841
+6842
+6850
+6858
+6870
+6875
+6880
+6886
+6894
+6914
+6935
+6944
+6955
+6964
+6971
+6973
+6997
+7013
+7020
+7027
+7044
+7048
+7067
+7068
+7076
+7090
+7096
+7104
+7113
+7121
+7132
+7136
+7150
+7160
+7171
+7182
+7185
+7192
+7195
+7200
+7206
+7221
+7225
+7229
+7236
+7245
+7251
+7254
+7270
+7286
+7296
+7309
+7326
+7335
+7342
+7346
+7348
+7353
+7356
+7373
+7383
+7392
+7401
+7403
+7411
+7412
+7413
+7416
+7424
+7437
+7441
+7448
+7458
+7459
+7469
+7481
+7486
+7502
+7509
+7521
+7539
+7555
+7580
+7586
+7605
+7615
+7633
+7654
+7657
+7659
+7669
+7671
+7676
+7692
+7699
+7709
+7720
+7730
+7736
+7742
+7755
+7762
+7763
+7774
+7804
+7805
+7809
+7825
+7844
+7848
+7861
+7871
+7899
+7902
+7903
+7912
+7921
+7930
+7933
+7943
+7951
+7976
+7977
+7982
+7985
+7992
+8003
+8006
+8022
+8038
+8041
+8063
+8070
+8072
+8076
+8078
+8079
+8081
+8103
+8112
+8131
+8136
+8141
+8145
+8156
+8157
+8168
+8183
+8191
+8193
+8237
+8248
+8266
+8272
+8273
+8276
+8279
+8298
+8314
+8327
+8330
+8336
+8337
+8368
+8373
+8376
+8391
+8394
+8398
+8402
+8405
+8406
+8411
+8412
+8437
+8441
+8452
+8456
+8470
+8471
+8481
+8484
+8498
+8515
+8518
+8519
+8538
+8539
+8540
+8541
+8565
+8579
+8612
+8632
+8642
+8645
+8655
+8656
+8668
+8670
+8686
+8694
+8701
+8712
+8716
+8728
+8735
+8742
+8750
+8758
+8783
+8788
+8792
+8801
+8802
+8807
+8809
+8818
+8819
+8840
+8851
+8856
+8857
+8898
+8909
+8911
+8913
+8915
+8922
+8928
+8930
+8935
+8942
+8952
+8955
+8961
+8964
+8968
+8972
+8975
+8980
+8986
+8997
+9011
+9029
+9030
+9039
+9046
+9068
+9070
+9079
+9081
+9085
+9101
+9111
+9112
+9132
+9136
+9142
+9153
+9158
+9165
+9177
+9187
+9199
+9217
+9222
+9224
+9227
+9235
+9237
+9238
+9247
+9248
+9261
+9263
+9264
+9270
+9281
+9288
+9296
+9303
+9317
+9320
+9326
+9337
+9339
+9350
+9352
+9367
+9370
+9387
+9393
+9403
+9423
+9443
+9444
+9456
+9467
+9469
+9471
+9473
+9475
+9490
+9492
+9523
+9527
+9539
+9543
+9552
+9559
+9566
+9573
+9575
+9583
+9588
+9609
+9618
+9621
+9630
+9633
+9647
+9662
+9686
+9696
+9708
+9709
+9730
+9742
+9743
+9768
+9772
+9776
+9785
+9800
+9809
+9832
+9837
+9838
+9861
+9862
+9874
+9875
+9877
+9889
+9900
+9910
+9925
+9926
+9933
+9953
+9961
+9967
+9974
+9978
+9979
+9989
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,281 @@
+55
+147
+170
+196
+240
+414
+437
+443
+445
+502
+507
+511
+514
+525
+533
+541
+546
+666
+673
+689
+695
+798
+801
+811
+817
+865
+868
+1024
+1056
+1068
+1108
+1159
+1180
+1201
+1233
+1245
+1349
+1366
+1373
+1455
+1467
+1471
+1489
+1514
+1587
+1589
+1601
+1629
+1665
+1697
+1712
+1729
+1822
+1934
+1941
+1949
+2006
+2108
+2147
+2170
+2172
+2189
+2215
+2259
+2267
+2270
+2313
+2497
+2516
+2571
+2624
+2627
+2695
+2699
+2741
+2743
+2798
+2852
+2890
+2915
+2927
+2941
+2947
+2954
+2967
+2975
+2992
+3011
+3134
+3144
+3186
+3239
+3251
+3254
+3265
+3333
+3345
+3348
+3349
+3379
+3462
+3496
+3497
+3580
+3585
+3588
+3592
+3667
+3673
+3676
+3695
+3696
+3727
+3780
+3791
+3798
+3821
+3847
+3861
+3888
+3892
+3908
+3925
+4007
+4045
+4061
+4125
+4126
+4142
+4177
+4200
+4201
+4239
+4246
+4254
+4282
+4285
+4421
+4441
+4445
+4453
+4456
+4473
+4510
+4533
+4561
+4580
+4583
+4623
+4717
+4834
+4836
+4884
+4915
+4972
+5153
+5157
+5175
+5203
+5232
+5328
+5381
+5445
+5491
+5519
+5532
+5553
+5608
+5647
+5692
+5693
+5719
+5796
+5904
+5943
+5970
+6067
+6110
+6125
+6158
+6165
+6174
+6197
+6304
+6314
+6328
+6382
+6414
+6431
+6574
+6617
+6649
+6652
+6677
+6685
+6739
+6775
+6799
+6804
+6818
+6835
+6864
+6909
+7010
+7049
+7054
+7057
+7121
+7133
+7182
+7212
+7221
+7251
+7270
+7277
+7284
+7335
+7410
+7436
+7473
+7495
+7496
+7497
+7702
+7721
+7769
+7791
+7828
+7829
+7831
+7837
+7840
+7931
+7945
+7950
+7955
+7964
+7972
+7999
+8001
+8023
+8063
+8087
+8125
+8143
+8207
+8268
+8297
+8303
+8390
+8411
+8417
+8445
+8490
+8530
+8673
+8707
+8715
+8725
+8727
+8783
+8839
+8870
+9099
+9193
+9233
+9258
+9271
+9274
+9314
+9354
+9383
+9396
+9418
+9487
+9613
+9743
+9792
+9857
+9927
+9986
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testUnion2D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testUnion2D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2816 @@
+2
+4
+8
+12
+20
+25
+26
+27
+28
+29
+30
+38
+40
+41
+43
+46
+47
+55
+59
+60
+62
+64
+66
+67
+69
+70
+71
+74
+75
+76
+79
+81
+83
+85
+86
+88
+91
+96
+97
+102
+110
+112
+114
+115
+117
+118
+123
+127
+128
+131
+133
+136
+143
+144
+147
+148
+150
+151
+152
+154
+157
+159
+161
+163
+166
+169
+172
+177
+185
+191
+192
+208
+209
+215
+216
+217
+218
+220
+221
+225
+227
+232
+233
+234
+240
+248
+255
+258
+262
+268
+269
+271
+284
+292
+294
+295
+300
+301
+304
+305
+308
+319
+321
+322
+323
+326
+334
+336
+339
+345
+353
+354
+359
+360
+361
+368
+369
+371
+372
+375
+388
+390
+392
+397
+399
+401
+407
+411
+414
+416
+417
+419
+425
+427
+432
+436
+444
+453
+457
+461
+462
+463
+464
+466
+471
+473
+478
+482
+484
+485
+487
+488
+491
+495
+496
+498
+502
+506
+518
+524
+529
+536
+538
+541
+543
+546
+549
+550
+551
+553
+558
+561
+569
+575
+584
+587
+593
+594
+595
+596
+600
+604
+605
+606
+607
+610
+615
+621
+623
+625
+629
+631
+632
+633
+640
+644
+646
+651
+654
+655
+656
+660
+664
+666
+667
+670
+675
+679
+680
+682
+694
+697
+700
+703
+716
+722
+723
+731
+732
+736
+738
+739
+741
+744
+756
+762
+767
+769
+771
+776
+780
+784
+786
+787
+788
+790
+797
+798
+800
+805
+806
+807
+812
+814
+818
+820
+831
+832
+836
+837
+843
+845
+852
+856
+857
+858
+859
+860
+863
+864
+865
+868
+876
+877
+878
+881
+882
+889
+891
+900
+903
+904
+905
+913
+915
+919
+922
+923
+925
+930
+936
+944
+949
+956
+961
+970
+971
+972
+973
+975
+982
+984
+986
+992
+995
+1002
+1004
+1005
+1009
+1010
+1015
+1016
+1017
+1022
+1025
+1029
+1033
+1034
+1035
+1038
+1039
+1043
+1045
+1051
+1075
+1080
+1082
+1091
+1102
+1104
+1105
+1111
+1112
+1115
+1120
+1123
+1128
+1132
+1144
+1145
+1150
+1155
+1157
+1158
+1160
+1161
+1174
+1175
+1176
+1191
+1197
+1201
+1202
+1209
+1217
+1218
+1221
+1223
+1225
+1228
+1235
+1240
+1247
+1255
+1258
+1260
+1261
+1265
+1267
+1279
+1283
+1284
+1287
+1290
+1291
+1293
+1295
+1300
+1303
+1309
+1314
+1317
+1322
+1326
+1335
+1337
+1338
+1344
+1345
+1350
+1351
+1353
+1363
+1364
+1368
+1371
+1373
+1374
+1378
+1380
+1394
+1396
+1401
+1402
+1406
+1411
+1414
+1422
+1427
+1429
+1430
+1434
+1451
+1452
+1455
+1456
+1457
+1464
+1465
+1467
+1470
+1471
+1473
+1476
+1478
+1481
+1488
+1490
+1491
+1492
+1495
+1497
+1498
+1499
+1504
+1506
+1508
+1510
+1512
+1517
+1523
+1527
+1528
+1533
+1534
+1536
+1537
+1540
+1544
+1546
+1551
+1560
+1561
+1565
+1570
+1573
+1584
+1586
+1591
+1594
+1598
+1602
+1604
+1608
+1610
+1615
+1616
+1618
+1620
+1622
+1624
+1630
+1631
+1633
+1639
+1640
+1643
+1648
+1651
+1652
+1656
+1661
+1662
+1663
+1670
+1680
+1682
+1687
+1688
+1694
+1702
+1703
+1709
+1713
+1714
+1715
+1720
+1724
+1730
+1733
+1734
+1739
+1743
+1748
+1756
+1760
+1765
+1768
+1770
+1772
+1773
+1778
+1780
+1782
+1784
+1791
+1792
+1794
+1801
+1802
+1806
+1811
+1815
+1818
+1827
+1829
+1838
+1841
+1845
+1849
+1850
+1852
+1857
+1859
+1860
+1862
+1874
+1875
+1877
+1884
+1885
+1888
+1889
+1890
+1897
+1900
+1909
+1910
+1920
+1939
+1944
+1955
+1957
+1964
+1966
+1974
+1976
+1980
+1981
+1984
+1994
+1995
+1999
+2001
+2002
+2008
+2013
+2015
+2016
+2018
+2020
+2024
+2026
+2028
+2029
+2030
+2037
+2049
+2054
+2055
+2060
+2061
+2065
+2072
+2081
+2084
+2086
+2088
+2092
+2093
+2095
+2097
+2100
+2104
+2105
+2107
+2108
+2109
+2110
+2113
+2119
+2132
+2140
+2141
+2142
+2143
+2144
+2151
+2152
+2155
+2157
+2160
+2161
+2163
+2167
+2170
+2176
+2182
+2183
+2187
+2190
+2191
+2197
+2200
+2201
+2205
+2209
+2210
+2212
+2216
+2220
+2230
+2236
+2239
+2241
+2249
+2251
+2252
+2254
+2256
+2258
+2264
+2265
+2267
+2270
+2271
+2273
+2274
+2278
+2279
+2288
+2289
+2291
+2298
+2303
+2306
+2307
+2309
+2314
+2316
+2319
+2322
+2323
+2332
+2335
+2338
+2351
+2354
+2359
+2362
+2365
+2367
+2368
+2371
+2374
+2380
+2381
+2385
+2389
+2392
+2398
+2399
+2401
+2402
+2404
+2409
+2423
+2426
+2437
+2439
+2443
+2444
+2446
+2449
+2462
+2464
+2469
+2472
+2479
+2488
+2490
+2494
+2497
+2498
+2505
+2508
+2512
+2522
+2523
+2534
+2536
+2538
+2542
+2544
+2548
+2549
+2556
+2557
+2558
+2560
+2563
+2567
+2578
+2581
+2585
+2587
+2593
+2594
+2599
+2601
+2608
+2610
+2611
+2613
+2616
+2619
+2633
+2637
+2638
+2642
+2644
+2647
+2650
+2651
+2653
+2656
+2658
+2662
+2664
+2665
+2667
+2676
+2680
+2681
+2683
+2687
+2688
+2692
+2704
+2707
+2717
+2721
+2724
+2725
+2726
+2729
+2730
+2733
+2745
+2747
+2751
+2754
+2757
+2766
+2774
+2779
+2782
+2783
+2786
+2788
+2795
+2801
+2803
+2805
+2811
+2819
+2824
+2825
+2829
+2833
+2836
+2840
+2841
+2844
+2846
+2847
+2848
+2851
+2855
+2860
+2863
+2869
+2870
+2872
+2873
+2874
+2876
+2877
+2884
+2887
+2889
+2891
+2892
+2899
+2900
+2901
+2905
+2908
+2911
+2912
+2913
+2915
+2916
+2918
+2920
+2925
+2927
+2928
+2935
+2936
+2939
+2943
+2944
+2951
+2959
+2964
+2968
+2969
+2971
+2974
+2977
+2978
+2980
+2983
+2990
+2995
+2996
+2999
+3008
+3009
+3023
+3030
+3031
+3036
+3037
+3040
+3043
+3045
+3049
+3050
+3054
+3056
+3060
+3062
+3068
+3077
+3091
+3095
+3099
+3101
+3108
+3112
+3121
+3123
+3124
+3126
+3130
+3137
+3139
+3141
+3142
+3143
+3146
+3148
+3152
+3160
+3162
+3163
+3166
+3168
+3171
+3174
+3177
+3183
+3187
+3189
+3191
+3192
+3194
+3196
+3198
+3204
+3207
+3208
+3209
+3214
+3221
+3223
+3224
+3227
+3230
+3231
+3241
+3242
+3245
+3251
+3255
+3257
+3258
+3264
+3270
+3274
+3275
+3278
+3280
+3296
+3300
+3304
+3309
+3314
+3316
+3318
+3323
+3336
+3342
+3343
+3344
+3350
+3363
+3372
+3373
+3380
+3389
+3390
+3391
+3392
+3394
+3401
+3405
+3415
+3420
+3423
+3428
+3430
+3432
+3440
+3441
+3443
+3445
+3446
+3451
+3465
+3471
+3474
+3479
+3480
+3482
+3483
+3486
+3500
+3505
+3510
+3518
+3520
+3525
+3526
+3528
+3530
+3533
+3534
+3536
+3537
+3541
+3549
+3551
+3552
+3554
+3562
+3564
+3573
+3587
+3589
+3592
+3596
+3600
+3603
+3604
+3612
+3619
+3621
+3627
+3629
+3630
+3632
+3633
+3640
+3647
+3656
+3662
+3663
+3667
+3670
+3675
+3681
+3682
+3684
+3696
+3698
+3699
+3702
+3704
+3708
+3710
+3715
+3719
+3720
+3721
+3724
+3725
+3729
+3731
+3734
+3735
+3737
+3739
+3744
+3747
+3748
+3749
+3756
+3762
+3770
+3778
+3790
+3797
+3798
+3801
+3810
+3818
+3821
+3823
+3841
+3842
+3846
+3848
+3857
+3860
+3875
+3883
+3892
+3895
+3896
+3901
+3903
+3904
+3906
+3913
+3920
+3921
+3922
+3928
+3935
+3937
+3941
+3946
+3947
+3948
+3952
+3953
+3954
+3963
+3968
+3969
+3970
+3971
+3975
+3976
+3977
+3978
+3984
+3991
+3993
+3999
+4000
+4002
+4005
+4012
+4015
+4016
+4018
+4019
+4022
+4030
+4032
+4035
+4037
+4038
+4041
+4042
+4043
+4054
+4058
+4075
+4077
+4079
+4083
+4089
+4090
+4091
+4092
+4096
+4098
+4107
+4108
+4111
+4112
+4115
+4129
+4131
+4138
+4140
+4143
+4144
+4145
+4159
+4160
+4161
+4163
+4164
+4165
+4171
+4172
+4173
+4186
+4188
+4191
+4195
+4196
+4197
+4198
+4199
+4207
+4209
+4210
+4212
+4215
+4218
+4221
+4227
+4228
+4229
+4238
+4243
+4246
+4249
+4254
+4257
+4258
+4261
+4267
+4271
+4274
+4278
+4279
+4282
+4283
+4287
+4288
+4296
+4298
+4299
+4300
+4301
+4303
+4306
+4307
+4313
+4319
+4321
+4322
+4323
+4325
+4329
+4331
+4336
+4339
+4340
+4341
+4345
+4348
+4358
+4361
+4363
+4364
+4368
+4372
+4373
+4378
+4379
+4380
+4382
+4384
+4388
+4391
+4393
+4400
+4402
+4404
+4405
+4406
+4409
+4410
+4411
+4412
+4414
+4420
+4421
+4422
+4425
+4433
+4436
+4437
+4439
+4440
+4447
+4448
+4451
+4453
+4454
+4456
+4458
+4461
+4463
+4465
+4467
+4482
+4485
+4491
+4509
+4510
+4512
+4517
+4518
+4523
+4528
+4530
+4531
+4539
+4540
+4543
+4544
+4545
+4549
+4554
+4555
+4566
+4567
+4568
+4577
+4586
+4588
+4589
+4590
+4592
+4596
+4604
+4606
+4609
+4618
+4620
+4622
+4626
+4632
+4633
+4636
+4638
+4641
+4644
+4655
+4662
+4663
+4667
+4669
+4675
+4681
+4684
+4688
+4689
+4690
+4701
+4713
+4727
+4731
+4732
+4733
+4735
+4736
+4737
+4743
+4749
+4751
+4753
+4756
+4758
+4766
+4768
+4771
+4774
+4775
+4780
+4781
+4782
+4789
+4790
+4796
+4799
+4803
+4804
+4806
+4809
+4812
+4814
+4815
+4816
+4819
+4820
+4824
+4826
+4828
+4829
+4830
+4835
+4840
+4842
+4844
+4848
+4850
+4852
+4859
+4866
+4867
+4870
+4872
+4877
+4878
+4879
+4880
+4886
+4889
+4893
+4897
+4898
+4899
+4904
+4906
+4910
+4913
+4918
+4920
+4929
+4931
+4935
+4943
+4952
+4956
+4959
+4960
+4962
+4969
+4976
+4979
+4981
+4991
+4994
+4995
+4999
+5000
+5004
+5013
+5015
+5018
+5020
+5021
+5022
+5023
+5024
+5025
+5031
+5032
+5033
+5038
+5052
+5058
+5068
+5069
+5074
+5080
+5084
+5093
+5098
+5099
+5100
+5101
+5102
+5105
+5110
+5111
+5116
+5121
+5123
+5125
+5145
+5150
+5158
+5165
+5166
+5168
+5169
+5172
+5173
+5178
+5188
+5196
+5198
+5207
+5213
+5217
+5219
+5220
+5223
+5228
+5236
+5237
+5242
+5244
+5246
+5249
+5258
+5259
+5261
+5263
+5264
+5265
+5272
+5282
+5283
+5284
+5285
+5286
+5293
+5294
+5297
+5298
+5302
+5306
+5310
+5311
+5312
+5313
+5314
+5316
+5318
+5320
+5323
+5325
+5329
+5332
+5341
+5344
+5349
+5350
+5355
+5356
+5369
+5370
+5379
+5382
+5387
+5388
+5389
+5390
+5391
+5395
+5402
+5403
+5406
+5407
+5409
+5422
+5425
+5430
+5432
+5441
+5447
+5456
+5460
+5468
+5469
+5479
+5486
+5494
+5495
+5496
+5501
+5506
+5509
+5510
+5513
+5514
+5522
+5524
+5526
+5530
+5531
+5542
+5543
+5544
+5545
+5547
+5550
+5557
+5559
+5564
+5567
+5576
+5577
+5578
+5580
+5582
+5585
+5590
+5591
+5597
+5599
+5607
+5608
+5615
+5619
+5620
+5623
+5624
+5631
+5632
+5653
+5654
+5655
+5662
+5664
+5669
+5670
+5674
+5679
+5683
+5687
+5690
+5694
+5695
+5698
+5700
+5703
+5706
+5712
+5718
+5719
+5727
+5732
+5735
+5741
+5744
+5748
+5750
+5754
+5756
+5760
+5761
+5762
+5763
+5766
+5771
+5772
+5773
+5775
+5779
+5780
+5784
+5786
+5790
+5792
+5800
+5803
+5805
+5809
+5811
+5812
+5813
+5817
+5822
+5823
+5831
+5832
+5839
+5840
+5850
+5851
+5853
+5859
+5862
+5865
+5872
+5873
+5874
+5881
+5883
+5885
+5888
+5889
+5896
+5902
+5907
+5916
+5918
+5921
+5925
+5931
+5936
+5938
+5945
+5952
+5956
+5960
+5962
+5968
+5978
+5980
+5987
+5991
+5992
+5993
+5996
+5998
+6004
+6005
+6008
+6011
+6014
+6020
+6027
+6029
+6037
+6038
+6039
+6043
+6047
+6048
+6051
+6060
+6064
+6065
+6068
+6070
+6074
+6083
+6084
+6092
+6101
+6105
+6108
+6113
+6115
+6119
+6122
+6123
+6124
+6134
+6137
+6140
+6143
+6145
+6146
+6150
+6151
+6153
+6154
+6157
+6159
+6161
+6162
+6167
+6168
+6173
+6174
+6176
+6177
+6181
+6182
+6184
+6187
+6192
+6194
+6196
+6197
+6198
+6199
+6200
+6203
+6205
+6206
+6209
+6212
+6213
+6216
+6221
+6226
+6227
+6228
+6231
+6234
+6235
+6237
+6239
+6241
+6245
+6250
+6262
+6264
+6265
+6266
+6267
+6268
+6279
+6282
+6283
+6287
+6298
+6301
+6302
+6304
+6305
+6306
+6314
+6317
+6320
+6323
+6328
+6331
+6332
+6343
+6358
+6359
+6365
+6366
+6369
+6376
+6382
+6385
+6395
+6400
+6401
+6403
+6405
+6411
+6412
+6417
+6422
+6426
+6428
+6437
+6439
+6443
+6449
+6450
+6461
+6465
+6466
+6468
+6472
+6473
+6474
+6480
+6481
+6482
+6483
+6485
+6486
+6487
+6495
+6499
+6502
+6503
+6508
+6511
+6514
+6515
+6516
+6519
+6525
+6527
+6531
+6533
+6536
+6540
+6545
+6549
+6557
+6559
+6562
+6570
+6582
+6583
+6584
+6586
+6589
+6590
+6593
+6603
+6609
+6615
+6616
+6618
+6619
+6621
+6624
+6625
+6626
+6628
+6632
+6643
+6649
+6660
+6668
+6669
+6673
+6674
+6680
+6681
+6682
+6684
+6685
+6693
+6695
+6698
+6699
+6704
+6705
+6710
+6712
+6713
+6716
+6719
+6720
+6721
+6723
+6725
+6730
+6734
+6735
+6741
+6742
+6743
+6745
+6746
+6765
+6770
+6773
+6774
+6775
+6778
+6779
+6796
+6797
+6799
+6800
+6805
+6817
+6819
+6821
+6822
+6830
+6831
+6838
+6841
+6842
+6850
+6855
+6861
+6867
+6868
+6869
+6871
+6877
+6879
+6880
+6881
+6885
+6886
+6891
+6893
+6894
+6905
+6914
+6915
+6920
+6926
+6927
+6928
+6935
+6939
+6940
+6944
+6945
+6946
+6948
+6950
+6951
+6954
+6955
+6959
+6962
+6964
+6967
+6968
+6969
+6971
+6973
+6974
+6987
+6996
+6997
+7001
+7005
+7006
+7010
+7020
+7021
+7024
+7026
+7027
+7035
+7037
+7040
+7044
+7047
+7048
+7052
+7053
+7054
+7065
+7067
+7068
+7075
+7076
+7078
+7081
+7082
+7083
+7084
+7085
+7086
+7090
+7091
+7096
+7097
+7098
+7101
+7102
+7104
+7113
+7117
+7124
+7125
+7127
+7128
+7132
+7136
+7150
+7151
+7152
+7158
+7160
+7162
+7165
+7171
+7180
+7181
+7184
+7185
+7187
+7192
+7195
+7199
+7200
+7206
+7207
+7209
+7211
+7212
+7218
+7221
+7228
+7229
+7232
+7236
+7241
+7242
+7245
+7248
+7251
+7252
+7254
+7255
+7260
+7262
+7263
+7269
+7275
+7282
+7283
+7286
+7289
+7291
+7296
+7299
+7305
+7309
+7313
+7314
+7316
+7323
+7324
+7325
+7326
+7329
+7332
+7335
+7336
+7342
+7345
+7346
+7347
+7348
+7351
+7352
+7353
+7359
+7373
+7377
+7380
+7383
+7387
+7390
+7392
+7394
+7398
+7399
+7401
+7403
+7408
+7411
+7413
+7414
+7416
+7417
+7419
+7422
+7424
+7427
+7437
+7441
+7448
+7453
+7457
+7458
+7459
+7461
+7464
+7467
+7469
+7471
+7472
+7481
+7486
+7491
+7498
+7501
+7502
+7508
+7509
+7511
+7512
+7516
+7517
+7519
+7521
+7522
+7532
+7534
+7539
+7541
+7544
+7553
+7555
+7561
+7568
+7570
+7575
+7577
+7580
+7586
+7587
+7588
+7591
+7598
+7601
+7605
+7607
+7611
+7613
+7615
+7625
+7626
+7628
+7629
+7630
+7633
+7634
+7637
+7638
+7650
+7652
+7654
+7656
+7657
+7664
+7669
+7673
+7676
+7680
+7684
+7685
+7687
+7690
+7692
+7695
+7701
+7707
+7709
+7713
+7714
+7719
+7720
+7724
+7727
+7729
+7730
+7736
+7740
+7742
+7743
+7744
+7746
+7749
+7750
+7754
+7755
+7761
+7762
+7764
+7775
+7790
+7794
+7795
+7796
+7799
+7804
+7805
+7811
+7813
+7814
+7816
+7817
+7822
+7825
+7832
+7837
+7844
+7847
+7848
+7855
+7857
+7861
+7864
+7871
+7872
+7876
+7882
+7884
+7889
+7893
+7899
+7902
+7903
+7905
+7912
+7917
+7920
+7921
+7930
+7933
+7937
+7943
+7948
+7951
+7952
+7954
+7955
+7957
+7958
+7967
+7968
+7973
+7975
+7976
+7977
+7981
+7985
+7986
+7992
+7995
+7997
+8000
+8003
+8007
+8013
+8019
+8022
+8033
+8037
+8038
+8039
+8040
+8041
+8045
+8055
+8056
+8057
+8058
+8059
+8063
+8064
+8069
+8070
+8071
+8072
+8074
+8075
+8076
+8079
+8086
+8094
+8099
+8100
+8103
+8105
+8106
+8108
+8112
+8113
+8117
+8118
+8120
+8121
+8122
+8126
+8129
+8131
+8136
+8145
+8147
+8152
+8156
+8157
+8158
+8159
+8160
+8165
+8168
+8169
+8173
+8174
+8179
+8183
+8187
+8191
+8193
+8198
+8199
+8206
+8213
+8217
+8222
+8226
+8228
+8237
+8239
+8242
+8248
+8252
+8254
+8255
+8262
+8266
+8267
+8272
+8273
+8278
+8279
+8282
+8291
+8295
+8297
+8298
+8299
+8300
+8308
+8314
+8319
+8323
+8324
+8327
+8328
+8330
+8331
+8335
+8336
+8337
+8339
+8350
+8352
+8354
+8355
+8360
+8368
+8372
+8373
+8374
+8376
+8377
+8379
+8382
+8384
+8386
+8389
+8390
+8391
+8398
+8403
+8405
+8406
+8411
+8412
+8416
+8422
+8425
+8426
+8428
+8430
+8437
+8438
+8441
+8442
+8446
+8449
+8451
+8456
+8458
+8465
+8466
+8470
+8471
+8474
+8475
+8476
+8481
+8484
+8486
+8491
+8498
+8499
+8501
+8502
+8510
+8512
+8514
+8515
+8516
+8518
+8519
+8524
+8526
+8538
+8539
+8540
+8545
+8558
+8559
+8563
+8565
+8567
+8569
+8572
+8579
+8585
+8604
+8612
+8615
+8616
+8618
+8619
+8621
+8629
+8630
+8632
+8636
+8642
+8651
+8655
+8656
+8659
+8660
+8668
+8670
+8677
+8683
+8685
+8686
+8688
+8689
+8690
+8694
+8699
+8704
+8705
+8709
+8710
+8712
+8716
+8717
+8719
+8721
+8723
+8726
+8728
+8730
+8740
+8742
+8748
+8750
+8752
+8758
+8766
+8776
+8783
+8784
+8785
+8792
+8796
+8798
+8801
+8802
+8807
+8809
+8810
+8813
+8814
+8817
+8818
+8819
+8828
+8831
+8837
+8839
+8840
+8845
+8847
+8849
+8851
+8852
+8855
+8856
+8857
+8864
+8866
+8874
+8878
+8880
+8881
+8883
+8891
+8898
+8904
+8909
+8910
+8915
+8918
+8919
+8921
+8922
+8927
+8928
+8931
+8933
+8934
+8935
+8940
+8942
+8945
+8947
+8949
+8955
+8961
+8964
+8968
+8975
+8976
+8978
+8980
+8982
+8989
+8997
+8998
+9003
+9004
+9008
+9011
+9015
+9016
+9029
+9030
+9037
+9038
+9039
+9041
+9046
+9050
+9054
+9058
+9066
+9068
+9069
+9070
+9081
+9085
+9091
+9092
+9101
+9104
+9111
+9113
+9118
+9125
+9129
+9131
+9132
+9135
+9136
+9142
+9145
+9149
+9153
+9155
+9158
+9159
+9163
+9164
+9171
+9177
+9188
+9208
+9209
+9212
+9215
+9217
+9218
+9221
+9222
+9227
+9232
+9233
+9235
+9238
+9239
+9241
+9243
+9248
+9249
+9252
+9253
+9254
+9259
+9260
+9263
+9264
+9269
+9270
+9271
+9276
+9280
+9281
+9288
+9291
+9293
+9296
+9302
+9303
+9304
+9308
+9312
+9314
+9316
+9320
+9321
+9326
+9337
+9338
+9339
+9340
+9346
+9347
+9348
+9349
+9350
+9352
+9356
+9357
+9358
+9365
+9370
+9371
+9385
+9386
+9387
+9392
+9393
+9398
+9399
+9411
+9412
+9415
+9416
+9438
+9439
+9443
+9444
+9448
+9455
+9462
+9463
+9467
+9468
+9469
+9470
+9474
+9475
+9476
+9479
+9486
+9487
+9490
+9493
+9497
+9498
+9499
+9501
+9504
+9505
+9508
+9509
+9510
+9523
+9528
+9531
+9541
+9542
+9543
+9551
+9559
+9566
+9571
+9575
+9576
+9577
+9579
+9583
+9584
+9585
+9586
+9588
+9590
+9591
+9595
+9599
+9604
+9605
+9612
+9621
+9624
+9629
+9630
+9633
+9634
+9638
+9642
+9646
+9647
+9649
+9654
+9658
+9661
+9662
+9665
+9673
+9676
+9678
+9685
+9686
+9688
+9689
+9693
+9696
+9702
+9708
+9709
+9713
+9718
+9721
+9723
+9724
+9728
+9737
+9742
+9743
+9745
+9754
+9756
+9758
+9764
+9767
+9768
+9772
+9776
+9780
+9781
+9785
+9786
+9787
+9788
+9794
+9800
+9803
+9809
+9818
+9825
+9826
+9827
+9831
+9832
+9834
+9835
+9837
+9844
+9855
+9861
+9862
+9868
+9869
+9870
+9874
+9875
+9877
+9878
+9880
+9883
+9889
+9898
+9899
+9900
+9905
+9909
+9914
+9918
+9925
+9926
+9930
+9936
+9939
+9940
+9944
+9947
+9950
+9952
+9953
+9960
+9961
+9967
+9968
+9972
+9974
+9978
+9979
+9980
+9986
+9987
+9989
+9992
+9994
+9998
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,7184 @@
+0
+1
+3
+5
+6
+7
+9
+10
+11
+13
+14
+15
+16
+17
+18
+19
+21
+22
+23
+24
+31
+32
+33
+34
+35
+36
+37
+39
+42
+44
+45
+48
+49
+50
+51
+52
+53
+54
+56
+57
+58
+61
+63
+65
+68
+72
+73
+77
+78
+80
+82
+84
+87
+89
+90
+92
+93
+94
+95
+98
+99
+100
+101
+103
+104
+105
+106
+107
+108
+109
+111
+113
+116
+119
+120
+121
+122
+124
+125
+126
+129
+130
+132
+134
+135
+137
+138
+139
+140
+141
+142
+145
+146
+149
+153
+155
+156
+158
+160
+162
+164
+165
+167
+168
+170
+171
+173
+174
+175
+176
+178
+179
+180
+181
+182
+183
+184
+186
+187
+188
+189
+190
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+210
+211
+212
+213
+214
+219
+222
+223
+224
+226
+228
+229
+230
+231
+235
+236
+237
+238
+239
+241
+242
+243
+244
+245
+246
+247
+249
+250
+251
+252
+253
+254
+256
+257
+259
+260
+261
+263
+264
+265
+266
+267
+270
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+285
+286
+287
+288
+289
+290
+291
+293
+296
+297
+298
+299
+302
+303
+306
+307
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+320
+324
+325
+327
+328
+329
+330
+331
+332
+333
+335
+337
+338
+340
+341
+342
+343
+344
+346
+347
+348
+349
+350
+351
+352
+355
+356
+357
+358
+362
+363
+364
+365
+366
+367
+370
+373
+374
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+389
+391
+393
+394
+395
+396
+398
+400
+402
+403
+404
+405
+406
+408
+409
+410
+412
+413
+415
+418
+420
+421
+422
+423
+424
+426
+428
+429
+430
+431
+433
+434
+435
+437
+438
+439
+440
+441
+442
+443
+445
+446
+447
+448
+449
+450
+451
+452
+454
+455
+456
+458
+459
+460
+465
+467
+468
+469
+470
+472
+474
+475
+476
+477
+479
+480
+481
+483
+486
+489
+490
+492
+493
+494
+497
+499
+500
+501
+503
+504
+505
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+519
+520
+521
+522
+523
+525
+526
+527
+528
+530
+531
+532
+533
+534
+535
+537
+539
+540
+542
+544
+545
+547
+548
+552
+554
+555
+556
+557
+559
+560
+562
+563
+564
+565
+566
+567
+568
+570
+571
+572
+573
+574
+576
+577
+578
+579
+580
+581
+582
+583
+585
+586
+588
+589
+590
+591
+592
+597
+598
+599
+601
+602
+603
+608
+609
+611
+612
+613
+614
+616
+617
+618
+619
+620
+622
+624
+626
+627
+628
+630
+634
+635
+636
+637
+638
+639
+641
+642
+643
+645
+647
+648
+649
+650
+652
+653
+657
+658
+659
+661
+662
+663
+665
+668
+669
+671
+672
+673
+674
+676
+677
+678
+681
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+695
+696
+698
+699
+701
+702
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+717
+718
+719
+720
+721
+724
+725
+726
+727
+728
+729
+730
+733
+734
+735
+737
+740
+742
+743
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+757
+758
+759
+760
+761
+763
+764
+765
+766
+768
+770
+772
+773
+774
+775
+777
+778
+779
+781
+782
+783
+785
+789
+791
+792
+793
+794
+795
+796
+799
+801
+802
+803
+804
+808
+809
+810
+811
+813
+815
+816
+817
+819
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+833
+834
+835
+838
+839
+840
+841
+842
+844
+846
+847
+848
+849
+850
+851
+853
+854
+855
+861
+862
+866
+867
+869
+870
+871
+872
+873
+874
+875
+879
+880
+883
+884
+885
+886
+887
+888
+890
+892
+893
+894
+895
+896
+897
+898
+899
+901
+902
+906
+907
+908
+909
+910
+911
+912
+914
+916
+917
+918
+920
+921
+924
+926
+927
+928
+929
+931
+932
+933
+934
+935
+937
+938
+939
+940
+941
+942
+943
+945
+946
+947
+948
+950
+951
+952
+953
+954
+955
+957
+958
+959
+960
+962
+963
+964
+965
+966
+967
+968
+969
+974
+976
+977
+978
+979
+980
+981
+983
+985
+987
+988
+989
+990
+991
+993
+994
+996
+997
+998
+999
+1000
+1001
+1003
+1006
+1007
+1008
+1011
+1012
+1013
+1014
+1018
+1019
+1020
+1021
+1023
+1024
+1026
+1027
+1028
+1030
+1031
+1032
+1036
+1037
+1040
+1041
+1042
+1044
+1046
+1047
+1048
+1049
+1050
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1076
+1077
+1078
+1079
+1081
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1103
+1106
+1107
+1108
+1109
+1110
+1113
+1114
+1116
+1117
+1118
+1119
+1121
+1122
+1124
+1125
+1126
+1127
+1129
+1130
+1131
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1146
+1147
+1148
+1149
+1151
+1152
+1153
+1154
+1156
+1159
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1192
+1193
+1194
+1195
+1196
+1198
+1199
+1200
+1203
+1204
+1205
+1206
+1207
+1208
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1219
+1220
+1222
+1224
+1226
+1227
+1229
+1230
+1231
+1232
+1233
+1234
+1236
+1237
+1238
+1239
+1241
+1242
+1243
+1244
+1245
+1246
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1256
+1257
+1259
+1262
+1263
+1264
+1266
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1280
+1281
+1282
+1285
+1286
+1288
+1289
+1292
+1294
+1296
+1297
+1298
+1299
+1301
+1302
+1304
+1305
+1306
+1307
+1308
+1310
+1311
+1312
+1313
+1315
+1316
+1318
+1319
+1320
+1321
+1323
+1324
+1325
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1336
+1339
+1340
+1341
+1342
+1343
+1346
+1347
+1348
+1349
+1352
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1365
+1366
+1367
+1369
+1370
+1372
+1375
+1376
+1377
+1379
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1395
+1397
+1398
+1399
+1400
+1403
+1404
+1405
+1407
+1408
+1409
+1410
+1412
+1413
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1423
+1424
+1425
+1426
+1428
+1431
+1432
+1433
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1453
+1454
+1458
+1459
+1460
+1461
+1462
+1463
+1466
+1468
+1469
+1472
+1474
+1475
+1477
+1479
+1480
+1482
+1483
+1484
+1485
+1486
+1487
+1489
+1493
+1494
+1496
+1500
+1501
+1502
+1503
+1505
+1507
+1509
+1511
+1513
+1514
+1515
+1516
+1518
+1519
+1520
+1521
+1522
+1524
+1525
+1526
+1529
+1530
+1531
+1532
+1535
+1538
+1539
+1541
+1542
+1543
+1545
+1547
+1548
+1549
+1550
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1562
+1563
+1564
+1566
+1567
+1568
+1569
+1571
+1572
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1585
+1587
+1588
+1589
+1590
+1592
+1593
+1595
+1596
+1597
+1599
+1600
+1601
+1603
+1605
+1606
+1607
+1609
+1611
+1612
+1613
+1614
+1617
+1619
+1621
+1623
+1625
+1626
+1627
+1628
+1629
+1632
+1634
+1635
+1636
+1637
+1638
+1641
+1642
+1644
+1645
+1646
+1647
+1649
+1650
+1653
+1654
+1655
+1657
+1658
+1659
+1660
+1664
+1665
+1666
+1667
+1668
+1669
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1681
+1683
+1684
+1685
+1686
+1689
+1690
+1691
+1692
+1693
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1704
+1705
+1706
+1707
+1708
+1710
+1711
+1712
+1716
+1717
+1718
+1719
+1721
+1722
+1723
+1725
+1726
+1727
+1728
+1729
+1731
+1732
+1735
+1736
+1737
+1738
+1740
+1741
+1742
+1744
+1745
+1746
+1747
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1757
+1758
+1759
+1761
+1762
+1763
+1764
+1766
+1767
+1769
+1771
+1774
+1775
+1776
+1777
+1779
+1781
+1783
+1785
+1786
+1787
+1788
+1789
+1790
+1793
+1795
+1796
+1797
+1798
+1799
+1800
+1803
+1804
+1805
+1807
+1808
+1809
+1810
+1812
+1813
+1814
+1816
+1817
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1828
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1839
+1840
+1842
+1843
+1844
+1846
+1847
+1848
+1851
+1853
+1854
+1855
+1856
+1858
+1861
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1876
+1878
+1879
+1880
+1881
+1882
+1883
+1886
+1887
+1891
+1892
+1893
+1894
+1895
+1896
+1898
+1899
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1940
+1941
+1942
+1943
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1956
+1958
+1959
+1960
+1961
+1962
+1963
+1965
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1975
+1977
+1978
+1979
+1982
+1983
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1996
+1997
+1998
+2000
+2003
+2004
+2005
+2006
+2007
+2009
+2010
+2011
+2012
+2014
+2017
+2019
+2021
+2022
+2023
+2025
+2027
+2031
+2032
+2033
+2034
+2035
+2036
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2050
+2051
+2052
+2053
+2056
+2057
+2058
+2059
+2062
+2063
+2064
+2066
+2067
+2068
+2069
+2070
+2071
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2082
+2083
+2085
+2087
+2089
+2090
+2091
+2094
+2096
+2098
+2099
+2101
+2102
+2103
+2106
+2111
+2112
+2114
+2115
+2116
+2117
+2118
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2145
+2146
+2147
+2148
+2149
+2150
+2153
+2154
+2156
+2158
+2159
+2162
+2164
+2165
+2166
+2168
+2169
+2171
+2172
+2173
+2174
+2175
+2177
+2178
+2179
+2180
+2181
+2184
+2185
+2186
+2188
+2189
+2192
+2193
+2194
+2195
+2196
+2198
+2199
+2202
+2203
+2204
+2206
+2207
+2208
+2211
+2213
+2214
+2215
+2217
+2218
+2219
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2231
+2232
+2233
+2234
+2235
+2237
+2238
+2240
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2250
+2253
+2255
+2257
+2259
+2260
+2261
+2262
+2263
+2266
+2268
+2269
+2272
+2275
+2276
+2277
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2290
+2292
+2293
+2294
+2295
+2296
+2297
+2299
+2300
+2301
+2302
+2304
+2305
+2308
+2310
+2311
+2312
+2313
+2315
+2317
+2318
+2320
+2321
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2333
+2334
+2336
+2337
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2352
+2353
+2355
+2356
+2357
+2358
+2360
+2361
+2363
+2364
+2366
+2369
+2370
+2372
+2373
+2375
+2376
+2377
+2378
+2379
+2382
+2383
+2384
+2386
+2387
+2388
+2390
+2391
+2393
+2394
+2395
+2396
+2397
+2400
+2403
+2405
+2406
+2407
+2408
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2424
+2425
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2438
+2440
+2441
+2442
+2445
+2447
+2448
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2463
+2465
+2466
+2467
+2468
+2470
+2471
+2473
+2474
+2475
+2476
+2477
+2478
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2489
+2491
+2492
+2493
+2495
+2496
+2499
+2500
+2501
+2502
+2503
+2504
+2506
+2507
+2509
+2510
+2511
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2535
+2537
+2539
+2540
+2541
+2543
+2545
+2546
+2547
+2550
+2551
+2552
+2553
+2554
+2555
+2559
+2561
+2562
+2564
+2565
+2566
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2579
+2580
+2582
+2583
+2584
+2586
+2588
+2589
+2590
+2591
+2592
+2595
+2596
+2597
+2598
+2600
+2602
+2603
+2604
+2605
+2606
+2607
+2609
+2612
+2614
+2615
+2617
+2618
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2634
+2635
+2636
+2639
+2640
+2641
+2643
+2645
+2646
+2648
+2649
+2652
+2654
+2655
+2657
+2659
+2660
+2661
+2663
+2666
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2677
+2678
+2679
+2682
+2684
+2685
+2686
+2689
+2690
+2691
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2705
+2706
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2718
+2719
+2720
+2722
+2723
+2727
+2728
+2731
+2732
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2746
+2748
+2749
+2750
+2752
+2753
+2755
+2756
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2775
+2776
+2777
+2778
+2780
+2781
+2784
+2785
+2787
+2789
+2790
+2791
+2792
+2793
+2794
+2796
+2797
+2798
+2799
+2800
+2802
+2804
+2806
+2807
+2808
+2809
+2810
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2820
+2821
+2822
+2823
+2826
+2827
+2828
+2830
+2831
+2832
+2834
+2835
+2837
+2838
+2839
+2842
+2843
+2845
+2849
+2850
+2852
+2853
+2854
+2856
+2857
+2858
+2859
+2861
+2862
+2864
+2865
+2866
+2867
+2868
+2871
+2875
+2878
+2879
+2880
+2881
+2882
+2883
+2885
+2886
+2888
+2890
+2893
+2894
+2895
+2896
+2897
+2898
+2902
+2903
+2904
+2906
+2907
+2909
+2910
+2914
+2917
+2919
+2921
+2922
+2923
+2924
+2926
+2929
+2930
+2931
+2932
+2933
+2934
+2937
+2938
+2940
+2941
+2942
+2945
+2946
+2947
+2948
+2949
+2950
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2960
+2961
+2962
+2963
+2965
+2966
+2967
+2970
+2972
+2973
+2975
+2976
+2979
+2981
+2982
+2984
+2985
+2986
+2987
+2988
+2989
+2991
+2992
+2993
+2994
+2997
+2998
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3024
+3025
+3026
+3027
+3028
+3029
+3032
+3033
+3034
+3035
+3038
+3039
+3041
+3042
+3044
+3046
+3047
+3048
+3051
+3052
+3053
+3055
+3057
+3058
+3059
+3061
+3063
+3064
+3065
+3066
+3067
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3092
+3093
+3094
+3096
+3097
+3098
+3100
+3102
+3103
+3104
+3105
+3106
+3107
+3109
+3110
+3111
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3122
+3125
+3127
+3128
+3129
+3131
+3132
+3133
+3134
+3135
+3136
+3138
+3140
+3144
+3145
+3147
+3149
+3150
+3151
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3161
+3164
+3165
+3167
+3169
+3170
+3172
+3173
+3175
+3176
+3178
+3179
+3180
+3181
+3182
+3184
+3185
+3186
+3188
+3190
+3193
+3195
+3197
+3199
+3200
+3201
+3202
+3203
+3205
+3206
+3210
+3211
+3212
+3213
+3215
+3216
+3217
+3218
+3219
+3220
+3222
+3225
+3226
+3228
+3229
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3243
+3244
+3246
+3247
+3248
+3249
+3250
+3252
+3253
+3254
+3256
+3259
+3260
+3261
+3262
+3263
+3265
+3266
+3267
+3268
+3269
+3271
+3272
+3273
+3276
+3277
+3279
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3297
+3298
+3299
+3301
+3302
+3303
+3305
+3306
+3307
+3308
+3310
+3311
+3312
+3313
+3315
+3317
+3319
+3320
+3321
+3322
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3337
+3338
+3339
+3340
+3341
+3345
+3346
+3347
+3348
+3349
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3374
+3375
+3376
+3377
+3378
+3379
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3393
+3395
+3396
+3397
+3398
+3399
+3400
+3402
+3403
+3404
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3416
+3417
+3418
+3419
+3421
+3422
+3424
+3425
+3426
+3427
+3429
+3431
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3442
+3444
+3447
+3448
+3449
+3450
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3466
+3467
+3468
+3469
+3470
+3472
+3473
+3475
+3476
+3477
+3478
+3481
+3484
+3485
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3501
+3502
+3503
+3504
+3506
+3507
+3508
+3509
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3519
+3521
+3522
+3523
+3524
+3527
+3529
+3531
+3532
+3535
+3538
+3539
+3540
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3550
+3553
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3563
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3588
+3590
+3591
+3593
+3594
+3595
+3597
+3598
+3599
+3601
+3602
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3613
+3614
+3615
+3616
+3617
+3618
+3620
+3622
+3623
+3624
+3625
+3626
+3628
+3631
+3634
+3635
+3636
+3637
+3638
+3639
+3641
+3642
+3643
+3644
+3645
+3646
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3657
+3658
+3659
+3660
+3661
+3664
+3665
+3666
+3668
+3669
+3671
+3672
+3673
+3674
+3676
+3677
+3678
+3679
+3680
+3683
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3697
+3700
+3701
+3703
+3705
+3706
+3707
+3709
+3711
+3712
+3713
+3714
+3716
+3717
+3718
+3722
+3723
+3726
+3727
+3728
+3730
+3732
+3733
+3736
+3738
+3740
+3741
+3742
+3743
+3745
+3746
+3750
+3751
+3752
+3753
+3754
+3755
+3757
+3758
+3759
+3760
+3761
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3791
+3792
+3793
+3794
+3795
+3796
+3799
+3800
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3819
+3820
+3822
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3843
+3844
+3845
+3847
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3858
+3859
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3893
+3894
+3897
+3898
+3899
+3900
+3902
+3905
+3907
+3908
+3909
+3910
+3911
+3912
+3914
+3915
+3916
+3917
+3918
+3919
+3923
+3924
+3925
+3926
+3927
+3929
+3930
+3931
+3932
+3933
+3934
+3936
+3938
+3939
+3940
+3942
+3943
+3944
+3945
+3949
+3950
+3951
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3964
+3965
+3966
+3967
+3972
+3973
+3974
+3979
+3980
+3981
+3982
+3983
+3985
+3986
+3987
+3988
+3989
+3990
+3992
+3994
+3995
+3996
+3997
+3998
+4001
+4003
+4004
+4006
+4007
+4008
+4009
+4010
+4011
+4013
+4014
+4017
+4020
+4021
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4031
+4033
+4034
+4036
+4039
+4040
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4055
+4056
+4057
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4076
+4078
+4080
+4081
+4082
+4084
+4085
+4086
+4087
+4088
+4093
+4094
+4095
+4097
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4109
+4110
+4113
+4114
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4130
+4132
+4133
+4134
+4135
+4136
+4137
+4139
+4141
+4142
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4162
+4166
+4167
+4168
+4169
+4170
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4187
+4189
+4190
+4192
+4193
+4194
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4208
+4211
+4213
+4214
+4216
+4217
+4219
+4220
+4222
+4223
+4224
+4225
+4226
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4239
+4240
+4241
+4242
+4244
+4245
+4247
+4248
+4250
+4251
+4252
+4253
+4255
+4256
+4259
+4260
+4262
+4263
+4264
+4265
+4266
+4268
+4269
+4270
+4272
+4273
+4275
+4276
+4277
+4280
+4281
+4284
+4285
+4286
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4297
+4302
+4304
+4305
+4308
+4309
+4310
+4311
+4312
+4314
+4315
+4316
+4317
+4318
+4320
+4324
+4326
+4327
+4328
+4330
+4332
+4333
+4334
+4335
+4337
+4338
+4342
+4343
+4344
+4346
+4347
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4359
+4360
+4362
+4365
+4366
+4367
+4369
+4370
+4371
+4374
+4375
+4376
+4377
+4381
+4383
+4385
+4386
+4387
+4389
+4390
+4392
+4394
+4395
+4396
+4397
+4398
+4399
+4401
+4403
+4407
+4408
+4413
+4415
+4416
+4417
+4418
+4419
+4423
+4424
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4434
+4435
+4438
+4441
+4442
+4443
+4444
+4445
+4446
+4449
+4450
+4452
+4455
+4457
+4459
+4460
+4462
+4464
+4466
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4483
+4484
+4486
+4487
+4488
+4489
+4490
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4511
+4513
+4514
+4515
+4516
+4519
+4520
+4521
+4522
+4524
+4525
+4526
+4527
+4529
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4541
+4542
+4546
+4547
+4548
+4550
+4551
+4552
+4553
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4587
+4591
+4593
+4594
+4595
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4605
+4607
+4608
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4619
+4621
+4623
+4624
+4625
+4627
+4628
+4629
+4630
+4631
+4634
+4635
+4637
+4639
+4640
+4642
+4643
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4656
+4657
+4658
+4659
+4660
+4661
+4664
+4665
+4666
+4668
+4670
+4671
+4672
+4673
+4674
+4676
+4677
+4678
+4679
+4680
+4682
+4683
+4685
+4686
+4687
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4728
+4729
+4730
+4734
+4738
+4739
+4740
+4741
+4742
+4744
+4745
+4746
+4747
+4748
+4750
+4752
+4754
+4755
+4757
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4767
+4769
+4770
+4772
+4773
+4776
+4777
+4778
+4779
+4783
+4784
+4785
+4786
+4787
+4788
+4791
+4792
+4793
+4794
+4795
+4797
+4798
+4800
+4801
+4802
+4805
+4807
+4808
+4810
+4811
+4813
+4817
+4818
+4821
+4822
+4823
+4825
+4827
+4831
+4832
+4833
+4834
+4836
+4837
+4838
+4839
+4841
+4843
+4845
+4846
+4847
+4849
+4851
+4853
+4854
+4855
+4856
+4857
+4858
+4860
+4861
+4862
+4863
+4864
+4865
+4868
+4869
+4871
+4873
+4874
+4875
+4876
+4881
+4882
+4883
+4884
+4885
+4887
+4888
+4890
+4891
+4892
+4894
+4895
+4896
+4900
+4901
+4902
+4903
+4905
+4907
+4908
+4909
+4911
+4912
+4914
+4915
+4916
+4917
+4919
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4930
+4932
+4933
+4934
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4953
+4954
+4955
+4957
+4958
+4961
+4963
+4964
+4965
+4966
+4967
+4968
+4970
+4971
+4972
+4973
+4974
+4975
+4977
+4978
+4980
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4992
+4993
+4996
+4997
+4998
+5001
+5002
+5003
+5005
+5006
+5007
+5008
+5009
+5010
+5011
+5012
+5014
+5016
+5017
+5019
+5026
+5027
+5028
+5029
+5030
+5034
+5035
+5036
+5037
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5050
+5051
+5053
+5054
+5055
+5056
+5057
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5070
+5071
+5072
+5073
+5075
+5076
+5077
+5078
+5079
+5081
+5082
+5083
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5094
+5095
+5096
+5097
+5103
+5104
+5106
+5107
+5108
+5109
+5112
+5113
+5114
+5115
+5117
+5118
+5119
+5120
+5122
+5124
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5142
+5143
+5144
+5146
+5147
+5148
+5149
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5159
+5160
+5161
+5162
+5163
+5164
+5167
+5170
+5171
+5174
+5175
+5176
+5177
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5197
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5208
+5209
+5210
+5211
+5212
+5214
+5215
+5216
+5218
+5221
+5222
+5224
+5225
+5226
+5227
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5238
+5239
+5240
+5241
+5243
+5245
+5247
+5248
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5260
+5262
+5266
+5267
+5268
+5269
+5270
+5271
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5287
+5288
+5289
+5290
+5291
+5292
+5295
+5296
+5299
+5300
+5301
+5303
+5304
+5305
+5307
+5308
+5309
+5315
+5317
+5319
+5321
+5322
+5324
+5326
+5327
+5328
+5330
+5331
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5342
+5343
+5345
+5346
+5347
+5348
+5351
+5352
+5353
+5354
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5380
+5381
+5383
+5384
+5385
+5386
+5392
+5393
+5394
+5396
+5397
+5398
+5399
+5400
+5401
+5404
+5405
+5408
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5423
+5424
+5426
+5427
+5428
+5429
+5431
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5442
+5443
+5444
+5445
+5446
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5457
+5458
+5459
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5480
+5481
+5482
+5483
+5484
+5485
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5497
+5498
+5499
+5500
+5502
+5503
+5504
+5505
+5507
+5508
+5511
+5512
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5523
+5525
+5527
+5528
+5529
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5546
+5548
+5549
+5551
+5552
+5553
+5554
+5555
+5556
+5558
+5560
+5561
+5562
+5563
+5565
+5566
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5579
+5581
+5583
+5584
+5586
+5587
+5588
+5589
+5592
+5593
+5594
+5595
+5596
+5598
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5609
+5610
+5611
+5612
+5613
+5614
+5616
+5617
+5618
+5621
+5622
+5625
+5626
+5627
+5628
+5629
+5630
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5656
+5657
+5658
+5659
+5660
+5661
+5663
+5665
+5666
+5667
+5668
+5671
+5672
+5673
+5675
+5676
+5677
+5678
+5680
+5681
+5682
+5684
+5685
+5686
+5688
+5689
+5691
+5692
+5693
+5696
+5697
+5699
+5701
+5702
+5704
+5705
+5707
+5708
+5709
+5710
+5711
+5713
+5714
+5715
+5716
+5717
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5728
+5729
+5730
+5731
+5733
+5734
+5736
+5737
+5738
+5739
+5740
+5742
+5743
+5745
+5746
+5747
+5749
+5751
+5752
+5753
+5755
+5757
+5758
+5759
+5764
+5765
+5767
+5768
+5769
+5770
+5774
+5776
+5777
+5778
+5781
+5782
+5783
+5785
+5787
+5788
+5789
+5791
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5801
+5802
+5804
+5806
+5807
+5808
+5810
+5814
+5815
+5816
+5818
+5819
+5820
+5821
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5833
+5834
+5835
+5836
+5837
+5838
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5852
+5854
+5855
+5856
+5857
+5858
+5860
+5861
+5863
+5864
+5866
+5867
+5868
+5869
+5870
+5871
+5875
+5876
+5877
+5878
+5879
+5880
+5882
+5884
+5886
+5887
+5890
+5891
+5892
+5893
+5894
+5895
+5897
+5898
+5899
+5900
+5901
+5903
+5904
+5905
+5906
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5917
+5919
+5920
+5922
+5923
+5924
+5926
+5927
+5928
+5929
+5930
+5932
+5933
+5934
+5935
+5937
+5939
+5940
+5941
+5942
+5943
+5944
+5946
+5947
+5948
+5949
+5950
+5951
+5953
+5954
+5955
+5957
+5958
+5959
+5961
+5963
+5964
+5965
+5966
+5967
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5979
+5981
+5982
+5983
+5984
+5985
+5986
+5988
+5989
+5990
+5994
+5995
+5997
+5999
+6000
+6001
+6002
+6003
+6006
+6007
+6009
+6010
+6012
+6013
+6015
+6016
+6017
+6018
+6019
+6021
+6022
+6023
+6024
+6025
+6026
+6028
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6040
+6041
+6042
+6044
+6045
+6046
+6049
+6050
+6052
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6061
+6062
+6063
+6066
+6067
+6069
+6071
+6072
+6073
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6085
+6086
+6087
+6088
+6089
+6090
+6091
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6102
+6103
+6104
+6106
+6107
+6109
+6110
+6111
+6112
+6114
+6116
+6117
+6118
+6120
+6121
+6125
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6135
+6136
+6138
+6139
+6141
+6142
+6144
+6147
+6148
+6149
+6152
+6155
+6156
+6158
+6160
+6163
+6164
+6165
+6166
+6169
+6170
+6171
+6172
+6175
+6178
+6179
+6180
+6183
+6185
+6186
+6188
+6189
+6190
+6191
+6193
+6195
+6201
+6202
+6204
+6207
+6208
+6210
+6211
+6214
+6215
+6217
+6218
+6219
+6220
+6222
+6223
+6224
+6225
+6229
+6230
+6232
+6233
+6236
+6238
+6240
+6242
+6243
+6244
+6246
+6247
+6248
+6249
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6259
+6260
+6261
+6263
+6269
+6270
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6280
+6281
+6284
+6285
+6286
+6288
+6289
+6290
+6291
+6292
+6293
+6294
+6295
+6296
+6297
+6299
+6300
+6303
+6307
+6308
+6309
+6310
+6311
+6312
+6313
+6315
+6316
+6318
+6319
+6321
+6322
+6324
+6325
+6326
+6327
+6329
+6330
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6360
+6361
+6362
+6363
+6364
+6367
+6368
+6370
+6371
+6372
+6373
+6374
+6375
+6377
+6378
+6379
+6380
+6381
+6383
+6384
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6396
+6397
+6398
+6399
+6402
+6404
+6406
+6407
+6408
+6409
+6410
+6413
+6414
+6415
+6416
+6418
+6419
+6420
+6421
+6423
+6424
+6425
+6427
+6429
+6430
+6431
+6432
+6433
+6434
+6435
+6436
+6438
+6440
+6441
+6442
+6444
+6445
+6446
+6447
+6448
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6459
+6460
+6462
+6463
+6464
+6467
+6469
+6470
+6471
+6475
+6476
+6477
+6478
+6479
+6484
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6496
+6497
+6498
+6500
+6501
+6504
+6505
+6506
+6507
+6509
+6510
+6512
+6513
+6517
+6518
+6520
+6521
+6522
+6523
+6524
+6526
+6528
+6529
+6530
+6532
+6534
+6535
+6537
+6538
+6539
+6541
+6542
+6543
+6544
+6546
+6547
+6548
+6550
+6551
+6552
+6553
+6554
+6555
+6556
+6558
+6560
+6561
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6571
+6572
+6573
+6574
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6585
+6587
+6588
+6591
+6592
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6604
+6605
+6606
+6607
+6608
+6610
+6611
+6612
+6613
+6614
+6617
+6620
+6622
+6623
+6627
+6629
+6630
+6631
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6644
+6645
+6646
+6647
+6648
+6650
+6651
+6652
+6653
+6654
+6655
+6656
+6657
+6658
+6659
+6661
+6662
+6663
+6664
+6665
+6666
+6667
+6670
+6671
+6672
+6675
+6676
+6677
+6678
+6679
+6683
+6686
+6687
+6688
+6689
+6690
+6691
+6692
+6694
+6696
+6697
+6700
+6701
+6702
+6703
+6706
+6707
+6708
+6709
+6711
+6714
+6715
+6717
+6718
+6722
+6724
+6726
+6727
+6728
+6729
+6731
+6732
+6733
+6736
+6737
+6738
+6739
+6740
+6744
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6766
+6767
+6768
+6769
+6771
+6772
+6776
+6777
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6798
+6801
+6802
+6803
+6804
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6818
+6820
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6832
+6833
+6834
+6835
+6836
+6837
+6839
+6840
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6851
+6852
+6853
+6854
+6856
+6857
+6858
+6859
+6860
+6862
+6863
+6864
+6865
+6866
+6870
+6872
+6873
+6874
+6875
+6876
+6878
+6882
+6883
+6884
+6887
+6888
+6889
+6890
+6892
+6895
+6896
+6897
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6906
+6907
+6908
+6909
+6910
+6911
+6912
+6913
+6916
+6917
+6918
+6919
+6921
+6922
+6923
+6924
+6925
+6929
+6930
+6931
+6932
+6933
+6934
+6936
+6937
+6938
+6941
+6942
+6943
+6947
+6949
+6952
+6953
+6956
+6957
+6958
+6960
+6961
+6963
+6965
+6966
+6970
+6972
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6998
+6999
+7000
+7002
+7003
+7004
+7007
+7008
+7009
+7011
+7012
+7013
+7014
+7015
+7016
+7017
+7018
+7019
+7022
+7023
+7025
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7036
+7038
+7039
+7041
+7042
+7043
+7045
+7046
+7049
+7050
+7051
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7066
+7069
+7070
+7071
+7072
+7073
+7074
+7077
+7079
+7080
+7087
+7088
+7089
+7092
+7093
+7094
+7095
+7099
+7100
+7103
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7112
+7114
+7115
+7116
+7118
+7119
+7120
+7121
+7122
+7123
+7126
+7129
+7130
+7131
+7133
+7134
+7135
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7144
+7145
+7146
+7147
+7148
+7149
+7153
+7154
+7155
+7156
+7157
+7159
+7161
+7163
+7164
+7166
+7167
+7168
+7169
+7170
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7182
+7183
+7186
+7188
+7189
+7190
+7191
+7193
+7194
+7196
+7197
+7198
+7201
+7202
+7203
+7204
+7205
+7208
+7210
+7213
+7214
+7215
+7216
+7217
+7219
+7220
+7222
+7223
+7224
+7225
+7226
+7227
+7230
+7231
+7233
+7234
+7235
+7237
+7238
+7239
+7240
+7243
+7244
+7246
+7247
+7249
+7250
+7253
+7256
+7257
+7258
+7259
+7261
+7264
+7265
+7266
+7267
+7268
+7270
+7271
+7272
+7273
+7274
+7276
+7277
+7278
+7279
+7280
+7281
+7284
+7285
+7287
+7288
+7290
+7292
+7293
+7294
+7295
+7297
+7298
+7300
+7301
+7302
+7303
+7304
+7306
+7307
+7308
+7310
+7311
+7312
+7315
+7317
+7318
+7319
+7320
+7321
+7322
+7327
+7328
+7330
+7331
+7333
+7334
+7337
+7338
+7339
+7340
+7341
+7343
+7344
+7349
+7350
+7354
+7355
+7356
+7357
+7358
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7374
+7375
+7376
+7378
+7379
+7381
+7382
+7384
+7385
+7386
+7388
+7389
+7391
+7393
+7395
+7396
+7397
+7400
+7402
+7404
+7405
+7406
+7407
+7409
+7410
+7412
+7415
+7418
+7420
+7421
+7423
+7425
+7426
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7436
+7438
+7439
+7440
+7442
+7443
+7444
+7445
+7446
+7447
+7449
+7450
+7451
+7452
+7454
+7455
+7456
+7460
+7462
+7463
+7465
+7466
+7468
+7470
+7473
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7482
+7483
+7484
+7485
+7487
+7488
+7489
+7490
+7492
+7493
+7494
+7495
+7496
+7497
+7499
+7500
+7503
+7504
+7505
+7506
+7507
+7510
+7513
+7514
+7515
+7518
+7520
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7533
+7535
+7536
+7537
+7538
+7540
+7542
+7543
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7554
+7556
+7557
+7558
+7559
+7560
+7562
+7563
+7564
+7565
+7566
+7567
+7569
+7571
+7572
+7573
+7574
+7576
+7578
+7579
+7581
+7582
+7583
+7584
+7585
+7589
+7590
+7592
+7593
+7594
+7595
+7596
+7597
+7599
+7600
+7602
+7603
+7604
+7606
+7608
+7609
+7610
+7612
+7614
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7627
+7631
+7632
+7635
+7636
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7651
+7653
+7655
+7658
+7659
+7660
+7661
+7662
+7663
+7665
+7666
+7667
+7668
+7670
+7671
+7672
+7674
+7675
+7677
+7678
+7679
+7681
+7682
+7683
+7686
+7688
+7689
+7691
+7693
+7694
+7696
+7697
+7698
+7699
+7700
+7702
+7703
+7704
+7705
+7706
+7708
+7710
+7711
+7712
+7715
+7716
+7717
+7718
+7721
+7722
+7723
+7725
+7726
+7728
+7731
+7732
+7733
+7734
+7735
+7737
+7738
+7739
+7741
+7745
+7747
+7748
+7751
+7752
+7753
+7756
+7757
+7758
+7759
+7760
+7763
+7765
+7766
+7767
+7768
+7769
+7770
+7771
+7772
+7773
+7774
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7791
+7792
+7793
+7797
+7798
+7800
+7801
+7802
+7803
+7806
+7807
+7808
+7809
+7810
+7812
+7815
+7818
+7819
+7820
+7821
+7823
+7824
+7826
+7827
+7828
+7829
+7830
+7831
+7833
+7834
+7835
+7836
+7838
+7839
+7840
+7841
+7842
+7843
+7845
+7846
+7849
+7850
+7851
+7852
+7853
+7854
+7856
+7858
+7859
+7860
+7862
+7863
+7865
+7866
+7867
+7868
+7869
+7870
+7873
+7874
+7875
+7877
+7878
+7879
+7880
+7881
+7883
+7885
+7886
+7887
+7888
+7890
+7891
+7892
+7894
+7895
+7896
+7897
+7898
+7900
+7901
+7904
+7906
+7907
+7908
+7909
+7910
+7911
+7913
+7914
+7915
+7916
+7918
+7919
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7931
+7932
+7934
+7935
+7936
+7938
+7939
+7940
+7941
+7942
+7944
+7945
+7946
+7947
+7949
+7950
+7953
+7956
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7969
+7970
+7971
+7972
+7974
+7978
+7979
+7980
+7982
+7983
+7984
+7987
+7988
+7989
+7990
+7991
+7993
+7994
+7996
+7998
+7999
+8001
+8002
+8004
+8005
+8006
+8008
+8009
+8010
+8011
+8012
+8014
+8015
+8016
+8017
+8018
+8020
+8021
+8023
+8024
+8025
+8026
+8027
+8028
+8029
+8030
+8031
+8032
+8034
+8035
+8036
+8042
+8043
+8044
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8060
+8061
+8062
+8065
+8066
+8067
+8068
+8073
+8077
+8078
+8080
+8081
+8082
+8083
+8084
+8085
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8095
+8096
+8097
+8098
+8101
+8102
+8104
+8107
+8109
+8110
+8111
+8114
+8115
+8116
+8119
+8123
+8124
+8125
+8127
+8128
+8130
+8132
+8133
+8134
+8135
+8137
+8138
+8139
+8140
+8141
+8142
+8143
+8144
+8146
+8148
+8149
+8150
+8151
+8153
+8154
+8155
+8161
+8162
+8163
+8164
+8166
+8167
+8170
+8171
+8172
+8175
+8176
+8177
+8178
+8180
+8181
+8182
+8184
+8185
+8186
+8188
+8189
+8190
+8192
+8194
+8195
+8196
+8197
+8200
+8201
+8202
+8203
+8204
+8205
+8207
+8208
+8209
+8210
+8211
+8212
+8214
+8215
+8216
+8218
+8219
+8220
+8221
+8223
+8224
+8225
+8227
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8238
+8240
+8241
+8243
+8244
+8245
+8246
+8247
+8249
+8250
+8251
+8253
+8256
+8257
+8258
+8259
+8260
+8261
+8263
+8264
+8265
+8268
+8269
+8270
+8271
+8274
+8275
+8276
+8277
+8280
+8281
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8292
+8293
+8294
+8296
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8309
+8310
+8311
+8312
+8313
+8315
+8316
+8317
+8318
+8320
+8321
+8322
+8325
+8326
+8329
+8332
+8333
+8334
+8338
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8351
+8353
+8356
+8357
+8358
+8359
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8369
+8370
+8371
+8375
+8378
+8380
+8381
+8383
+8385
+8387
+8388
+8392
+8393
+8394
+8395
+8396
+8397
+8399
+8400
+8401
+8402
+8404
+8407
+8408
+8409
+8410
+8413
+8414
+8415
+8417
+8418
+8419
+8420
+8421
+8423
+8424
+8427
+8429
+8431
+8432
+8433
+8434
+8435
+8436
+8439
+8440
+8443
+8444
+8445
+8447
+8448
+8450
+8452
+8453
+8454
+8455
+8457
+8459
+8460
+8461
+8462
+8463
+8464
+8467
+8468
+8469
+8472
+8473
+8477
+8478
+8479
+8480
+8482
+8483
+8485
+8487
+8488
+8489
+8490
+8492
+8493
+8494
+8495
+8496
+8497
+8500
+8503
+8504
+8505
+8506
+8507
+8508
+8509
+8511
+8513
+8517
+8520
+8521
+8522
+8523
+8525
+8527
+8528
+8529
+8530
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8541
+8542
+8543
+8544
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8560
+8561
+8562
+8564
+8566
+8568
+8570
+8571
+8573
+8574
+8575
+8576
+8577
+8578
+8580
+8581
+8582
+8583
+8584
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8613
+8614
+8617
+8620
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8631
+8633
+8634
+8635
+8637
+8638
+8639
+8640
+8641
+8643
+8644
+8645
+8646
+8647
+8648
+8649
+8650
+8652
+8653
+8654
+8657
+8658
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8669
+8671
+8672
+8673
+8674
+8675
+8676
+8678
+8679
+8680
+8681
+8682
+8684
+8687
+8691
+8692
+8693
+8695
+8696
+8697
+8698
+8700
+8701
+8702
+8703
+8706
+8707
+8708
+8711
+8713
+8714
+8715
+8718
+8720
+8722
+8724
+8725
+8727
+8729
+8731
+8732
+8733
+8734
+8735
+8736
+8737
+8738
+8739
+8741
+8743
+8744
+8745
+8746
+8747
+8749
+8751
+8753
+8754
+8755
+8756
+8757
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8777
+8778
+8779
+8780
+8781
+8782
+8786
+8787
+8788
+8789
+8790
+8791
+8793
+8794
+8795
+8797
+8799
+8800
+8803
+8804
+8805
+8806
+8808
+8811
+8812
+8815
+8816
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8829
+8830
+8832
+8833
+8834
+8835
+8836
+8838
+8841
+8842
+8843
+8844
+8846
+8848
+8850
+8853
+8854
+8858
+8859
+8860
+8861
+8862
+8863
+8865
+8867
+8868
+8869
+8870
+8871
+8872
+8873
+8875
+8876
+8877
+8879
+8882
+8884
+8885
+8886
+8887
+8888
+8889
+8890
+8892
+8893
+8894
+8895
+8896
+8897
+8899
+8900
+8901
+8902
+8903
+8905
+8906
+8907
+8908
+8911
+8912
+8913
+8914
+8916
+8917
+8920
+8923
+8924
+8925
+8926
+8929
+8930
+8932
+8936
+8937
+8938
+8939
+8941
+8943
+8944
+8946
+8948
+8950
+8951
+8952
+8953
+8954
+8956
+8957
+8958
+8959
+8960
+8962
+8963
+8965
+8966
+8967
+8969
+8970
+8971
+8972
+8973
+8974
+8977
+8979
+8981
+8983
+8984
+8985
+8986
+8987
+8988
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8999
+9000
+9001
+9002
+9005
+9006
+9007
+9009
+9010
+9012
+9013
+9014
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9031
+9032
+9033
+9034
+9035
+9036
+9040
+9042
+9043
+9044
+9045
+9047
+9048
+9049
+9051
+9052
+9053
+9055
+9056
+9057
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9067
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9079
+9080
+9082
+9083
+9084
+9086
+9087
+9088
+9089
+9090
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9102
+9103
+9105
+9106
+9107
+9108
+9109
+9110
+9112
+9114
+9115
+9116
+9117
+9119
+9120
+9121
+9122
+9123
+9124
+9126
+9127
+9128
+9130
+9133
+9134
+9137
+9138
+9139
+9140
+9141
+9143
+9144
+9146
+9147
+9148
+9150
+9151
+9152
+9154
+9156
+9157
+9160
+9161
+9162
+9165
+9166
+9167
+9168
+9169
+9170
+9172
+9173
+9174
+9175
+9176
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9187
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9199
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9210
+9211
+9213
+9214
+9216
+9219
+9220
+9223
+9224
+9225
+9226
+9228
+9229
+9230
+9231
+9234
+9236
+9237
+9240
+9242
+9244
+9245
+9246
+9247
+9250
+9251
+9255
+9256
+9257
+9258
+9261
+9262
+9265
+9266
+9267
+9268
+9272
+9273
+9274
+9275
+9277
+9278
+9279
+9282
+9283
+9284
+9285
+9286
+9287
+9289
+9290
+9292
+9294
+9295
+9297
+9298
+9299
+9300
+9301
+9305
+9306
+9307
+9309
+9310
+9311
+9313
+9315
+9317
+9318
+9319
+9322
+9323
+9324
+9325
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9341
+9342
+9343
+9344
+9345
+9351
+9353
+9354
+9355
+9359
+9360
+9361
+9362
+9363
+9364
+9366
+9367
+9368
+9369
+9372
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9388
+9389
+9390
+9391
+9394
+9395
+9396
+9397
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9413
+9414
+9417
+9418
+9419
+9420
+9421
+9422
+9423
+9424
+9425
+9426
+9427
+9428
+9429
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9440
+9441
+9442
+9445
+9446
+9447
+9449
+9450
+9451
+9452
+9453
+9454
+9456
+9457
+9458
+9459
+9460
+9461
+9464
+9465
+9466
+9471
+9472
+9473
+9477
+9478
+9480
+9481
+9482
+9483
+9484
+9485
+9488
+9489
+9491
+9492
+9494
+9495
+9496
+9500
+9502
+9503
+9506
+9507
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9524
+9525
+9526
+9527
+9529
+9530
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9539
+9540
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9552
+9553
+9554
+9555
+9556
+9557
+9558
+9560
+9561
+9562
+9563
+9564
+9565
+9567
+9568
+9569
+9570
+9572
+9573
+9574
+9578
+9580
+9581
+9582
+9587
+9589
+9592
+9593
+9594
+9596
+9597
+9598
+9600
+9601
+9602
+9603
+9606
+9607
+9608
+9609
+9610
+9611
+9613
+9614
+9615
+9616
+9617
+9618
+9619
+9620
+9622
+9623
+9625
+9626
+9627
+9628
+9631
+9632
+9635
+9636
+9637
+9639
+9640
+9641
+9643
+9644
+9645
+9648
+9650
+9651
+9652
+9653
+9655
+9656
+9657
+9659
+9660
+9663
+9664
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9674
+9675
+9677
+9679
+9680
+9681
+9682
+9683
+9684
+9687
+9690
+9691
+9692
+9694
+9695
+9697
+9698
+9699
+9700
+9701
+9703
+9704
+9705
+9706
+9707
+9710
+9711
+9712
+9714
+9715
+9716
+9717
+9719
+9720
+9722
+9725
+9726
+9727
+9729
+9730
+9731
+9732
+9733
+9734
+9735
+9736
+9738
+9739
+9740
+9741
+9744
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9755
+9757
+9759
+9760
+9761
+9762
+9763
+9765
+9766
+9769
+9770
+9771
+9773
+9774
+9775
+9777
+9778
+9779
+9782
+9783
+9784
+9789
+9790
+9791
+9792
+9793
+9795
+9796
+9797
+9798
+9799
+9801
+9802
+9804
+9805
+9806
+9807
+9808
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9819
+9820
+9821
+9822
+9823
+9824
+9828
+9829
+9830
+9833
+9836
+9838
+9839
+9840
+9841
+9842
+9843
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9856
+9857
+9858
+9859
+9860
+9863
+9864
+9865
+9866
+9867
+9871
+9872
+9873
+9876
+9879
+9881
+9882
+9884
+9885
+9886
+9887
+9888
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9901
+9902
+9903
+9904
+9906
+9907
+9908
+9910
+9911
+9912
+9913
+9915
+9916
+9917
+9919
+9920
+9921
+9922
+9923
+9924
+9927
+9928
+9929
+9931
+9932
+9933
+9934
+9935
+9937
+9938
+9941
+9942
+9943
+9945
+9946
+9948
+9949
+9951
+9954
+9955
+9956
+9957
+9958
+9959
+9962
+9963
+9964
+9965
+9966
+9969
+9970
+9971
+9973
+9975
+9976
+9977
+9981
+9982
+9983
+9984
+9985
+9988
+9990
+9991
+9993
+9995
+9996
+9997
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testUnion3D.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testUnion3D.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1102 @@
+1
+5
+19
+27
+44
+47
+49
+50
+55
+64
+78
+85
+96
+98
+100
+101
+106
+118
+139
+145
+147
+155
+179
+196
+200
+203
+214
+217
+235
+236
+239
+240
+246
+271
+288
+308
+315
+323
+325
+327
+330
+345
+391
+395
+396
+397
+404
+410
+414
+421
+429
+437
+450
+477
+482
+492
+496
+504
+514
+524
+525
+537
+554
+557
+571
+572
+573
+585
+600
+602
+603
+615
+624
+647
+648
+656
+663
+669
+677
+683
+686
+689
+721
+741
+763
+771
+783
+811
+840
+860
+863
+876
+900
+909
+912
+914
+934
+948
+951
+967
+968
+971
+976
+980
+984
+994
+998
+1018
+1022
+1029
+1068
+1077
+1081
+1087
+1093
+1101
+1104
+1108
+1125
+1135
+1142
+1155
+1156
+1165
+1173
+1180
+1194
+1196
+1201
+1210
+1233
+1256
+1259
+1273
+1280
+1316
+1334
+1342
+1344
+1352
+1358
+1366
+1373
+1381
+1395
+1400
+1405
+1421
+1427
+1429
+1440
+1455
+1458
+1460
+1473
+1480
+1494
+1501
+1504
+1509
+1519
+1532
+1537
+1548
+1578
+1587
+1599
+1601
+1617
+1641
+1648
+1670
+1681
+1699
+1704
+1705
+1734
+1740
+1746
+1758
+1767
+1776
+1778
+1787
+1811
+1816
+1817
+1831
+1838
+1849
+1855
+1870
+1883
+1913
+1918
+1927
+1933
+1934
+1941
+1942
+1945
+1950
+1957
+1962
+1967
+1979
+1997
+2020
+2024
+2030
+2033
+2037
+2041
+2051
+2063
+2066
+2082
+2094
+2095
+2108
+2114
+2116
+2122
+2129
+2132
+2138
+2139
+2147
+2161
+2170
+2180
+2183
+2200
+2215
+2228
+2248
+2260
+2267
+2270
+2294
+2297
+2310
+2319
+2322
+2350
+2352
+2367
+2369
+2402
+2418
+2422
+2464
+2469
+2479
+2480
+2483
+2487
+2490
+2498
+2499
+2504
+2540
+2565
+2571
+2583
+2602
+2614
+2631
+2635
+2636
+2646
+2647
+2650
+2651
+2652
+2666
+2668
+2677
+2679
+2690
+2695
+2722
+2726
+2727
+2738
+2741
+2743
+2760
+2762
+2763
+2773
+2774
+2781
+2782
+2799
+2806
+2818
+2825
+2847
+2849
+2852
+2855
+2858
+2866
+2867
+2871
+2879
+2881
+2886
+2893
+2907
+2909
+2915
+2920
+2927
+2939
+2940
+2941
+2947
+2965
+2967
+2972
+3012
+3026
+3029
+3036
+3044
+3045
+3059
+3061
+3064
+3088
+3111
+3126
+3154
+3155
+3166
+3183
+3187
+3188
+3193
+3202
+3210
+3213
+3217
+3220
+3223
+3229
+3239
+3252
+3253
+3257
+3262
+3265
+3266
+3287
+3301
+3306
+3308
+3317
+3330
+3345
+3347
+3348
+3354
+3399
+3401
+3403
+3407
+3433
+3448
+3465
+3471
+3491
+3499
+3506
+3523
+3529
+3531
+3532
+3540
+3541
+3542
+3545
+3550
+3570
+3579
+3588
+3592
+3593
+3594
+3620
+3631
+3663
+3673
+3681
+3687
+3695
+3696
+3700
+3711
+3718
+3720
+3721
+3727
+3731
+3738
+3746
+3749
+3754
+3769
+3776
+3780
+3796
+3812
+3818
+3840
+3848
+3853
+3857
+3874
+3875
+3881
+3900
+3906
+3922
+3925
+3954
+3968
+3995
+4003
+4007
+4009
+4025
+4031
+4032
+4043
+4049
+4056
+4067
+4082
+4097
+4100
+4102
+4106
+4108
+4116
+4121
+4131
+4132
+4133
+4137
+4144
+4151
+4156
+4177
+4203
+4239
+4244
+4246
+4267
+4270
+4274
+4281
+4310
+4315
+4320
+4321
+4335
+4343
+4344
+4350
+4360
+4371
+4388
+4389
+4393
+4410
+4412
+4417
+4421
+4449
+4454
+4462
+4473
+4475
+4480
+4489
+4490
+4495
+4497
+4510
+4516
+4519
+4533
+4547
+4570
+4578
+4586
+4587
+4595
+4618
+4626
+4630
+4636
+4646
+4664
+4670
+4684
+4698
+4701
+4702
+4710
+4712
+4722
+4723
+4731
+4734
+4736
+4742
+4750
+4752
+4767
+4773
+4787
+4791
+4799
+4804
+4807
+4814
+4819
+4827
+4834
+4836
+4842
+4850
+4857
+4866
+4870
+4882
+4897
+4898
+4901
+4906
+4942
+4944
+4978
+4981
+5001
+5005
+5007
+5011
+5026
+5058
+5065
+5084
+5086
+5089
+5104
+5115
+5123
+5142
+5146
+5151
+5153
+5162
+5164
+5166
+5174
+5176
+5196
+5197
+5199
+5207
+5209
+5221
+5232
+5238
+5248
+5268
+5278
+5301
+5303
+5311
+5312
+5317
+5323
+5338
+5358
+5359
+5363
+5380
+5381
+5383
+5399
+5405
+5408
+5413
+5430
+5437
+5438
+5439
+5445
+5475
+5515
+5532
+5533
+5549
+5553
+5573
+5581
+5582
+5584
+5586
+5593
+5603
+5604
+5647
+5650
+5654
+5667
+5673
+5679
+5684
+5692
+5711
+5741
+5745
+5753
+5757
+5770
+5773
+5790
+5792
+5793
+5796
+5803
+5808
+5811
+5814
+5815
+5832
+5856
+5864
+5873
+5878
+5879
+5893
+5901
+5920
+5922
+5927
+5936
+5956
+5963
+5983
+5984
+6002
+6010
+6027
+6045
+6046
+6054
+6074
+6083
+6087
+6090
+6099
+6102
+6105
+6125
+6139
+6143
+6145
+6159
+6166
+6168
+6173
+6187
+6205
+6209
+6225
+6231
+6232
+6237
+6238
+6243
+6277
+6292
+6303
+6311
+6312
+6316
+6317
+6331
+6336
+6339
+6352
+6367
+6384
+6390
+6392
+6403
+6419
+6422
+6441
+6459
+6472
+6482
+6485
+6495
+6511
+6520
+6523
+6524
+6525
+6529
+6545
+6550
+6551
+6556
+6570
+6574
+6579
+6583
+6585
+6599
+6606
+6617
+6620
+6635
+6640
+6645
+6653
+6669
+6674
+6677
+6684
+6685
+6688
+6699
+6710
+6719
+6739
+6740
+6779
+6803
+6808
+6814
+6823
+6835
+6847
+6864
+6871
+6881
+6891
+6894
+6897
+6899
+6909
+6915
+6918
+6927
+6933
+6952
+6964
+6968
+6979
+6984
+6992
+7009
+7065
+7078
+7086
+7095
+7104
+7112
+7122
+7144
+7152
+7154
+7164
+7166
+7193
+7194
+7195
+7207
+7217
+7218
+7222
+7226
+7232
+7234
+7261
+7268
+7269
+7270
+7275
+7278
+7279
+7281
+7284
+7287
+7293
+7304
+7317
+7323
+7335
+7336
+7340
+7341
+7358
+7366
+7382
+7404
+7421
+7434
+7446
+7451
+7457
+7460
+7465
+7476
+7481
+7483
+7484
+7486
+7488
+7496
+7503
+7510
+7512
+7513
+7519
+7523
+7530
+7559
+7560
+7561
+7568
+7570
+7586
+7609
+7614
+7622
+7625
+7631
+7640
+7661
+7671
+7679
+7694
+7702
+7704
+7709
+7721
+7737
+7739
+7742
+7745
+7749
+7760
+7768
+7769
+7772
+7775
+7779
+7807
+7814
+7819
+7832
+7833
+7837
+7839
+7848
+7860
+7867
+7868
+7895
+7896
+7905
+7910
+7920
+7924
+7929
+7942
+7948
+7955
+7969
+7998
+8001
+8027
+8036
+8047
+8049
+8051
+8063
+8065
+8084
+8094
+8112
+8117
+8120
+8121
+8125
+8126
+8135
+8136
+8143
+8152
+8161
+8193
+8207
+8209
+8223
+8224
+8271
+8280
+8286
+8298
+8318
+8338
+8357
+8383
+8391
+8392
+8411
+8416
+8417
+8433
+8435
+8443
+8453
+8456
+8464
+8481
+8490
+8502
+8507
+8533
+8537
+8548
+8550
+8553
+8554
+8571
+8572
+8577
+8578
+8595
+8601
+8606
+8632
+8636
+8642
+8643
+8647
+8648
+8657
+8670
+8672
+8676
+8690
+8711
+8722
+8725
+8736
+8742
+8773
+8785
+8802
+8805
+8807
+8824
+8833
+8835
+8839
+8872
+8881
+8885
+8892
+8909
+8912
+8916
+8921
+8928
+8949
+8956
+8960
+8965
+8968
+8978
+8979
+8989
+8992
+9006
+9037
+9039
+9040
+9050
+9051
+9060
+9064
+9068
+9083
+9091
+9102
+9128
+9136
+9137
+9146
+9162
+9171
+9174
+9175
+9179
+9180
+9181
+9185
+9216
+9249
+9250
+9258
+9264
+9271
+9274
+9299
+9304
+9306
+9314
+9317
+9325
+9328
+9338
+9346
+9347
+9372
+9374
+9375
+9395
+9396
+9397
+9398
+9399
+9417
+9429
+9430
+9451
+9452
+9464
+9468
+9484
+9486
+9487
+9489
+9492
+9503
+9528
+9529
+9561
+9589
+9600
+9607
+9613
+9646
+9663
+9680
+9684
+9693
+9697
+9700
+9702
+9722
+9732
+9736
+9741
+9742
+9746
+9747
+9761
+9771
+9772
+9775
+9778
+9801
+9842
+9858
+9872
+9886
+9887
+9895
+9927
+9936
+9942
+9967
+9968
+9976
+9981
+9983
+9988
+9991
+9995
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,8898 @@
+0
+2
+3
+4
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+20
+21
+22
+23
+24
+25
+26
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+45
+46
+48
+51
+52
+53
+54
+56
+57
+58
+59
+60
+61
+62
+63
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+79
+80
+81
+82
+83
+84
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+97
+99
+102
+103
+104
+105
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+140
+141
+142
+143
+144
+146
+148
+149
+150
+151
+152
+153
+154
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+197
+198
+199
+201
+202
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+215
+216
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+237
+238
+241
+242
+243
+244
+245
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+309
+310
+311
+312
+313
+314
+316
+317
+318
+319
+320
+321
+322
+324
+326
+328
+329
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+392
+393
+394
+398
+399
+400
+401
+402
+403
+405
+406
+407
+408
+409
+411
+412
+413
+415
+416
+417
+418
+419
+420
+422
+423
+424
+425
+426
+427
+428
+430
+431
+432
+433
+434
+435
+436
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+478
+479
+480
+481
+483
+484
+485
+486
+487
+488
+489
+490
+491
+493
+494
+495
+497
+498
+499
+500
+501
+502
+503
+505
+506
+507
+508
+509
+510
+511
+512
+513
+515
+516
+517
+518
+519
+520
+521
+522
+523
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+555
+556
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+601
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+616
+617
+618
+619
+620
+621
+622
+623
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+649
+650
+651
+652
+653
+654
+655
+657
+658
+659
+660
+661
+662
+664
+665
+666
+667
+668
+670
+671
+672
+673
+674
+675
+676
+678
+679
+680
+681
+682
+684
+685
+687
+688
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+764
+765
+766
+767
+768
+769
+770
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+861
+862
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+901
+902
+903
+904
+905
+906
+907
+908
+910
+911
+913
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+949
+950
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+969
+970
+972
+973
+974
+975
+977
+978
+979
+981
+982
+983
+985
+986
+987
+988
+989
+990
+991
+992
+993
+995
+996
+997
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1019
+1020
+1021
+1023
+1024
+1025
+1026
+1027
+1028
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1078
+1079
+1080
+1082
+1083
+1084
+1085
+1086
+1088
+1089
+1090
+1091
+1092
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1102
+1103
+1105
+1106
+1107
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1136
+1137
+1138
+1139
+1140
+1141
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1174
+1175
+1176
+1177
+1178
+1179
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1195
+1197
+1198
+1199
+1200
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1257
+1258
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1274
+1275
+1276
+1277
+1278
+1279
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1343
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1353
+1354
+1355
+1356
+1357
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1367
+1368
+1369
+1370
+1371
+1372
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1396
+1397
+1398
+1399
+1401
+1402
+1403
+1404
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1422
+1423
+1424
+1425
+1426
+1428
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1456
+1457
+1459
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1474
+1475
+1476
+1477
+1478
+1479
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1495
+1496
+1497
+1498
+1499
+1500
+1502
+1503
+1505
+1506
+1507
+1508
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1533
+1534
+1535
+1536
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1600
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1642
+1643
+1644
+1645
+1646
+1647
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1700
+1701
+1702
+1703
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1735
+1736
+1737
+1738
+1739
+1741
+1742
+1743
+1744
+1745
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1777
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1812
+1813
+1814
+1815
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1832
+1833
+1834
+1835
+1836
+1837
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1850
+1851
+1852
+1853
+1854
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1914
+1915
+1916
+1917
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1928
+1929
+1930
+1931
+1932
+1935
+1936
+1937
+1938
+1939
+1940
+1943
+1944
+1946
+1947
+1948
+1949
+1951
+1952
+1953
+1954
+1955
+1956
+1958
+1959
+1960
+1961
+1963
+1964
+1965
+1966
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2021
+2022
+2023
+2025
+2026
+2027
+2028
+2029
+2031
+2032
+2034
+2035
+2036
+2038
+2039
+2040
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2064
+2065
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2109
+2110
+2111
+2112
+2113
+2115
+2117
+2118
+2119
+2120
+2121
+2123
+2124
+2125
+2126
+2127
+2128
+2130
+2131
+2133
+2134
+2135
+2136
+2137
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2181
+2182
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2261
+2262
+2263
+2264
+2265
+2266
+2268
+2269
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2295
+2296
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2320
+2321
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2351
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2368
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2419
+2420
+2421
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2465
+2466
+2467
+2468
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2481
+2482
+2484
+2485
+2486
+2488
+2489
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2500
+2501
+2502
+2503
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2566
+2567
+2568
+2569
+2570
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2632
+2633
+2634
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2648
+2649
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2667
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2678
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2691
+2692
+2693
+2694
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2723
+2724
+2725
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2739
+2740
+2742
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2761
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2775
+2776
+2777
+2778
+2779
+2780
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2800
+2801
+2802
+2803
+2804
+2805
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2819
+2820
+2821
+2822
+2823
+2824
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2848
+2850
+2851
+2853
+2854
+2856
+2857
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2868
+2869
+2870
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2880
+2882
+2883
+2884
+2885
+2887
+2888
+2889
+2890
+2891
+2892
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2908
+2910
+2911
+2912
+2913
+2914
+2916
+2917
+2918
+2919
+2921
+2922
+2923
+2924
+2925
+2926
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2942
+2943
+2944
+2945
+2946
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2966
+2968
+2969
+2970
+2971
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3027
+3028
+3030
+3031
+3032
+3033
+3034
+3035
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3060
+3062
+3063
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3184
+3185
+3186
+3189
+3190
+3191
+3192
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3211
+3212
+3214
+3215
+3216
+3218
+3219
+3221
+3222
+3224
+3225
+3226
+3227
+3228
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3254
+3255
+3256
+3258
+3259
+3260
+3261
+3263
+3264
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3302
+3303
+3304
+3305
+3307
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3346
+3349
+3350
+3351
+3352
+3353
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3400
+3402
+3404
+3405
+3406
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3466
+3467
+3468
+3469
+3470
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3500
+3501
+3502
+3503
+3504
+3505
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3524
+3525
+3526
+3527
+3528
+3530
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3543
+3544
+3546
+3547
+3548
+3549
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3589
+3590
+3591
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3682
+3683
+3684
+3685
+3686
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3697
+3698
+3699
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3712
+3713
+3714
+3715
+3716
+3717
+3719
+3722
+3723
+3724
+3725
+3726
+3728
+3729
+3730
+3732
+3733
+3734
+3735
+3736
+3737
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3747
+3748
+3750
+3751
+3752
+3753
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3770
+3771
+3772
+3773
+3774
+3775
+3777
+3778
+3779
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3813
+3814
+3815
+3816
+3817
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3849
+3850
+3851
+3852
+3854
+3855
+3856
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3876
+3877
+3878
+3879
+3880
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3901
+3902
+3903
+3904
+3905
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3923
+3924
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4004
+4005
+4006
+4008
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4026
+4027
+4028
+4029
+4030
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4044
+4045
+4046
+4047
+4048
+4050
+4051
+4052
+4053
+4054
+4055
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4098
+4099
+4101
+4103
+4104
+4105
+4107
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4117
+4118
+4119
+4120
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4134
+4135
+4136
+4138
+4139
+4140
+4141
+4142
+4143
+4145
+4146
+4147
+4148
+4149
+4150
+4152
+4153
+4154
+4155
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4240
+4241
+4242
+4243
+4245
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4268
+4269
+4271
+4272
+4273
+4275
+4276
+4277
+4278
+4279
+4280
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4311
+4312
+4313
+4314
+4316
+4317
+4318
+4319
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4345
+4346
+4347
+4348
+4349
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4390
+4391
+4392
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4411
+4413
+4414
+4415
+4416
+4418
+4419
+4420
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4450
+4451
+4452
+4453
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4474
+4476
+4477
+4478
+4479
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4491
+4492
+4493
+4494
+4496
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4511
+4512
+4513
+4514
+4515
+4517
+4518
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4627
+4628
+4629
+4631
+4632
+4633
+4634
+4635
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4665
+4666
+4667
+4668
+4669
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4699
+4700
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4711
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4732
+4733
+4735
+4737
+4738
+4739
+4740
+4741
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4751
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4768
+4769
+4770
+4771
+4772
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4788
+4789
+4790
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4800
+4801
+4802
+4803
+4805
+4806
+4808
+4809
+4810
+4811
+4812
+4813
+4815
+4816
+4817
+4818
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4828
+4829
+4830
+4831
+4832
+4833
+4835
+4837
+4838
+4839
+4840
+4841
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4851
+4852
+4853
+4854
+4855
+4856
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4867
+4868
+4869
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4899
+4900
+4902
+4903
+4904
+4905
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4943
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4979
+4980
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
+5002
+5003
+5004
+5006
+5008
+5009
+5010
+5012
+5013
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5022
+5023
+5024
+5025
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5059
+5060
+5061
+5062
+5063
+5064
+5066
+5067
+5068
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5085
+5087
+5088
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5116
+5117
+5118
+5119
+5120
+5121
+5122
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5143
+5144
+5145
+5147
+5148
+5149
+5150
+5152
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5163
+5165
+5167
+5168
+5169
+5170
+5171
+5172
+5173
+5175
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5198
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5208
+5210
+5211
+5212
+5213
+5214
+5215
+5216
+5217
+5218
+5219
+5220
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5233
+5234
+5235
+5236
+5237
+5239
+5240
+5241
+5242
+5243
+5244
+5245
+5246
+5247
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5258
+5259
+5260
+5261
+5262
+5263
+5264
+5265
+5266
+5267
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5300
+5302
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5313
+5314
+5315
+5316
+5318
+5319
+5320
+5321
+5322
+5324
+5325
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5360
+5361
+5362
+5364
+5365
+5366
+5367
+5368
+5369
+5370
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5379
+5382
+5384
+5385
+5386
+5387
+5388
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5400
+5401
+5402
+5403
+5404
+5406
+5407
+5409
+5410
+5411
+5412
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5427
+5428
+5429
+5431
+5432
+5433
+5434
+5435
+5436
+5440
+5441
+5442
+5443
+5444
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5486
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5500
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5509
+5510
+5511
+5512
+5513
+5514
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5531
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5543
+5544
+5545
+5546
+5547
+5548
+5550
+5551
+5552
+5554
+5555
+5556
+5557
+5558
+5559
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5568
+5569
+5570
+5571
+5572
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5583
+5585
+5587
+5588
+5589
+5590
+5591
+5592
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5605
+5606
+5607
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5631
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5648
+5649
+5651
+5652
+5653
+5655
+5656
+5657
+5658
+5659
+5660
+5661
+5662
+5663
+5664
+5665
+5666
+5668
+5669
+5670
+5671
+5672
+5674
+5675
+5676
+5677
+5678
+5680
+5681
+5682
+5683
+5685
+5686
+5687
+5688
+5689
+5690
+5691
+5693
+5694
+5695
+5696
+5697
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+5712
+5713
+5714
+5715
+5716
+5717
+5718
+5719
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5732
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5742
+5743
+5744
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5754
+5755
+5756
+5758
+5759
+5760
+5761
+5762
+5763
+5764
+5765
+5766
+5767
+5768
+5769
+5771
+5772
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5791
+5794
+5795
+5797
+5798
+5799
+5800
+5801
+5802
+5804
+5805
+5806
+5807
+5809
+5810
+5812
+5813
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5823
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5833
+5834
+5835
+5836
+5837
+5838
+5839
+5840
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5857
+5858
+5859
+5860
+5861
+5862
+5863
+5865
+5866
+5867
+5868
+5869
+5870
+5871
+5872
+5874
+5875
+5876
+5877
+5880
+5881
+5882
+5883
+5884
+5885
+5886
+5887
+5888
+5889
+5890
+5891
+5892
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5902
+5903
+5904
+5905
+5906
+5907
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5916
+5917
+5918
+5919
+5921
+5923
+5924
+5925
+5926
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5937
+5938
+5939
+5940
+5941
+5942
+5943
+5944
+5945
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5957
+5958
+5959
+5960
+5961
+5962
+5964
+5965
+5966
+5967
+5968
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5978
+5979
+5980
+5981
+5982
+5985
+5986
+5987
+5988
+5989
+5990
+5991
+5992
+5993
+5994
+5995
+5996
+5997
+5998
+5999
+6000
+6001
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6011
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6028
+6029
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6038
+6039
+6040
+6041
+6042
+6043
+6044
+6047
+6048
+6049
+6050
+6051
+6052
+6053
+6055
+6056
+6057
+6058
+6059
+6060
+6061
+6062
+6063
+6064
+6065
+6066
+6067
+6068
+6069
+6070
+6071
+6072
+6073
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6084
+6085
+6086
+6088
+6089
+6091
+6092
+6093
+6094
+6095
+6096
+6097
+6098
+6100
+6101
+6103
+6104
+6106
+6107
+6108
+6109
+6110
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6122
+6123
+6124
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6137
+6138
+6140
+6141
+6142
+6144
+6146
+6147
+6148
+6149
+6150
+6151
+6152
+6153
+6154
+6155
+6156
+6157
+6158
+6160
+6161
+6162
+6163
+6164
+6165
+6167
+6169
+6170
+6171
+6172
+6174
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6182
+6183
+6184
+6185
+6186
+6188
+6189
+6190
+6191
+6192
+6193
+6194
+6195
+6196
+6197
+6198
+6199
+6200
+6201
+6202
+6203
+6204
+6206
+6207
+6208
+6210
+6211
+6212
+6213
+6214
+6215
+6216
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6226
+6227
+6228
+6229
+6230
+6233
+6234
+6235
+6236
+6239
+6240
+6241
+6242
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6259
+6260
+6261
+6262
+6263
+6264
+6265
+6266
+6267
+6268
+6269
+6270
+6271
+6272
+6273
+6274
+6275
+6276
+6278
+6279
+6280
+6281
+6282
+6283
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6291
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6300
+6301
+6302
+6304
+6305
+6306
+6307
+6308
+6309
+6310
+6313
+6314
+6315
+6318
+6319
+6320
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6328
+6329
+6330
+6332
+6333
+6334
+6335
+6337
+6338
+6340
+6341
+6342
+6343
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6353
+6354
+6355
+6356
+6357
+6358
+6359
+6360
+6361
+6362
+6363
+6364
+6365
+6366
+6368
+6369
+6370
+6371
+6372
+6373
+6374
+6375
+6376
+6377
+6378
+6379
+6380
+6381
+6382
+6383
+6385
+6386
+6387
+6388
+6389
+6391
+6393
+6394
+6395
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6411
+6412
+6413
+6414
+6415
+6416
+6417
+6418
+6420
+6421
+6423
+6424
+6425
+6426
+6427
+6428
+6429
+6430
+6431
+6432
+6433
+6434
+6435
+6436
+6437
+6438
+6439
+6440
+6442
+6443
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6460
+6461
+6462
+6463
+6464
+6465
+6466
+6467
+6468
+6469
+6470
+6471
+6473
+6474
+6475
+6476
+6477
+6478
+6479
+6480
+6481
+6483
+6484
+6486
+6487
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6496
+6497
+6498
+6499
+6500
+6501
+6502
+6503
+6504
+6505
+6506
+6507
+6508
+6509
+6510
+6512
+6513
+6514
+6515
+6516
+6517
+6518
+6519
+6521
+6522
+6526
+6527
+6528
+6530
+6531
+6532
+6533
+6534
+6535
+6536
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6546
+6547
+6548
+6549
+6552
+6553
+6554
+6555
+6557
+6558
+6559
+6560
+6561
+6562
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6571
+6572
+6573
+6575
+6576
+6577
+6578
+6580
+6581
+6582
+6584
+6586
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6600
+6601
+6602
+6603
+6604
+6605
+6607
+6608
+6609
+6610
+6611
+6612
+6613
+6614
+6615
+6616
+6618
+6619
+6621
+6622
+6623
+6624
+6625
+6626
+6627
+6628
+6629
+6630
+6631
+6632
+6633
+6634
+6636
+6637
+6638
+6639
+6641
+6642
+6643
+6644
+6646
+6647
+6648
+6649
+6650
+6651
+6652
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6662
+6663
+6664
+6665
+6666
+6667
+6668
+6670
+6671
+6672
+6673
+6675
+6676
+6678
+6679
+6680
+6681
+6682
+6683
+6686
+6687
+6689
+6690
+6691
+6692
+6693
+6694
+6695
+6696
+6697
+6698
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6711
+6712
+6713
+6714
+6715
+6716
+6717
+6718
+6720
+6721
+6722
+6723
+6724
+6725
+6726
+6727
+6728
+6729
+6730
+6731
+6732
+6733
+6734
+6735
+6736
+6737
+6738
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6765
+6766
+6767
+6768
+6769
+6770
+6771
+6772
+6773
+6774
+6775
+6776
+6777
+6778
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6797
+6798
+6799
+6800
+6801
+6802
+6804
+6805
+6806
+6807
+6809
+6810
+6811
+6812
+6813
+6815
+6816
+6817
+6818
+6819
+6820
+6821
+6822
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6836
+6837
+6838
+6839
+6840
+6841
+6842
+6843
+6844
+6845
+6846
+6848
+6849
+6850
+6851
+6852
+6853
+6854
+6855
+6856
+6857
+6858
+6859
+6860
+6861
+6862
+6863
+6865
+6866
+6867
+6868
+6869
+6870
+6872
+6873
+6874
+6875
+6876
+6877
+6878
+6879
+6880
+6882
+6883
+6884
+6885
+6886
+6887
+6888
+6889
+6890
+6892
+6893
+6895
+6896
+6898
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6910
+6911
+6912
+6913
+6914
+6916
+6917
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6928
+6929
+6930
+6931
+6932
+6934
+6935
+6936
+6937
+6938
+6939
+6940
+6941
+6942
+6943
+6944
+6945
+6946
+6947
+6948
+6949
+6950
+6951
+6953
+6954
+6955
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6965
+6966
+6967
+6969
+6970
+6971
+6972
+6973
+6974
+6975
+6976
+6977
+6978
+6980
+6981
+6982
+6983
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6993
+6994
+6995
+6996
+6997
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7006
+7007
+7008
+7010
+7011
+7012
+7013
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+7023
+7024
+7025
+7026
+7027
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7044
+7045
+7046
+7047
+7048
+7049
+7050
+7051
+7052
+7053
+7054
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7066
+7067
+7068
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7076
+7077
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7087
+7088
+7089
+7090
+7091
+7092
+7093
+7094
+7096
+7097
+7098
+7099
+7100
+7101
+7102
+7103
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7113
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7121
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7132
+7133
+7134
+7135
+7136
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7145
+7146
+7147
+7148
+7149
+7150
+7151
+7153
+7155
+7156
+7157
+7158
+7159
+7160
+7161
+7162
+7163
+7165
+7167
+7168
+7169
+7170
+7171
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7181
+7182
+7183
+7184
+7185
+7186
+7187
+7188
+7189
+7190
+7191
+7192
+7196
+7197
+7198
+7199
+7200
+7201
+7202
+7203
+7204
+7205
+7206
+7208
+7209
+7210
+7211
+7212
+7213
+7214
+7215
+7216
+7219
+7220
+7221
+7223
+7224
+7225
+7227
+7228
+7229
+7230
+7231
+7233
+7235
+7236
+7237
+7238
+7239
+7240
+7241
+7242
+7243
+7244
+7245
+7246
+7247
+7248
+7249
+7250
+7251
+7252
+7253
+7254
+7255
+7256
+7257
+7258
+7259
+7260
+7262
+7263
+7264
+7265
+7266
+7267
+7271
+7272
+7273
+7274
+7276
+7277
+7280
+7282
+7283
+7285
+7286
+7288
+7289
+7290
+7291
+7292
+7294
+7295
+7296
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7305
+7306
+7307
+7308
+7309
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7318
+7319
+7320
+7321
+7322
+7324
+7325
+7326
+7327
+7328
+7329
+7330
+7331
+7332
+7333
+7334
+7337
+7338
+7339
+7342
+7343
+7344
+7345
+7346
+7347
+7348
+7349
+7350
+7351
+7352
+7353
+7354
+7355
+7356
+7357
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7367
+7368
+7369
+7370
+7371
+7372
+7373
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7383
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7392
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7401
+7402
+7403
+7405
+7406
+7407
+7408
+7409
+7410
+7411
+7412
+7413
+7414
+7415
+7416
+7417
+7418
+7419
+7420
+7422
+7423
+7424
+7425
+7426
+7427
+7428
+7429
+7430
+7431
+7432
+7433
+7435
+7436
+7437
+7438
+7439
+7440
+7441
+7442
+7443
+7444
+7445
+7447
+7448
+7449
+7450
+7452
+7453
+7454
+7455
+7456
+7458
+7459
+7461
+7462
+7463
+7464
+7466
+7467
+7468
+7469
+7470
+7471
+7472
+7473
+7474
+7475
+7477
+7478
+7479
+7480
+7482
+7485
+7487
+7489
+7490
+7491
+7492
+7493
+7494
+7495
+7497
+7498
+7499
+7500
+7501
+7502
+7504
+7505
+7506
+7507
+7508
+7509
+7511
+7514
+7515
+7516
+7517
+7518
+7520
+7521
+7522
+7524
+7525
+7526
+7527
+7528
+7529
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7539
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7555
+7556
+7557
+7558
+7562
+7563
+7564
+7565
+7566
+7567
+7569
+7571
+7572
+7573
+7574
+7575
+7576
+7577
+7578
+7579
+7580
+7581
+7582
+7583
+7584
+7585
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7605
+7606
+7607
+7608
+7610
+7611
+7612
+7613
+7615
+7616
+7617
+7618
+7619
+7620
+7621
+7623
+7624
+7626
+7627
+7628
+7629
+7630
+7632
+7633
+7634
+7635
+7636
+7637
+7638
+7639
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7654
+7655
+7656
+7657
+7658
+7659
+7660
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7669
+7670
+7672
+7673
+7674
+7675
+7676
+7677
+7678
+7680
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7692
+7693
+7695
+7696
+7697
+7698
+7699
+7700
+7701
+7703
+7705
+7706
+7707
+7708
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7720
+7722
+7723
+7724
+7725
+7726
+7727
+7728
+7729
+7730
+7731
+7732
+7733
+7734
+7735
+7736
+7738
+7740
+7741
+7743
+7744
+7746
+7747
+7748
+7750
+7751
+7752
+7753
+7754
+7755
+7756
+7757
+7758
+7759
+7761
+7762
+7763
+7764
+7765
+7766
+7767
+7770
+7771
+7773
+7774
+7776
+7777
+7778
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7804
+7805
+7806
+7808
+7809
+7810
+7811
+7812
+7813
+7815
+7816
+7817
+7818
+7820
+7821
+7822
+7823
+7824
+7825
+7826
+7827
+7828
+7829
+7830
+7831
+7834
+7835
+7836
+7838
+7840
+7841
+7842
+7843
+7844
+7845
+7846
+7847
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7857
+7858
+7859
+7861
+7862
+7863
+7864
+7865
+7866
+7869
+7870
+7871
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7884
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7897
+7898
+7899
+7900
+7901
+7902
+7903
+7904
+7906
+7907
+7908
+7909
+7911
+7912
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7921
+7922
+7923
+7925
+7926
+7927
+7928
+7930
+7931
+7932
+7933
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7943
+7944
+7945
+7946
+7947
+7949
+7950
+7951
+7952
+7953
+7954
+7956
+7957
+7958
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7967
+7968
+7970
+7971
+7972
+7973
+7974
+7975
+7976
+7977
+7978
+7979
+7980
+7981
+7982
+7983
+7984
+7985
+7986
+7987
+7988
+7989
+7990
+7991
+7992
+7993
+7994
+7995
+7996
+7997
+7999
+8000
+8002
+8003
+8004
+8005
+8006
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8022
+8023
+8024
+8025
+8026
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8037
+8038
+8039
+8040
+8041
+8042
+8043
+8044
+8045
+8046
+8048
+8050
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8064
+8066
+8067
+8068
+8069
+8070
+8071
+8072
+8073
+8074
+8075
+8076
+8077
+8078
+8079
+8080
+8081
+8082
+8083
+8085
+8086
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8103
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8113
+8114
+8115
+8116
+8118
+8119
+8122
+8123
+8124
+8127
+8128
+8129
+8130
+8131
+8132
+8133
+8134
+8137
+8138
+8139
+8140
+8141
+8142
+8144
+8145
+8146
+8147
+8148
+8149
+8150
+8151
+8153
+8154
+8155
+8156
+8157
+8158
+8159
+8160
+8162
+8163
+8164
+8165
+8166
+8167
+8168
+8169
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8183
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8191
+8192
+8194
+8195
+8196
+8197
+8198
+8199
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8208
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8237
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8248
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8262
+8263
+8264
+8265
+8266
+8267
+8268
+8269
+8270
+8272
+8273
+8274
+8275
+8276
+8277
+8278
+8279
+8281
+8282
+8283
+8284
+8285
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8297
+8299
+8300
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8308
+8309
+8310
+8311
+8312
+8313
+8314
+8315
+8316
+8317
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8327
+8328
+8329
+8330
+8331
+8332
+8333
+8334
+8335
+8336
+8337
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8352
+8353
+8354
+8355
+8356
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8368
+8369
+8370
+8371
+8372
+8373
+8374
+8375
+8376
+8377
+8378
+8379
+8380
+8381
+8382
+8384
+8385
+8386
+8387
+8388
+8389
+8390
+8393
+8394
+8395
+8396
+8397
+8398
+8399
+8400
+8401
+8402
+8403
+8404
+8405
+8406
+8407
+8408
+8409
+8410
+8412
+8413
+8414
+8415
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8428
+8429
+8430
+8431
+8432
+8434
+8436
+8437
+8438
+8439
+8440
+8441
+8442
+8444
+8445
+8446
+8447
+8448
+8449
+8450
+8451
+8452
+8454
+8455
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8465
+8466
+8467
+8468
+8469
+8470
+8471
+8472
+8473
+8474
+8475
+8476
+8477
+8478
+8479
+8480
+8482
+8483
+8484
+8485
+8486
+8487
+8488
+8489
+8491
+8492
+8493
+8494
+8495
+8496
+8497
+8498
+8499
+8500
+8501
+8503
+8504
+8505
+8506
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8515
+8516
+8517
+8518
+8519
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8530
+8531
+8532
+8534
+8535
+8536
+8538
+8539
+8540
+8541
+8542
+8543
+8544
+8545
+8546
+8547
+8549
+8551
+8552
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8563
+8564
+8565
+8566
+8567
+8568
+8569
+8570
+8573
+8574
+8575
+8576
+8579
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8596
+8597
+8598
+8599
+8600
+8602
+8603
+8604
+8605
+8607
+8608
+8609
+8610
+8611
+8612
+8613
+8614
+8615
+8616
+8617
+8618
+8619
+8620
+8621
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8630
+8631
+8633
+8634
+8635
+8637
+8638
+8639
+8640
+8641
+8644
+8645
+8646
+8649
+8650
+8651
+8652
+8653
+8654
+8655
+8656
+8658
+8659
+8660
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8668
+8669
+8671
+8673
+8674
+8675
+8677
+8678
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+8687
+8688
+8689
+8691
+8692
+8693
+8694
+8695
+8696
+8697
+8698
+8699
+8700
+8701
+8702
+8703
+8704
+8705
+8706
+8707
+8708
+8709
+8710
+8712
+8713
+8714
+8715
+8716
+8717
+8718
+8719
+8720
+8721
+8723
+8724
+8726
+8727
+8728
+8729
+8730
+8731
+8732
+8733
+8734
+8735
+8737
+8738
+8739
+8740
+8741
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8750
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8758
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8783
+8784
+8786
+8787
+8788
+8789
+8790
+8791
+8792
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8801
+8803
+8804
+8806
+8808
+8809
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8818
+8819
+8820
+8821
+8822
+8823
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8834
+8836
+8837
+8838
+8840
+8841
+8842
+8843
+8844
+8845
+8846
+8847
+8848
+8849
+8850
+8851
+8852
+8853
+8854
+8855
+8856
+8857
+8858
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8870
+8871
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8882
+8883
+8884
+8886
+8887
+8888
+8889
+8890
+8891
+8893
+8894
+8895
+8896
+8897
+8898
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8910
+8911
+8913
+8914
+8915
+8917
+8918
+8919
+8920
+8922
+8923
+8924
+8925
+8926
+8927
+8929
+8930
+8931
+8932
+8933
+8934
+8935
+8936
+8937
+8938
+8939
+8940
+8941
+8942
+8943
+8944
+8945
+8946
+8947
+8948
+8950
+8951
+8952
+8953
+8954
+8955
+8957
+8958
+8959
+8961
+8962
+8963
+8964
+8966
+8967
+8969
+8970
+8971
+8972
+8973
+8974
+8975
+8976
+8977
+8980
+8981
+8982
+8983
+8984
+8985
+8986
+8987
+8988
+8990
+8991
+8993
+8994
+8995
+8996
+8997
+8998
+8999
+9000
+9001
+9002
+9003
+9004
+9005
+9007
+9008
+9009
+9010
+9011
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9029
+9030
+9031
+9032
+9033
+9034
+9035
+9036
+9038
+9041
+9042
+9043
+9044
+9045
+9046
+9047
+9048
+9049
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9061
+9062
+9063
+9065
+9066
+9067
+9069
+9070
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9079
+9080
+9081
+9082
+9084
+9085
+9086
+9087
+9088
+9089
+9090
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9101
+9103
+9104
+9105
+9106
+9107
+9108
+9109
+9110
+9111
+9112
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9129
+9130
+9131
+9132
+9133
+9134
+9135
+9138
+9139
+9140
+9141
+9142
+9143
+9144
+9145
+9147
+9148
+9149
+9150
+9151
+9152
+9153
+9154
+9155
+9156
+9157
+9158
+9159
+9160
+9161
+9163
+9164
+9165
+9166
+9167
+9168
+9169
+9170
+9172
+9173
+9176
+9177
+9178
+9182
+9183
+9184
+9186
+9187
+9188
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9199
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9209
+9210
+9211
+9212
+9213
+9214
+9215
+9217
+9218
+9219
+9220
+9221
+9222
+9223
+9224
+9225
+9226
+9227
+9228
+9229
+9230
+9231
+9232
+9233
+9234
+9235
+9236
+9237
+9238
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9247
+9248
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9259
+9260
+9261
+9262
+9263
+9265
+9266
+9267
+9268
+9269
+9270
+9272
+9273
+9275
+9276
+9277
+9278
+9279
+9280
+9281
+9282
+9283
+9284
+9285
+9286
+9287
+9288
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9296
+9297
+9298
+9300
+9301
+9302
+9303
+9305
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9315
+9316
+9318
+9319
+9320
+9321
+9322
+9323
+9324
+9326
+9327
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9337
+9339
+9340
+9341
+9342
+9343
+9344
+9345
+9348
+9349
+9350
+9351
+9352
+9353
+9354
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9367
+9368
+9369
+9370
+9371
+9373
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9385
+9386
+9387
+9388
+9389
+9390
+9391
+9392
+9393
+9394
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9418
+9419
+9420
+9421
+9422
+9423
+9424
+9425
+9426
+9427
+9428
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9443
+9444
+9445
+9446
+9447
+9448
+9449
+9450
+9453
+9454
+9455
+9456
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9465
+9466
+9467
+9469
+9470
+9471
+9472
+9473
+9474
+9475
+9476
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9485
+9488
+9490
+9491
+9493
+9494
+9495
+9496
+9497
+9498
+9499
+9500
+9501
+9502
+9504
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9523
+9524
+9525
+9526
+9527
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9539
+9540
+9541
+9542
+9543
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9551
+9552
+9553
+9554
+9555
+9556
+9557
+9558
+9559
+9560
+9562
+9563
+9564
+9565
+9566
+9567
+9568
+9569
+9570
+9571
+9572
+9573
+9574
+9575
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9583
+9584
+9585
+9586
+9587
+9588
+9590
+9591
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9601
+9602
+9603
+9604
+9605
+9606
+9608
+9609
+9610
+9611
+9612
+9614
+9615
+9616
+9617
+9618
+9619
+9620
+9621
+9622
+9623
+9624
+9625
+9626
+9627
+9628
+9629
+9630
+9631
+9632
+9633
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9647
+9648
+9649
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9658
+9659
+9660
+9661
+9662
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9681
+9682
+9683
+9685
+9686
+9687
+9688
+9689
+9690
+9691
+9692
+9694
+9695
+9696
+9698
+9699
+9701
+9703
+9704
+9705
+9706
+9707
+9708
+9709
+9710
+9711
+9712
+9713
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9723
+9724
+9725
+9726
+9727
+9728
+9729
+9730
+9731
+9733
+9734
+9735
+9737
+9738
+9739
+9740
+9743
+9744
+9745
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9762
+9763
+9764
+9765
+9766
+9767
+9768
+9769
+9770
+9773
+9774
+9776
+9777
+9779
+9780
+9781
+9782
+9783
+9784
+9785
+9786
+9787
+9788
+9789
+9790
+9791
+9792
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9800
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9809
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9827
+9828
+9829
+9830
+9831
+9832
+9833
+9834
+9835
+9836
+9837
+9838
+9839
+9840
+9841
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9857
+9859
+9860
+9861
+9862
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9873
+9874
+9875
+9876
+9877
+9878
+9879
+9880
+9881
+9882
+9883
+9884
+9885
+9888
+9889
+9890
+9891
+9892
+9893
+9894
+9896
+9897
+9898
+9899
+9900
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9910
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9925
+9926
+9928
+9929
+9930
+9931
+9932
+9933
+9934
+9935
+9937
+9938
+9939
+9940
+9941
+9943
+9944
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9953
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9961
+9962
+9963
+9964
+9965
+9966
+9969
+9970
+9971
+9972
+9973
+9974
+9975
+9977
+9978
+9979
+9980
+9982
+9984
+9985
+9986
+9987
+9989
+9990
+9992
+9993
+9994
+9996
+9997
+9998
+9999
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,59 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+tests = lib${PROJECT}_DomainShape
+
+SRCS = testShape.c
+
+checks = \
+	testBox2D.0of1.sh \
+	testBox3D.0of1.sh \
+	testConvexHull2D.0of1.sh \
+	testConvexHull3D.0of1.sh \
+	testCylinder.0of1.sh \
+	testIntersection2D.0of1.sh \
+	testIntersection2DDoubleNot.0of1.sh \
+	testIntersection2DSingleNot.0of1.sh \
+	testIntersection3D.0of1.sh \
+	testIntersection3DDoubleNot.0of1.sh \
+	testIntersection3DSingleNot.0of1.sh \
+	testPolygonShape2D.0of1.sh \
+	testPolygonShape3D.0of1.sh \
+	testSphere2D.0of1.sh \
+	testSphere3D.0of1.sh \
+	testSphere2D-invert.0of1.sh \
+	testSuperellipsoid2D.0of1.sh \
+	testSuperellipsoid3D.0of1.sh \
+	testUnion2D.0of1.sh \
+	testUnion2DSingleNot.0of1.sh \
+	testUnion3D.0of1.sh \
+	testUnion3DSingleNot.0of1.sh 
+
+ifdef HAVE_PYTHON
+	checks += \
+		testPython2D.0of1.sh \
+		testPython3D.0of1.sh 
+endif
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+        ifneq (Darwin,${SYSTEM})
+	       EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testBox.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testBox.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+<!--Purpose: Defines a Shape component. Shape is a box defined by 6 positions, 2 for each axis--> 
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">Box</param>
+			<param name="startX">-0.1</param> <param name="endX">0.2</param>
+			<param name="startY">-0.2</param> <param name="endY">0.0</param>
+			<param name="startZ">-0.5</param> <param name="endZ">0.3</param>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testBox2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testBox2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testBox.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testBox3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testBox3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testBox.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testConvexHull.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testConvexHull.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">ConvexHull</param>
+			<param name="startZ">0.3</param>
+			<list name="verticies">
+				<asciidata>
+					<columnDefinition name = "x" type="double"/>
+					<columnDefinition name = "y" type="double"/>
+					<columnDefinition name = "z" type="double"/>
+					 0.3	 0.0	 0.0
+					-0.3	 0.0	 0.0
+					 0.0	 0.3	 0.0
+				</asciidata>
+			</list>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testConvexHull2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testConvexHull2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testConvexHull.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testConvexHull3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testConvexHull3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testConvexHull3D.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testConvexHull3D.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testConvexHull3D.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">ConvexHull</param>
+			<param name="startZ">0.3</param>
+			<list name="verticies">
+				<asciidata>
+					<columnDefinition name = "x" type="double"/>
+					<columnDefinition name = "y" type="double"/>
+					<columnDefinition name = "z" type="double"/>
+					 0.0	 0.5	-0.2
+					-0.5	-0.366	-0.2
+					 0.5	-0.366	-0.2
+					 0.0	 0.0	 0.666
+				</asciidata>
+			</list>
+		</struct>
+	</struct>
+
+	<param name="dim">3</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testCylinder.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testCylinder.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testCylinder.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testCylinder.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testCylinder.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">Cylinder</param>
+			<param name="radius">0.3</param> 
+			<param name="perpendicularAxis">j</param> 
+			<param name="startY">0.0</param> 
+			<param name="startX">0.0</param> 
+			<param name="endZ">0.0</param> 
+		</struct>
+	</struct>
+
+	<param name="dim">3</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere1">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">0.1</param>
+			<param name="CentreY">0.1</param>
+			<param name="CentreZ">0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>		
+		<struct name="sphere2">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">-0.1</param>
+			<param name="CentreY">-0.1</param>
+			<param name="CentreZ">-0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>			
+		<struct name="shape">
+			<param name="Type">Intersection</param>
+			<list name="shapes">
+				<param>sphere1</param>
+				<param>sphere2</param>
+			</list>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersection.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection2DDoubleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection2DDoubleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersectionDoubleNot.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection2DSingleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection2DSingleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersectionSingleNot.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersection.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection3DDoubleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection3DDoubleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersectionDoubleNot.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersection3DSingleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersection3DSingleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testIntersectionSingleNot.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersectionDoubleNot.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersectionDoubleNot.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere1">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">0.1</param>
+			<param name="CentreY">0.1</param>
+			<param name="CentreZ">0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>		
+		<struct name="sphere2">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">-0.1</param>
+			<param name="CentreY">-0.1</param>
+			<param name="CentreZ">-0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>			
+		<struct name="shape">
+			<param name="Type">Intersection</param>
+			<list name="shapes">
+				<param>!sphere1</param>
+				<param>!sphere2</param>
+			</list>	
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testIntersectionSingleNot.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testIntersectionSingleNot.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere1">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">0.1</param>
+			<param name="CentreY">0.1</param>
+			<param name="CentreZ">0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>		
+		<struct name="sphere2">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">-0.1</param>
+			<param name="CentreY">-0.1</param>
+			<param name="CentreZ">-0.1</param>
+			<param name="radius">0.3</param>		
+		</struct>			
+		<struct name="shape">
+			<param name="Type">Intersection</param>
+			<list name="shapes">
+				<param>!sphere1</param>
+				<param>sphere2</param>
+			</list>
+		</struct>	
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPolygonShape.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPolygonShape.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">PolygonShape</param>
+			<param name="startZ">0.3</param>
+			<list name="verticies">
+				<asciidata>
+					<columnDefinition name = "x" type="double"/>
+					<columnDefinition name = "y" type="double"/>
+					-0.1	 0.2
+					-0.2	-0.2
+					 0.3	 0.3
+					 0.7     0.7
+				</asciidata>
+			</list>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPolygonShape2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPolygonShape2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testPolygonShape.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPolygonShape3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPolygonShape3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testPolygonShape.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPython2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPython2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testPython2D.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPython2D.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPython2D.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">PythonShape</param>
+			<param name="Function"> y > 4 * x * x - 0.5 </param>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPython3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPython3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testPython3D.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testPython3D.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testPython3D.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">PythonShape</param>
+			<param name="Function"> y > 4 * x * x - 0.4 + 4 * z * z </param>
+		</struct>
+	</struct>
+
+	<param name="dim">3</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testShape.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testShape.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,103 @@
+#ifdef HAVE_PYTHON
+#include <Python.h>
+#endif
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "StgDomain/Geometry/Geometry.h"
+#include "StgDomain/Shape/Shape.h"
+
+#include <assert.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm               CommWorld;
+	int                    rank;
+	int                    numProcessors;
+	Dictionary*            dictionary;
+	Dictionary*            componentDict;
+	Stg_ComponentFactory*  cf;
+	XML_IO_Handler*        ioHandler;
+	int	                   procToWatch;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+
+	#ifdef HAVE_PYTHON
+	Py_Initialize();
+	#endif
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	dictionary = Dictionary_New();
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	componentDict = Dictionary_GetDictionary( dictionary, "components" );
+	assert( componentDict );
+	cf = Stg_ComponentFactory_New( dictionary, componentDict, Stg_ObjectList_New() );
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+
+	if( rank == procToWatch ) {
+		Stg_Shape*       shape;
+		Index            index;
+		Name             outputPath;
+		Dimension_Index  dim;
+		Index            testCoordCount = Dictionary_GetUnsignedInt_WithDefault( dictionary, "testCoordCount", 10000 );
+		Coord            coord;
+		Stream*          stream         =  Journal_Register( Info_Type, Stg_Shape_Type );
+
+		shape   = (Stg_Shape*) LiveComponentRegister_Get( cf->LCRegister, "shape" );
+		assert( shape );
+
+		dim = Dictionary_GetUnsignedInt( dictionary, "dim" );
+		outputPath = Dictionary_GetString( dictionary, "outputPath" );
+		Stream_RedirectFile_WithPrependedPath( stream, outputPath, "output.dat" );
+
+		/* Test to see if random points are in shape */
+		srand48(0);
+		for (index = 0 ; index < testCoordCount ; index++ ) {
+			coord[ I_AXIS ] = drand48() - 1.0;
+			coord[ J_AXIS ] = drand48() - 1.0;
+			if ( dim == 3 ) 
+				coord[ K_AXIS ] = drand48() - 1.0;
+
+			if ( Stg_Shape_IsCoordInside( shape, coord ) ) 
+				Journal_Printf( stream, "%u\n", index );
+		}
+	}
+
+	/* Destroy stuff */
+	Stg_Class_Delete( cf->registerRegister );
+	Stg_Class_Delete( cf );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	StGermain_Finalise();
+	
+	#ifdef HAVE_PYTHON
+	Py_Finalize();
+	#endif
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return EXIT_SUCCESS;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testShape.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testShape.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+<!--Purpose: Defines the testing conditions for a simulation-->	
+	<param name="journal-level.info.Stg_ComponentFactory"> 2 </param>
+	<param name="outputPath"> ./output </param>
+	<param name="dim"> 2 </param>
+	<param name="testCoordCount"> 10000 </param>
+	
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSphere-invert.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSphere-invert.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+<!--Purpose: Defines a shape component. Shape is a sphere of radius 0.3-->	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">Sphere</param>
+			<param name="radius">0.3</param> 
+			<param name="invert">true</param>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSphere.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSphere.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+<!--Purpose: Defines a shape component. Shape is a sphere of radius 0.3-->	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">Sphere</param>
+			<param name="radius">0.3</param> 
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSphere2D-invert.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSphere2D-invert.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testSphere-invert.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSphere2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSphere2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testSphere.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSphere3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSphere3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testSphere.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSuperellipsoid.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSuperellipsoid.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="shape">
+			<param name="Type">Superellipsoid</param>
+			<param name="CentreX">0.0</param>
+			<param name="CentreY">0.0</param>
+			<param name="CentreZ">0.0</param>
+			<param name="epsilon1">0.5</param>
+			<param name="epsilon2">1.5</param>
+			<param name="radiusX">0.3</param>
+			<param name="radiusY">0.4</param>
+			<param name="radiusZ">0.4</param>
+		</struct>	
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSuperellipsoid2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSuperellipsoid2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testSuperellipsoid.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testSuperellipsoid3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testSuperellipsoid3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testSuperellipsoid.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnion.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnion.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+<!--Purpose: Defines 3 Shape components, 2 of which are spheres, of radius size 0.3, located at (0.3,0.3,0.3) and (-0.3,-0.3,-0.3). The thrid is a Union shape, which is a shape composed of the Union of Sphere 1 and Sphere 2.-->	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere1">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">0.3</param>
+			<param name="CentreY">0.3</param>
+			<param name="CentreZ">0.3</param>
+			<param name="radius">0.3</param>		
+		</struct>		
+		<struct name="sphere2">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">-0.3</param>
+			<param name="CentreY">-0.3</param>
+			<param name="CentreZ">-0.3</param>
+			<param name="radius">0.3</param>		
+		</struct>			
+		<struct name="shape">
+			<param name="Type">Union</param>
+			<list name="shapes">
+				<param>sphere1</param>
+				<param>sphere2</param>
+			</list>
+		</struct>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnion2D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnion2D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testUnion.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnion2DSingleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnion2DSingleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testUnionSingleNot.xml --dim=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnion3D.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnion3D.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testUnion.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnion3DSingleNot.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnion3DSingleNot.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testShape testUnionSingleNot.xml --dim=3" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Shape/tests/testUnionSingleNot.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shape/tests/testUnionSingleNot.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<include>testShape.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere1">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">0.3</param>
+			<param name="CentreY">0.3</param>
+			<param name="CentreZ">0.3</param>
+			<param name="radius">0.3</param>		
+		</struct>		
+		<struct name="sphere2">
+			<param name="Type">Sphere</param>
+			<param name="CentreX">-0.3</param>
+			<param name="CentreY">-0.3</param>
+			<param name="CentreZ">-0.3</param>
+			<param name="radius">0.3</param>		
+		</struct>			
+		<struct name="shape">
+			<param name="Type">Union</param>
+			<list name="shapes">
+				<param>sphere1</param>
+				<param>!sphere2</param>
+			</list>
+		</struct>	
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 StGermainDiscretisationImportVersion
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/StGermainDiscretisationImportVersion	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1 @@
+4190
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,38 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+subdirs = src tests
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/CellLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/CellLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,217 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CellLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CellLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type CellLayout_Type = "CellLayout";
+
+CellLayout* _CellLayout_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo )
+{
+	CellLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(CellLayout) );
+	self = (CellLayout*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+		   _construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_cellLocalCount = _cellLocalCount;
+	self->_cellShadowCount = _cellShadowCount;
+	self->_pointCount = _pointCount;
+	self->_initialisePoints = _initialisePoints;
+	self->_mapElementIdToCellId = _mapElementIdToCellId;
+	self->_isInCell = _isInCell;
+	self->_cellOf = _cellOf;
+	self->_getShadowInfo = _getShadowInfo;
+	
+	/* CellLayout info */
+	if( initFlag ){
+		_CellLayout_Init( self );
+	}
+	
+	return self;
+}
+
+void _CellLayout_Init( CellLayout* self ) {
+	/* General and Virtual info should already be set */
+	
+	self->isConstructed = True;
+	/* CellLayout info */
+}
+
+
+void _CellLayout_Delete( void* cellLayout ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	/* _Stg_Component_Delete parent*/
+	_Stg_Component_Delete( self );
+}
+
+void _CellLayout_Print( void* cellLayout, Stream* stream ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* cellLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( cellLayoutStream, "CellLayout (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Component_Print( self, cellLayoutStream );
+	
+	/* Virtual info */
+	Journal_Printf( cellLayoutStream, "\t_cellLocalCount (func ptr): %p\n", self->_cellLocalCount );
+	Journal_Printf( cellLayoutStream, "\t_cellShadowCount (func ptr): %p\n", self->_cellShadowCount );
+	Journal_Printf( cellLayoutStream, "\t_pointCount (func ptr): %p\n", self->_pointCount );
+	Journal_Printf( cellLayoutStream, "\t_initialisePoints (func ptr): %p\n", self->_initialisePoints );
+	Journal_Printf( cellLayoutStream, "\t_mapElementIdToCellId (func ptr): %p\n", self->_mapElementIdToCellId );
+	Journal_Printf( cellLayoutStream, "\t_isInCell (func ptr): %p\n", self->_isInCell );
+	Journal_Printf( cellLayoutStream, "\t_cellOf (func ptr): %p\n", self->_cellOf );
+	Journal_Printf( cellLayoutStream, "\t_getShadowInfo (func ptr): %p\n", self->_getShadowInfo );
+	
+	/* CellLayout info */
+}
+
+
+void* _CellLayout_Copy( void* cellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	CellLayout*	self = (CellLayout*)cellLayout;
+	CellLayout*	newCellLayout;
+	
+	newCellLayout = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newCellLayout->_cellLocalCount = self->_cellLocalCount;
+	newCellLayout->_cellShadowCount = self->_cellShadowCount;
+	newCellLayout->_pointCount = self->_pointCount;
+	newCellLayout->_initialisePoints = self->_initialisePoints;
+	newCellLayout->_mapElementIdToCellId = self->_mapElementIdToCellId;
+	newCellLayout->_isInCell = self->_isInCell;
+	newCellLayout->_cellOf = self->_cellOf;
+	newCellLayout->_getShadowInfo = self->_getShadowInfo;
+	
+	return (void*)newCellLayout;
+}
+
+
+Cell_Index CellLayout_CellDomainCount( void* cellLayout ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_cellLocalCount( self ) + self->_cellShadowCount( self );
+}
+
+Cell_Index CellLayout_CellLocalCount( void* cellLayout ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_cellLocalCount( self );
+}
+
+Cell_Index CellLayout_CellShadowCount( void* cellLayout ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_cellShadowCount( self );
+}
+
+Cell_PointIndex CellLayout_PointCount( void* cellLayout, Cell_Index cell_I ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_pointCount( self, cell_I );
+}
+
+void CellLayout_InitialiseCellPoints( void* cellLayout, Cell_Index cell_I, Cell_PointIndex pointCount, Cell_Points points ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	self->_initialisePoints( self, cell_I, pointCount, points );
+}
+
+
+Cell_Index CellLayout_MapElementIdToCellId( void* cellLayout, unsigned element_dI ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_mapElementIdToCellId( self, element_dI );
+}
+
+
+Bool CellLayout_IsInCell( void* cellLayout, Cell_Index cellIndex, void* particle ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_isInCell( self, cellIndex, particle );
+}
+
+	
+Cell_Index CellLayout_CellOf( void* cellLayout, void* particle ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_cellOf( self, particle );
+}
+
+
+ShadowInfo* CellLayout_GetShadowInfo( void* cellLayout ) {
+	CellLayout* self = (CellLayout*)cellLayout;
+	
+	return self->_getShadowInfo( self );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/CellLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/CellLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,148 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class faciliting how cells of a particle swarms are arranged. 
+**	Swarms should only reference this... the base class, not the implementations.
+**
+** Assumptions:
+**
+** Comments:
+**	Currently built with only ElementCellLayout in mind (for Snac).
+**
+** $Id: CellLayout.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_CellLayout_h__
+#define __Domain_Swarm_CellLayout_h__
+	
+	/* Child classes must define these abstract functions */
+	typedef Cell_Index	(CellLayout_CellCountFunction)		( void* cellLayout );
+	typedef Cell_PointIndex	(CellLayout_PointCountFunction)		( void* cellLayout, Cell_Index cell_I );
+	typedef void		(CellLayout_InitialisePointsFunction)	( void* cellLayout, 
+										Cell_Index cell_I, 
+										Cell_PointIndex pointCount, 
+										double*** points );
+	typedef Cell_Index	(CellLayout_MapElementIdToCellIdFunction)	( void* cellLayout, unsigned element_dI ); 
+	typedef Bool		(CellLayout_IsInCellFunction)		( void* cellLayout, Cell_Index cell_I, void* particle );
+	typedef Cell_Index	(CellLayout_CellOfFunction)		( void* cellLayout, void* particle );
+	typedef ShadowInfo*	(CellLayout_GetShadowInfoFunction)	( void* cellLayout );
+	
+	/* Textual name of this class */
+	extern const Type CellLayout_Type;
+	
+	/* CellLayout information */
+	#define __CellLayout \
+		/* General info */ \
+		__Stg_Component\
+		\
+		/* Virtual info */ \
+		CellLayout_CellCountFunction*		_cellLocalCount; \
+		CellLayout_CellCountFunction*		_cellShadowCount; \
+		CellLayout_PointCountFunction*		_pointCount; \
+		CellLayout_InitialisePointsFunction*	_initialisePoints; \
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId; \
+		CellLayout_IsInCellFunction*		_isInCell; \
+		CellLayout_CellOfFunction*		_cellOf; \
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo; \
+		\
+		/* CellLayout info */ \
+
+	struct CellLayout { __CellLayout };
+	
+	
+	/* No "CellLayout_New" and "CellLayout_Init" as this is an abstract class */
+	
+	/* Creation implementation / Virtual constructor */
+	CellLayout* _CellLayout_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo );
+	
+	/* Initialise implementation */
+	void _CellLayout_Init( CellLayout* self );
+	
+	/* Stg_Class_Delete a CellLayout construct */
+	void _CellLayout_Delete( void* cellLayout );
+	
+	/* Print a CellLayout construct */
+	void _CellLayout_Print( void* cellLayout, Stream* stream );
+	
+	/* Copy */
+	#define CellLayout_Copy( self ) \
+		(CellLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CellLayout_DeepCopy( self ) \
+		(CellLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _CellLayout_Copy( void* cellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* Get the cell counts */
+	Cell_Index CellLayout_CellDomainCount( void* cellLayout );
+	
+	Cell_Index CellLayout_CellLocalCount( void* cellLayout );
+	
+	Cell_Index CellLayout_CellShadowCount( void* cellLayout );
+	
+	/** Get the point count for a given cell */
+	Cell_PointIndex CellLayout_PointCount( void* cellLayout, Cell_Index cell_I );
+	
+	/** Initialise cell points (geometry) */
+	void CellLayout_InitialiseCellPoints( void* cellLayout, Cell_Index cell_I, Cell_PointIndex pointCount, Cell_Points points );
+
+	/** Get the Cell ID corresponding to a mesh element (only makes sense when the cell layout is used with a mesh
+	 * in the same app */
+	Cell_Index CellLayout_MapElementIdToCellId( void* cellLayout, unsigned element_dI ); 
+
+	/* Specify whether a particle is in a given cell */
+	Bool CellLayout_IsInCell( void* cellLayout, Cell_Index cellIndex, void* particle );
+	
+	/* Obtain which cell a given coord lives in */
+	Cell_Index CellLayout_CellOf( void* cellLayout, void* particle );
+
+	ShadowInfo* CellLayout_GetShadowInfo( void* cellLayout );
+	
+#endif /* __Domain_Swarm_CellLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/CellLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/CellLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CellLayout</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ElementCellLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ElementCellLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,449 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ElementCellLayout.c 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "StandardParticle.h"
+
+const Type ElementCellLayout_Type = "ElementCellLayout";
+
+void* _ElementCellLayout_DefaultNew( Name name ){
+	return (void*) _ElementCellLayout_New( 
+			sizeof(ElementCellLayout),
+			ElementCellLayout_Type, 
+			_ElementCellLayout_Delete,
+			_ElementCellLayout_Print,
+			_ElementCellLayout_Copy, 
+			_ElementCellLayout_DefaultNew,
+			_ElementCellLayout_Construct,
+			_ElementCellLayout_Build,
+			_ElementCellLayout_Initialise,
+			_ElementCellLayout_Execute,
+			_ElementCellLayout_Destroy,
+			name,
+			False,
+			_ElementCellLayout_CellLocalCount,
+			_ElementCellLayout_CellShadowCount,
+			_ElementCellLayout_PointCount,
+			_ElementCellLayout_InitialisePoints, 
+			_ElementCellLayout_MapElementIdToCellId,
+			_ElementCellLayout_IsInCell,
+			_ElementCellLayout_CellOf,
+			_ElementCellLayout_GetShadowInfo,
+			NULL );
+}
+
+ElementCellLayout* ElementCellLayout_New( 
+		Name name,
+		void* mesh )
+{ 
+	return _ElementCellLayout_New( sizeof(ElementCellLayout), ElementCellLayout_Type, _ElementCellLayout_Delete,
+		_ElementCellLayout_Print, _ElementCellLayout_Copy, _ElementCellLayout_DefaultNew,
+		_ElementCellLayout_Construct, _ElementCellLayout_Build, _ElementCellLayout_Initialise,
+		_ElementCellLayout_Execute, _ElementCellLayout_Destroy, name, True,
+		_ElementCellLayout_CellLocalCount, _ElementCellLayout_CellShadowCount,
+		_ElementCellLayout_PointCount, _ElementCellLayout_InitialisePoints, 
+		_ElementCellLayout_MapElementIdToCellId, _ElementCellLayout_IsInCell,
+		_ElementCellLayout_CellOf, _ElementCellLayout_GetShadowInfo, mesh );
+}
+
+void ElementCellLayout_Init( 
+		ElementCellLayout* self, 
+		Name name,
+		void* mesh )
+{ 
+	/* General info */
+	self->type = ElementCellLayout_Type;
+	self->_sizeOfSelf = sizeof(ElementCellLayout);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ElementCellLayout_Delete;
+	self->_print = _ElementCellLayout_Print;
+	self->_copy = _ElementCellLayout_Copy;
+	self->_defaultConstructor = _ElementCellLayout_DefaultNew;
+	self->_construct = _ElementCellLayout_Construct;
+	self->_build = _ElementCellLayout_Build;
+	self->_initialise = _ElementCellLayout_Initialise;
+	self->_execute = _ElementCellLayout_Execute;
+	self->_destroy = _ElementCellLayout_Destroy;
+	self->_cellLocalCount = _ElementCellLayout_CellLocalCount,
+	self->_cellShadowCount = _ElementCellLayout_CellShadowCount,
+	self->_pointCount = _ElementCellLayout_PointCount,
+	self->_initialisePoints = _ElementCellLayout_InitialisePoints,
+	self->_mapElementIdToCellId = _ElementCellLayout_MapElementIdToCellId,
+	self->_isInCell = _ElementCellLayout_IsInCell,
+	self->_cellOf = _ElementCellLayout_CellOf,
+	self->_getShadowInfo = _ElementCellLayout_GetShadowInfo,
+
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_CellLayout_Init( (CellLayout*)self );
+	
+	/* ElementCellLayout info */
+	_ElementCellLayout_Init( self, mesh );
+}
+
+ElementCellLayout* _ElementCellLayout_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print,
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,		
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo,		
+		void*					mesh ) 
+{
+	ElementCellLayout* self;
+	
+	/* Allocate memory */
+	self = (ElementCellLayout*)_CellLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_cellLocalCount,
+		_cellShadowCount,
+		_pointCount,
+		_initialisePoints,
+		_mapElementIdToCellId,
+		_isInCell,
+		_cellOf,
+		_getShadowInfo );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ElementCellLayout info */
+	if( initFlag ){
+		_ElementCellLayout_Init( self, mesh );
+	}
+	
+	return self;
+}
+
+void _ElementCellLayout_Init( ElementCellLayout* self, void* mesh ) { 
+	/* General and Virtual info should already be set */
+	
+	/* ElementCellInfo info */
+	self->mesh = (Mesh*)mesh;
+	self->isConstructed = True;
+	self->incArray = IArray_New();
+}
+
+
+void _ElementCellLayout_Delete( void* elementCellLayout ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+
+	NewClass_Delete( self->incArray );
+	
+	/* Stg_Class_Delete parent class */
+	_CellLayout_Delete( self );
+}
+
+void _ElementCellLayout_Print( void* elementCellLayout, Stream* stream ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+
+	/* Set the Journal for printing informations */
+	Stream* elementCellLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( elementCellLayoutStream, "ElementCellLayout (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_CellLayout_Print( self, elementCellLayoutStream );
+	
+	/* Virtual info */
+	
+	/* ElementCellLayout info */
+	Journal_Printf( elementCellLayoutStream, "\tmesh (ptr): %p\n", self->mesh );
+}
+
+
+void* _ElementCellLayout_Copy( void* elementCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ElementCellLayout*	self = (ElementCellLayout*)elementCellLayout;
+	ElementCellLayout*	newElementCellLayout;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newElementCellLayout = _CellLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	if( deep ) {
+		newElementCellLayout->mesh = (Mesh*)Stg_Class_Copy( self->mesh, NULL, deep, nameExt, map );
+	}
+	else {
+		newElementCellLayout->mesh = self->mesh;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newElementCellLayout;
+}
+
+void _ElementCellLayout_Construct( void* elementCellLayout, Stg_ComponentFactory *cf, void* data ){
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	Mesh*              mesh;
+
+	mesh =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "Mesh", Mesh,  True, data ) ;
+	
+	_CellLayout_Init( (CellLayout*)self );
+	_ElementCellLayout_Init(self, mesh);
+}
+	
+void _ElementCellLayout_Build( void *elementCellLayout, void *data ){
+	ElementCellLayout*	self = (ElementCellLayout*)elementCellLayout;
+
+	Stg_Component_Build( self->mesh, NULL, False );
+
+	if( !Mesh_HasIncidence( self->mesh, Mesh_GetDimSize( self->mesh ), MT_VERTEX ) ) {
+		Stream* elementCellLayoutStream = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( elementCellLayoutStream, "Warning: Mesh not configured to build element node table. "
+			"Activating it now.\n" );
+		abort();
+	}
+
+	ElementCellLayout_BuildShadowInfo( self );
+}
+	
+void _ElementCellLayout_Initialise( void *elementCellLayout, void *data ){
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	Stg_Component_Initialise( self->mesh, data, False );
+}
+	
+void _ElementCellLayout_Execute( void *elementCellLayout, void *data ){
+	
+}
+
+void _ElementCellLayout_Destroy( void *elementCellLayout, void *data ){
+	
+}
+
+Cell_Index _ElementCellLayout_CellLocalCount( void* elementCellLayout ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	return Mesh_GetLocalSize( self->mesh, Mesh_GetDimSize( self->mesh ) );
+}
+
+Cell_Index _ElementCellLayout_CellShadowCount( void* elementCellLayout ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	return Mesh_GetRemoteSize( self->mesh, Mesh_GetDimSize( self->mesh ) );
+}
+
+Cell_PointIndex _ElementCellLayout_PointCount( void* elementCellLayout, Cell_Index cellIndex ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+
+	Mesh_GetIncidence( self->mesh, Mesh_GetDimSize( self->mesh ), cellIndex, MT_VERTEX, 
+			   self->incArray );
+	return IArray_GetSize( self->incArray );
+}
+
+void _ElementCellLayout_InitialisePoints( void* elementCellLayout, Cell_Index cellIndex, Cell_PointIndex pointCount, 
+					  double*** points )
+{
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	Cell_PointIndex point_I;
+	unsigned	nInc;
+	unsigned*	inc;
+
+	Mesh_GetIncidence( self->mesh, Mesh_GetDimSize( self->mesh ), cellIndex, MT_VERTEX, 
+			   self->incArray );
+	nInc = IArray_GetSize( self->incArray );
+	inc = (unsigned*)IArray_GetPtr( self->incArray );
+	
+	/* point to the mesh's node's coordinates */
+	for( point_I = 0; point_I < pointCount; point_I++ ) {
+		points[point_I] = &self->mesh->verts[inc[point_I]];
+	}
+}
+
+
+Cell_Index _ElementCellLayout_MapElementIdToCellId( void* elementCellLayout, unsigned element_dI ) {
+	
+	#ifdef CAUTIOUS
+	{
+		ElementCellLayout*      self = (ElementCellLayout*)elementCellLayout;
+		Stream* errorStr = Journal_Register( Error_Type, self->type );
+		Journal_Firewall( element_dI < Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ), errorStr, "Error - in %s(): User asked "
+			"for cell corresponding to element %d, but the mesh that this cell layout is based on only "
+			"has %d elements.\n", __func__, element_dI, Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	}	
+	#endif
+	
+	return element_dI;
+}
+
+
+Bool _ElementCellLayout_IsInCell( void* elementCellLayout, Cell_Index cellIndex, void* _particle ) {
+	ElementCellLayout*      self     = (ElementCellLayout*)elementCellLayout;
+	GlobalParticle*	        particle = (GlobalParticle*)_particle;
+	unsigned		elDim, elInd;
+
+	return Mesh_ElementHasPoint( self->mesh, cellIndex, particle->coord, &elDim, &elInd );
+}
+
+Cell_Index _ElementCellLayout_CellOf( void* elementCellLayout, void* _particle ) {
+	ElementCellLayout*      self     = (ElementCellLayout*)elementCellLayout;
+	GlobalParticle*	        particle = (GlobalParticle*)_particle;
+	unsigned		elInd;
+
+	if( !Mesh_SearchElements( self->mesh, particle->coord, &elInd ) )
+		elInd = Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) );
+
+	return elInd;
+}
+
+
+ShadowInfo* _ElementCellLayout_GetShadowInfo( void* elementCellLayout ) {
+	ElementCellLayout*      self = (ElementCellLayout*)elementCellLayout;
+
+	return &self->cellShadowInfo;
+}
+
+
+void ElementCellLayout_BuildShadowInfo( ElementCellLayout* self ) {
+	unsigned	nDims;
+	Comm*		comm;
+	unsigned	nIncProcs;
+	unsigned*	incProcs;
+	unsigned	n_i;
+
+	nDims = Mesh_GetDimSize( self->mesh );
+	comm = Mesh_GetCommTopology( self->mesh, nDims );
+	Comm_GetNeighbours( comm, &nIncProcs, &incProcs );
+
+	/* Extract neighbouring proc information. */
+	self->cellShadowInfo.procNbrInfo = Memory_Alloc_Unnamed( ProcNbrInfo );
+	self->cellShadowInfo.procNbrInfo->procNbrCnt = nIncProcs;
+	self->cellShadowInfo.procNbrInfo->procNbrTbl = AllocArray( unsigned, nIncProcs );
+	memcpy( self->cellShadowInfo.procNbrInfo->procNbrTbl, incProcs, nIncProcs * sizeof(unsigned) );
+
+	/* Count shadow info. */
+	if( nIncProcs ) {
+		self->cellShadowInfo.procShadowedCnt = AllocArray( unsigned, nIncProcs );
+		memset( self->cellShadowInfo.procShadowedCnt, 0, nIncProcs * sizeof(unsigned) );
+		self->cellShadowInfo.procShadowCnt = AllocArray( unsigned, nIncProcs );
+		memset( self->cellShadowInfo.procShadowCnt, 0, nIncProcs * sizeof(unsigned) );
+	}
+	for( n_i = 0; n_i < Mesh_GetSharedSize( self->mesh, nDims ); n_i++ ) {
+		unsigned	nSharers;
+		unsigned*	sharers;
+		unsigned	s_i;
+
+		Mesh_GetSharers( self->mesh, nDims, n_i, 
+				 &nSharers, &sharers );
+		for( s_i = 0; s_i < nSharers; s_i++ )
+			self->cellShadowInfo.procShadowedCnt[sharers[s_i]]++;
+	}
+	for( n_i = 0; n_i < Mesh_GetRemoteSize( self->mesh, nDims ); n_i++ ) {
+		unsigned	owner;
+
+		owner = Mesh_GetOwner( self->mesh, nDims, n_i );
+		self->cellShadowInfo.procShadowCnt[owner]++;
+	}
+
+	/* Build shadow info indices. */
+	if( nIncProcs ) {
+		self->cellShadowInfo.procShadowedTbl = Memory_Alloc_2DComplex_Unnamed( unsigned, nIncProcs, 
+										       self->cellShadowInfo.procShadowedCnt );
+		self->cellShadowInfo.procShadowTbl = Memory_Alloc_2DComplex_Unnamed( unsigned, nIncProcs, 
+										     self->cellShadowInfo.procShadowCnt );
+		memset( self->cellShadowInfo.procShadowedCnt, 0, nIncProcs * sizeof(unsigned) );
+		memset( self->cellShadowInfo.procShadowCnt, 0, nIncProcs * sizeof(unsigned) );
+	}
+	for( n_i = 0; n_i < Mesh_GetSharedSize( self->mesh, nDims ); n_i++ ) {
+		unsigned	local;
+		unsigned	curInd;
+		unsigned	nSharers;
+		unsigned*	sharers;
+		unsigned	s_i;
+
+		local = Mesh_SharedToLocal( self->mesh, nDims, n_i );
+
+		Mesh_GetSharers( self->mesh, nDims, n_i, 
+				 &nSharers, &sharers );
+		for( s_i = 0; s_i < nSharers; s_i++ ) {
+			curInd = self->cellShadowInfo.procShadowedCnt[sharers[s_i]]++;
+			self->cellShadowInfo.procShadowedTbl[sharers[s_i]][curInd] = local;
+		}
+	}
+	for( n_i = 0; n_i < Mesh_GetRemoteSize( self->mesh, nDims ); n_i++ ) {
+		unsigned	domain;
+		unsigned	curInd;
+		unsigned	owner;
+
+		domain = Mesh_GetLocalSize( self->mesh, nDims ) + n_i;
+		owner = Mesh_GetOwner( self->mesh, nDims, n_i );
+		curInd = self->cellShadowInfo.procShadowCnt[owner]++;
+		self->cellShadowInfo.procShadowTbl[owner][curInd] = domain;
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ElementCellLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ElementCellLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,158 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the CellLayout abstract class to a cell layout that has the same / is geometry as a mesh's elements.
+**
+** Assumptions:
+**	Element layout (node interconnects) does not change. Element node coordinates do not change (for IsInCell and CellOf).
+**	Element nodes are a subclass of Advectable (coord is the first variable in the structure).
+**
+** Comments:
+**	Created with Snac in mind.
+**	"Mesh*"  in the constuctor can be set to 0, but must then be set manually before the ensemble is created.
+**
+** $Id: ElementCellLayout.h 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_ElementCellLayout_h__
+#define __Domain_Swarm_ElementCellLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type ElementCellLayout_Type;
+	
+	/* ElementCellLayout information */
+	#define __ElementCellLayout \
+		/* General info */ \
+		__CellLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* ElementCellLayout info */ \
+		Mesh*					mesh; \
+		ShadowInfo				cellShadowInfo; \
+		IArray*					incArray;
+
+	struct ElementCellLayout { __ElementCellLayout };
+	
+	
+	/* Create a new ElementCellLayout and initialise */
+	void* _ElementCellLayout_DefaultNew( Name name );
+	
+	ElementCellLayout* ElementCellLayout_New( 
+			Name name,
+			void* mesh );
+	
+	/* Initialise a ElementCellLayout construct */
+	void ElementCellLayout_Init( 
+			ElementCellLayout* self, 
+			Name name,
+			void* mesh );
+	
+	/* Creation implementation / Virtual constructor */
+	ElementCellLayout* _ElementCellLayout_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print,
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,		
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo,		
+		void*					mesh );
+	
+	/* Initialise implementation */
+	void _ElementCellLayout_Init( ElementCellLayout* self, void* mesh );
+	
+	/* Stg_Class_Delete implementation */
+	void _ElementCellLayout_Delete( void* elementCellLayout );
+	
+	/* Print implementation */
+	void _ElementCellLayout_Print( void* elementCellLayout, Stream* stream );
+	
+	/* Copy */
+	#define ElementCellLayout_Copy( self ) \
+		(ElementCellLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ElementCellLayout_DeepCopy( self ) \
+		(ElementCellLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ElementCellLayout_Copy( void* elementCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _ElementCellLayout_Construct( void *elementCellLayout, Stg_ComponentFactory *cf, void* data );
+	
+	void _ElementCellLayout_Build( void *elementCellLayout, void *data );
+	
+	void _ElementCellLayout_Initialise( void *elementCellLayout, void *data );
+	
+	void _ElementCellLayout_Execute( void *elementCellLayout, void *data );
+
+	void _ElementCellLayout_Destroy( void *elementCellLayout, void *data );
+	
+	/* Returns the number of cells in this layout*/
+	Cell_Index _ElementCellLayout_CellLocalCount( void* elementCellLayout );
+	
+	/* Returns the number of cells in this layout*/
+	Cell_Index _ElementCellLayout_CellShadowCount( void* elementCellLayout );
+	
+	/* Returns the cell point count... this is the mesh's element node count */
+	Cell_PointIndex _ElementCellLayout_PointCount( void* elementCellLayout, Cell_Index cellIndex );
+	
+	/* Returns the cell point array... this is the mesh's element node array */
+	void _ElementCellLayout_InitialisePoints( void* elementCellLayout, Cell_Index cellIndex, Cell_PointIndex pointCount, 
+		double*** points );
+	
+	/** Implements CellLayout_MapElementIdToCellId(): just returns a cell number, after checking size */
+	Cell_Index _ElementCellLayout_MapElementIdToCellId( void* cellLayout, unsigned element_dI ); 
+	
+	/* Specify whether a particle is in a given cell enough */
+	Bool _ElementCellLayout_IsInCell( void* elementCellLayout, Cell_Index cellIndex, void* particle );
+	
+	/* Obtain which cell a given coord lives in */
+	Cell_Index _ElementCellLayout_CellOf( void* elementCellLayout, void* particle );
+
+	/* Get the shadow info: uses the mesh's element one */
+	ShadowInfo* _ElementCellLayout_GetShadowInfo( void* elementCellLayout );
+
+	void ElementCellLayout_BuildShadowInfo( ElementCellLayout* self );
+	
+#endif /* __Domain_Swarm_ElementCellLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ElementCellLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ElementCellLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ElementCellLayout</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">CellLayout</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Mesh</param>
+		<param name="Type">Mesh</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 253 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/FileParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/FileParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,314 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: FileParticleLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "FileParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+const Type FileParticleLayout_Type = "FileParticleLayout";
+
+FileParticleLayout* FileParticleLayout_New( Name name, Name filename )
+{
+	FileParticleLayout* self = (FileParticleLayout*) _FileParticleLayout_DefaultNew( name );
+	_FileParticleLayout_Init( self, filename );
+	return self;
+}
+
+
+FileParticleLayout* _FileParticleLayout_New( 
+                SizeT                                            _sizeOfSelf,
+                Type                                             type,
+                Stg_Class_DeleteFunction*                        _delete,
+                Stg_Class_PrintFunction*                         _print,
+                Stg_Class_CopyFunction*                          _copy,
+                Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+                Stg_Component_ConstructFunction*                 _construct,
+                Stg_Component_BuildFunction*                     _build,
+                Stg_Component_InitialiseFunction*                _initialise,
+                Stg_Component_ExecuteFunction*                   _execute,
+                Stg_Component_DestroyFunction*                   _destroy,
+                ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+                GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+                Name                                             name,
+                Bool                                             initFlag,
+                Name                                             filename )
+{
+	FileParticleLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof( FileParticleLayout ) );
+	self = (FileParticleLayout*)_GlobalParticleLayout_New( 
+			_sizeOfSelf, 
+			type,
+			_delete,
+			_print,
+			_copy, 
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			_setInitialCounts,
+			_initialiseParticles,
+			_initialiseParticle,
+			name,
+			initFlag,
+			GlobalCoordSystem,
+			False,
+			0,
+			0.0 );
+
+	if ( initFlag ) {
+		_FileParticleLayout_Init( self, filename );
+	}
+
+	return self;
+}
+
+
+void _FileParticleLayout_Init( void* particleLayout, Name filename )
+{
+	FileParticleLayout* self = (FileParticleLayout*) particleLayout;
+
+	self->filename = StG_Strdup( filename );
+	self->file        = NULL;
+	self->errorStream = Journal_MyStream( Error_Type, self );
+	_GlobalParticleLayout_Init( self, GlobalCoordSystem, False, 0, 0.0 );
+}
+
+
+void _FileParticleLayout_Delete( void* particleLayout ) {
+	FileParticleLayout* self = (FileParticleLayout*)particleLayout;
+
+	Memory_Free( self->filename );
+
+	/* Stg_Class_Delete parent class */
+	_GlobalParticleLayout_Delete( self );
+}
+
+void _FileParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	FileParticleLayout* self  = (FileParticleLayout*)particleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "FileParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_GlobalParticleLayout_Print( self, stream );
+	
+	/* FileParticleLayout */
+	Journal_Printf( stream, "filename: %s\n", self->filename );
+	Journal_Printf( stream, "file (ptr): %p\n", self->file );
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _FileParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	FileParticleLayout*		self                    = (FileParticleLayout*)particleLayout;
+	FileParticleLayout*		newFileParticleLayout;
+	
+	newFileParticleLayout = (FileParticleLayout*)_GlobalParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newFileParticleLayout->filename = self->filename;
+
+	return (void*)newFileParticleLayout;
+}
+
+void* _FileParticleLayout_DefaultNew( Name name ) {
+	return (void*)_FileParticleLayout_New( 
+			sizeof(FileParticleLayout),
+			FileParticleLayout_Type,
+			_FileParticleLayout_Delete,
+			_FileParticleLayout_Print,
+			_FileParticleLayout_Copy,
+			_FileParticleLayout_DefaultNew,
+			_FileParticleLayout_Construct,
+			_FileParticleLayout_Build,
+			_FileParticleLayout_Initialise,
+			_FileParticleLayout_Execute,
+			_FileParticleLayout_Destroy,
+			_FileParticleLayout_SetInitialCounts,
+			_FileParticleLayout_InitialiseParticles,
+			_FileParticleLayout_InitialiseParticle,
+			name,
+			False, 
+			NULL /* filename */ );
+}
+
+void _FileParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data ) {
+	FileParticleLayout* self     = (FileParticleLayout*) particleLayout;
+	Name                filename;
+
+	filename = Stg_ComponentFactory_GetString( cf, self->name, "filename", "Swarm.dat" );
+	
+	_FileParticleLayout_Init( self, filename );
+}
+	
+void _FileParticleLayout_Build( void* particleLayout, void* data ) {
+}
+void _FileParticleLayout_Initialise( void* particleLayout, void* data ) {
+}
+void _FileParticleLayout_Execute( void* particleLayout, void* data ) {
+}
+void _FileParticleLayout_Destroy( void* particleLayout, void* data ) {
+}
+
+void _FileParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm ) {
+	FileParticleLayout*        self         = (FileParticleLayout*)particleLayout;
+	Swarm*                     swarm        = (Swarm*)_swarm;
+	Name                       filename     = self->filename;
+	MPI_File                   mpiFile;
+	int                        openResult;
+	MPI_Offset                 bytesCount;
+	SizeT                      particleSize = swarm->particleExtensionMgr->finalSize;
+	div_t                      division;
+
+	Journal_DPrintf( self->debug, "In %s(): for ParticleLayout \"%s\", of type %s\n",
+		__func__, self->name, self->type );
+	Stream_IndentBranch( Swarm_Debug );	
+
+	Journal_DPrintf( self->debug, "Finding number of bytes in checkpoint file \"%s\":\n",
+		self->filename );
+
+	openResult = MPI_File_open( swarm->comm, filename, MPI_MODE_RDONLY, MPI_INFO_NULL, &mpiFile );
+
+	Journal_Firewall( 
+		openResult == 0, 
+		self->errorStream,
+		"Error in %s for %s '%s' - Cannot open file %s.\n", 
+		__func__, 
+		self->type, 
+		self->name, 
+		filename );
+	
+	MPI_File_get_size( mpiFile, &bytesCount );
+	MPI_File_close( &mpiFile );
+
+	Journal_DPrintf( self->debug, "...calculated bytes total of %u.\n", bytesCount );
+	
+	/* Divide by particle size to get number of particles */
+	division = div( bytesCount, particleSize );
+	self->totalInitialParticles = division.quot;
+
+	Journal_DPrintf( self->debug, "given bytes total %u / particle size %u ->\n"
+		"\ttotalInitialParticles = %u.\n", bytesCount, (unsigned int)particleSize,
+		self->totalInitialParticles );
+
+	Journal_Firewall( 
+		division.rem == 0,
+		self->errorStream,
+		"Error in func %s for %s '%s' - Trying to read particle information from %s which stores %u bytes.\n"
+		"This doesn't produce an integer number of particles of size %u - It gives remainder = %u\n", 
+		__func__, 
+		self->type, 
+		self->name, 
+		filename, 
+		bytesCount, 
+		(unsigned int)particleSize, 
+		division.rem ); 
+
+	Journal_DPrintf( self->debug, "calling parent func to set cell counts:\n", bytesCount );
+	_GlobalParticleLayout_SetInitialCounts( self, swarm );
+
+	Stream_UnIndentBranch( Swarm_Debug );	
+	Journal_DPrintf( self->debug, "...finished %s() for ParticleLayout \"%s\".\n",
+		__func__, self->name );
+}
+
+void _FileParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm ) {
+	FileParticleLayout*        self             = (FileParticleLayout*)particleLayout;
+	
+	self->file = fopen( self->filename, "rb" );
+	Journal_Firewall( 
+		self->file != NULL, 
+		self->errorStream,
+		"Error in %s for %s '%s' - Cannot open file %s.\n", 
+		__func__, 
+		self->type, 
+		self->name, 
+		self->filename );
+
+	_GlobalParticleLayout_InitialiseParticles( self, _swarm );
+	
+	fclose( self->file );
+	self->file = NULL;
+}	
+	
+void _FileParticleLayout_InitialiseParticle( 
+		void*              particleLayout, 
+		void*              _swarm, 
+		Particle_Index     newParticle_I,
+		void*              particle )
+{
+	FileParticleLayout*        self             = (FileParticleLayout*)particleLayout;
+	Swarm*                     swarm            = (Swarm*)_swarm;
+	SizeT                      particleSize     = swarm->particleExtensionMgr->finalSize;
+	int                        result;
+
+	result = fread( particle, particleSize, 1, self->file );
+
+	Journal_Firewall( 
+		result == 1,
+		self->errorStream,
+		"Error in func %s for %s '%s':\n"
+		"\tCouldn't read in particle %u - May have reached end-of-file.\n",
+		__func__, 
+		self->type, 
+		self->name, 
+		newParticle_I );
+}
+		
+
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/FileParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/FileParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,104 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a manually distributed particle layout.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: FileParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_FileParticleLayout_h__
+#define __Domain_Swarm_FileParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type FileParticleLayout_Type;
+	
+	/* FileParticleLayout information */
+	#define __FileParticleLayout \
+		__GlobalParticleLayout \
+		\
+		Name                                             filename;    \
+		FILE*                                            file;        \
+		Stream*                                          errorStream;
+
+	struct FileParticleLayout { __FileParticleLayout };
+	
+	/* Create a new FileParticleLayout and initialise */
+	FileParticleLayout* FileParticleLayout_New( Name name, Name filename );
+
+	/* Creation implementation / Virtual constructor */
+	FileParticleLayout* _FileParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Name                                             filename );
+	
+	void _FileParticleLayout_Init( void* particleLayout, Name filename );
+	
+	/* 'Stg_Class' Stuff */
+	void _FileParticleLayout_Delete( void* particleLayout );
+	void _FileParticleLayout_Print( void* particleLayout, Stream* stream );
+	#define FileParticleLayout_Copy( self ) \
+		(FileParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define FileParticleLayout_DeepCopy( self ) \
+		(FileParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _FileParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _FileParticleLayout_DefaultNew( Name name ) ;
+	void _FileParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data );
+	void _FileParticleLayout_Build( void* particleLayout, void* data );
+	void _FileParticleLayout_Initialise( void* particleLayout, void* data );
+	void _FileParticleLayout_Execute( void* particleLayout, void* data );
+	void _FileParticleLayout_Destroy( void* particleLayout, void* data );
+	
+	void _FileParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm ) ;
+	void _FileParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm ) ;
+	void _FileParticleLayout_InitialiseParticle( void* particleLayout, void* swarm, Particle_Index newParticle_I, void* particle);
+
+#endif /* __Domain_Swarm_FileParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/FileParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/FileParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">FileParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">GlobalParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">filename</param>
+		<param name="Type">String</param>
+		<param name="Default">"Swarm.dat"</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,52 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3592 2006-05-18 05:42:04Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include "Swarm_Register.h"
+
+
+#include <stdio.h>
+
+Bool StgDomainSwarm_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	Stg_Class_Delete( stgSwarm_Register );
+
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_Finalise_h__
+#define __Domain_Swarm_Finalise_h__
+	
+	Bool StgDomainSwarm_Finalise( void );
+	
+#endif /* __Domain_Swarm_Finalise_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussBorderParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussBorderParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,402 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: GaussParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "GaussParticleLayout.h"
+#include "GaussBorderParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "IntegrationPoint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+const Type GaussBorderParticleLayout_Type = "GaussBorderParticleLayout";
+
+GaussBorderParticleLayout* GaussBorderParticleLayout_New( Name name, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) {
+	GaussBorderParticleLayout* self = _GaussBorderParticleLayout_DefaultNew( name );
+
+	_GaussBorderParticleLayout_Init( self, dim, particlesPerDim );
+
+	return self;
+}
+
+GaussBorderParticleLayout* _GaussBorderParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy,
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                        initFlag,
+		Dimension_Index                                             dim,
+		Particle_InCellIndex*                                       particlesPerDim )
+{
+	GaussBorderParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (GaussBorderParticleLayout*)_GaussParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialCount,
+		_initialiseParticlesOfCell,
+		name,
+		initFlag,
+		LocalCoordSystem,
+		True );
+
+	self->particlesPerFace = Memory_Alloc_Array_Unnamed( Particle_InCellIndex, 6); // up to 6 faces (3d case)
+	
+	if( initFlag ) {
+		_GaussBorderParticleLayout_Init( self, dim, particlesPerDim );
+	}
+	
+	return self;
+}
+
+
+void _GaussBorderParticleLayout_Init( void* gaussBorderParticleLayout, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) {
+	GaussBorderParticleLayout* self = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+
+	_GaussParticleLayout_Init( self, dim, particlesPerDim );
+
+	_GaussBorderParticleLayout_InitialiseParticlesPerFace( self );
+}
+
+void _GaussBorderParticleLayout_Delete( void* gaussBorderParticleLayout ) {
+	GaussBorderParticleLayout* self = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	
+	Memory_Free( self->particlesPerFace );
+	_GaussParticleLayout_Delete( self );
+}
+
+void _GaussBorderParticleLayout_Print( void* gaussBorderParticleLayout, Stream* stream ) {
+	GaussBorderParticleLayout* self = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "GaussBorderParticleLayout (ptr): %p:\n", self );
+	
+	/* Parent class info */
+	_GaussParticleLayout_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* GaussBorderParticleLayout */
+	Stream_Indent( stream );
+	Journal_PrintValue( stream, self->dim );
+	Journal_PrintArray( stream, self->particlesPerDim, self->dim );
+	Journal_PrintArray( stream, self->particlesPerFace, ( (self->dim == 3) ? 6 : 4 ) );
+	Stream_UnIndent( stream );
+}
+
+
+void* _GaussBorderParticleLayout_Copy( void* gaussBorderParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	GaussBorderParticleLayout*	self = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	GaussBorderParticleLayout*	newGaussBorderParticleLayout;
+	
+	newGaussBorderParticleLayout = (GaussBorderParticleLayout*)_GaussParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newGaussBorderParticleLayout->dim = self->dim;
+	memcpy( newGaussBorderParticleLayout->particlesPerDim, self->particlesPerDim, 3 * sizeof(unsigned int) );
+	
+	memcpy( newGaussBorderParticleLayout->particlesPerFace, self->particlesPerFace, 6 * sizeof(Particle_InCellIndex) );
+
+	return (void*)newGaussBorderParticleLayout;
+}
+
+void* _GaussBorderParticleLayout_DefaultNew( Name name ) {
+	return (GaussBorderParticleLayout*)_GaussBorderParticleLayout_New( 
+			sizeof(GaussBorderParticleLayout), 
+			GaussBorderParticleLayout_Type,
+			_GaussBorderParticleLayout_Delete,
+			_GaussBorderParticleLayout_Print, 
+			_GaussBorderParticleLayout_Copy, 
+			_GaussBorderParticleLayout_DefaultNew,
+			_GaussBorderParticleLayout_Construct,
+			_GaussBorderParticleLayout_Build, 
+			_GaussBorderParticleLayout_Initialise,
+			_GaussBorderParticleLayout_Execute,
+			_GaussBorderParticleLayout_Destroy, 
+			_PerCellParticleLayout_SetInitialCounts,
+			_PerCellParticleLayout_InitialiseParticles,
+			_GaussBorderParticleLayout_InitialCount,
+			_GaussBorderParticleLayout_InitialiseParticlesOfCell,
+			name, 
+			False,    
+			0       /* dim */,
+			NULL    /* particlesPerDim */ );
+}
+
+void _GaussBorderParticleLayout_Construct( void* gaussBorderParticleLayout, Stg_ComponentFactory* cf, void* data ) {
+	GaussBorderParticleLayout*   self = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	Particle_InCellIndex   particlesPerDim[3];
+	Particle_InCellIndex   defaultVal;
+	Dimension_Index        dim;
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	defaultVal = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticles", 2 );
+
+	particlesPerDim[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesX", defaultVal );
+	particlesPerDim[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesY", defaultVal );
+	if ( dim == 3 )
+		particlesPerDim[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesZ", defaultVal );
+	else
+		particlesPerDim[ K_AXIS ] = 1;	
+
+	_GaussBorderParticleLayout_Init( self, dim, particlesPerDim );
+}
+	
+void _GaussBorderParticleLayout_Build( void* gaussBorderParticleLayout, void* data ) {
+}
+	
+void _GaussBorderParticleLayout_Initialise( void* gaussBorderParticleLayout, void* data ) {
+}
+	
+void _GaussBorderParticleLayout_Execute( void* gaussBorderParticleLayout, void* data ) {
+}
+
+void _GaussBorderParticleLayout_Destroy( void* gaussBorderParticleLayout, void* data ) {
+}
+
+Particle_InCellIndex _GaussBorderParticleLayout_InitialCount( void* gaussBorderParticleLayout, void* celllayout, Cell_Index cell_I )
+{
+	GaussBorderParticleLayout* self   = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	Particle_InCellIndex count = 0;
+	Index numFaces = (self->dim == 3) ? 6 : 4;
+	Index face_I;
+
+	for( face_I = 0; face_I < numFaces; face_I++ ){
+		count += self->particlesPerFace[ face_I ];
+	}
+
+	return count;
+}
+
+
+#define TRIPLE_MAX( A, B, C )  MAX( MAX( (A), (B) ), (C) )
+
+
+/* remember this only has to initialise one particle at a time */
+void _GaussBorderParticleLayout_InitialiseParticlesOfCell( void* gaussBorderParticleLayout, void* _swarm, Cell_Index cell_I )
+{
+	GaussBorderParticleLayout*      self                = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	Swarm*                    swarm               = (Swarm*)_swarm;
+	IntegrationPoint*         particle            = NULL;
+	Particle_InCellIndex      maxParticlesPerDim;
+	IJK                       ijkIndex;
+	Index                     index;
+	Dimension_Index           dim_I;
+	div_t                     divide;
+	double*                   weights;
+	double*                   abscissa;
+	Coord                     min;
+	Coord                     max;
+	Particle_InCellIndex      particlesThisCell = swarm->cellParticleCountTbl[cell_I];
+	Particle_InCellIndex      cParticle_I = 0;
+	Index			  face_I;
+	Particle_InCellIndex	  particle_I_ThisFace;
+
+	if ( 0 == strcmp( swarm->type, "MaterialPointsSwarm" ) ) {
+		/* TODO: This is a special rule allowing a Gauss particle layout to be used to initialise
+		global co-ords if you want to use it in a material swarm */
+		self->coordSystem = GlobalCoordSystem;
+	}
+
+	Swarm_GetCellMinMaxCoords( _swarm, cell_I, min, max );
+
+	/* Allocate Memory */
+	maxParticlesPerDim = TRIPLE_MAX( self->particlesPerDim[ I_AXIS ],
+		self->particlesPerDim[ J_AXIS ], self->particlesPerDim[ K_AXIS ] );
+
+	weights   = Memory_Alloc_Array( double, maxParticlesPerDim, "gauss weights" );
+	abscissa  = Memory_Alloc_Array( double, maxParticlesPerDim, "gauss abscissa" );
+
+	face_I = 0;
+	particle_I_ThisFace = 0;
+	for ( cParticle_I = 0; cParticle_I < particlesThisCell; cParticle_I++ ) {
+		particle = (IntegrationPoint*)Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		particle->owningCell = cell_I;
+
+		/* Find which face (side) this particle lives on */
+		/* easier to keep track of the face thruout the loop than go and recalculate it each time, I think*/
+		if( particle_I_ThisFace == self->particlesPerFace[ face_I ] ) {
+			face_I++;
+			particle_I_ThisFace = 0;
+		}
+		
+		/* Find the i, j, k index of this particular particle */
+		// we're now looking at something with one less dimension than the cell, so we'll just ignore the K_AXIS
+		divide = div( particle_I_ThisFace, self->particlesPerDim[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, I_AXIS) ] );
+		
+		if( self->dim == 3 ) {
+			ijkIndex[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, J_AXIS) ] = divide.quot;
+		}
+
+		ijkIndex[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, I_AXIS) ] = divide.rem;
+
+		particle->weight = 1.0;
+			
+		for( dim_I = 0 ; dim_I <  (self->dim - 1) ; dim_I++ ) {
+			index = ijkIndex[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ];
+			GaussParticleLayout_GetAbscissaAndWeights1D( weights, abscissa, self->particlesPerDim[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ] );
+
+			/* Assign particle stuff */
+			/* TODO: this is a hack, since this class doesn't officially know that the MaterialPointsSwarm
+			 * exists yet. However, we need some way for material swarms to use this layout, for testing
+			 * purposes. In the simple system of only 1 swarm type, this component always initialised
+			 * both local and global co-ords.
+			 * -- PatrickSunter - 1 May 2006
+			 */
+			// this is a slightly different version of the Gauss layout, so I'm assuming this bit still applies
+			// (and I've modified it to work with this layout)
+			if ( 0 == strcmp( swarm->type, "MaterialPointsSwarm" ) ) {
+				((GlobalParticle*)particle)->coord[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ] = 
+					min[ GaussBorderParticleLayout_GetFaceAxis(face_I, self->dim, dim_I) ] +
+					0.5 * ( max[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ] 
+						- min[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ] ) 
+					        * ( abscissa[ index ] + 1.0 );
+			}
+			else {
+				particle->xi[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ] = abscissa[ index ];
+				particle->weight *= weights[ index ];
+			}	
+		}
+		// assign the coordinate that's constant on this face. the %2 thing is just a convention I picked for labelling faces:
+		// even faces have a constant coord of -1, odd faces have +1 (so left is even with x=-1, right is odd with x=1, etc)
+		particle->xi[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, K_AXIS) ] = (face_I % 2 == 0) ? -1 : 1;
+		// currently assuming a cube, -1,-1,-1 to 1,1,1, just as the Gauss layout does.
+
+		particle_I_ThisFace++;
+	}	
+
+	Memory_Free( weights );
+	Memory_Free( abscissa );
+}
+
+
+/*
+  for a cuboids/square element, each face (or side) is essentially a 2d square (or 1d straight line); but which plane it's in varies from face to face.
+  the next function is just a means of encoding that: so face 1 (in a 3d cell) is in the i-k plane
+  thus we can treat it as a 2d face with 'i-axis' in the i direction and 'j-axis' in the *k* direction
+  for the sake of generality, we treat all faces as having an I_AXIS and J_AXIS; this function maps the axis and face no to
+  the 'real' axis that it corresponds to
+  the 'K-AXIS' is the axis that is 'constant' for this face. It's also the direction of the normal vector for the face (side)
+  the 'J-AXIS' in the 2d case isn't used
+
+  in other words, the function allows me to map from a general boundary section to a specific one ( and vice-versa ), which allows the code
+  above to be generalised and not consist of a largish switch-case statement.
+*/
+Dimension_Index GaussBorderParticleLayout_GetFaceAxis( void* gaussBorderParticleLayout, Index face_I, Dimension_Index axis)
+{
+	GaussBorderParticleLayout*      self                = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	Dimension_Index faceAxes3D[6][3];
+	Dimension_Index dim = self->dim;
+
+
+	faceAxes3D[0][ I_AXIS ] = I_AXIS;	faceAxes3D[0][ J_AXIS ] = K_AXIS;	faceAxes3D[0][ K_AXIS ] = J_AXIS;
+	faceAxes3D[1][ I_AXIS ] = I_AXIS;	faceAxes3D[1][ J_AXIS ] = K_AXIS;	faceAxes3D[1][ K_AXIS ] = J_AXIS;
+	faceAxes3D[2][ I_AXIS ] = J_AXIS;	faceAxes3D[2][ J_AXIS ] = K_AXIS;	faceAxes3D[2][ K_AXIS ] = I_AXIS;
+	faceAxes3D[3][ I_AXIS ] = J_AXIS;	faceAxes3D[3][ J_AXIS ] = K_AXIS;	faceAxes3D[3][ K_AXIS ] = I_AXIS;
+	faceAxes3D[4][ I_AXIS ] = I_AXIS;	faceAxes3D[4][ J_AXIS ] = J_AXIS;	faceAxes3D[4][ K_AXIS ] = K_AXIS;
+	faceAxes3D[5][ I_AXIS ] = I_AXIS;	faceAxes3D[5][ J_AXIS ] = J_AXIS;	faceAxes3D[5][ K_AXIS ] = K_AXIS;
+
+	return faceAxes3D[face_I][axis];
+}
+
+Index GaussBorderParticleLayout_ParticleInCellIndexToFaceIndex( void* gaussBorderParticleLayout, Particle_InCellIndex cParticle_I)
+{
+	GaussBorderParticleLayout*      self                = (GaussBorderParticleLayout*)gaussBorderParticleLayout;
+	Particle_InCellIndex	particle_I_ThisFace;
+	Index			face_I;
+	Index			numfaces = (self->dim == 3) ? 6 : 4;
+	int			cParticle_I_signed = (int) cParticle_I;
+
+	for( face_I = 0; face_I < numfaces; face_I++ )
+	{
+		cParticle_I_signed -= self->particlesPerFace[ face_I ];
+		if(cParticle_I_signed < 0)	/* ParticleInCellIndex is unsigned int - which generally isn't <0...hence the signed int. */
+			break;
+	}
+
+	return face_I;
+}
+
+void _GaussBorderParticleLayout_InitialiseParticlesPerFace( GaussBorderParticleLayout* self )
+{
+	Index face_I;
+	Index numFaces = (self->dim == 3) ? 6 : 4;
+	Dimension_Index dim_I;
+
+	/* find no of particles for each face. */
+	for( face_I = 0; face_I < numFaces; face_I++ ) {
+		self->particlesPerFace[ face_I ] = 1;
+		for( dim_I = 0; dim_I < self->dim - 1; dim_I++ ){
+			self->particlesPerFace[ face_I ] *= self->particlesPerDim[ GaussBorderParticleLayout_GetFaceAxis(self, face_I, dim_I) ];
+		}
+	}
+
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussBorderParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussBorderParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,112 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Gaussian particle layout with particles located on borders - intended for evaluation of boundary integral terms	
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**	
+**
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_GaussBorderParticleLayout_h__
+#define __Domain_Swarm_GaussBorderParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type GaussBorderParticleLayout_Type;
+	
+	/* GaussBorderParticleLayout information */
+	#define __GaussBorderParticleLayout \
+                __GaussParticleLayout 	\
+		Particle_InCellIndex*	particlesPerFace; // determined by particlesPerDim info, but calculated so many times it's worth making a member
+	       
+	struct GaussBorderParticleLayout { __GaussBorderParticleLayout };
+	
+	/* Create a new GaussBorderParticleLayout and initialise */
+	GaussBorderParticleLayout* GaussBorderParticleLayout_New( Name name, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) ;
+	
+	/* Creation implementation / Virtual constructor */
+	GaussBorderParticleLayout* _GaussBorderParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy, 
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                        initFlag,
+		Dimension_Index                                             dim,
+		Particle_InCellIndex*                                       particlesPerDim );
+		
+	/* Initialise implementation */
+	void _GaussBorderParticleLayout_Init( void* gaussBorderParticleLayout, Dimension_Index dim, Particle_InCellIndex* particlesPerDim );
+	
+	/* Stg_Class_Delete implementation */
+	void _GaussBorderParticleLayout_Delete( void* gaussBorderParticleLayout );
+	
+	/* Print implementation */
+	void _GaussBorderParticleLayout_Print( void* gaussBorderParticleLayout, Stream* stream );
+	
+	/* Copy */
+	#define GaussBorderParticleLayout_Copy( self ) \
+		(GaussBorderParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define GaussBorderParticleLayout_DeepCopy( self ) \
+		(GaussBorderParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _GaussBorderParticleLayout_Copy( void* gaussBorderParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _GaussBorderParticleLayout_DefaultNew( Name name );
+	void  _GaussBorderParticleLayout_Construct( void* gaussBorderParticleLayout, Stg_ComponentFactory* cf, void* data );
+	void  _GaussBorderParticleLayout_Build( void* gaussBorderParticleLayout, void* data );
+	void  _GaussBorderParticleLayout_Initialise( void* gaussBorderParticleLayout, void* data );
+	void  _GaussBorderParticleLayout_Execute( void* gaussBorderParticleLayout, void* data );
+	void  _GaussBorderParticleLayout_Destroy( void* gaussBorderParticleLayout, void* data );
+	
+	Particle_InCellIndex _GaussBorderParticleLayout_InitialCount( void* gaussBorderParticleLayout, void* celllayout, Cell_Index cell_I );
+	void _GaussBorderParticleLayout_InitialiseParticlesOfCell( void* gaussBorderParticleLayout, void* swarm, Cell_Index cell_I );
+
+        Dimension_Index GaussBorderParticleLayout_GetFaceAxis( void* gaussBorderParticleLayout, Index face_I, Dimension_Index axis);
+        Index GaussBorderParticleLayout_ParticleInCellIndexToFaceIndex( void* gaussBorderParticleLayout, Particle_InCellIndex cParticle_I );
+
+        void _GaussBorderParticleLayout_InitialiseParticlesPerFace( GaussBorderParticleLayout* self );
+	
+#endif /* __Domain_Swarm_GaussBorderParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussBorderParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussBorderParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+ <?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">GaussBorderParticleLayout</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">GaussParticleLayout</param>
+<param name="Description">Gauss particle layout, but with all particles on borders of cell (intended for use in evaluating boundary integral terms)</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+	<struct>
+		<param name="Name">gaussParticles</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">2</param>
+		<param name="Description">This is the default value that will be used for 'gaussParticlesX', 'gaussParticlesY' and 'gaussParticlesZ'.</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesX</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the X direction</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesY</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the Y direction.</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesZ</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the Z direction.</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,373 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: GaussParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "GaussParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "IntegrationPoint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+const Type GaussParticleLayout_Type = "GaussParticleLayout";
+
+GaussParticleLayout* GaussParticleLayout_New( Name name, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) {
+	GaussParticleLayout* self = _GaussParticleLayout_DefaultNew( name );
+
+	_GaussParticleLayout_Init( self, dim, particlesPerDim );
+
+	return self;
+}
+
+GaussParticleLayout* _GaussParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy,
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                        initFlag,
+		Dimension_Index                                             dim,
+		Particle_InCellIndex*                                       particlesPerDim )
+{
+	GaussParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (GaussParticleLayout*)_PerCellParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialCount,
+		_initialiseParticlesOfCell,
+		name,
+		initFlag,
+		LocalCoordSystem,
+		True );
+	
+	if( initFlag ) {
+		_GaussParticleLayout_Init( self, dim, particlesPerDim );
+	}
+	
+	return self;
+}
+
+void _GaussParticleLayout_Init( void* gaussParticleLayout, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) {
+	GaussParticleLayout* self = (GaussParticleLayout*)gaussParticleLayout;
+
+	self->isConstructed       = True;
+	self->dim                 = dim;
+	memcpy( self->particlesPerDim, particlesPerDim, 3 * sizeof(Particle_InCellIndex) );
+
+	_PerCellParticleLayout_Init( self, LocalCoordSystem, True );
+}
+
+void _GaussParticleLayout_Delete( void* gaussParticleLayout ) {
+	GaussParticleLayout* self = (GaussParticleLayout*)gaussParticleLayout;
+	
+	_PerCellParticleLayout_Delete( self );
+}
+
+void _GaussParticleLayout_Print( void* gaussParticleLayout, Stream* stream ) {
+	GaussParticleLayout* self = (GaussParticleLayout*)gaussParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "GaussParticleLayout (ptr): %p:\n", self );
+	
+	/* Parent class info */
+	_PerCellParticleLayout_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* GaussParticleLayout */
+	Stream_Indent( stream );
+	Journal_PrintValue( stream, self->dim );
+	Journal_PrintArray( stream, self->particlesPerDim, self->dim );
+	Stream_UnIndent( stream );
+}
+
+
+void* _GaussParticleLayout_Copy( void* gaussParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	GaussParticleLayout*	self = (GaussParticleLayout*)gaussParticleLayout;
+	GaussParticleLayout*	newGaussParticleLayout;
+	
+	newGaussParticleLayout = (GaussParticleLayout*)_PerCellParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newGaussParticleLayout->dim = self->dim;
+	memcpy( newGaussParticleLayout->particlesPerDim, self->particlesPerDim, 3 * sizeof(unsigned int) );
+
+	return (void*)newGaussParticleLayout;
+}
+
+void* _GaussParticleLayout_DefaultNew( Name name ) {
+	return (GaussParticleLayout*)_GaussParticleLayout_New( 
+			sizeof(GaussParticleLayout), 
+			GaussParticleLayout_Type,
+			_GaussParticleLayout_Delete,
+			_GaussParticleLayout_Print, 
+			_GaussParticleLayout_Copy, 
+			_GaussParticleLayout_DefaultNew,
+			_GaussParticleLayout_Construct,
+			_GaussParticleLayout_Build, 
+			_GaussParticleLayout_Initialise,
+			_GaussParticleLayout_Execute,
+			_GaussParticleLayout_Destroy, 
+			_PerCellParticleLayout_SetInitialCounts,
+			_PerCellParticleLayout_InitialiseParticles,
+			_GaussParticleLayout_InitialCount,
+			_GaussParticleLayout_InitialiseParticlesOfCell,
+			name, 
+			False,    
+			0       /* dim */,
+			NULL    /* particlesPerDim */ );
+}
+
+void _GaussParticleLayout_Construct( void* gaussParticleLayout, Stg_ComponentFactory* cf, void* data ) {
+	GaussParticleLayout*   self = (GaussParticleLayout*)gaussParticleLayout;
+	Particle_InCellIndex   particlesPerDim[3];
+	Particle_InCellIndex   defaultVal;
+	Dimension_Index        dim;
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	defaultVal = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticles", 2 );
+
+	particlesPerDim[ I_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesX", defaultVal );
+	particlesPerDim[ J_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesY", defaultVal );
+	if ( dim == 3 )
+		particlesPerDim[ K_AXIS ] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "gaussParticlesZ", defaultVal );
+	else
+		particlesPerDim[ K_AXIS ] = 1;	
+
+	_GaussParticleLayout_Init( self, dim, particlesPerDim );
+}
+	
+void _GaussParticleLayout_Build( void* gaussParticleLayout, void* data ) {
+}
+	
+void _GaussParticleLayout_Initialise( void* gaussParticleLayout, void* data ) {
+}
+	
+void _GaussParticleLayout_Execute( void* gaussParticleLayout, void* data ) {
+}
+
+void _GaussParticleLayout_Destroy( void* gaussParticleLayout, void* data ) {
+}
+
+Particle_InCellIndex _GaussParticleLayout_InitialCount( void* gaussParticleLayout, void* celllayout, Cell_Index cell_I )
+{
+	GaussParticleLayout* self   = (GaussParticleLayout*)gaussParticleLayout;
+	Particle_InCellIndex count;
+	Dimension_Index      dim;	
+	Dimension_Index      dim_I;
+	
+	dim = self->dim;
+	count = 1;
+	for( dim_I = 0; dim_I < dim; dim_I++ ) {
+		count = count * (Particle_InCellIndex)( self->particlesPerDim[ dim_I ] );
+	}
+	
+	return count;
+	
+}
+
+#define TRIPLE_MAX( A, B, C )  MAX( MAX( (A), (B) ), (C) )
+
+/* remember this only has to initialise one particle at a time */
+void _GaussParticleLayout_InitialiseParticlesOfCell( void* gaussParticleLayout, void* _swarm, Cell_Index cell_I )
+{
+	GaussParticleLayout*      self                = (GaussParticleLayout*)gaussParticleLayout;
+	Swarm*                    swarm               = (Swarm*)_swarm;
+	IntegrationPoint*         particle            = NULL;
+	Index                     index2D;
+	Particle_InCellIndex      maxParticlesPerDim;
+	IJK                       ijkIndex;
+	Index                     index;
+	Dimension_Index           dim_I;
+	div_t                     divide;
+	double*                   weights;
+	double*                   abscissa;
+	Coord                     min;
+	Coord                     max;
+	Particle_InCellIndex      particlesThisCell = swarm->cellParticleCountTbl[cell_I];
+	Particle_InCellIndex      cParticle_I = 0;
+	
+
+	if ( 0 == strcmp( swarm->type, "MaterialPointsSwarm" ) ) {
+		/* TODO: This is a special rule allowing a Gauss particle layout to be used to initialise
+		global co-ords if you want to use it in a material swarm */
+		self->coordSystem = GlobalCoordSystem;
+	}
+
+	Swarm_GetCellMinMaxCoords( _swarm, cell_I, min, max );
+
+	/* Allocate Memory */
+	maxParticlesPerDim = TRIPLE_MAX( self->particlesPerDim[ I_AXIS ],
+		self->particlesPerDim[ J_AXIS ], self->particlesPerDim[ K_AXIS ] );
+
+	weights   = Memory_Alloc_Array( double, maxParticlesPerDim, "gauss weights" );
+	abscissa  = Memory_Alloc_Array( double, maxParticlesPerDim, "gauss abscissa" );
+
+	for ( cParticle_I = 0; cParticle_I < particlesThisCell; cParticle_I++ ) {
+		particle = (IntegrationPoint*)Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		particle->owningCell = cell_I;
+		
+		/* Find the i, j, k index of this particular particle */
+		divide = div( cParticle_I, self->particlesPerDim[ I_AXIS ] * self->particlesPerDim[ J_AXIS ] );
+		ijkIndex[ K_AXIS ] = divide.quot;
+		index2D = divide.rem;
+
+		divide = div( index2D, self->particlesPerDim[ I_AXIS ] );
+		ijkIndex[ J_AXIS ] = divide.quot;
+		ijkIndex[ I_AXIS ] = divide.rem;
+
+		particle->weight = 1.0;
+		for( dim_I = 0 ; dim_I < self->dim ; dim_I++ ) {
+			index = ijkIndex[ dim_I ];
+			GaussParticleLayout_GetAbscissaAndWeights1D( weights, abscissa, self->particlesPerDim[ dim_I ] );
+
+			/* Assign particle stuff */
+			/* TODO: this is a hack, since this class doesn't officially know that the MaterialPointsSwarm
+			 * exists yet. However, we need some way for material swarms to use this layout, for testing
+			 * purposes. In the simple system of only 1 swarm type, this component always initialised
+			 * both local and global co-ords.
+			 * -- PatrickSunter - 1 May 2006
+			 */
+			if ( 0 == strcmp( swarm->type, "MaterialPointsSwarm" ) ) {
+				((GlobalParticle*)particle)->coord[ dim_I ] = 
+					min[ dim_I ] +
+						0.5 * ( max[ dim_I ] - min[ dim_I ] ) 
+						* ( abscissa[ index ] + 1.0 );
+			}
+			else {
+				particle->xi[ dim_I ] = abscissa[ index ];
+				particle->weight *= weights[ index ];
+			}	
+		}
+		
+	}	
+
+	Memory_Free( weights );
+	Memory_Free( abscissa );
+}
+
+
+/* Values taken from table from:
+ * Eric W. Weisstein. "Legendre-Gauss Quadrature." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/Legendre-GaussQuadrature.html */
+void GaussParticleLayout_GetAbscissaAndWeights1D( double* weight, double* abscissa, Index pointCount ) {
+	switch ( pointCount ) {
+		case 1:
+			abscissa[0]  = 0.0;
+			weight[0] = 2.0;
+			break;
+		case 2:
+			abscissa[0]  = - 1.0/sqrt(3.0);
+			abscissa[1]  = - abscissa[0];
+		
+			weight[0] = 1.0;
+			weight[1] = weight[0];
+			break;
+		case 3:
+			abscissa[0]  = - sqrt(15.0)/5.0;
+			abscissa[1]  = 0.0;
+			abscissa[2]  = - abscissa[0];
+		
+			weight[0] = 5.0/9.0;
+			weight[1] = 8.0/9.0;
+			weight[2] = weight[0];
+			break;
+		case 4:
+			abscissa[0]  = - sqrt( 525.0 + 70.0 * sqrt(30.0) )/35.0;
+			abscissa[1]  = - sqrt( 525.0 - 70.0 * sqrt(30.0) )/35.0;
+			abscissa[2]  = - abscissa[1];
+			abscissa[3]  = - abscissa[0];
+			
+			weight[0] = (18.0 - sqrt(30.0))/36.0;
+			weight[1] = (18.0 + sqrt(30.0))/36.0;
+			weight[2] = weight[1];
+			weight[3] = weight[0];
+			break;
+		case 5:
+			abscissa[0]  = - sqrt( 245.0 + 14.0 * sqrt( 70.0 ) )/21.0;
+			abscissa[1]  = - sqrt( 245.0 - 14.0 * sqrt( 70.0 ) )/21.0;
+			abscissa[2]  = 0.0;
+			abscissa[3]  = - abscissa[1];
+			abscissa[4]  = - abscissa[2];
+
+			weight[0] = ( 322.0 - 13.0 * sqrt( 70.0 ) )/900.0;
+			weight[1] = ( 322.0 + 13.0 * sqrt( 70.0 ) )/900.0;
+			weight[2] = 128.0/225.0;
+			weight[3] = weight[1];
+			weight[4] = weight[0];
+			break;
+		default:
+			Journal_Firewall( 
+				pointCount <= 5, 
+				Journal_Register( Error_Type, GaussParticleLayout_Type ),
+				"In func %s: Cannot give values for '%u' gauss points\n.", 
+				__func__, 
+				pointCount );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,115 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a particle layout at points designed for optimal gaussian integration.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: GaussParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_GaussParticleLayout_h__
+#define __Domain_Swarm_GaussParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type GaussParticleLayout_Type;
+	
+	/* GaussParticleLayout information */
+	#define __GaussParticleLayout \
+		__PerCellParticleLayout \
+		\
+		Dimension_Index      dim;                /**< Number of dimensions to use */ \
+		Particle_InCellIndex particlesPerDim[3]; /**< Number of points per dimension */
+
+	struct GaussParticleLayout { __GaussParticleLayout };
+	
+	/* Create a new GaussParticleLayout and initialise */
+	GaussParticleLayout* GaussParticleLayout_New( Name name, Dimension_Index dim, Particle_InCellIndex* particlesPerDim ) ;
+	
+	/* Creation implementation / Virtual constructor */
+	GaussParticleLayout* _GaussParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy, 
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                        initFlag,
+		Dimension_Index                                             dim,
+		Particle_InCellIndex*                                       particlesPerDim );
+		
+	/* Initialise implementation */
+	void _GaussParticleLayout_Init( void* gaussParticleLayout, Dimension_Index dim, Particle_InCellIndex* particlesPerDim );
+	
+	/* Stg_Class_Delete implementation */
+	void _GaussParticleLayout_Delete( void* gaussParticleLayout );
+	
+	/* Print implementation */
+	void _GaussParticleLayout_Print( void* gaussParticleLayout, Stream* stream );
+	
+	/* Copy */
+	#define GaussParticleLayout_Copy( self ) \
+		(GaussParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define GaussParticleLayout_DeepCopy( self ) \
+		(GaussParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _GaussParticleLayout_Copy( void* gaussParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _GaussParticleLayout_DefaultNew( Name name );
+	void  _GaussParticleLayout_Construct( void* gaussParticleLayout, Stg_ComponentFactory* cf, void* data );
+	void  _GaussParticleLayout_Build( void* gaussParticleLayout, void* data );
+	void  _GaussParticleLayout_Initialise( void* gaussParticleLayout, void* data );
+	void  _GaussParticleLayout_Execute( void* gaussParticleLayout, void* data );
+	void  _GaussParticleLayout_Destroy( void* gaussParticleLayout, void* data );
+	
+	Particle_InCellIndex _GaussParticleLayout_InitialCount( void* gaussParticleLayout, void* celllayout, Cell_Index cell_I );
+	void _GaussParticleLayout_InitialiseParticlesOfCell( void* gaussParticleLayout, void* swarm, Cell_Index cell_I );
+
+	/** Calculates the weight and abscissa for the given number of points. Upto 5 points can be used.
+	 *     @param weight Array of weights, length equal to pointCount
+	 *     @param abscissa Array of abscissa, length equal to pointCount
+	 *     @param pointCount Number of points to create in a dimension */
+	void GaussParticleLayout_GetAbscissaAndWeights1D( double* weight, double* abscissa, Index pointCount ) ;
+	
+#endif /* __Domain_Swarm_GaussParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GaussParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GaussParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">GaussParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">PerCellParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">Lays out particles on points optimised for integrating over a cell. This layout also sets the particle weights as well. See http://mathworld.wolfram.com/Legendre-GaussQuadrature.html</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+	<struct>
+		<param name="Name">gaussParticles</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">2</param>
+		<param name="Description">This is the default value that will be used for 'gaussParticlesX', 'gaussParticlesY' and 'gaussParticlesZ'.</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesX</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the X direction</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesY</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the Y direction.</param>
+	</struct>
+	<struct>
+		<param name="Name">gaussParticlesZ</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">gaussParticles</param>
+		<param name="Description">The number of gauss points laid out in the Z direction.</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GlobalParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GlobalParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,321 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: GlobalParticleLayout.c 3768 2006-08-22 00:33:26Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "CellLayout.h"
+
+const Type GlobalParticleLayout_Type = "GlobalParticleLayout";
+
+GlobalParticleLayout* _GlobalParticleLayout_New( 
+		SizeT                                               _sizeOfSelf,
+		Type                                                type,
+		Stg_Class_DeleteFunction*                           _delete,
+		Stg_Class_PrintFunction*                            _print,
+		Stg_Class_CopyFunction*                             _copy,
+		Stg_Component_DefaultConstructorFunction*           _defaultConstructor,
+		Stg_Component_ConstructFunction*                    _construct,
+		Stg_Component_BuildFunction*                        _build,
+		Stg_Component_InitialiseFunction*                   _initialise,
+		Stg_Component_ExecuteFunction*                      _execute,
+		Stg_Component_DestroyFunction*                      _destroy,
+		ParticleLayout_SetInitialCountsFunction*            _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*         _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction*    _initialiseParticle,
+		Name                                                name,
+		Bool                                                initFlag,
+		CoordSystem                                         coordSystem,
+		Bool                                                weightsInitialisedAtStartup,
+		Particle_Index                                      totalInitialParticles,
+		double                                              averageInitialParticlesPerCell )
+{
+	GlobalParticleLayout*		self;
+	
+	assert( _sizeOfSelf >= sizeof(GlobalParticleLayout) );
+	self = (GlobalParticleLayout*)_ParticleLayout_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete, 
+			_print, 
+			_copy, 
+			_defaultConstructor,
+			_construct, 
+			_build, 
+			_initialise, 
+			_execute, 
+			_destroy, 
+			_setInitialCounts,
+			_initialiseParticles, 
+			name, 
+			initFlag, 
+			coordSystem,
+			weightsInitialisedAtStartup );
+	
+	self->_initialiseParticle = _initialiseParticle;
+	
+	if( initFlag ){
+		_GlobalParticleLayout_Init( 
+				self, 
+				coordSystem, 
+				weightsInitialisedAtStartup, 
+				totalInitialParticles, 
+				averageInitialParticlesPerCell );
+	}
+	
+	return self;
+}
+
+
+void _GlobalParticleLayout_Init(
+		void*                                               particleLayout,
+		CoordSystem                                         coordSystem,
+		Bool                                                weightsInitialisedAtStartup,
+		Particle_Index                                      totalInitialParticles,
+		double                                              averageInitialParticlesPerCell )
+{
+	GlobalParticleLayout* self = (GlobalParticleLayout*)particleLayout;
+
+	self->isConstructed = True;
+
+	/* Note the total and average particles per cell need to be set in child
+	classes, as they may be worked out differently (eg the ManualParticleLayout
+	specifies the particles directly, so the total is implicit) */
+
+	self->totalInitialParticles = totalInitialParticles;
+	self->averageInitialParticlesPerCell = averageInitialParticlesPerCell;
+
+	_ParticleLayout_Init( self, coordSystem, weightsInitialisedAtStartup );
+}
+
+void _GlobalParticleLayout_Delete( void* particleLayout ) {
+	GlobalParticleLayout* self = (GlobalParticleLayout*)particleLayout;
+	
+	_ParticleLayout_Delete( self );
+}
+
+void _GlobalParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	GlobalParticleLayout* self = (GlobalParticleLayout*)particleLayout;
+	
+	Journal_Printf( stream, "GlobalParticleLayout (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_ParticleLayout_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( stream, "\t_initialiseParticle (func ptr): %p\n", self->_initialiseParticle );
+	
+	/* GlobalParticleLayout info */
+	Journal_Printf( stream, "\ttotalInitialParticles: %u\n", self->totalInitialParticles );
+	Journal_Printf( stream, "\taverageInitialParticlesPerCell: %g\n", self->averageInitialParticlesPerCell );
+}
+
+
+void* _GlobalParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	GlobalParticleLayout*		self = (GlobalParticleLayout*)particleLayout;
+	GlobalParticleLayout*		newGlobalParticleLayout;
+	
+	newGlobalParticleLayout = (GlobalParticleLayout*)_ParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+
+	/* Virtual methods */
+	newGlobalParticleLayout->_initialiseParticle= self->_initialiseParticle;
+
+	/* data */
+	newGlobalParticleLayout->averageInitialParticlesPerCell = self->averageInitialParticlesPerCell;
+	newGlobalParticleLayout->totalInitialParticles = self->totalInitialParticles;
+	
+	return (void*)newGlobalParticleLayout;
+}
+
+
+/* Note: this function is required to also set the total particle count */
+void _GlobalParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm )
+{
+	GlobalParticleLayout*	self = (GlobalParticleLayout*)particleLayout;
+	Swarm*			swarm = (Swarm*)_swarm;
+	Cell_LocalIndex		cell_I;
+	char			tempStr[100];
+	Cell_Index		globalCellCount;
+
+	Journal_DPrintf( self->debug, "In %s(): for ParticleLayout \"%s\" (of type %s):\n",
+		__func__, self->name, self->type );
+	Stream_IndentBranch( Swarm_Debug );
+
+	Journal_DPrintf( self->debug, "Calculating total number of cells in system across all processors "
+		"using MPI_Allreduce:\n" );
+	MPI_Allreduce( &swarm->cellLocalCount, &globalCellCount, 1, MPI_UNSIGNED, MPI_SUM, swarm->comm );
+	Journal_DPrintf( self->debug, "...calculated total global cell count is %u\n", globalCellCount );
+	
+	Journal_DPrintf( self->debug, "Calculating totalInitialParticles and averageInitialParticlesPerCell:\n" );
+	Stream_IndentBranch( Swarm_Debug );
+	if ( self->totalInitialParticles ) {
+		self->averageInitialParticlesPerCell = self->totalInitialParticles / (double)globalCellCount;
+		Journal_DPrintf( self->debug, "totalInitialParticles set as %u, thus calculated "
+			"averageInitialParticlesPerCell as %f.\n", self->totalInitialParticles,
+			self->averageInitialParticlesPerCell );
+	}
+	else if ( self->averageInitialParticlesPerCell ) {
+		self->totalInitialParticles = globalCellCount * self->averageInitialParticlesPerCell;
+		Journal_DPrintf( self->debug, "averageInitialParticlesPerCell set as %f, thus calculated "
+			"totalInitialParticles as %u.\n", self->averageInitialParticlesPerCell,
+			self->totalInitialParticles );
+	}
+	else {
+		Stream*     errorStream = Journal_Register( Error_Type, self->type );
+		
+		Journal_Firewall( self->totalInitialParticles || self->averageInitialParticlesPerCell,
+			errorStream, "Error - in %s(), ParticleLayout \"%s\" (of type %s): neither "
+			"totalInitialParticles or averageInitialParticlesPerCell was specified by "
+			"child class - one of these needs to be calculated so the "
+			"swarm cell memory storage can be set.\n",
+			__func__, self->name, self->type );
+	}
+	Stream_UnIndentBranch( Swarm_Debug );
+
+	/* We don't set the local particle count equal to totalInitialParticles,
+	since we're not sure how many of those are local yet */
+	swarm->particleLocalCount = 0;
+		
+	for( cell_I = 0; cell_I < swarm->cellLocalCount; cell_I++ ) {
+		/* Set initial counts to empty, till we add the particles */
+		swarm->cellParticleCountTbl[cell_I] = 0;
+		/* Set initial sizes to averageInitialParticlesPerCell, since its our best guess at how many
+		 * particles there will be after setup in this cell, and hence how much memory needed */
+		swarm->cellParticleSizeTbl[cell_I] = (int)( self->averageInitialParticlesPerCell + 0.5 );
+		
+		sprintf( tempStr, "Swarm->cellParticleTbl[%d]", cell_I );
+		swarm->cellParticleTbl[cell_I] = Memory_Alloc_Array( Particle_Index, swarm->cellParticleSizeTbl[cell_I], tempStr );
+	}
+
+	/* Now initialise the shadow cell particle counts */
+	for (; cell_I < swarm->cellDomainCount; cell_I++ ) {
+		swarm->cellParticleCountTbl[cell_I] = 0;
+		swarm->cellParticleSizeTbl[cell_I] = 0;
+		swarm->cellParticleTbl[cell_I] = NULL;
+	}
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void _GlobalParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm )
+{
+	GlobalParticleLayout*	self = (GlobalParticleLayout*)particleLayout;
+	Swarm*			swarm = (Swarm*)_swarm;
+	GlobalParticle*         particle = NULL;
+	Particle_Index		lParticle_I=0;
+	Particle_Index		newParticle_I=0;
+	Cell_Index		cell_I;
+	Particle_Index          globalParticlesInitialisedCount=0;
+	Stream*                 errorStream = Journal_Register( Error_Type, self->type );
+
+	Journal_DPrintf( self->debug, "In %s(): for ParticleLayout \"%s\" (of type %s):\n",
+		__func__, self->name, self->type );
+	Stream_IndentBranch( Swarm_Debug );
+
+	Journal_DPrintf( self->debug, "For each of the %u total global requested particles, "
+		"generating a particle, and checking if it's in this processor's domain. If so, "
+		"adding it to the appropriate local cell.\n", self->totalInitialParticles );
+	Stream_IndentBranch( Swarm_Debug );
+
+	while( newParticle_I < self->totalInitialParticles ) {
+		
+		particle = (GlobalParticle*)Swarm_ParticleAt( swarm, lParticle_I );
+		GlobalParticleLayout_InitialiseParticle( self, swarm, newParticle_I, particle );
+		/* Work out which cell the new particle is in */
+		/* First specify the particle doesn't have an owning cell yet, so as
+		not to confuse the search algorithm if its an irregular cell/mesh layout */
+		particle->owningCell = swarm->cellDomainCount;
+
+		cell_I = CellLayout_CellOf( swarm->cellLayout, particle );
+
+		/* If we found a further particle inside our domain, add it to a cell */
+		if ( cell_I < swarm->cellLocalCount ) {
+			Journal_DPrintfL( self->debug, 3, "global particle %u at (%.2f,%.2f,%.2f) inside local cell %u\n"
+				"adding it to cell and saving it as local particle %u.\n",
+				newParticle_I, particle->coord[0], particle->coord[1], particle->coord[2],
+				cell_I, lParticle_I );
+				
+			Stream_IndentBranch( Swarm_Debug );
+			/* Add it to that cell */
+			Swarm_AddParticleToCell( swarm, cell_I, lParticle_I );
+			lParticle_I++;
+			swarm->particleLocalCount++;
+			Swarm_Realloc( swarm );
+			Stream_UnIndentBranch( Swarm_Debug );
+		}
+		else {
+			Journal_DPrintfL( self->debug, 4, "global particle %u at (%.2f,%.2f,%.2f) outside this proc's domain:\n"
+				"ignoring.\n", newParticle_I, particle->coord[0], particle->coord[1], particle->coord[2] );
+		}		
+				
+		newParticle_I++;
+	}
+
+	Stream_UnIndentBranch( Swarm_Debug );
+
+	/* Do a test to make sure that the total particles assigned across all processors ==
+		totalInitialParticles count */
+	MPI_Allreduce( &swarm->particleLocalCount, &globalParticlesInitialisedCount, 1, MPI_UNSIGNED, MPI_SUM, swarm->comm );
+	Journal_Firewall( globalParticlesInitialisedCount == self->totalInitialParticles, errorStream,
+		"Error - in %s() - for GlobalParticleLayout \"%s\", of type %s: after initialising particles, "
+		"actual global count of particles initialised was %u, whereas requested global total "
+		"totalInitialParticles was %u. If actual is < requested, it means some particles were not "
+		"identified by any processor as inside their domain. If actual > requested, it means that "
+		"some particles were identified by _multiple_ processors as belonging to their domain. Both "
+		"these states are erroneous.\n",
+		__func__, self->name, self->type, globalParticlesInitialisedCount, self->totalInitialParticles );
+
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void GlobalParticleLayout_InitialiseParticle( void* particleLayout, void* _swarm, Particle_Index newParticle_I, void* particle )
+{
+	GlobalParticleLayout* self = (GlobalParticleLayout*)particleLayout;
+	
+	self->_initialiseParticle( self, _swarm, newParticle_I, particle );
+}
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GlobalParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GlobalParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,125 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class faciliting how particles are arranged. 
+**	This class is for layouts that define the initial particle positions
+**	globally, in relation to the entire cellSpace rather than a
+**	particular cell.
+**
+** Assumptions:
+**	Subclasses must set either totalInitialParticles, or averageInitialParticlesPerCell
+**
+** Comments:
+**
+** $Id: GlobalParticleLayout.h 3526 2006-04-13 03:59:17Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_GlobalParticleLayout_h__
+#define __Domain_Swarm_GlobalParticleLayout_h__
+	
+	/** @see GlobalParticleLayout_InitialiseParticle */
+	typedef void (GlobalParticleLayout_InitialiseParticleFunction) ( 
+			void*              particleLayout,
+			void*              swarm, 
+			Particle_Index     newParticle_I, 
+			void*              particle );
+	
+	/* Textual name of this class */
+	extern const Type GlobalParticleLayout_Type;
+	
+	/* ParticleLayout information */
+	#define __GlobalParticleLayout \
+		__ParticleLayout \
+		/* virtual information */ \
+		GlobalParticleLayout_InitialiseParticleFunction*	_initialiseParticle; \
+		/* member data */ \
+		Particle_Index		totalInitialParticles;          /**< Subclasses must set during init */\
+		double			averageInitialParticlesPerCell; /**< Subclasses must set during init */
+
+	struct GlobalParticleLayout { __GlobalParticleLayout };
+	
+	/* No "_New" and "_Init" as this is an abstract class */
+	
+	/* Creation implementation / Virtual constructor */
+	GlobalParticleLayout* _GlobalParticleLayout_New( 
+                SizeT                                               _sizeOfSelf,
+                Type                                                type,
+                Stg_Class_DeleteFunction*                           _delete,
+                Stg_Class_PrintFunction*                            _print,
+                Stg_Class_CopyFunction*                             _copy,
+                Stg_Component_DefaultConstructorFunction*           _defaultConstructor,
+                Stg_Component_ConstructFunction*                    _construct,
+                Stg_Component_BuildFunction*                        _build,
+                Stg_Component_InitialiseFunction*                   _initialise,
+                Stg_Component_ExecuteFunction*                      _execute,
+                Stg_Component_DestroyFunction*                      _destroy,
+                ParticleLayout_SetInitialCountsFunction*            _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*         _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction*    _initialiseParticle,
+                Name                                                name,
+                Bool                                                initFlag,
+                CoordSystem                                         coordSystem,
+                Bool                                                weightsInitialisedAtStartup,
+		Particle_Index                                      totalInitialParticles,
+		double                                              averageInitialParticlesPerCell );
+
+	void _GlobalParticleLayout_Init( 
+		void *                                              particleLayout,
+		CoordSystem                                         coordSystem,
+		Bool                                                weightsInitialisedAtStartup,
+		Particle_Index                                      totalInitialParticles,
+		double                                              averageInitialParticlesPerCell );
+	
+	void _GlobalParticleLayout_Delete( void* particleLayout );
+	
+	void _GlobalParticleLayout_Print( void* particleLayout, Stream* stream );
+	
+	/* Copy */
+	#define GlobalParticleLayout_Copy( self ) \
+		(GlobalParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define GlobalParticleLayout_DeepCopy( self ) \
+		(GlobalParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _GlobalParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _GlobalParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm );
+
+	/** Initialise all particles in system, adding it to the swarm if its within the local processor's cell. */
+	void _GlobalParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm );
+	
+	/** Init given particle's position.
+	 *     @param newParticle_I The global particle index (of all particles, not just local processor) */
+	void GlobalParticleLayout_InitialiseParticle( 
+			void*             particleLayout, 
+			void*             swarm, 
+			Particle_Index    newParticle_I,
+			void*             particle );
+	
+#endif /* __Domain_Swarm_GlobalParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/GlobalParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/GlobalParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">GlobalParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">ParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,127 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 4174 2007-08-16 03:37:44Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include "Swarm.h"
+#include "ParticleCommHandler.h"
+#include "ParticleMovementHandler.h"
+#include "ParticleShadowSync.h"
+/*#include "SwarmShapeVC.h"*/
+
+
+Stream* Swarm_VerboseConfig = NULL;
+Stream* Swarm_Debug = NULL;
+Stream* Swarm_Warning = NULL;
+Stream* Swarm_Error = NULL;
+
+
+Bool StgDomainSwarm_Init( int* argc, char** argv[] ) {
+	Swarm_VerboseConfig = Journal_Register( Info_Type, "Swarm_VerboseConfig" );
+	Swarm_Debug = Journal_Register( Debug_Type, "Swarm" );
+	Swarm_Warning = Journal_Register( Error_Type, "Swarm" );
+	Swarm_Error = Journal_Register( Error_Type, "Swarm" );
+	
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	VariableCondition_Register_Add( variableCondition_Register, SwarmShapeVC_Type, SwarmShapeVC_Factory );
+
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), GaussParticleLayout_Type, "0", _GaussParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TriGaussParticleLayout_Type, "0", _TriGaussParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), GaussBorderParticleLayout_Type, "0", _GaussBorderParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), RandomParticleLayout_Type, "0", _RandomParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), MeshParticleLayout_Type, "0", _MeshParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SpaceFillerParticleLayout_Type, "0", _SpaceFillerParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), UnionParticleLayout_Type, "0", _UnionParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), WithinShapeParticleLayout_Type, "0", _WithinShapeParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), PlaneParticleLayout_Type, "0", _PlaneParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ManualParticleLayout_Type, "0", _ManualParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), LineParticleLayout_Type, "0", _LineParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), FileParticleLayout_Type, "0", _FileParticleLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SingleCellLayout_Type, "0", _SingleCellLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ElementCellLayout_Type, "0", _ElementCellLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TriSingleCellLayout_Type, "0", (Stg_Component_DefaultConstructorFunction*)TriSingleCellLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Swarm_Type, "0", (Stg_Component_DefaultConstructorFunction*)Swarm_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SwarmVariable_Type, "0", _SwarmVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), OperatorSwarmVariable_Type, "0", _OperatorSwarmVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SwarmOutput_Type, "0", _SwarmOutput_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SwarmDump_Type, "0", _SwarmDump_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ParticleShadowSync_Type, "0", ParticleShadowSync_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ParticleMovementHandler_Type, "0", ParticleMovementHandler_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SwarmShapeVC_Type, "0", _SwarmShapeVC_DefaultNew );
+
+	RegisterParent( CellLayout_Type, Stg_Component_Type );
+	RegisterParent( ElementCellLayout_Type, CellLayout_Type );
+	RegisterParent( SingleCellLayout_Type, CellLayout_Type );
+	RegisterParent( TriSingleCellLayout_Type, CellLayout_Type );
+
+	RegisterParent( ParticleLayout_Type, Stg_Component_Type );
+
+	RegisterParent( GlobalParticleLayout_Type, ParticleLayout_Type );
+	RegisterParent( ManualParticleLayout_Type, GlobalParticleLayout_Type );
+	RegisterParent( LineParticleLayout_Type, GlobalParticleLayout_Type );
+	RegisterParent( FileParticleLayout_Type, GlobalParticleLayout_Type );
+	RegisterParent( SpaceFillerParticleLayout_Type, GlobalParticleLayout_Type );
+	RegisterParent( UnionParticleLayout_Type, GlobalParticleLayout_Type );
+	RegisterParent( WithinShapeParticleLayout_Type, SpaceFillerParticleLayout_Type );
+	RegisterParent( PlaneParticleLayout_Type, SpaceFillerParticleLayout_Type );
+
+	RegisterParent( PerCellParticleLayout_Type, ParticleLayout_Type );
+	RegisterParent( GaussParticleLayout_Type,   PerCellParticleLayout_Type );
+	RegisterParent( RandomParticleLayout_Type,   PerCellParticleLayout_Type );
+	RegisterParent( MeshParticleLayout_Type,   PerCellParticleLayout_Type );
+	RegisterParent( TriGaussParticleLayout_Type,   PerCellParticleLayout_Type );
+	RegisterParent( GaussBorderParticleLayout_Type,   GaussParticleLayout_Type );
+	
+	
+	RegisterParent( SwarmVariable_Register_Type, NamedObject_Register_Type );
+	RegisterParent( SwarmVariable_Type,         Stg_Component_Type );
+	RegisterParent( OperatorSwarmVariable_Type, SwarmVariable_Type );
+	RegisterParent( SwarmOutput_Type,           Stg_Component_Type );
+	RegisterParent( SwarmDump_Type,             Stg_Component_Type );
+	
+	RegisterParent( ParticleCommHandler_Type, Stg_Component_Type );
+	RegisterParent( ParticleMovementHandler_Type, ParticleCommHandler_Type);
+	RegisterParent( ParticleShadowSync_Type, ParticleCommHandler_Type);
+	RegisterParent( Swarm_Type, Stg_Component_Type );
+	RegisterParent( Swarm_Register_Type, Stg_Class_Type );
+	RegisterParent( SwarmShapeVC_Type,           VariableCondition_Type );
+
+	/* Create the singletons */
+	stgSwarm_Register = Swarm_Register_New(); 
+
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_Init_h__
+#define __Domain_Swarm_Init_h__
+	
+	Bool StgDomainSwarm_Init( int* argc, char** argv[] );
+	
+#endif /* __Domain_Swarm_Init_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/IntegrationPoint.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/IntegrationPoint.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,61 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Swarm_Register.c 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "LineParticleLayout.h"
+#include "SwarmClass.h"
+#include "Swarm_Register.h"
+
+#include "StandardParticle.h"
+#include "IntegrationPoint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type IntegrationPoint_Type = "IntegrationPoint";
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/IntegrationPoint.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/IntegrationPoint.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	A basic particle with a gaussian quadrature integration weight.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**
+** $Id: IntegrationPoint.h 3526 2006-04-13 03:59:17Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_IntegrationPoint_h__
+#define __Domain_Swarm_IntegrationPoint_h__
+
+	extern const Type IntegrationPoint_Type;
+
+	#define __IntegrationPoint \
+		__LocalParticle \
+		double			weight;         /**< Integration weight of this point */
+
+	struct IntegrationPoint { __IntegrationPoint };
+
+#endif /* __Domain_Swarm_IntegrationPoint_h__ */
+
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/LineParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/LineParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,303 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: LineParticleLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "LineParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+const Type LineParticleLayout_Type = "LineParticleLayout";
+
+LineParticleLayout* LineParticleLayout_New(
+		Name                                             name,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		Index                                            vertexCount,
+		Coord*                                           vertexList )
+{
+	LineParticleLayout* self = (LineParticleLayout*) _LineParticleLayout_DefaultNew( name );
+	_LineParticleLayout_Init( self, dim, totalInitialParticles, vertexCount, vertexList );
+	return self;
+}
+
+LineParticleLayout* _LineParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag )
+{
+	LineParticleLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof( LineParticleLayout ) );
+	self = (LineParticleLayout*)_GlobalParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False,
+		0,
+		0.0 );
+
+	return self;
+}
+
+
+void _LineParticleLayout_Init( 
+		void*                                            particleLayout,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		Index                                            vertexCount,
+		Coord*                                           vertexList )
+{
+	LineParticleLayout*     self        = (LineParticleLayout*) particleLayout;
+	double                  totalLength = 0.0;
+	Index                   segment_I;
+	double                  length;
+	
+	assert( totalInitialParticles >= 2 );
+	assert( vertexCount >= 2 );
+
+	self->dim = dim;
+	self->vertexCount = vertexCount;
+	self->vertexList = Memory_Alloc_Array( Coord, vertexCount, "vertexList" );
+	memcpy( self->vertexList, vertexList, sizeof(Coord) * vertexCount );
+
+	self->segmentLengthList = Memory_Alloc_Array( double, vertexCount - 1, "segmentLengthList" );
+	for ( segment_I = 0 ; segment_I < self->vertexCount - 1 ; segment_I++ ) {
+		length = StGermain_DistanceBetweenPoints( self->vertexList[ segment_I + 1 ], self->vertexList[ segment_I ], dim );
+		self->segmentLengthList[ segment_I ] = length;
+
+		totalLength += length;
+	}
+
+	self->dx = totalLength/( (double) totalInitialParticles - 1.0 );
+	
+	_GlobalParticleLayout_Init( self, GlobalCoordSystem, False, totalInitialParticles, 0.0 );
+}
+
+
+void* _LineParticleLayout_DefaultNew( Name name ) {
+	return (void*)_LineParticleLayout_New( 
+			sizeof(LineParticleLayout),
+			LineParticleLayout_Type,
+			_LineParticleLayout_Delete,
+			_LineParticleLayout_Print,
+			_LineParticleLayout_Copy,
+			_LineParticleLayout_DefaultNew,
+			_LineParticleLayout_Construct,
+			_LineParticleLayout_Build,
+			_LineParticleLayout_Initialise,
+			_LineParticleLayout_Execute,
+			_LineParticleLayout_Destroy,
+			_GlobalParticleLayout_SetInitialCounts,
+			_GlobalParticleLayout_InitialiseParticles,
+			_LineParticleLayout_InitialiseParticle,
+			name,
+			False );
+}
+
+	
+void _LineParticleLayout_Delete( void* particleLayout ) {
+	LineParticleLayout* self = (LineParticleLayout*)particleLayout;
+
+	Memory_Free( self->vertexList );
+	
+	_GlobalParticleLayout_Delete( self );
+
+}
+
+void _LineParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	LineParticleLayout* self  = (LineParticleLayout*)particleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "LineParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_GlobalParticleLayout_Print( self, stream );
+	
+	/* LineParticleLayout */
+	/*Journal_PrintArray( stream, self->startCoord, 3 );*/
+	/*Journal_PrintArray( stream, self->endCoord, 3 );*/
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _LineParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	LineParticleLayout*		self                    = (LineParticleLayout*)particleLayout;
+	LineParticleLayout*		newLineParticleLayout;
+	
+	newLineParticleLayout = _GlobalParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+
+	/*memcpy( newLineParticleLayout->startCoord, self->startCoord, sizeof(Coord) );*/
+	/*memcpy( newLineParticleLayout->endCoord, self->endCoord, sizeof(Coord) );*/
+
+	return (void*)newLineParticleLayout;
+}
+
+
+void _LineParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data ){
+	LineParticleLayout*     self                    = (LineParticleLayout*) particleLayout;
+	Particle_Index          totalInitialParticles;
+	Dimension_Index         dim;
+	Coord*                  vertexList;
+	Index                   vertexCount;
+	Index                   vertex_I;
+	Dictionary*             dictionary;
+	Stream*                 stream;
+	Dictionary_Entry_Value* entry;
+	Dictionary_Entry_Value* list;
+	double*                 coord;
+	
+	dictionary              = Dictionary_GetDictionary( cf->componentDict, self->name );
+	/*stream                  = cf->infoStream;*/
+	stream                  = Journal_MyStream( Info_Type, self );
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	/* Read list of verticies of each of the different line segments from the dictionary */
+	list = Dictionary_Get( dictionary, "verticies" );
+	vertexCount = Dictionary_Entry_Value_GetCount( list );
+	vertexList = Memory_Alloc_Array( Coord , vertexCount, "Vertex Array" );
+	memset( vertexList, 0, vertexCount * sizeof(Coord) );
+
+	Stream_Indent( stream );
+	for ( vertex_I = 0 ; vertex_I < vertexCount ; vertex_I++) { 
+		entry = Dictionary_Entry_Value_GetElement( list, vertex_I );
+		coord = vertexList[vertex_I];
+		/* Read Vertex */
+		coord[ I_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( entry, "x"));
+		coord[ J_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( entry, "y"));
+		if (dim == 3 ) {
+			coord[ K_AXIS ] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetMember( entry, "z"));
+		}
+
+		/* Print Position */
+		Journal_PrintfL( stream, 2, "(%0.3g, %0.3g, %0.3g)\n", coord[ I_AXIS ], coord[ J_AXIS ], coord[ K_AXIS ] );
+	}
+	Stream_UnIndent( stream );
+
+	totalInitialParticles = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "totalInitialParticles", 2 );
+
+	_LineParticleLayout_Init( self, dim, totalInitialParticles, vertexCount, vertexList );
+
+	/* Delete this vertexList because _LineParticleLayout_Init made a copy of it */
+	Memory_Free( vertexList );
+}
+	
+void _LineParticleLayout_Build( void* particleLayout, void* data ) {
+}
+void _LineParticleLayout_Initialise( void* particleLayout, void* data ) {
+}
+void _LineParticleLayout_Execute( void* particleLayout, void* data ) {
+}
+void _LineParticleLayout_Destroy( void* particleLayout, void* data ) {
+}
+
+void _LineParticleLayout_InitialiseParticle( void* particleLayout, void* _swarm, Particle_Index newParticle_I, void* _particle )
+{
+	LineParticleLayout*        self             = (LineParticleLayout*)particleLayout;
+	Axis                       axis_I;
+	Index                      segment_I;
+	double                     lengthFromVertex = self->dx * (double) newParticle_I;
+	double                     factor;
+	double                     segmentLength    = 0.0;
+	GlobalParticle*            particle         = (GlobalParticle*)_particle;
+
+	/* Find which segment the particle is in */
+	for ( segment_I = 0 ; segment_I < self->vertexCount - 1 ; segment_I++ ) {
+		segmentLength = self->segmentLengthList[ segment_I ];
+		if ( lengthFromVertex < self->segmentLengthList[ segment_I ] )
+			break;
+		lengthFromVertex -= segmentLength;
+	}
+	
+	/* Check if we are the last particle */
+	if ( segment_I == self->vertexCount - 1 ) {
+		memcpy( particle->coord, self->vertexList[ segment_I ], sizeof(Coord) );
+		return;
+	}
+
+	factor = lengthFromVertex / segmentLength;
+
+	memcpy( particle->coord, self->vertexList[ segment_I ], sizeof(Coord) );
+	for ( axis_I = 0 ; axis_I < self->dim ; axis_I++ ) {
+		particle->coord[axis_I] += factor 
+			* ( self->vertexList[ segment_I + 1 ][ axis_I ] - self->vertexList[ segment_I ][ axis_I ] )  ;
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/LineParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/LineParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a manually distributed particle layout.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: LineParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_LineParticleLayout_h__
+#define __Domain_Swarm_LineParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type LineParticleLayout_Type;
+	
+	/* LineParticleLayout information */
+	#define __LineParticleLayout \
+		__GlobalParticleLayout \
+		\
+		Dimension_Index                                  dim;                      \
+		Index                                            vertexCount;              \
+		Coord*                                           vertexList;               \
+		double*                                          segmentLengthList;        \
+		double                                           dx;
+
+	struct LineParticleLayout { __LineParticleLayout };
+	
+	/* Create a new LineParticleLayout and initialise */
+	LineParticleLayout* LineParticleLayout_New(
+		Name                                             name,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		Index                                            vertexCount,
+		Coord*                                           vertexList );
+
+	/* Creation implementation / Virtual constructor */
+	LineParticleLayout* _LineParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag );
+	
+	void _LineParticleLayout_Init( 
+		void*                                            particleLayout,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		Index                                            vertexCount,
+		Coord*                                           vertexList );
+	
+	/* 'Stg_Class' Stuff */
+	void _LineParticleLayout_Delete( void* particleLayout );
+	void _LineParticleLayout_Print( void* particleLayout, Stream* stream );
+	#define LineParticleLayout_Copy( self ) \
+		(LineParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define LineParticleLayout_DeepCopy( self ) \
+		(LineParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _LineParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _LineParticleLayout_DefaultNew( Name name ) ;
+	void _LineParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data );
+	void _LineParticleLayout_Build( void* particleLayout, void* data );
+	void _LineParticleLayout_Initialise( void* particleLayout, void* data );
+	void _LineParticleLayout_Execute( void* particleLayout, void* data );
+	void _LineParticleLayout_Destroy( void* particleLayout, void* data );
+	
+	/* Initialises the coordinates of a cell's particle */
+	void _LineParticleLayout_InitialiseParticle( void* particleLayout, void* swarm, Particle_Index newParticle_I, void* particle);
+
+#endif /* __Domain_Swarm_LineParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/LineParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/LineParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">LineParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">GlobalParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This lays equally spaced particles out on a continuous set of line segments.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">totalInitialParticles</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">2</param>
+		<param name="Description">This is the total number of particles specified throughout the global domain.</param>
+	</struct>
+	<struct>
+		<param name="Name">verticies</param>
+		<param name="Type">list</param>
+		<param name="ElementType">Double</param>
+		<param name="ElementHeaders">x, y, z</param>
+		<param name="Description">A list of verticies that define the line segments on which the particles will be distributed.</param>
+	</struct>	
+
+</list>
+
+<list name="Dependencies">
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayoutExample1">
+		<param name="Type">LineParticleLayout</param>
+		<param name="totalInitialParticles">6</param>
+		<list name="verticies">
+			<asciidata>		
+				<columnDefinition name = "x" type="double"/>
+				<columnDefinition name = "y" type="double"/>
+				<columnDefinition name = "z" type="double"/> 
+                0.5 0.1 0.0
+                0.1 1.0 0.0
+                0.3 1.0 2.0
+			</asciidata>		
+		</list>		
+	</struct>
+	<struct name="particleLayoutExample2">
+		<param name="Type">LineParticleLayout</param>
+		<param name="totalInitialParticles">6</param>
+		<list name="verticies">
+			<struct>
+				<param name="x">0.5</param>
+				<param name="y">0.1</param>
+				<param name="z">0.0</param>
+			</struct>
+			<struct>
+				<param name="x">0.1</param>
+				<param name="y">1.0</param>
+				<param name="z">0.0</param>
+			</struct>			
+			<struct>
+				<param name="x">0.3</param>
+				<param name="y">1.0</param>
+				<param name="z">2.0</param>
+			</struct>			
+		</list>		
+	</struct>	
+</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ManualParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ManualParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,222 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ManualParticleLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "ManualParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+const Type ManualParticleLayout_Type = "ManualParticleLayout";
+
+const Index ManualParticleLayout_Invalid = (Index)0;
+
+ManualParticleLayout* ManualParticleLayout_New( Name name, Dictionary* dictionary ) 
+{
+	ManualParticleLayout* self = (ManualParticleLayout*) _ManualParticleLayout_DefaultNew( name );
+	_ManualParticleLayout_Init( self, dictionary );
+	return self;
+}
+
+ManualParticleLayout* _ManualParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy,
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Dictionary*                                      dictionary )
+{
+	ManualParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (ManualParticleLayout*)_GlobalParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False,
+		0,
+		0.0 );
+
+	if ( initFlag ) {
+		_ManualParticleLayout_Init( self, dictionary );
+	}
+
+	return self;
+}
+
+void _ManualParticleLayout_Init( void* manualParticleLayout, Dictionary* dictionary )
+{
+	ManualParticleLayout*	self                            = (ManualParticleLayout*)manualParticleLayout;
+	Dictionary_Entry_Value* manualParticlePositions         = NULL;
+	Particle_Index          totalInitialParticles;
+	double                  averageInitialParticlesPerCell;
+
+	self->isConstructed = True;
+	self->dictionary    = dictionary;
+
+	manualParticlePositions = Dictionary_Get( self->dictionary, "manualParticlePositions" );
+	totalInitialParticles = Dictionary_Entry_Value_GetCount( manualParticlePositions );
+	averageInitialParticlesPerCell = 0;
+	
+	_GlobalParticleLayout_Init( self, GlobalCoordSystem, False, totalInitialParticles, averageInitialParticlesPerCell );
+}
+
+void _ManualParticleLayout_Delete( void* manualParticleLayout ) {
+	ManualParticleLayout* self = (ManualParticleLayout*)manualParticleLayout;
+
+	_GlobalParticleLayout_Delete( self );
+}
+
+void _ManualParticleLayout_Print( void* manualParticleLayout, Stream* stream ) {
+	ManualParticleLayout* self  = (ManualParticleLayout*)manualParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "ManualParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_GlobalParticleLayout_Print( self, stream );
+	
+	/* ManualParticleLayout */
+	
+	Stream_UnIndent( stream );
+}
+
+void* _ManualParticleLayout_Copy( void* manualParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ManualParticleLayout*		self                    = (ManualParticleLayout*)manualParticleLayout;
+	ManualParticleLayout*		newManualParticleLayout;
+	
+	newManualParticleLayout = (ManualParticleLayout*)_GlobalParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+
+	return (void*)newManualParticleLayout;
+}
+
+void* _ManualParticleLayout_DefaultNew( Name name ) {
+	return (void*)_ManualParticleLayout_New( 
+			sizeof(ManualParticleLayout),
+			ManualParticleLayout_Type,
+			_ManualParticleLayout_Delete,
+			_ManualParticleLayout_Print,
+			_ManualParticleLayout_Copy,
+			_ManualParticleLayout_DefaultNew,
+			_ManualParticleLayout_Construct,
+			_ManualParticleLayout_Build,
+			_ManualParticleLayout_Initialise,
+			_ManualParticleLayout_Execute,
+			_ManualParticleLayout_Destroy,
+			_GlobalParticleLayout_SetInitialCounts,
+			_GlobalParticleLayout_InitialiseParticles,
+			_ManualParticleLayout_InitialiseParticle,
+			name,
+			False,
+			NULL /* dictionary */ );
+}
+
+void _ManualParticleLayout_Construct( void* manualParticleLayout, Stg_ComponentFactory *cf, void* data ) {
+	ManualParticleLayout*      self       = (ManualParticleLayout*) manualParticleLayout;
+	Dictionary*                dictionary;
+	
+	dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+
+	_ManualParticleLayout_Init( self, dictionary );
+}
+	
+void _ManualParticleLayout_Build( void* manualParticleLayout, void* data ) {
+}
+void _ManualParticleLayout_Initialise( void* manualParticleLayout, void* data ) {
+}
+void _ManualParticleLayout_Execute( void* manualParticleLayout, void* data ) {
+}
+void _ManualParticleLayout_Destroy( void* manualParticleLayout, void* data ) {
+}
+
+void _ManualParticleLayout_InitialiseParticle( 
+		void* manualParticleLayout, 
+		void* _swarm, 
+		Particle_Index newParticle_I,
+		void* _particle )
+{
+	ManualParticleLayout*       self                    = (ManualParticleLayout*)manualParticleLayout;
+	Dictionary_Entry_Value*     manualParticlePositions = NULL;
+	Dictionary_Entry_Value*     particlePositionEntry   = NULL;
+	Dictionary*                 particlePositionDict    = NULL;
+	GlobalParticle*             particle                = (GlobalParticle*)_particle;
+
+	manualParticlePositions = Dictionary_Get( self->dictionary, "manualParticlePositions" );
+	particlePositionEntry = Dictionary_Entry_Value_GetElement( manualParticlePositions, newParticle_I );
+	particlePositionDict = Dictionary_Entry_Value_AsDictionary( particlePositionEntry );
+	particle->coord[I_AXIS] = Dictionary_GetDouble_WithDefault( particlePositionDict, "x", 0.0 );
+	particle->coord[J_AXIS] = Dictionary_GetDouble_WithDefault( particlePositionDict, "y", 0.0 );
+	particle->coord[K_AXIS] = Dictionary_GetDouble_WithDefault( particlePositionDict, "z", 0.0 );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ManualParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ManualParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,106 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a manually distributed particle layout.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: ManualParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_ManualParticleLayout_h__
+#define __Domain_Swarm_ManualParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type ManualParticleLayout_Type;
+
+	extern const Index ManualParticleLayout_Invalid;
+
+	/* ManualParticleLayout information */
+	#define __ManualParticleLayout \
+		__GlobalParticleLayout \
+		\
+		Dictionary*             dictionary;
+
+	struct ManualParticleLayout { __ManualParticleLayout };
+	
+	/* Create a new ManualParticleLayout and initialise */
+	ManualParticleLayout* ManualParticleLayout_New( Name name, Dictionary* dictionary );
+	
+	/* Creation implementation / Virtual constructor */
+	ManualParticleLayout* _ManualParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Dictionary*                                      dictionary );
+	
+	void _ManualParticleLayout_Init( void* manualParticleLayout, Dictionary* dictionary );
+	
+	/* 'Stg_Class' Stuff */
+	void _ManualParticleLayout_Delete( void* manualParticleLayout );
+	void _ManualParticleLayout_Print( void* manualParticleLayout, Stream* stream );
+	#define ManualParticleLayout_Copy( self ) \
+		(ManualParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ManualParticleLayout_DeepCopy( self ) \
+		(ManualParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _ManualParticleLayout_Copy( void* manualParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _ManualParticleLayout_DefaultNew( Name name ) ;
+	void _ManualParticleLayout_Construct( void* manualParticleLayout, Stg_ComponentFactory *cf, void* data );
+	void _ManualParticleLayout_Build( void* manualParticleLayout, void* data );
+	void _ManualParticleLayout_Initialise( void* manualParticleLayout, void* data );
+	void _ManualParticleLayout_Execute( void* manualParticleLayout, void* data );
+	void _ManualParticleLayout_Destroy( void* manualParticleLayout, void* data );
+	
+	void _ManualParticleLayout_InitialiseParticle( 
+			void* manualParticleLayout, 
+			void* swarm, 
+			Particle_Index newParticle_I,
+			void* particle);
+
+#endif /* __Domain_Swarm_ManualParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ManualParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ManualParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ManualParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">GlobalParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This lays out a particle in each of the positions manually specified in the dictionary.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">manualParticlePositions</param>
+		<param name="Type">list</param>
+		<param name="ElementType">Double</param>
+		<param name="ElementHeaders">x, y, z</param>
+		<param name="Description">A list of particle positions.</param>
+	</struct>
+</list>
+
+<list name="Dependencies">
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayoutExample1">
+		<param name="Type">ManualParticleLayout</param>
+		<list name="manualParticlePositions">
+			<asciidata>		
+				<columnDefinition name = "x" type="double"/>
+				<columnDefinition name = "y" type="double"/>
+				<columnDefinition name = "z" type="double"/> 
+                0.5 0.1 0.0
+                0.1 1.0 0.0
+                0.3 1.0 2.0
+			</asciidata>		
+		</list>		
+	</struct>
+	<struct name="particleLayoutExample2">
+		<param name="Type">ManualParticleLayout</param>
+		<list name="manualParticlePositions">
+			<struct>
+				<param name="x">0.5</param>
+				<param name="y">0.1</param>
+				<param name="z">0.0</param>
+			</struct>
+			<struct>
+				<param name="x">0.1</param>
+				<param name="y">1.0</param>
+				<param name="z">0.0</param>
+			</struct>			
+			<struct>
+				<param name="x">0.3</param>
+				<param name="y">1.0</param>
+				<param name="z">2.0</param>
+			</struct>			
+		</list>		
+	</struct>
+</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/MeshParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/MeshParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,297 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "MeshParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "Random.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+const Type MeshParticleLayout_Type = "MeshParticleLayout";
+
+
+MeshParticleLayout* MeshParticleLayout_New( 
+		Name                 name, 
+		Particle_InCellIndex cellParticleCount, 
+		unsigned int         seed ) 
+{
+	MeshParticleLayout* self = (MeshParticleLayout*) _MeshParticleLayout_DefaultNew( name );
+	_MeshParticleLayout_Init( self, cellParticleCount, seed );
+
+	return self;
+}
+
+MeshParticleLayout* _MeshParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy,
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                         initFlag,
+		Particle_InCellIndex                                        cellParticleCount,
+		unsigned int                                                seed )
+{
+	MeshParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (MeshParticleLayout*)_PerCellParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialCount,
+		_initialiseParticlesOfCell,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False );
+
+	if ( initFlag ) {
+		_MeshParticleLayout_Init( self, cellParticleCount, seed );
+	}
+	
+	return self;
+}
+
+void _MeshParticleLayout_Init( void* meshParticleLayout, Particle_InCellIndex cellParticleCount, unsigned int seed ) {
+	MeshParticleLayout* self = (MeshParticleLayout*)meshParticleLayout;
+
+	self->mesh = NULL;
+	self->isConstructed     = True;
+	self->cellParticleCount = cellParticleCount;
+	self->seed              = seed;
+	
+	Swarm_Random_Seed( self->seed );
+
+	_PerCellParticleLayout_Init( meshParticleLayout, GlobalCoordSystem, False );
+}
+
+
+void _MeshParticleLayout_Delete( void* meshParticleLayout ) {
+	MeshParticleLayout* self = (MeshParticleLayout*)meshParticleLayout;
+	
+	/* Stg_Class_Delete parent class */
+	_PerCellParticleLayout_Delete( self );
+}
+
+void _MeshParticleLayout_Print( void* meshParticleLayout, Stream* stream ) {
+	MeshParticleLayout* self = (MeshParticleLayout*)meshParticleLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshParticleLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( meshParticleLayoutStream, "MeshParticleLayout (ptr): %p:\n", self );
+	
+	/* Parent class info */
+	_PerCellParticleLayout_Print( self, stream );
+	
+	/* MeshParticleLayout */
+	Journal_Printf( meshParticleLayoutStream, "\tcellParticleCount: %u\n", self->cellParticleCount );
+	Journal_Printf( meshParticleLayoutStream, "\tseed: %u\n", self->seed );
+}
+
+
+void* _MeshParticleLayout_Copy( void* meshParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	MeshParticleLayout*		self = (MeshParticleLayout*)meshParticleLayout;
+	MeshParticleLayout*		newMeshParticleLayout;
+	
+	newMeshParticleLayout = (MeshParticleLayout*)_PerCellParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newMeshParticleLayout->cellParticleCount = self->cellParticleCount;
+	newMeshParticleLayout->seed = self->seed;
+	
+	return (void*)newMeshParticleLayout;
+}
+
+
+void* _MeshParticleLayout_DefaultNew( Name name ) {
+	return (void*)_MeshParticleLayout_New( 
+			sizeof(MeshParticleLayout),
+			MeshParticleLayout_Type,
+			_MeshParticleLayout_Delete,
+			_MeshParticleLayout_Print, 
+			_MeshParticleLayout_Copy,
+			_MeshParticleLayout_DefaultNew,
+			_MeshParticleLayout_Construct,
+			_MeshParticleLayout_Build,
+			_MeshParticleLayout_Initialise,
+			_MeshParticleLayout_Execute,
+			_MeshParticleLayout_Destroy,
+			_PerCellParticleLayout_SetInitialCounts,
+			_PerCellParticleLayout_InitialiseParticles,
+			_MeshParticleLayout_InitialCount,
+			_MeshParticleLayout_InitialiseParticlesOfCell, 
+			name,
+			False,
+			0, /* cellParticleCount */
+			0  /* seed */ );
+}
+
+void _MeshParticleLayout_Construct( void* meshParticleLayout, Stg_ComponentFactory* cf, void* data ) {
+	MeshParticleLayout*       self = (MeshParticleLayout*)meshParticleLayout;
+	Particle_InCellIndex        cellParticleCount;
+	unsigned int                seed;
+
+	cellParticleCount = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "cellParticleCount", 0 );
+	seed = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "seed", 13 );
+	
+	_MeshParticleLayout_Init( self, cellParticleCount, seed );
+
+	self->mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, True, data );
+}
+	
+void _MeshParticleLayout_Build( void* meshParticleLayout, void* data ) {
+	MeshParticleLayout*       self = (MeshParticleLayout*)meshParticleLayout;
+
+	assert( self );
+
+	Stg_Component_Build( self->mesh, NULL, False );
+}
+	
+void _MeshParticleLayout_Initialise( void* meshParticleLayout, void* data ) {
+	MeshParticleLayout*       self = (MeshParticleLayout*)meshParticleLayout;
+
+	assert( self );
+
+	Stg_Component_Initialise( self->mesh, NULL, False );
+}
+	
+void _MeshParticleLayout_Execute( void* meshParticleLayout, void* data ) {
+	
+}
+	
+void _MeshParticleLayout_Destroy( void* meshParticleLayout, void* data ) {
+	
+}
+
+
+Particle_InCellIndex _MeshParticleLayout_InitialCount( void* meshParticleLayout, void* celllayout, Cell_Index cell_I ) {
+	MeshParticleLayout* self = (MeshParticleLayout*)meshParticleLayout;
+	return self->cellParticleCount;
+}
+
+void _MeshParticleLayout_InitialiseParticlesOfCell( void* meshParticleLayout, void* _swarm, Cell_Index cell_I ) {
+	MeshParticleLayout*	self = (MeshParticleLayout*)meshParticleLayout;
+	Swarm*              	swarm = (Swarm*)_swarm;
+	Coord               	min = {-1.0, -1.0, -1.0};
+	Coord               	max = {1.0, 1.0, 1.0};
+	Coord			localCoord;
+	double			basis[8];
+	unsigned		nDims = Mesh_GetDimSize( self->mesh );
+	double**		nodeCoords = self->mesh->verts;
+	unsigned		nNodes, *incNodes;
+	Particle_InCellIndex	particlesThisCell = swarm->cellParticleCountTbl[cell_I];
+	Particle_InCellIndex	cParticle_I = 0;
+	GlobalParticle*	        particle = NULL;
+	IArray*			inc;
+	unsigned		d_i, n_i;
+
+	assert( nDims == 2 || nDims == 3 );
+
+	inc = IArray_New();
+	Mesh_GetIncidence( self->mesh, nDims, cell_I, MT_VERTEX, 
+			   inc );
+	nNodes = IArray_GetSize( inc );
+	incNodes = IArray_GetPtr( inc );
+
+	for ( cParticle_I = 0; cParticle_I < particlesThisCell; cParticle_I++ ) {	
+		particle = (GlobalParticle*)Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		particle->owningCell = cell_I;
+		
+		for ( d_i = 0; d_i < nDims; d_i++ ) {
+			localCoord[d_i] = Swarm_Random_Random_WithMinMax( min[d_i], max[d_i] );
+		}
+
+		/* Convert the coordinate to global. Assumes quad or hex mesh. */
+		if( nDims == 2 ) {
+			basis[0] = 0.25 * (1.0 - localCoord[0]) * (1.0 - localCoord[1]);
+			basis[1] = 0.25 * (1.0 + localCoord[0]) * (1.0 - localCoord[1]);
+			basis[2] = 0.25 * (1.0 - localCoord[0]) * (1.0 + localCoord[1]);
+			basis[3] = 0.25 * (1.0 + localCoord[0]) * (1.0 + localCoord[1]);
+		}
+		else {
+			basis[0] = 0.125 * (1.0 - localCoord[0]) * (1.0 - localCoord[1]) * (1.0 - localCoord[2]);
+			basis[1] = 0.125 * (1.0 + localCoord[0]) * (1.0 - localCoord[1]) * (1.0 - localCoord[2]);
+			basis[2] = 0.125 * (1.0 - localCoord[0]) * (1.0 + localCoord[1]) * (1.0 - localCoord[2]);
+			basis[3] = 0.125 * (1.0 + localCoord[0]) * (1.0 + localCoord[1]) * (1.0 - localCoord[2]);
+			basis[4] = 0.125 * (1.0 - localCoord[0]) * (1.0 - localCoord[1]) * (1.0 + localCoord[2]);
+			basis[5] = 0.125 * (1.0 + localCoord[0]) * (1.0 - localCoord[1]) * (1.0 + localCoord[2]);
+			basis[6] = 0.125 * (1.0 - localCoord[0]) * (1.0 + localCoord[1]) * (1.0 + localCoord[2]);
+			basis[7] = 0.125 * (1.0 + localCoord[0]) * (1.0 + localCoord[1]) * (1.0 + localCoord[2]);
+		}
+
+		memset( particle->coord, 0, sizeof(double) * nDims );
+		for( d_i = 0; d_i < nDims; d_i++ ) {
+			for( n_i = 0; n_i < nNodes; n_i++ ) {
+				particle->coord[d_i] += basis[n_i] * nodeCoords[incNodes[n_i]][d_i];
+			}
+		}
+	}
+
+	NewClass_Delete( inc );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/MeshParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/MeshParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,112 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a randomly distributed particle layout within each cell.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: MeshParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_MeshParticleLayout_h__
+#define __Domain_Swarm_MeshParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type MeshParticleLayout_Type;
+	
+	/* MeshParticleLayout information */
+	#define __MeshParticleLayout \
+		__PerCellParticleLayout \
+		\
+		Mesh*			     mesh; \
+		Particle_InCellIndex         cellParticleCount; /**< Number of particles in each cell to create initially */ \
+		unsigned int                 seed;              /**< The random seed used to generate positions. */
+
+	struct MeshParticleLayout { __MeshParticleLayout };
+	
+	/* Create a new MeshParticleLayout and initialise */
+	MeshParticleLayout* MeshParticleLayout_New( Name name, Particle_InCellIndex cellParticleCount, unsigned int seed ) ;
+	
+	/* Creation implementation / Virtual constructor */
+	MeshParticleLayout* _MeshParticleLayout_New( 
+                SizeT                                                       _sizeOfSelf,
+                Type                                                        type,
+                Stg_Class_DeleteFunction*                                   _delete,
+                Stg_Class_PrintFunction*                                    _print,
+                Stg_Class_CopyFunction*                                     _copy,
+                Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+                Stg_Component_ConstructFunction*                            _construct,
+                Stg_Component_BuildFunction*                                _build,
+                Stg_Component_InitialiseFunction*                           _initialise,
+                Stg_Component_ExecuteFunction*                              _execute,
+                Stg_Component_DestroyFunction*                              _destroy,
+                ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+                PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+                PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+                Name                                                        name,
+		Bool                                                        initFlag,
+		Particle_InCellIndex                                        cellParticleCount,
+		unsigned int                                                seed );
+
+	void _MeshParticleLayout_Init( 
+			void*                meshParticleLayout, 
+			Particle_InCellIndex cellParticleCount, 
+			unsigned int         seed);
+
+	/* 'Class' Stuff */
+	void _MeshParticleLayout_Delete( void* meshParticleLayout );
+	void _MeshParticleLayout_Print( void* meshParticleLayout, Stream* stream );
+	
+	#define MeshParticleLayout_Copy( self ) \
+		(MeshParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshParticleLayout_DeepCopy( self ) \
+		(MeshParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _MeshParticleLayout_Copy( void* meshParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _MeshParticleLayout_DefaultNew( Name name ) ;
+	void _MeshParticleLayout_Construct( void* meshParticleLayout, Stg_ComponentFactory* cf, void* data );
+	void _MeshParticleLayout_Build( void* meshParticleLayout, void* data );
+	void _MeshParticleLayout_Initialise( void* meshParticleLayout, void* data );
+	void _MeshParticleLayout_Execute( void* meshParticleLayout, void* data );
+	void _MeshParticleLayout_Destroy( void* meshParticleLayout, void* data );
+	
+	Particle_InCellIndex _MeshParticleLayout_InitialCount( void* meshParticleLayout, void* celllayout,  Cell_Index cell_I );
+	
+	void _MeshParticleLayout_InitialiseParticlesOfCell( void* meshParticleLayout, void* _swarm, Cell_Index cell_I );
+
+
+	
+#endif /* __Domain_Swarm_MeshParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/MeshParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/MeshParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">PerCellParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">Randomly distributes particles within cells.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">cellParticleCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">The number of particles you want in each cell.</param>
+	</struct>
+	<struct>
+		<param name="Name">seed</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">13</param>
+		<param name="Description">The seed that you want to give the random number generator. The same seed will always give the same particle positions.</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayoutExample1">
+		<param name="Type">RandomParticleLayout</param>
+		<param name="cellParticleLayout">20</param>
+		<param name="seed">2</param>
+	</struct>
+</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/OperatorSwarmVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/OperatorSwarmVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,359 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: OperatorSwarmVariable.c 4137 2007-06-07 05:46:46Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmVariable_Register.h"
+#include "SwarmVariable.h"
+#include "OperatorSwarmVariable.h"
+#include "SwarmClass.h"
+
+#include <assert.h>
+
+const Type OperatorSwarmVariable_Type = "OperatorSwarmVariable";
+const Name defaultOperatorSwarmVariableName = "defaultOperatorSwarmVariableName";
+
+OperatorSwarmVariable* OperatorSwarmVariable_NewUnary( 
+		Name                                               name,
+		void*                                              _swarmVariable,
+		Name                                               operatorName )
+{
+	SwarmVariable*          swarmVariable = (SwarmVariable*) _swarmVariable;
+	OperatorSwarmVariable*  operatorSwarmVariable;
+       	
+	operatorSwarmVariable = OperatorSwarmVariable_New( 
+			name,
+			_OperatorSwarmVariable_UnaryValueAt, 
+			operatorName,
+			1,
+			&swarmVariable );
+
+	return operatorSwarmVariable;
+}
+
+OperatorSwarmVariable* OperatorSwarmVariable_NewBinary( 
+		Name                                               name,
+		void*                                              _swarmVariable1,
+		void*                                              _swarmVariable2,
+		Name                                               operatorName )
+{
+	SwarmVariable* swarmVariableList[2];
+       
+	swarmVariableList[0] = (SwarmVariable*) _swarmVariable1;
+	swarmVariableList[1] = (SwarmVariable*) _swarmVariable2;
+	
+	return OperatorSwarmVariable_New( 
+			name,
+			_OperatorSwarmVariable_BinaryValueAt, 
+			operatorName,
+			2, 
+			swarmVariableList );
+}
+
+void* _OperatorSwarmVariable_DefaultNew( Name name )
+{
+		return (void*) _OperatorSwarmVariable_New( 
+			sizeof(OperatorSwarmVariable), 
+			OperatorSwarmVariable_Type, 
+			_SwarmVariable_Delete, 
+			_OperatorSwarmVariable_Print,
+			_OperatorSwarmVariable_Copy, 
+			_OperatorSwarmVariable_DefaultNew,
+			_OperatorSwarmVariable_Construct,
+			_OperatorSwarmVariable_Build, 
+			_OperatorSwarmVariable_Initialise, 
+			_OperatorSwarmVariable_Execute,
+			_OperatorSwarmVariable_Destroy,
+			_OperatorSwarmVariable_ValueAt,
+			_OperatorSwarmVariable_GetMinGlobalMagnitude,
+			_OperatorSwarmVariable_GetMaxGlobalMagnitude, 
+			name );
+}
+
+OperatorSwarmVariable* OperatorSwarmVariable_New( 
+		Name                                               name,
+		SwarmVariable_ValueAtFunction*                     _valueAt,
+		Name                                               operatorName,
+		Index                                              swarmVariableCount,
+		SwarmVariable**                                    swarmVariableList )
+{
+	OperatorSwarmVariable*  operatorSwarmVariable;
+
+	operatorSwarmVariable = _OperatorSwarmVariable_New( 
+			sizeof(OperatorSwarmVariable), 
+			OperatorSwarmVariable_Type, 
+			_SwarmVariable_Delete, 
+			_OperatorSwarmVariable_Print,
+			_OperatorSwarmVariable_Copy, 
+			_OperatorSwarmVariable_DefaultNew,
+			_OperatorSwarmVariable_Construct,
+			_OperatorSwarmVariable_Build, 
+			_OperatorSwarmVariable_Initialise, 
+			_OperatorSwarmVariable_Execute,
+			_OperatorSwarmVariable_Destroy,
+			_OperatorSwarmVariable_ValueAt,
+			_OperatorSwarmVariable_GetMinGlobalMagnitude,
+			_OperatorSwarmVariable_GetMaxGlobalMagnitude, 
+			name );
+
+	/* Following Rob's inheritance approach for this file, until we do the big fix-up */
+	/* Can pass in 0 for the dofs since this will be updated in the next func */
+	SwarmVariable_InitAll( operatorSwarmVariable, swarmVariableList[0]->swarm, NULL, 0 );
+	_OperatorSwarmVariable_Init( operatorSwarmVariable, operatorName, swarmVariableCount, swarmVariableList );
+
+	return operatorSwarmVariable;
+}
+
+OperatorSwarmVariable* _OperatorSwarmVariable_New(
+			SizeT                                              _sizeOfSelf, 
+			Type                                               type,
+			Stg_Class_DeleteFunction*                          _delete,
+			Stg_Class_PrintFunction*                           _print, 
+			Stg_Class_CopyFunction*                            _copy, 
+			Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+			Stg_Component_ConstructFunction*                   _construct,
+			Stg_Component_BuildFunction*                       _build,
+			Stg_Component_InitialiseFunction*                  _initialise,
+			Stg_Component_ExecuteFunction*                     _execute,
+			Stg_Component_DestroyFunction*                     _destroy,
+			SwarmVariable_ValueAtFunction*                     _valueAt,
+			SwarmVariable_GetGlobalValueFunction*              _getMinGlobalMagnitude,
+			SwarmVariable_GetGlobalValueFunction*              _getMaxGlobalMagnitude,
+			Name                                               name )
+{
+	OperatorSwarmVariable*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(OperatorSwarmVariable) );
+	self = (OperatorSwarmVariable*) _SwarmVariable_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,	
+			_build, 
+			_initialise, 
+			_execute,
+			_destroy,
+			_valueAt,
+			_getMinGlobalMagnitude,
+			_getMaxGlobalMagnitude,
+			name );
+	
+	return self;
+}
+
+void _OperatorSwarmVariable_Delete( void* _swarmVariable ) {
+	OperatorSwarmVariable* self = (OperatorSwarmVariable*) _swarmVariable;
+
+	Memory_Free( self->swarmVariableList );
+
+	_SwarmVariable_Delete( self );
+}
+
+void _OperatorSwarmVariable_Print( void* _swarmVariable, Stream* stream ) {
+	OperatorSwarmVariable* self = (OperatorSwarmVariable*) _swarmVariable;
+	Index                  swarmVariable_I;
+
+	_SwarmVariable_Print( self, stream );
+
+	Journal_PrintValue( stream, self->swarmVariableCount );
+	for ( swarmVariable_I = 0 ; swarmVariable_I < self->swarmVariableCount ; swarmVariable_I++ ) 
+		Journal_Printf( stream, "\tSwarmVariable %u - '%s'\n", swarmVariable_I, self->swarmVariableList[ swarmVariable_I ]->name );
+
+}
+
+void _OperatorSwarmVariable_Init( void* ofv, Name operatorName, Index swarmVariableCount, SwarmVariable** swarmVariableList ) {
+	OperatorSwarmVariable*	self = (OperatorSwarmVariable*)ofv;
+	SwarmVariable*              swarmVariable;
+	Index                       swarmVariable_I;
+	Stream*                     errorStream       = Journal_Register( Error_Type, self->type );
+
+	self->isConstructed = True;
+
+	self->_operator              = Operator_NewFromName( operatorName, swarmVariableList[0]->dofCount, self->dim );
+	self->dofCount               = self->_operator->resultDofs; /* reset value */
+	self->swarmVariableCount     = swarmVariableCount;
+
+	/* Copy swarm variable list */
+	self->swarmVariableList      = Memory_Alloc_Array( SwarmVariable*, swarmVariableCount, "Array of Swarm Variables" );
+	memcpy( self->swarmVariableList, swarmVariableList, swarmVariableCount * sizeof( SwarmVariable* ) );
+
+	for ( swarmVariable_I = 0 ; swarmVariable_I < swarmVariableCount ; swarmVariable_I++ ) {
+		swarmVariable = swarmVariableList[ swarmVariable_I ];
+		Journal_Firewall( swarmVariable != NULL, errorStream, 
+				"In func %s: SwarmVariable %u in list is NULL\n", __func__, swarmVariable_I );
+		Journal_Firewall( swarmVariable->dofCount <= MAX_DOF, errorStream, 
+			"In func %s: Swarm Variable '%s' has too many components.\n", __func__, swarmVariable->name );
+	}
+}
+
+
+void* _OperatorSwarmVariable_Copy( void* swarmVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	OperatorSwarmVariable*	self = (OperatorSwarmVariable*)swarmVariable;
+	OperatorSwarmVariable*	newOperatorSwarmVariable;
+	
+	newOperatorSwarmVariable = _SwarmVariable_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newOperatorSwarmVariable->_operator              = self->_operator;
+	newOperatorSwarmVariable->swarmVariableCount     = self->swarmVariableCount;
+	
+	if (deep) {
+		newOperatorSwarmVariable->swarmVariableList = Memory_Alloc_Array( SwarmVariable*, self->swarmVariableCount, 
+				"Array of Swarm Variables" );
+		memcpy( newOperatorSwarmVariable->swarmVariableList, self->swarmVariableList, 
+				self->swarmVariableCount * sizeof( SwarmVariable* ) );
+	}
+	else 
+		newOperatorSwarmVariable->swarmVariableList = self->swarmVariableList;
+	
+	return (void*)newOperatorSwarmVariable;
+}
+
+void _OperatorSwarmVariable_Construct( void* swarmVariable, Stg_ComponentFactory* cf, void* data ) {
+	OperatorSwarmVariable*  self       = (OperatorSwarmVariable*) swarmVariable;
+	Dictionary*             dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+	Dictionary_Entry_Value* list;
+	Index                   swarmVariableCount = 0;
+	Index                   swarmVariable_I;
+	Name                    swarmVariableName;
+	Name                    operatorName;
+	SwarmVariable**         swarmVariableList;
+	SwarmVariable_Register* swarmVariable_Register;
+
+	/* Call parent's construct function */
+	_SwarmVariable_Construct( self, cf, data );
+	swarmVariable_Register = self->swarm->swarmVariable_Register;
+
+	operatorName = Stg_ComponentFactory_GetString( cf, self->name, "Operator", "" );
+
+	list = Dictionary_Get( dictionary, "SwarmVariables" );
+
+	swarmVariableCount = ( list ? Dictionary_Entry_Value_GetCount(list) : 1 );
+	swarmVariableList = Memory_Alloc_Array( SwarmVariable*, swarmVariableCount, "SwarmVars" );
+
+	for ( swarmVariable_I = 0 ; swarmVariable_I < swarmVariableCount ; swarmVariable_I++ ) {
+		swarmVariableName = (list ? 
+				Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( list, swarmVariable_I ) ) :
+				Dictionary_GetString( dictionary, "SwarmVariable" ) );
+
+		/* Check in swarmVariable_Register first before assuming in LiveComponentRegister */
+		Journal_PrintfL( cf->infoStream, 2, "Looking for SwarmVariable '%s' in swarmVariable_Register.\n",
+				swarmVariableName );
+		swarmVariableList[swarmVariable_I] = (SwarmVariable*) 
+			SwarmVariable_Register_GetByName( swarmVariable_Register, swarmVariableName );
+		
+		if ( !swarmVariableList[swarmVariable_I] )
+			swarmVariableList[swarmVariable_I] = 
+				Stg_ComponentFactory_ConstructByName( cf, swarmVariableName, SwarmVariable, True, data );
+	}
+
+	_SwarmVariable_Construct( self, cf, data );
+	_OperatorSwarmVariable_Init( self, operatorName, swarmVariableCount, swarmVariableList );
+
+	Memory_Free( swarmVariableList );
+}
+
+void _OperatorSwarmVariable_Build( void* swarmVariable, void* data ) {
+	OperatorSwarmVariable* self = (OperatorSwarmVariable*) swarmVariable;
+	Index                  swarmVariable_I;
+
+	for ( swarmVariable_I = 0 ; swarmVariable_I < self->swarmVariableCount ; swarmVariable_I++ ) 
+		Stg_Component_Build( self->swarmVariableList[ swarmVariable_I ] , data, False );
+}
+
+void _OperatorSwarmVariable_Execute( void* swarmVariable, void* data ) {}
+
+void _OperatorSwarmVariable_Destroy( void* swarmVariable, void* data ) {}
+
+void _OperatorSwarmVariable_Initialise( void* swarmVariable, void* data ) {
+	OperatorSwarmVariable* self = (OperatorSwarmVariable*) swarmVariable;
+	Index                  swarmVariable_I;
+
+	for ( swarmVariable_I = 0 ; swarmVariable_I < self->swarmVariableCount ; swarmVariable_I++ ) 
+		Stg_Component_Initialise( self->swarmVariableList[ swarmVariable_I ] , data, False );
+}
+
+double _OperatorSwarmVariable_GetMinGlobalMagnitude( void* swarmVariable ) { 
+	/* Just use particle function */
+	return _SwarmVariable_GetMinGlobalMagnitude( swarmVariable); 
+}
+double _OperatorSwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable ) {
+	/* Just use particle function */
+	return _SwarmVariable_GetMaxGlobalMagnitude( swarmVariable); 
+}
+
+void _OperatorSwarmVariable_ValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	OperatorSwarmVariable* self            = (OperatorSwarmVariable*) swarmVariable;
+
+	switch ( self->swarmVariableCount ) {
+		case 1:
+			self->_valueAt = _OperatorSwarmVariable_UnaryValueAt; break;
+		case 2:
+			self->_valueAt = _OperatorSwarmVariable_BinaryValueAt; break;
+		default:
+			Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Can't use func '%s' with swarmVariableCount = %d\n", __func__, self->swarmVariableCount );
+	}
+
+	SwarmVariable_ValueAt( self, lParticle_I, value );
+}
+
+void _OperatorSwarmVariable_UnaryValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	OperatorSwarmVariable* self            = (OperatorSwarmVariable*) swarmVariable;
+	SwarmVariable*         swarm0          = self->swarmVariableList[0];
+	double                 swarmValue[ MAX_DOF ]; 
+
+	SwarmVariable_ValueAt( swarm0, lParticle_I, swarmValue );
+	Operator_CarryOutUnaryOperation( self->_operator, swarmValue, value );
+}
+
+void _OperatorSwarmVariable_BinaryValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	OperatorSwarmVariable* self            = (OperatorSwarmVariable*) swarmVariable;
+	SwarmVariable*         swarm0          = self->swarmVariableList[0];
+	SwarmVariable*         swarm1          = self->swarmVariableList[1];
+	double                 swarmValue0[ MAX_DOF ]; 
+	double                 swarmValue1[ MAX_DOF ]; 
+
+	SwarmVariable_ValueAt( swarm0, lParticle_I, swarmValue0 );
+	SwarmVariable_ValueAt( swarm1, lParticle_I, swarmValue1 );
+
+	Operator_CarryOutBinaryOperation( self->_operator, swarmValue0, swarmValue1, value ); 
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/OperatorSwarmVariable.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/OperatorSwarmVariable.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,172 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents a Variable that is a discretisation of a swarm-like physical property over a spatial domain.
+**
+** Assumptions:
+**	The function interfaces assume the spatially disc. variable is stored as a double
+**	(it can't be an int because its an approximation to a continuous variable right?)
+**
+** Comments:
+**	Abstract class that defines an interface to use when accessing spatially discretised
+**	swarm variables.
+**
+**	This means that e.g. visualisation code can be written to use this class,
+**	and doesn't have to worry exactly how the variable is discretised - that will be
+**	done by the back-end implementation of this class.
+**
+**	The name comes from the definition of "swarm" in the physics domain: A region of space
+**	characterized by a physical property, such as gravitational or electromagnetic force or
+**	fluid pressure, having a determinable value at every point in the region.
+**
+**	TODO: should it have a ptr to the Variable its based on at this level?
+**	doesn't make sense at the moment as the FeVariable used a \
+**	doflayout rather than a variable -> but may in future... 
+**
+**	$Id: OperatorSwarmVariable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_OperatorSwarmVariable_h__
+#define __Domain_Utils_OperatorSwarmVariable_h__
+
+	#define MAX_DOF 9
+
+	/** Textual name of this class */
+	extern const Type OperatorSwarmVariable_Type;
+
+	typedef void (OperatorSwarmVariable_UnaryOperatorFunction)  ( void* swarmVariable, double* value0, double* result );
+	typedef void (OperatorSwarmVariable_BinaryOperatorFunction) ( void* swarmVariable, double* value0, double* value1, double* result );
+	
+	/** OperatorSwarmVariable contents */
+	#define __OperatorSwarmVariable \
+		/* Parent info */ \
+		__SwarmVariable \
+		\
+		/* Other info */ \
+		Operator*                                                   _operator;           \
+		Index                                                       swarmVariableCount;  \
+		SwarmVariable**                                             swarmVariableList;   \
+
+
+	struct OperatorSwarmVariable { __OperatorSwarmVariable };	
+
+	/** Shortcut constructors */
+	OperatorSwarmVariable* OperatorSwarmVariable_NewUnary(
+		Name                                               name,
+		void*                                              _swarmVariable,
+		Name                                               operatorName );
+
+	OperatorSwarmVariable* OperatorSwarmVariable_NewBinary(
+		Name                                               name,
+		void*                                              _swarmVariable1,
+		void*                                              _swarmVariable2,
+		Name                                               operatorName );
+	
+	/* Public Constructor */
+	void* _OperatorSwarmVariable_DefaultNew( Name name );
+
+	OperatorSwarmVariable* OperatorSwarmVariable_New( 
+		Name                                               name,
+		SwarmVariable_ValueAtFunction*                     valueAt,
+		Name                                               operatorName,
+		Index                                              swarmVariableCount,
+		SwarmVariable**                                    swarmVariableList );
+
+	/** Private Constructor */
+	OperatorSwarmVariable* _OperatorSwarmVariable_New(
+			SizeT                                              _sizeOfSelf, 
+			Type                                               type,
+			Stg_Class_DeleteFunction*                          _delete,
+			Stg_Class_PrintFunction*                           _print, 
+			Stg_Class_CopyFunction*                            _copy, 
+			Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+			Stg_Component_ConstructFunction*                   _construct,
+			Stg_Component_BuildFunction*                       _build,
+			Stg_Component_InitialiseFunction*                  _initialise,
+			Stg_Component_ExecuteFunction*                     _execute,
+			Stg_Component_DestroyFunction*                     _destroy,
+			SwarmVariable_ValueAtFunction*                     _valueAt,
+			SwarmVariable_GetGlobalValueFunction*              _getMinGlobalMagnitude,
+			SwarmVariable_GetGlobalValueFunction*              _getMaxGlobalMagnitude,		
+			Name                                               name );
+
+	void _OperatorSwarmVariable_Init( void* swarmVariable, Name operatorName, Index swarmVariableCount, SwarmVariable** swarmVariableList ) ;
+
+	void _OperatorSwarmVariable_Delete( void* variable ) ;
+	void _OperatorSwarmVariable_Print( void* _swarmVariable, Stream* stream ) ;
+
+
+	void* _OperatorSwarmVariable_Copy( void* swarmVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) ;
+	void _OperatorSwarmVariable_Construct( void* swarmVariable, Stg_ComponentFactory* cf, void* data ) ;
+	void _OperatorSwarmVariable_Build( void* swarmVariable, void* data ) ;
+	void _OperatorSwarmVariable_Execute( void* variable, void* data ) ;
+	void _OperatorSwarmVariable_Destroy( void* variable, void* data ) ;
+	void _OperatorSwarmVariable_Initialise( void* variable, void* data ) ;
+
+	void _OperatorSwarmVariable_ValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+
+	double _OperatorSwarmVariable_GetMinGlobalMagnitude( void* swarmVariable ) ;
+	double _OperatorSwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable ) ;
+
+	void _OperatorSwarmVariable_UnaryValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _OperatorSwarmVariable_BinaryValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+
+	void OperatorSwarmVariable_UnaryOperator( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_BinaryOperator( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value ) ;
+
+	/** Operator Functions */
+	void OperatorSwarmVariable_VectorSquare( void* swarmVariable, double* swarmValue0, double* value ) ;
+
+	void OperatorSwarmVariable_VectorMag( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_Abs( void* swarmVariable, double* swarmValue0, double* value ) ;
+
+	/** Symmetric Part of tensor Operators */
+	void OperatorSwarmVariable_TensorSymmetricPart( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_SymmetricTensor_Invariant( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_TensorAntisymmetricPart( void* swarmVariable, double* swarmValue0, double* value ) ;
+
+	/** Operators to take specific componets of a vector */
+	void OperatorSwarmVariable_TakeFirstComponent( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_TakeSecondComponent( void* swarmVariable, double* swarmValue0, double* value ) ;
+	void OperatorSwarmVariable_TakeThirdComponent( void* swarmVariable, double* swarmValue0, double* value ) ;
+
+	/** Binary Operator Functions */
+	void OperatorSwarmVariable_ScalarAddition( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value ) ;
+	void OperatorSwarmVariable_VectorAddition( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value) ;
+	void OperatorSwarmVariable_ScalarSubtraction( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value ) ;
+	void OperatorSwarmVariable_VectorSubtraction( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value) ;
+	void OperatorSwarmVariable_ScalarMultiplication( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value ) ;
+	void OperatorSwarmVariable_ScalarDivision( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value ) ;
+
+	void OperatorSwarmVariable_VectorScale( void* swarmVariable, double* swarmValue0, double* swarmValue1, double* value);
+
+	/** TODO HACK - This function will be obselete when function registers come to town */
+	Func_Ptr OperatorSwarmVariable_GetOperatorByName( void* swarmVariable, Name name ) ;
+#endif /* __Domain_Utils_OperatorSwarmVariable_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/OperatorSwarmVariable.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/OperatorSwarmVariable.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">OperatorSwarmVariable</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">SwarmVariable</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">Operator</param>
+		<param name="Type">String</param>
+		<param name="Default">""</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">swarmVariableName</param>
+		<param name="Type">SwarmVariable</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 269 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleCommHandler.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleCommHandler.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,711 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ParticleCommHandler.c 4148 2007-06-26 03:49:27Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleCommHandler.h"
+
+#include "SwarmClass.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type ParticleCommHandler_Type = "ParticleCommHandler";
+
+/* MPI tags */
+static const int SHADOW_PARTICLE_COUNTS_PER_CELL = 10;
+static const int SHADOW_PARTICLES = 20;
+
+ParticleCommHandler* _ParticleCommHandler_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag,
+		ParticleCommHandler_AllocateOutgoingCountArrays						*_allocateOutgoingCountArrays,
+		ParticleCommHandler_AllocateOutgoingParticleArrays						*_allocateOutgoingParticleArrays,
+		ParticleCommHandler_FreeOutgoingArrays									*_freeOutgoingArrays,
+		ParticleCommHandler_AllocateIncomingCountArrays						*_allocateIncomingCountArrays,
+		ParticleCommHandler_AllocateIncomingParticleArrays						*_allocateIncomingParticleArrays,
+		ParticleCommHandler_FreeIncomingArrays									*_freeIncomingArrays,
+		ParticleCommHandler_BeginReceiveOfIncomingParticleCounts				*_beginReceiveOfIncomingParticleCounts,
+		ParticleCommHandler_FinishReceiveOfIncomingParticleCounts				*_finishReceiveOfIncomingParticleCounts,
+		ParticleCommHandler_BeginReceiveOfIncomingParticles					*_beginReceiveOfIncomingParticles,
+		ParticleCommHandler_FinishReceiveOfIncomingParticlesAndUpdateIndices	*_finishReceiveOfIncomingParticlesAndUpdateIndices,
+		ParticleCommHandler_SendOutgoingParticleCounts							*_sendOutgoingParticleCounts,
+		ParticleCommHandler_BeginSendingParticles								*_beginSendingParticles,
+		ParticleCommHandler_ConfirmOutgoingSendsCompleted						*_confirmOutgoingSendsCompleted,
+		ParticleCommHandler_CommFunction										*_commFunction )
+{
+	ParticleCommHandler* self;
+	
+	/* Allocate memory */
+	self = (ParticleCommHandler*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+		   _construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	/* Virtual info */
+	self->allocateOutgoingCountArrays = _allocateOutgoingCountArrays;
+	self->allocateOutgoingParticleArrays	= _allocateOutgoingParticleArrays,
+	self->freeOutgoingArrays = _freeOutgoingArrays,
+	self->allocateIncomingCountArrays = _allocateIncomingCountArrays,
+	self->allocateIncomingParticleArrays = _allocateIncomingParticleArrays,
+	self->freeIncomingArrays = _freeIncomingArrays,
+	self->beginReceiveOfIncomingParticleCounts = _beginReceiveOfIncomingParticleCounts,
+	self->finishReceiveOfIncomingParticleCounts = _finishReceiveOfIncomingParticleCounts,
+	self->beginReceiveOfIncomingParticles = _beginReceiveOfIncomingParticles,
+	self->finishReceiveOfIncomingParticlesAndUpdateIndices = _finishReceiveOfIncomingParticlesAndUpdateIndices,
+	self->sendOutgoingParticleCounts = _sendOutgoingParticleCounts,
+	self->beginSendingParticles = _beginSendingParticles,
+	self->confirmOutgoingSendsCompleted = _confirmOutgoingSendsCompleted,
+	self->_commFunction = _commFunction;
+	
+	/* ParticleCommHandler info */
+	if( initFlag ){
+		_ParticleCommHandler_Init( self );
+	}
+	
+	return self;
+}
+
+
+void _ParticleCommHandler_Init(
+		ParticleCommHandler*     self )
+{
+	self->isConstructed = True;
+	self->swarm = NULL;
+	self->debug = Stream_RegisterChild( Swarm_Debug, self->type );
+
+	_ParticleCommHandler_ZeroShadowCommStrategyCounters( self );
+
+	self->shadowParticlesLeavingMeIndices = NULL;
+	self->shadowParticlesLeavingMeCountsPerCell = NULL;
+	self->shadowParticlesLeavingMeTotalCounts = NULL;
+	self->shadowParticlesLeavingMe = NULL;
+	self->shadowParticlesLeavingMeHandles = NULL;
+
+	self->particlesArrivingFromNbrShadowCellCounts = NULL;
+	self->particlesArrivingFromNbrShadowCellCountsHandles = NULL;
+	self->particlesArrivingFromNbrShadowCellsTotalCounts = NULL;
+	self->particlesArrivingFromNbrShadowCells = NULL;
+	self->particlesArrivingFromNbrShadowCellsHandles = NULL;
+}
+
+
+void _ParticleCommHandler_Delete(void* pCommsHandler ) {
+	/* Nothing to do, as the temporary arrays are deleted each step as soon as they are finished with. */
+	_Stg_Class_Delete( pCommsHandler );
+}
+
+
+void _ParticleCommHandler_Print( void* pCommsHandler, Stream* stream ) {
+	ParticleCommHandler*	self = (ParticleCommHandler*)pCommsHandler;
+	
+	/* General info */
+	Journal_Printf( stream, "ParticleCommHandler (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_Stg_Class_Print( self, stream );
+
+	/* Virtual info */
+	Journal_Printf( stream, "self->_commFunction(ptr): %p\n", 
+		self->_commFunction );
+
+	/* class info */	
+	Journal_Printf( stream, "self->swarm (ptr): %p\n", self->swarm ); 
+	Journal_Printf( stream, "self->shadowParticlesLeavingMeTotalCount: %d\n", self->shadowParticlesLeavingMeTotalCount ); 
+	Journal_Printf( stream, "self->shadowParticlesLeavingMeUnfilledCount: %d\n", self->shadowParticlesLeavingMeUnfilledCount ); 
+	Journal_Printf( stream, "self->currShadowParticleLeavingMeIndex: %d\n", self->currShadowParticleLeavingMeIndex ); 
+	Journal_Printf( stream, "self->shadowParticlesLeavingMeIndices (ptr): %p\n", self->shadowParticlesLeavingMeIndices ); 
+	Journal_Printf( stream, "self->currParticleLeavingMyDomainIndex: %d\n", self->currParticleLeavingMyDomainIndex ); 
+}
+
+
+void* _ParticleCommHandler_Copy( void* particleCommHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+
+	// TODO: put back in.
+	assert(0);
+
+}
+
+void _ParticleCommHandler_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data ){
+	// TODO : will be necessary when we allow this to be constructed as a component
+	assert(0);
+}
+	
+void _ParticleCommHandler_Build( void* pCommsHandler, void *data ){
+	
+}
+	
+void _ParticleCommHandler_Initialise( void* pCommsHandler, void *data ){
+	
+}
+	
+void _ParticleCommHandler_Execute( void* pCommsHandler, void *data ){
+}
+
+void _ParticleCommHandler_Destroy( void* pCommsHandler, void *data ){
+	
+}
+
+void _ParticleCommHandler_AllocateOutgoingParticlesArrays( ParticleCommHandler* self ) {
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbrCount = procNbrInfo->procNbrCnt;
+	Neighbour_Index		        nbr_I;
+	SizeT				particlesArrayBytes;
+
+	/* Allocate the list of shadow particle indices to all nbrs */
+	self->shadowParticlesLeavingMeIndices = Memory_Alloc_Array( Particle_Index, self->shadowParticlesLeavingMeTotalCount,
+		"self->shadowParticlesLeavingMeIndices" );
+	self->shadowParticlesLeavingMeHandles = Memory_Alloc_Array(
+		MPI_Request*, procNbrInfo->procNbrCnt,
+		"ParticleCommHandler->shadowParticlesLeavingMeHandles");
+	self->shadowParticlesLeavingMe = Memory_Alloc_Array(
+		Particle*, procNbrInfo->procNbrCnt,
+		"ParticleCommHandler->shadowParticlesLeavingMe" );
+
+	for ( nbr_I=0; nbr_I < nbrCount; nbr_I++ ) {
+
+		if ( self->shadowParticlesLeavingMeTotalCounts[nbr_I] == 0 ) {
+			/* If we're not sending any particles to this proc, skip to next */
+			self->shadowParticlesLeavingMeHandles[nbr_I] = NULL;
+			self->shadowParticlesLeavingMe[nbr_I] = NULL;
+		}
+		else {
+			self->shadowParticlesLeavingMeHandles[nbr_I] = Memory_Alloc( MPI_Request,
+				"ParticleCommHandler->shadowParticlesLeavingMeHandles[]" );
+			particlesArrayBytes = self->swarm->particleExtensionMgr->finalSize * 
+				self->shadowParticlesLeavingMeTotalCounts[nbr_I];
+			self->shadowParticlesLeavingMe[nbr_I] = Memory_Alloc_Bytes( particlesArrayBytes,
+				"Particle", "ParticleCommHandler->shadowParticlesLeavingMe[]" );
+		}
+	}
+}
+
+
+void _ParticleCommHandler_BeginReceiveOfIncomingParticleCounts( ParticleCommHandler* self ) {
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbr_I;
+	Processor_Index		        proc_I;
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+		MPI_Irecv( self->particlesArrivingFromNbrShadowCellCounts[nbr_I], cellShadowInfo->procShadowedCnt[nbr_I],
+			MPI_UNSIGNED, proc_I, SHADOW_PARTICLE_COUNTS_PER_CELL, self->swarm->comm,
+			self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] );
+	}
+}
+
+
+void _ParticleCommHandler_FinishReceiveOfIncomingParticleCounts( ParticleCommHandler* self ) {
+	Cell_ShadowTransferIndex	stCell_I;
+	MPI_Status			status;
+	Processor_Index			proc_I;
+	Particle_Index			incomingCellParticleCount = 0;
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbr_I;
+
+	/* TODO: may be worth converting the below into an MPI_Test loop */
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+		
+		MPI_Wait( self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I], &status );
+
+		Journal_DPrintfL( self->debug, 1, "proc %d: recv shadow counts from nbr %d (rank %d):\n",
+			self->swarm->myRank, nbr_I, proc_I );
+		Journal_DPrintfL( self->debug, 2, "\tare [" );
+		self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] = 0;
+
+		for ( stCell_I=0; stCell_I < cellShadowInfo->procShadowedCnt[nbr_I]; stCell_I++ ) {
+			incomingCellParticleCount = self->particlesArrivingFromNbrShadowCellCounts[nbr_I][stCell_I];
+			Journal_DPrintfL( self->debug, 2, "%d, ", incomingCellParticleCount );
+			self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] += incomingCellParticleCount;
+		}
+		Journal_DPrintfL( self->debug, 2, "]\n" );
+		Journal_DPrintfL( self->debug, 1, "(Proc %d):....totalled to %d\n", self->swarm->myRank,
+			self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] );
+	}
+}
+
+
+void _ParticleCommHandler_AllocateIncomingParticlesArrays( ParticleCommHandler* self ) {
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbr_I;
+	SizeT                           incomingViaShadowArrayBytes = 0;
+
+	self->particlesArrivingFromNbrShadowCellsHandles = Memory_Alloc_Array(
+		MPI_Request*, procNbrInfo->procNbrCnt,
+		"ParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles");
+	self->particlesArrivingFromNbrShadowCells = Memory_Alloc_Array(
+		Particle*, procNbrInfo->procNbrCnt,
+		"ParticleCommHandler->particlesArrivingFromNbrShadowCells" );
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+
+		if ( self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] == 0 ) {
+			/* No particles to receive from this proc -> just clear recv ptr */
+			self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] = NULL;
+			self->particlesArrivingFromNbrShadowCells[nbr_I] = NULL;
+		}	
+		else { 
+			self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] =
+				Memory_Alloc(
+					MPI_Request,
+					"ParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles[]" );
+
+			/* allocate particles recv array to right size */
+			incomingViaShadowArrayBytes = self->swarm->particleExtensionMgr->finalSize * 
+				self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+			self->particlesArrivingFromNbrShadowCells[nbr_I] = Memory_Alloc_Bytes( incomingViaShadowArrayBytes,
+				"Particle", "particleCommHandler->particlesArrivingFromNbrShadowCells[]" );
+		}
+	}
+}
+
+
+void _ParticleCommHandler_BeginReceiveOfIncomingParticles( ParticleCommHandler* self ) {
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	SizeT                           incomingViaShadowArrayBytes = 0;
+	Neighbour_Index		        nbr_I;
+	Processor_Index			proc_I;
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		if ( self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] != 0 ) {
+			proc_I = procNbrInfo->procNbrTbl[nbr_I];
+
+			/* start non-blocking recv of particles */
+			incomingViaShadowArrayBytes = self->swarm->particleExtensionMgr->finalSize * 
+				self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+			MPI_Irecv( self->particlesArrivingFromNbrShadowCells[nbr_I], incomingViaShadowArrayBytes, MPI_BYTE,
+				proc_I, SHADOW_PARTICLES, self->swarm->comm,
+				self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] );
+		}
+	}
+}
+
+void _ParticleCommHandler_AllocateOutgoingCountArrays( ParticleCommHandler* self ) {
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+
+	Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+
+	self->shadowParticlesLeavingMeCountsPerCell = Memory_Alloc_2DComplex(
+		Particle_Index, nbrCount, cellShadowInfo->procShadowCnt,
+		"ParticleCommHandler->shadowParticlesLeavingMeCountsPerCell" );
+	self->shadowParticlesLeavingMeTotalCounts = Memory_Alloc_Array( Particle_Index, nbrCount,
+		"ParticleCommHandler->shadowParticlesLeavingMeTotalCounts" );
+}
+
+
+void _ParticleCommHandler_ConfirmOutgoingSendsCompleted( ParticleCommHandler* self ) {
+	ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		nbr_I;
+	MPI_Status		status;
+
+	/* MPI_Wait for all shadow sends to complete */
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		if ( self->shadowParticlesLeavingMeTotalCounts[nbr_I] > 0 ) {
+			MPI_Wait( self->shadowParticlesLeavingMeHandles[nbr_I], &status );
+		}	
+	}
+}
+
+
+void _ParticleCommHandler_AllocateIncomingCountArrays( ParticleCommHandler* self )
+{
+	ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		nbr_I;
+	Neighbour_Index         nbrCount = procNbrInfo->procNbrCnt;
+
+	self->particlesArrivingFromNbrShadowCellCounts = Memory_Alloc_2DComplex(
+		Particle_Index, nbrCount, cellShadowInfo->procShadowedCnt,
+		"ParticleCommHandler->particlesArrivingFromNbrShadowCellCounts" );
+	self->particlesArrivingFromNbrShadowCellCountsHandles = Memory_Alloc_Array( MPI_Request*, nbrCount,
+		"ParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles" );
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] = Memory_Alloc( MPI_Request,
+			"ParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles[]" );
+	}
+	self->particlesArrivingFromNbrShadowCellsTotalCounts = Memory_Alloc_Array( Particle_Index, nbrCount,
+		"ParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts" );
+}
+
+
+void _ParticleCommHandler_ZeroShadowCommStrategyCounters( ParticleCommHandler* self ) {
+	self->currShadowParticleLeavingMeIndex = 0;
+	self->shadowParticlesLeavingMeTotalCount = 0;
+	self->shadowParticlesLeavingMeUnfilledCount = 0;
+}
+
+
+void _ParticleCommHandler_FreeIncomingArrays( ParticleCommHandler* self ) {
+	ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		nbr_I;
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		if ( self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] > 0 ) {
+
+			if( self->particlesArrivingFromNbrShadowCells ){
+				Memory_Free( self->particlesArrivingFromNbrShadowCells[nbr_I] );
+			}
+			Memory_Free( self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] );
+		}
+	}
+	
+	if( self->particlesArrivingFromNbrShadowCells ){
+		Memory_Free( self->particlesArrivingFromNbrShadowCells );
+	}
+
+	Memory_Free( self->particlesArrivingFromNbrShadowCellsHandles );
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		Memory_Free( self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] );
+	}
+	Memory_Free( self->particlesArrivingFromNbrShadowCellCountsHandles );
+
+	Memory_Free( self->particlesArrivingFromNbrShadowCellCounts );
+	Memory_Free( self->particlesArrivingFromNbrShadowCellsTotalCounts );
+}
+
+
+void _ParticleCommHandler_FreeOutgoingArrays( ParticleCommHandler* self ) {
+	ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		nbr_I;
+
+	Memory_Free( self->shadowParticlesLeavingMeCountsPerCell );
+	Memory_Free( self->shadowParticlesLeavingMeTotalCounts );
+
+	if( self->shadowParticlesLeavingMeIndices ){
+		Memory_Free( self->shadowParticlesLeavingMeIndices );
+		self->shadowParticlesLeavingMeIndices = NULL;
+	}
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		if ( self->shadowParticlesLeavingMeTotalCounts[nbr_I] > 0 ) {
+			Memory_Free( self->shadowParticlesLeavingMe[nbr_I] );
+			Memory_Free( self->shadowParticlesLeavingMeHandles[nbr_I] );
+		}	
+	}
+	Memory_Free( self->shadowParticlesLeavingMe );
+	Memory_Free( self->shadowParticlesLeavingMeHandles );
+}
+
+void _ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs( ParticleCommHandler* self )
+{	
+	Cell_ShadowTransferIndex	stCell_I;
+	Cell_DomainIndex		dCell_I;
+	Index				nbr_I;
+	Processor_Index			proc_I;
+	Cell_ShadowTransferIndex	shadowCellsToProcCount;
+	ShadowInfo*			cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*			procNbrInfo = cellShadowInfo->procNbrInfo;
+	Cell_PointIndex			currCellParticleCount;
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	self->shadowParticlesLeavingMeTotalCount = 0;
+
+	for ( nbr_I = 0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+	
+		shadowCellsToProcCount = cellShadowInfo->procShadowCnt[nbr_I];	
+		Journal_DPrintfL( self->debug, 3, "Saving particle count in %d shadow cells going to nbr %d (proc %d):\n\t",
+			shadowCellsToProcCount, nbr_I, proc_I );
+
+		self->shadowParticlesLeavingMeTotalCounts[nbr_I] = 0;
+
+		for ( stCell_I=0; stCell_I < shadowCellsToProcCount; stCell_I++ ) {
+			dCell_I = cellShadowInfo->procShadowTbl[nbr_I][stCell_I];
+			
+			currCellParticleCount =  self->swarm->cellParticleCountTbl[dCell_I];
+			Journal_DPrintfL( self->debug, 3, "(stCell_I=%d, dCell_I=%d, cnt=%d), ",
+				stCell_I, dCell_I, currCellParticleCount );
+			self->shadowParticlesLeavingMeCountsPerCell[nbr_I][stCell_I] = currCellParticleCount;
+			self->shadowParticlesLeavingMeTotalCounts[nbr_I] += currCellParticleCount;
+			self->shadowParticlesLeavingMeTotalCount += currCellParticleCount;
+		}	
+		Journal_DPrintfL( self->debug, 3, "\n" );
+
+		MPI_Ssend( self->shadowParticlesLeavingMeCountsPerCell[nbr_I], shadowCellsToProcCount, MPI_UNSIGNED,
+			proc_I, SHADOW_PARTICLE_COUNTS_PER_CELL, self->swarm->comm );
+	}	
+
+	self->shadowParticlesLeavingMeUnfilledCount = self->shadowParticlesLeavingMeTotalCount;
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void _ParticleCommHandler_BeginSendingParticlesInShadowCellsToNbrs( ParticleCommHandler* self ) {	
+	Cell_ShadowTransferIndex	stCell_I;
+	Cell_DomainIndex		dCell_I;
+	Neighbour_Index			nbr_I;
+	Processor_Index			proc_I;
+	Cell_ShadowTransferIndex	shadowCellsToProcCount;
+	ShadowInfo*			cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*			procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index			nbrCount = procNbrInfo->procNbrCnt;
+	Particle_InCellIndex		currCellParticleCount;
+	Particle_InCellIndex		cParticle_I;
+	Particle_Index			lParticle_I;
+	Particle_Index			tParticle_I=0; /*Index into the particle transfer array */
+	Index				leavingParticle_I=0; /*Index into the array of all leaving particle indices */
+	#if DEBUG
+	GlobalParticle*                 currParticle;
+	#endif
+	#if CAUTIOUS
+	Bool*                           cellsClearedForTransfer = NULL;
+	Neighbour_Index*                cellsClearedForTransferDests = NULL;
+	Stream*                         errorStream = Journal_Register( Error_Type, self->type );
+	#endif
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_Indent( self->debug );
+
+	#if CAUTIOUS
+	/* These guys are used to check that we never try and send the same cell of particles twice */
+	cellsClearedForTransfer = Memory_Alloc_Array( Bool, self->swarm->cellDomainCount,
+		"cellsClearedForTransfer" );
+	cellsClearedForTransferDests = Memory_Alloc_Array( Neighbour_Index, self->swarm->cellDomainCount,
+		"cellsClearedForTransferDests" );
+	for ( dCell_I = 0; dCell_I < self->swarm->cellDomainCount; dCell_I++ ) {
+		cellsClearedForTransfer[dCell_I] = False;
+		cellsClearedForTransferDests[dCell_I] = 0;
+	}
+	#endif
+
+	Journal_DPrintfL( self->debug, 1, "Sending the shadow particles going to my %d neighbours:\n", nbrCount );
+
+	for ( nbr_I=0; nbr_I < nbrCount; nbr_I++ ) {
+		tParticle_I=0; /* Reset index for new neighbour processor */
+
+		if ( self->shadowParticlesLeavingMeTotalCounts[nbr_I] != 0 ) {
+			#ifdef CAUTIOUS
+			Neighbour_Index      prevNbr_I;
+			#endif
+
+			shadowCellsToProcCount = cellShadowInfo->procShadowCnt[nbr_I];	
+			proc_I = procNbrInfo->procNbrTbl[nbr_I];
+			Journal_DPrintfL( self->debug, 3, "nbr %d (proc %d) - %d shadow cells going to it:\n",
+				nbr_I, proc_I, shadowCellsToProcCount ); 
+			#ifdef CAUTIOUS
+			for ( prevNbr_I=0; prevNbr_I < nbr_I; prevNbr_I++ ) {
+				Journal_Firewall( proc_I != procNbrInfo->procNbrTbl[prevNbr_I], errorStream,
+					"Error - in %s(), on proc %u: found in our Swarm's ProcNbrInfo "
+					"that our nbr %u is proc %u, but we already sent particles to "
+					"that processor as nbr %u! Can't send same particles to same "
+					"proc twice.\n", __func__, self->swarm->myRank, nbr_I, proc_I,
+					prevNbr_I );
+			}
+			#endif
+
+			Stream_Indent( self->debug );
+
+
+			for ( stCell_I=0; stCell_I < shadowCellsToProcCount; stCell_I++ ) {
+				currCellParticleCount = self->shadowParticlesLeavingMeCountsPerCell[nbr_I][stCell_I];
+				dCell_I = cellShadowInfo->procShadowTbl[nbr_I][stCell_I];
+				#ifdef CAUTIOUS
+				Journal_Firewall( cellsClearedForTransfer[dCell_I] == False, errorStream,
+					"Error - in %s(), on proc %u: while trying to send shadow particles to "
+					"nbr %u (proc %u), tried to copy particles from domain cell %u, but "
+					"this cell has already had all its particles cleared for send to "
+					"nbr %u (proc %u).\n", __func__, self->swarm->myRank, nbr_I, proc_I,
+					dCell_I, cellsClearedForTransferDests[dCell_I],
+					procNbrInfo->procNbrTbl[cellsClearedForTransferDests[dCell_I]] );
+				#endif
+
+				Journal_DPrintfL( self->debug, 3, "Processing Cell %d (%d particles):\n", dCell_I,
+					currCellParticleCount );
+			
+				Stream_Indent( self->debug );
+
+				for ( cParticle_I=0; cParticle_I < currCellParticleCount; cParticle_I++ ) {
+
+					lParticle_I = self->swarm->cellParticleTbl[dCell_I][cParticle_I];
+					#if DEBUG
+					currParticle = (GlobalParticle*)Swarm_ParticleAt( self->swarm, lParticle_I );
+					Journal_DPrintfL( self->debug, 3, "Copying PIC %d, particle %d at "
+						"(%.2f,%.2f,%.2g) to shadowParticlesLeavingMe[%d][%d]\n",
+						cParticle_I, lParticle_I,
+						currParticle->coord[0], currParticle->coord[1], currParticle->coord[2],
+						nbr_I, tParticle_I );
+					#endif	
+					Swarm_CopyParticleOffSwarm( self->swarm,
+						self->shadowParticlesLeavingMe[nbr_I], tParticle_I++,
+						lParticle_I );
+					/* Note: we have no guarantee that the local particle index of where these
+					shadow cells are leaving from is monotonically increasing: thus do an insertion
+					at the right place. */
+					{
+						Index		insertionIndex = 0;
+						Particle_Index*	currInsertionPtr;
+						for ( ;insertionIndex < leavingParticle_I; insertionIndex++ ) {
+							currInsertionPtr = &self->shadowParticlesLeavingMeIndices[insertionIndex];
+							if (lParticle_I < (*currInsertionPtr) )
+							{
+								memmove(
+									(Pointer)(((ArithPointer)currInsertionPtr) + sizeof(Particle_Index)), 
+									currInsertionPtr,
+									(leavingParticle_I - insertionIndex) * sizeof(Particle_Index) );
+
+								(*currInsertionPtr) = lParticle_I;
+								break;
+							}
+						}
+						if ( insertionIndex == leavingParticle_I) {
+							self->shadowParticlesLeavingMeIndices[leavingParticle_I] = lParticle_I;
+						}
+						leavingParticle_I++;
+					}
+
+				}
+				Stream_UnIndent( self->debug );
+
+				#ifdef CAUTIOUS
+				cellsClearedForTransfer[dCell_I] = True;
+				cellsClearedForTransferDests[dCell_I] = nbr_I;
+				#endif
+				/* Remember to clear the entries for that cell now. */
+				self->swarm->cellParticleCountTbl[dCell_I] = 0;
+				self->swarm->cellParticleSizeTbl[dCell_I] = 0;
+				if ( self->swarm->cellParticleTbl[dCell_I] ) {
+					Memory_Free( self->swarm->cellParticleTbl[dCell_I] );
+				}
+				self->swarm->cellParticleTbl[dCell_I] = NULL;
+
+			}
+			Stream_UnIndent( self->debug );
+
+			/* non blocking send out particles */
+			MPI_Issend( self->shadowParticlesLeavingMe[nbr_I],
+				self->shadowParticlesLeavingMeTotalCounts[nbr_I] * self->swarm->particleExtensionMgr->finalSize,
+				MPI_BYTE, proc_I, SHADOW_PARTICLES, self->swarm->comm,
+				self->shadowParticlesLeavingMeHandles[nbr_I] );
+		}
+	}
+	#if CAUTIOUS
+	Memory_Free( cellsClearedForTransfer );
+	Memory_Free( cellsClearedForTransferDests );
+	#endif
+	Stream_UnIndent( self->debug );
+}
+
+/* +++ Statistics Printing +++ */
+
+
+void _ParticleCommHandler_PrintCommunicationVolumeStats( ParticleCommHandler* self, double startTime, Stream* stream )
+{
+	double                  myProcTime = 0;
+	double*                 procTimes = NULL;
+	double                  maxProcTime = 0;
+	Particle_Index          totalParticlesRecvdViaShadowFromNbrs = 0;
+	ShadowInfo*             cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	Processor_Index         proc_I = 0;
+	ProcNbrInfo*            procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index         nbrCount = procNbrInfo->procNbrCnt;
+
+	myProcTime = MPI_Wtime() - startTime;
+
+
+	totalParticlesRecvdViaShadowFromNbrs = 0;
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		ShadowInfo*	        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+		ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+		Neighbour_Index		nbr_I;
+
+		for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+			totalParticlesRecvdViaShadowFromNbrs += 
+				self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+		}	
+	}
+
+	for ( proc_I = 0; proc_I < self->swarm->nProc; proc_I++ ) {
+		MPI_Barrier( self->swarm->comm );
+
+		if ( self->swarm->myRank == proc_I ) {			
+			Journal_Printf( stream, "...proc %d finished particle communication:\n", self->swarm->myRank );
+			Stream_Indent( stream );
+			Journal_Printf( stream, "- Particle comm totals via shadow cells (%d nbr procs):"
+				" sent %d, recvd %d\n",
+				nbrCount, self->shadowParticlesLeavingMeTotalCount,
+				totalParticlesRecvdViaShadowFromNbrs );
+			Journal_Printf( stream, "- time taken = %.2f (secs)\n", myProcTime );
+			Stream_UnIndent( stream );
+		}
+	}
+	MPI_Barrier( self->swarm->comm );
+
+	procTimes = Memory_Alloc_Array( double, self->swarm->nProc, "procTimes" );
+	MPI_Gather( &myProcTime, 1, MPI_DOUBLE, procTimes, 1, MPI_DOUBLE, 0, self->swarm->comm );
+	if (self->swarm->myRank == 0 ) {
+		for ( proc_I = 0; proc_I < self->swarm->nProc; proc_I++ ) {
+			if ( procTimes[proc_I] > maxProcTime ) {
+				maxProcTime = procTimes[proc_I];
+			}
+		}
+		// TODO: print some stats on max particles sent/recvd and total sent/recvd
+		Journal_Printf( stream, "...Max Communication time by any proc was %.2f (secs)\n", maxProcTime );
+	}
+	Memory_Free( procTimes );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleCommHandler.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleCommHandler.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,213 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Handles the communication of particles between processors when their coordinates are updated.
+**
+** Assumptions:
+**
+** Comments:
+**	If we ever decide we need more than one strategy for doing this, this will probably become an
+**	interface and we'll have separate instantiation classes. Can't see that need in the short
+**	term though so we'll just use the one class for now.
+**
+** $Id: ParticleCommHandler.h 4119 2007-05-22 07:35:46Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+#ifndef __Domain_Swarm_ParticleCommHandler_h__
+#define __Domain_Swarm_ParticleCommHandler_h__
+
+	
+	/** Textual name of this class */
+	extern const Type ParticleCommHandler_Type;
+
+	typedef void (ParticleCommHandler_CommFunction)	( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_AllocateOutgoingCountArrays) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_AllocateOutgoingParticleArrays) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_FreeOutgoingArrays) ( ParticleCommHandler * );
+	
+	typedef void (ParticleCommHandler_AllocateIncomingCountArrays) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_AllocateIncomingParticleArrays) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_FreeIncomingArrays) ( ParticleCommHandler * );
+	
+	typedef void (ParticleCommHandler_BeginReceiveOfIncomingParticleCounts) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_FinishReceiveOfIncomingParticleCounts) ( ParticleCommHandler * );
+	
+	typedef void (ParticleCommHandler_BeginReceiveOfIncomingParticles) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_FinishReceiveOfIncomingParticlesAndUpdateIndices) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_SendOutgoingParticleCounts) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_BeginSendingParticles) ( ParticleCommHandler * );
+	typedef void (ParticleCommHandler_ConfirmOutgoingSendsCompleted) ( ParticleCommHandler * );
+
+
+	#define __ParticleCommHandler \
+		__Stg_Component \
+		/* Virtual info */ \
+		ParticleCommHandler_AllocateOutgoingCountArrays						*allocateOutgoingCountArrays; \
+		ParticleCommHandler_AllocateOutgoingParticleArrays						*allocateOutgoingParticleArrays; \
+		ParticleCommHandler_FreeOutgoingArrays									*freeOutgoingArrays; \
+		ParticleCommHandler_AllocateIncomingCountArrays						*allocateIncomingCountArrays; \
+		ParticleCommHandler_AllocateIncomingParticleArrays						*allocateIncomingParticleArrays; \
+		ParticleCommHandler_FreeIncomingArrays									*freeIncomingArrays; \
+		ParticleCommHandler_BeginReceiveOfIncomingParticleCounts				*beginReceiveOfIncomingParticleCounts; \
+		ParticleCommHandler_FinishReceiveOfIncomingParticleCounts				*finishReceiveOfIncomingParticleCounts; \
+		ParticleCommHandler_BeginReceiveOfIncomingParticles					*beginReceiveOfIncomingParticles; \
+		ParticleCommHandler_FinishReceiveOfIncomingParticlesAndUpdateIndices	*finishReceiveOfIncomingParticlesAndUpdateIndices; \
+		ParticleCommHandler_SendOutgoingParticleCounts							*sendOutgoingParticleCounts; \
+		ParticleCommHandler_BeginSendingParticles								*beginSendingParticles; \
+		ParticleCommHandler_ConfirmOutgoingSendsCompleted						*confirmOutgoingSendsCompleted; \
+		ParticleCommHandler_CommFunction										*_commFunction;\
+		/* Member info */ \
+		Stream*				debug; \
+		Swarm*				swarm; \
+		Particle_Index* 		shadowParticlesLeavingMeIndices; \
+		Index				shadowParticlesLeavingMeTotalCount; \
+		Index				shadowParticlesLeavingMeUnfilledCount; \
+		Index				currShadowParticleLeavingMeIndex; \
+		Index				currParticleLeavingMyDomainIndex; \
+		\
+		Particle_Index* 		particlesOutsideDomainIndices; \
+		Index				particlesOutsideDomainTotalCount; \
+		Index				particlesOutsideDomainUnfilledCount; \
+		\
+		/** cnts of [nbr][st_cell] outgoing particles */ \
+		Particle_Index**		shadowParticlesLeavingMeCountsPerCell; \
+		/** cnts of [nbr] total outgoing particles via my shadow cells to nbr procs */ \
+		Particle_Index*			shadowParticlesLeavingMeTotalCounts; \
+		/** transfer array [nbr] of particles to send */ \
+		Particle**			shadowParticlesLeavingMe; \
+		MPI_Request**			shadowParticlesLeavingMeHandles; \
+		/** cnts of [nbr][st_cell] incoming particles */ \
+		Particle_Index**		particlesArrivingFromNbrShadowCellCounts; \
+		MPI_Request**			particlesArrivingFromNbrShadowCellCountsHandles; \
+		/** cnts of [nbr] total incoming particles via shadow cells of nbr procs */\
+		Particle_Index*			particlesArrivingFromNbrShadowCellsTotalCounts; \
+		/** transfer array [nbr] of particles to recv */ \
+		Particle**			particlesArrivingFromNbrShadowCells; \
+		MPI_Request**			particlesArrivingFromNbrShadowCellsHandles;
+
+	struct ParticleCommHandler { __ParticleCommHandler };	
+
+	/* --- virtual functions --- */
+
+	/** Constructor interface */
+	
+	/** Private Constructor */
+	ParticleCommHandler* _ParticleCommHandler_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag,
+		ParticleCommHandler_AllocateOutgoingCountArrays						*_allocateOutgoingCountArrays,
+		ParticleCommHandler_AllocateOutgoingParticleArrays						*_allocateOutgoingParticleArrays,
+		ParticleCommHandler_FreeOutgoingArrays									*_freeOutgoingArrays,
+		ParticleCommHandler_AllocateIncomingCountArrays						*_allocateIncomingCountArrays,
+		ParticleCommHandler_AllocateIncomingParticleArrays						*_allocateIncomingParticleArrays,
+		ParticleCommHandler_FreeIncomingArrays									*_freeIncomingArrays,
+		ParticleCommHandler_BeginReceiveOfIncomingParticleCounts				*_beginReceiveOfIncomingParticleCounts,
+		ParticleCommHandler_FinishReceiveOfIncomingParticleCounts				*_finishReceiveOfIncomingParticleCounts,
+		ParticleCommHandler_BeginReceiveOfIncomingParticles					*_beginReceiveOfIncomingParticles,
+		ParticleCommHandler_FinishReceiveOfIncomingParticlesAndUpdateIndices	*_finishReceiveOfIncomingParticlesAndUpdateIndices,
+		ParticleCommHandler_SendOutgoingParticleCounts							*_sendOutgoingParticleCounts,
+		ParticleCommHandler_BeginSendingParticles								*_beginSendingParticle,
+		ParticleCommHandler_ConfirmOutgoingSendsCompleted						*_confirmOutgoingSendsCompleted,
+		ParticleCommHandler_CommFunction										*_commFunction );
+	
+	/** Variable initialiser */
+	void _ParticleCommHandler_Init(
+		ParticleCommHandler*     self
+		);
+
+	/** Stg_Class_Print() implementation */
+	void _ParticleCommHandler_Print( void* pCommsHandler, Stream* stream );
+	
+	void _ParticleCommHandler_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data );
+	
+	void _ParticleCommHandler_Build( void* pCommsHandler, void *data );
+	
+	void _ParticleCommHandler_Initialise( void* pCommsHandler, void *data );
+	
+	void _ParticleCommHandler_Execute( void* pCommsHandler, void *data );
+
+	void _ParticleCommHandler_Destroy( void* pCommsHandler, void *data );
+	
+	/** Copy */
+	#define ParticleCommHandler_Copy( self ) \
+		(ParticleCommHandler*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ParticleCommHandler_DeepCopy( self ) \
+		(ParticleCommHandler*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ParticleCommHandler_Copy( void* particleCommHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Stg_Class_Delete() implementation */
+	void _ParticleCommHandler_Delete(void* pCommsHandler );
+	
+	/* --- Public virtual function interfaces --- */
+	
+	/* --- virtual function implementations --- */
+
+	/* --- private functions --- */
+
+	/* +++ Comms via shadow cell related +++ */
+
+	void _ParticleCommHandler_AllocateOutgoingCountArrays( ParticleCommHandler* self );
+	void _ParticleCommHandler_AllocateOutgoingParticlesArrays( ParticleCommHandler* self );
+	void _ParticleCommHandler_FreeOutgoingArrays( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_AllocateIncomingCountArrays( ParticleCommHandler* self );
+	void _ParticleCommHandler_AllocateIncomingParticlesArrays( ParticleCommHandler* self );
+	void _ParticleCommHandler_FreeIncomingArrays( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_BeginReceiveOfIncomingParticleCounts( ParticleCommHandler* self );
+	void _ParticleCommHandler_FinishReceiveOfIncomingParticleCounts( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_BeginReceiveOfIncomingParticles( ParticleCommHandler* self );
+	void _ParticleCommHandler_FinishReceiveAndUpdateShadowParticlesEnteringMyDomain( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_BeginSendingParticlesInShadowCellsToNbrs( ParticleCommHandler* self );
+	void _ParticleCommHandler_ConfirmOutgoingSendsCompleted( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_ZeroShadowCommStrategyCounters( ParticleCommHandler* self );
+
+
+	/* +++ Statistics Printing +++ */
+	void _ParticleCommHandler_PrintCommunicationVolumeStats( ParticleCommHandler* self, double startTime, Stream* info );
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleCommHandler.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleCommHandler.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ParticleCommHandler</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,170 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ParticleLayout.c 3629 2006-06-13 08:36:51Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+const Type ParticleLayout_Type = "ParticleLayout";
+
+ParticleLayout* _ParticleLayout_New( 
+                SizeT                                       _sizeOfSelf,
+                Type                                        type,
+                Stg_Class_DeleteFunction*                   _delete,
+                Stg_Class_PrintFunction*                    _print,
+                Stg_Class_CopyFunction*                     _copy,
+                Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+                Stg_Component_ConstructFunction*            _construct,
+                Stg_Component_BuildFunction*                _build,
+                Stg_Component_InitialiseFunction*           _initialise,
+                Stg_Component_ExecuteFunction*              _execute,
+                Stg_Component_DestroyFunction*              _destroy,
+                ParticleLayout_SetInitialCountsFunction*    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction* _initialiseParticles,
+                Name                                        name,
+                Bool                                        initFlag,
+		CoordSystem                                 coordSystem,
+                Bool                                        weightsInitialisedAtStartup )
+{
+	ParticleLayout*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ParticleLayout) );
+	self = (ParticleLayout*)_Stg_Component_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete, 
+			_print, 
+			_copy, 
+			_defaultConstructor,
+		   	_construct, 
+			_build, 
+			_initialise, 
+			_execute, 
+			_destroy, 
+			name, 
+			NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_setInitialCounts = _setInitialCounts;
+	self->_initialiseParticles = _initialiseParticles;
+	
+	if( initFlag ){
+		_ParticleLayout_Init( self, coordSystem, weightsInitialisedAtStartup );
+	}
+	
+	return self;
+}
+
+
+void _ParticleLayout_Init( 
+		void*           particleLayout, 
+		CoordSystem     coordSystem,
+		Bool            weightsInitialisedAtStartup ) 
+{ 
+	ParticleLayout* self = (ParticleLayout*)particleLayout;
+	self->isConstructed  = True;
+
+	self->debug = Stream_RegisterChild( Swarm_Debug, self->type );
+
+	self->coordSystem = coordSystem;
+	self->weightsInitialisedAtStartup = weightsInitialisedAtStartup;
+}
+
+void _ParticleLayout_Delete( void* particleLayout ) {
+	ParticleLayout* self = (ParticleLayout*)particleLayout;
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Component_Delete( self );
+}
+
+void _ParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	ParticleLayout* self = (ParticleLayout*)particleLayout;
+	
+	Journal_Printf( stream, "ParticleLayout (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( stream, "\t_setInitialCounts (func ptr): %p\n", self->_setInitialCounts );
+	Journal_Printf( stream, "\t_initialiseParticles (func ptr): %p\n", self->_initialiseParticles );
+	
+	/* ParticleLayout info */
+	Journal_Printf( 
+		stream, 
+		"\tcoordSystem: %s\n", 
+		( self->coordSystem == LocalCoordSystem ) ? "LocalCoordSystem" : "GlobalCoordSystem" );
+	Journal_Printf( 
+		stream, 
+		"\tweightsInitialisedAtStartup : %s\n",
+		self->weightsInitialisedAtStartup ? "True" : "False" );
+}
+
+
+void* _ParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ParticleLayout*		self = (ParticleLayout*)particleLayout;
+	ParticleLayout*		newParticleLayout;
+	
+	newParticleLayout = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newParticleLayout->_setInitialCounts = self->_setInitialCounts;
+	newParticleLayout->_initialiseParticles = self->_initialiseParticles;
+	newParticleLayout->coordSystem = self->coordSystem;
+	newParticleLayout->weightsInitialisedAtStartup = self->weightsInitialisedAtStartup;
+
+	return (void*)newParticleLayout;
+}
+
+
+void ParticleLayout_InitialiseParticles( void* particleLayout, void* swarm ) {
+	ParticleLayout* self = (ParticleLayout*)particleLayout;
+	
+	self->_initialiseParticles( self, swarm );
+}
+
+void ParticleLayout_SetInitialCounts( void* particleLayout, void* swarm ) {
+	ParticleLayout* self = (ParticleLayout*)particleLayout;
+	
+	self->_setInitialCounts( particleLayout, swarm );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,111 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class faciliting how particles of a cell are arranged. 
+**	Swarms should only reference this... the base class, not the implementations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ParticleLayout.h 3629 2006-06-13 08:36:51Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_ParticleLayout_h__
+#define __Domain_Swarm_ParticleLayout_h__
+
+	/** @see ParticleLayout_SetInitialCounts */
+	typedef void (ParticleLayout_SetInitialCountsFunction)    ( void* particleLayout, void* swarm );
+	/** @see ParticleLayout_InitialiseParticles */ 
+	typedef void (ParticleLayout_InitialiseParticlesFunction) ( void* particleLayout, void* swarm );
+	
+	extern const Type ParticleLayout_Type;
+	
+	/* ParticleLayout information */
+	#define __ParticleLayout \
+		__Stg_Component \
+		/* virtual information */ \
+		ParticleLayout_SetInitialCountsFunction*	_setInitialCounts; \
+		ParticleLayout_InitialiseParticlesFunction*	_initialiseParticles; \
+		/* member data */ \
+		Stream*         debug;                          /**< For sending log messages to */  \
+		CoordSystem     coordSystem;                    /**< Set once by subclass init */ \
+		Bool		weightsInitialisedAtStartup;    /**< Set once by subclass init */
+
+	struct ParticleLayout { __ParticleLayout };
+	
+	/* Creation implementation / Virtual constructor */
+	ParticleLayout* _ParticleLayout_New( 
+                SizeT                                       _sizeOfSelf,
+                Type                                        type,
+                Stg_Class_DeleteFunction*                   _delete,
+                Stg_Class_PrintFunction*                    _print,
+                Stg_Class_CopyFunction*                     _copy,
+                Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+                Stg_Component_ConstructFunction*            _construct,
+                Stg_Component_BuildFunction*                _build,
+                Stg_Component_InitialiseFunction*           _initialise,
+                Stg_Component_ExecuteFunction*              _execute,
+                Stg_Component_DestroyFunction*              _destroy,
+                ParticleLayout_SetInitialCountsFunction*    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction* _initialiseParticles,
+                Name                                        name,
+                Bool                                        initFlag,
+		CoordSystem                                 coordSystem,
+                Bool                                        weightsInitialisedAtStartup );
+
+	/* Initialise implementation */
+	void _ParticleLayout_Init( 
+		void*                                       particleLayout,
+		CoordSystem                                 coordSystem,
+		Bool                                        weightsInitialisedAtStartup );
+	
+	/* Stg_Class_Delete a ParticleLayout construct */
+	void _ParticleLayout_Delete( void* particleLayout );
+	
+	/* Print a ParticleLayout construct */
+	void _ParticleLayout_Print( void* particleLayout, Stream* stream );
+	
+	/* Copy */
+	#define ParticleLayout_Copy( self ) \
+		(ParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ParticleLayout_DeepCopy( self ) \
+		(ParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Setup the particle tables in a Swarm Class, both local and shadow values.
+	 *  Must setup cellParticleCountTbl, cellParticleSizeTbl, cellParticleTbl */
+	void ParticleLayout_SetInitialCounts( void* particleLayout, void* swarm );
+	
+	/** Initialise startup positions of all particles in given swarm. */
+	void ParticleLayout_InitialiseParticles( void* particleLayout, void* swarm );
+	
+#endif /* __Domain_Swarm_ParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleMovementHandler.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleMovementHandler.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,957 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ParticleMovementHandler.c 4001 2007-02-09 01:26:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "ShadowInfo.h"
+#include "shortcuts.h"
+#include "ParticleCommHandler.h"
+#include "ParticleMovementHandler.h"
+
+#include "SwarmClass.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type ParticleMovementHandler_Type = "ParticleMovementHandler";
+
+void *ParticleMovementHandler_DefaultNew( Name name )
+{
+	return _ParticleMovementHandler_New( sizeof(ParticleMovementHandler), ParticleMovementHandler_Type,
+		_ParticleMovementHandler_Delete, _ParticleMovementHandler_Print, _ParticleMovementHandler_CopyFunc,
+		(Stg_Component_DefaultConstructorFunction*)ParticleMovementHandler_DefaultNew,
+		_ParticleMovementHandler_Construct, _ParticleMovementHandler_Build, _ParticleMovementHandler_Initialise,
+		_ParticleMovementHandler_Execute, _ParticleMovementHandler_Destroy, name, False, False );
+}
+
+
+ParticleMovementHandler* ParticleMovementHandler_New( 
+		Name name,
+		Bool useGlobalFallbackCommStrategy
+		)
+{
+	return _ParticleMovementHandler_New( sizeof(ParticleMovementHandler), ParticleMovementHandler_Type,
+		_ParticleMovementHandler_Delete, _ParticleMovementHandler_Print, _ParticleMovementHandler_CopyFunc,
+		(Stg_Component_DefaultConstructorFunction*)ParticleMovementHandler_DefaultNew,
+		_ParticleMovementHandler_Construct, _ParticleMovementHandler_Build, _ParticleMovementHandler_Initialise,
+		_ParticleMovementHandler_Execute, _ParticleMovementHandler_Destroy, name, True,
+		useGlobalFallbackCommStrategy );
+}
+
+
+ParticleMovementHandler* _ParticleMovementHandler_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag,
+		Bool                                                            useGlobalFallbackCommStrategy
+		 )
+{
+	ParticleMovementHandler* self;
+	
+	/* Allocate memory */
+	self = (ParticleMovementHandler*)_ParticleCommHandler_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+		   _construct, _build, _initialise, _execute, _destroy, name, initFlag,
+		  _ParticleCommHandler_AllocateOutgoingCountArrays,
+		  _ParticleCommHandler_AllocateOutgoingParticlesArrays,
+		  _ParticleCommHandler_FreeOutgoingArrays,
+		  _ParticleCommHandler_AllocateIncomingCountArrays,
+		  _ParticleCommHandler_AllocateIncomingParticlesArrays,
+		  _ParticleCommHandler_FreeIncomingArrays,
+		  _ParticleCommHandler_BeginReceiveOfIncomingParticleCounts,
+		  _ParticleCommHandler_FinishReceiveOfIncomingParticleCounts,
+		  _ParticleCommHandler_BeginReceiveOfIncomingParticles,
+		  ParticleMovementHandler_FinishReceiveAndUpdateShadowParticlesEnteringMyDomain,
+		  _ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs,
+		  _ParticleCommHandler_BeginSendingParticlesInShadowCellsToNbrs,
+		  _ParticleCommHandler_ConfirmOutgoingSendsCompleted,
+		  ParticleMovementHandler_HandleParticleMovementBetweenProcs );
+	
+	/* General info */
+	/* Virtual info */
+	
+	/* ParticleMovementHandler info */
+	if( initFlag ){
+		_ParticleMovementHandler_Init( self, useGlobalFallbackCommStrategy );
+	}
+	
+	return self;
+}
+
+
+void _ParticleMovementHandler_Init(
+		ParticleMovementHandler*     self,
+		Bool                     useGlobalFallbackCommStrategy
+		)
+{
+	_ParticleCommHandler_Init( (ParticleCommHandler*)self );
+	self->defensive = True;
+	self->useGlobalFallbackCommStrategy = useGlobalFallbackCommStrategy;
+	self->particlesOutsideDomainIndices = NULL;
+	ParticleMovementHandler_ZeroGlobalCommStrategyCounters( self );	
+}
+
+
+void _ParticleMovementHandler_Delete(void* pCommsHandler ) {
+	/* Nothing to do, as the temporary arrays are deleted each step as soon as they are finished with. */
+	_ParticleCommHandler_Delete( pCommsHandler );
+}
+
+
+void _ParticleMovementHandler_Print( void* pCommsHandler, Stream* stream ) {
+	ParticleMovementHandler*	self = (ParticleMovementHandler*)pCommsHandler;
+	
+	/* General info */
+	Journal_Printf( stream, "ParticleMovementHandler (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_ParticleCommHandler_Print( self, stream );
+
+	/* Virtual info */
+
+	Journal_Printf( stream, "self->particlesOutsideDomainTotalCount: %d\n", self->particlesOutsideDomainTotalCount ); 
+	Journal_Printf( stream, "self->particlesOutsideDomainUnfiledCount: %d\n", self->particlesOutsideDomainUnfilledCount ); 
+	Journal_Printf( stream, "self->particlesOutsideDomainIndices(ptr): %p\n", self->particlesOutsideDomainIndices ); 
+}
+
+
+void* _ParticleMovementHandler_CopyFunc( void* particleMovementHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	
+	return _ParticleCommHandler_Copy( particleMovementHandler, dest, deep,
+		   nameExt, ptrMap );
+}
+
+void _ParticleMovementHandler_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data ){
+	ParticleMovementHandler *self = (ParticleMovementHandler*)pCommsHandler;
+
+	self->isConstructed = True;
+	_ParticleMovementHandler_Init ( self, True );
+}
+	
+void _ParticleMovementHandler_Build( void* pCommsHandler, void *data ){
+	
+}
+	
+void _ParticleMovementHandler_Initialise( void* pCommsHandler, void *data ){
+	
+}
+	
+void _ParticleMovementHandler_Execute( void* pCommsHandler, void *data ){
+	ParticleCommHandler*	self = (ParticleCommHandler*)pCommsHandler;
+	Swarm					*swarm = (Swarm*)data;
+
+	self->swarm = swarm;
+	self->_commFunction( self );	
+}
+
+void _ParticleMovementHandler_Destroy( void* pCommsHandler, void *data ){
+	
+}
+
+void ParticleMovementHandler_HandleParticleMovementBetweenProcs( ParticleCommHandler* pCommsHandler ) {
+	ParticleMovementHandler*	self = (ParticleMovementHandler*)pCommsHandler;
+	double                  startTime = 0;
+	Stream*                 info = Journal_Register( Info_Type, self->type );
+
+	Journal_DPrintfL( self->debug, 1, "In %s(), for swarm \"%s\":\n", __func__, self->swarm->name );
+	if ( 1 == self->swarm->nProc ) {
+		Journal_DPrintfL( self->debug, 1, "Serial run -> nothing to communicate, returning.\n" );
+		Stream_UnIndentBranch( Swarm_Debug );
+		return;
+	}
+
+	Stream_IndentBranch( Swarm_Debug );
+
+	startTime = MPI_Wtime();
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		/* Allocate the recv count arrays and handles */
+		self->allocateIncomingCountArrays( (ParticleCommHandler*)self );
+		self->allocateOutgoingCountArrays( (ParticleCommHandler*)self );
+
+		/* First thing to do is begin non-blocking receive of incoming particles (for latency hiding) */
+		self->beginReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );
+
+		/* Do a blocking send of outgoing counts, so our nbrs know what to receive */
+		self->sendOutgoingParticleCounts( (ParticleCommHandler*)self );
+
+		/* Now need to make sure that incoming particle counts are here, then begin receiving particles
+		   (We do this as early as possible for latency hiding purposes */
+		self->finishReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );
+		self->allocateIncomingParticleArrays( (ParticleCommHandler*)self );
+		self->beginReceiveOfIncomingParticles( (ParticleCommHandler*)self );
+			
+		/* OK, now begin sending out particles we know need to go to nbrs */
+		self->allocateOutgoingParticleArrays( (ParticleCommHandler*)self );
+		self->beginSendingParticles( (ParticleCommHandler*)self );
+	}
+	
+	if ( self->useGlobalFallbackCommStrategy ) {
+		self->particlesOutsideDomainIndices = Memory_Alloc_Array( Particle_Index, self->swarm->particlesArrayDelta,
+			"self->particlesOutsideDomainIndices" );
+
+		ParticleMovementHandler_DoGlobalFallbackCommunication( self );
+	}
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		/* Ok, at this point make sure our non-blocking receive of incoming via domain boundary
+ 		 *  particles have completed: then immediately insert these particles into our local swarm */
+		self->finishReceiveOfIncomingParticlesAndUpdateIndices( (ParticleCommHandler*)self );
+	}
+
+	/* final update of the 'holes' in my particles list (some may be left if we sent more than we recv'd overall */
+	ParticleMovementHandler_FillRemainingHolesInLocalParticlesArray( (ParticleCommHandler*)self );
+
+	/* NB: Can't delete these until here, as they're needed by the "fillRemainingHoles" function above. */
+	if ( self->useGlobalFallbackCommStrategy ) {
+		Memory_Free( self->particlesOutsideDomainIndices );
+		self->particlesOutsideDomainIndices = NULL;
+	}
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		self->confirmOutgoingSendsCompleted( (ParticleCommHandler*)self );
+	}
+
+	_ParticleCommHandler_PrintCommunicationVolumeStats( (ParticleCommHandler*)self, startTime, info );
+
+	MPI_Barrier( self->swarm->comm );
+
+	/* clean up allocated memory, and zero counters, ready for next timestep */
+	if ( self->swarm->cellShadowCount > 0 ) {
+		self->freeIncomingArrays( (ParticleCommHandler*)self );
+		self->freeOutgoingArrays( (ParticleCommHandler*)self );
+	}
+	
+	_ParticleCommHandler_ZeroShadowCommStrategyCounters( (ParticleCommHandler*)self );
+	
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void ParticleMovementHandler_ZeroGlobalCommStrategyCounters( ParticleMovementHandler* self ) {
+	self->particlesOutsideDomainTotalCount = 0;
+	self->particlesOutsideDomainUnfilledCount = 0;
+	self->currParticleLeavingMyDomainIndex = 0;
+	self->globalParticlesArrivingMyDomainCount = 0;
+	self->globalParticlesOutsideDomainTotal = 0;
+}
+
+/* +++ Global fallback method related +++ */
+void ParticleMovementHandler_DoGlobalFallbackCommunication( ParticleMovementHandler* self ) {
+
+	ParticleMovementHandler_FindParticlesThatHaveMovedOutsideMyDomain( self );
+
+	ParticleMovementHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains(
+		self,
+		&self->globalParticlesArrivingMyDomainCount,
+		&self->globalParticlesOutsideDomainTotal );
+
+}
+
+
+void ParticleMovementHandler_FindParticlesThatHaveMovedOutsideMyDomain( ParticleMovementHandler* self )
+{
+	Particle_Index		particlesOutsideDomainSize = 0;
+	GlobalParticle*         currParticle = NULL;
+	Particle_Index		lParticle_I = 0;
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	self->particlesOutsideDomainTotalCount = 0;
+	particlesOutsideDomainSize = self->swarm->particlesArrayDelta;
+
+
+	Journal_DPrintfL( self->debug, 1, "Checking the owning cell of each of my swarm's %d particles:\n",
+		self->swarm->particleLocalCount );
+	Stream_IndentBranch( Swarm_Debug );
+
+	for ( lParticle_I=0; lParticle_I < self->swarm->particleLocalCount; lParticle_I++ ) {
+
+		currParticle = (GlobalParticle*)Swarm_ParticleAt( self->swarm, lParticle_I );
+		if ( currParticle->owningCell == self->swarm->cellDomainCount ) {
+			Journal_DPrintfL( self->debug, 3, "particle %d has moved outside domain to (%.2f,%.2f,%.2f): "
+				"saving index\n", lParticle_I, currParticle->coord[0], currParticle->coord[1],
+								currParticle->coord[2] );
+			if ( self->particlesOutsideDomainTotalCount == particlesOutsideDomainSize ) { 
+				particlesOutsideDomainSize += self->swarm->particlesArrayDelta;
+				Journal_DPrintfL( self->debug, 3, "(Need more memory to save indexes: increasing from %d to %d.)\n",
+					self->particlesOutsideDomainTotalCount, particlesOutsideDomainSize );
+				self->particlesOutsideDomainIndices = Memory_Realloc_Array( self->particlesOutsideDomainIndices,
+					Particle_Index, particlesOutsideDomainSize );
+			}
+			self->particlesOutsideDomainIndices[self->particlesOutsideDomainTotalCount++] = lParticle_I;
+		}	
+
+	}	
+	Stream_UnIndentBranch( Swarm_Debug );
+
+	self->particlesOutsideDomainUnfilledCount = self->particlesOutsideDomainTotalCount;
+
+	#if DEBUG
+	{
+		Particle_Index		particle_I = 0;
+		if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+			Journal_DPrintf( self->debug, "%d Particles have moved outside my domain:\n\t[",
+				self->particlesOutsideDomainTotalCount );
+			for ( ; particle_I < self->particlesOutsideDomainTotalCount; particle_I++ ) {
+				Journal_DPrintf( self->debug, "%d, ", self->particlesOutsideDomainIndices[particle_I] );
+			}
+			Journal_DPrintf( self->debug, "]\n" );
+		}
+	}
+	#endif
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void ParticleMovementHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains(
+		ParticleMovementHandler* self,
+		Particle_Index*      globalParticlesArrivingMyDomainCountPtr,
+		Particle_Index*      globalParticlesOutsideDomainTotalPtr )
+{
+	Particle_Index*		globalParticlesOutsideDomainCounts = NULL;		
+	Particle_Index		maxGlobalParticlesOutsideDomainCount = 0;		
+	Processor_Index		proc_I = 0;
+	Particle_Index		lParticle_I = 0;
+	Particle_Index		particle_I = 0;
+
+	Journal_DPrintfL( self->debug, 2, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	(*globalParticlesArrivingMyDomainCountPtr) = 0;
+	(*globalParticlesOutsideDomainTotalPtr) = 0;		
+
+	/* Find the counts of particles	outside domain... */
+	ParticleMovementHandler_GetCountOfParticlesOutsideDomainPerProcessor(
+		self,
+		&globalParticlesOutsideDomainCounts,
+		&maxGlobalParticlesOutsideDomainCount,
+		globalParticlesOutsideDomainTotalPtr );
+
+	if ( (*globalParticlesOutsideDomainTotalPtr) > 0 ) {
+		Particle*		particlesLeavingMyDomain = NULL;
+		Particle*		globalParticlesLeavingDomains = NULL;
+		SizeT			particlesLeavingDomainSizeBytes = 0;
+		Cell_DomainIndex	lCell_I = 0;
+		GlobalParticle*	        currParticle = NULL;
+		Particle_Index		currProcParticlesOutsideDomainCount = 0;
+		Particle_Index		currProcOffset = 0;
+
+		particlesLeavingDomainSizeBytes = self->swarm->particleExtensionMgr->finalSize
+			* maxGlobalParticlesOutsideDomainCount;
+		particlesLeavingMyDomain = Memory_Alloc_Bytes( particlesLeavingDomainSizeBytes, "Particle",
+			"particlesLeavingMyDomain" );
+
+		// TODO: investigate doing this with an MPI_Indexed datatype instead...
+		Journal_DPrintfL( self->debug, 2, "Copying particles leaving my domain to temp. transfer array\n" );
+		Stream_IndentBranch( Swarm_Debug );
+
+		#if 0
+		MPI_Type_indexed( 
+			self->particlesOutsideDomainTotalCount,
+			blocklens,
+			self->particlesOutsideDomainIndices,//change to contiguous indices?
+			MPI_BYTE,
+			ParticlesLeavingDomainTransferIndexed
+			);
+		#endif	
+
+		for ( particle_I=0; particle_I < self->particlesOutsideDomainTotalCount; particle_I++ ) {
+			Journal_DPrintfL( self->debug, 3, "Copying particle %d to particlesLeavingMyDomain[%d]\n",
+				self->particlesOutsideDomainIndices[particle_I], particle_I );
+			Swarm_CopyParticleOffSwarm( self->swarm,
+				particlesLeavingMyDomain, particle_I,
+				self->particlesOutsideDomainIndices[particle_I] );
+		}	
+		Stream_UnIndentBranch( Swarm_Debug );
+
+		/* allocate the big global receive buffer */
+		globalParticlesLeavingDomains = Memory_Alloc_Bytes( particlesLeavingDomainSizeBytes * self->swarm->nProc,
+			"Particle", "globalParticlesLeavingDomains" );
+
+		Journal_DPrintfL( self->debug, 2, "Getting the global array of particles leaving domains\n" );
+		MPI_Allgather( particlesLeavingMyDomain, particlesLeavingDomainSizeBytes, MPI_BYTE,
+			globalParticlesLeavingDomains, particlesLeavingDomainSizeBytes, MPI_BYTE,
+			self->swarm->comm );
+
+		Journal_DPrintfL( self->debug, 2, "Checking through the global array of particles leaving domains, "
+			"and snaffling those moving into my domain:\n" );
+		Stream_IndentBranch( Swarm_Debug );
+		for ( proc_I=0; proc_I < self->swarm->nProc; proc_I++ ) {
+
+			if ( proc_I == self->swarm->myRank ) continue;
+
+			currProcOffset = proc_I * maxGlobalParticlesOutsideDomainCount;
+			currProcParticlesOutsideDomainCount = globalParticlesOutsideDomainCounts[proc_I];
+			
+			Journal_DPrintfL( self->debug, 3, "Checking particles that left proc. %d:\n", proc_I );
+			for ( particle_I=0; particle_I < currProcParticlesOutsideDomainCount; particle_I++ ) {
+				currParticle = (GlobalParticle*)ParticleAt( globalParticlesLeavingDomains,
+					(currProcOffset + particle_I),
+					self->swarm->particleExtensionMgr->finalSize );
+				lCell_I = CellLayout_CellOf( self->swarm->cellLayout, currParticle );
+				if ( lCell_I < self->swarm->cellLocalCount ) { 
+					#if DEBUG
+					Journal_DPrintfL( self->debug, 3, "Found particle at (%.2f,%.2f,%.2f) that's moved "
+						"into my local cell %d...\n", currParticle->coord[0],
+						currParticle->coord[1], currParticle->coord[2], lCell_I );
+					#endif	
+					
+					/* copy particle to the lowest available slot in my particles array */
+					lParticle_I = ParticleMovementHandler_FindFreeSlotAndPrepareForInsertion( (ParticleCommHandler*)self );
+
+					Swarm_CopyParticleOntoSwarm( self->swarm, lParticle_I,
+						globalParticlesLeavingDomains, (currProcOffset + particle_I) );
+					Swarm_AddParticleToCell( self->swarm, lCell_I, lParticle_I );
+					(*globalParticlesArrivingMyDomainCountPtr)++;
+				}
+				#if DEBUG
+				else {
+					currParticle = (GlobalParticle*)ParticleAt( globalParticlesLeavingDomains, 
+						(currProcOffset + particle_I),
+						self->swarm->particleExtensionMgr->finalSize );
+					Journal_DPrintfL( self->debug, 3, "Ignoring particle at (%.2f,%.2f,%.2f) since "
+						"not in my local cells...\n", currParticle->coord[0],
+						currParticle->coord[1], currParticle->coord[2] );
+				}
+				#endif
+			}		
+		}	
+		Stream_UnIndentBranch( Swarm_Debug );
+
+		Memory_Free( particlesLeavingMyDomain );
+		Memory_Free( globalParticlesLeavingDomains );
+
+		/* Defensive check to make sure particles not lost/created accidentally somehow */
+		if( self->defensive == True ) {
+			ParticleMovementHandler_EnsureParticleCountLeavingDomainsEqualsCountEnteringGlobally( self );
+		}
+	}	
+	Memory_Free( globalParticlesOutsideDomainCounts );
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void ParticleMovementHandler_EnsureParticleCountLeavingDomainsEqualsCountEnteringGlobally( ParticleMovementHandler* self ) {
+	Particle_Index		totalParticlesFoundEnteringDomains = 0;
+
+	MPI_Reduce( &self->globalParticlesArrivingMyDomainCount, &totalParticlesFoundEnteringDomains,
+		    1, MPI_UNSIGNED, MPI_SUM, 0, self->swarm->comm );
+
+	if ( 0 == self->swarm->myRank ) {
+		Stream*   errorStream = Journal_Register( Error_Type, self->type );
+
+		Journal_Firewall( totalParticlesFoundEnteringDomains == self->globalParticlesOutsideDomainTotal,
+				  errorStream, "Error - in %s(): %d particles were found across all processors to be "
+				  "leaving the individual domains directly, but after sharing and searching %d were "
+				  "found entering them directly! These must match as no particles should be "
+				  "lost/created through advection.\n",
+				  __func__, self->globalParticlesOutsideDomainTotal,
+				  totalParticlesFoundEnteringDomains );
+	}
+}
+
+
+void ParticleMovementHandler_GetCountOfParticlesOutsideDomainPerProcessor(
+	ParticleMovementHandler*	self,
+	Particle_Index**	globalParticlesOutsideDomainCountsPtr,
+	Particle_Index*		maxGlobalParticlesOutsideDomainCountPtr,
+	Particle_Index*		globalParticlesOutsideDomainTotalPtr )
+{
+	Processor_Index		proc_I;
+
+	(*globalParticlesOutsideDomainCountsPtr) = Memory_Alloc_Array( Particle_Index, self->swarm->nProc,
+		"(*globalParticlesOutsideDomainCountsPtr)" );
+		
+	MPI_Allgather( (&self->particlesOutsideDomainTotalCount), 1, MPI_UNSIGNED, 
+		(*globalParticlesOutsideDomainCountsPtr), 1, MPI_UNSIGNED, self->swarm->comm );
+	
+	(*globalParticlesOutsideDomainTotalPtr) = 0;
+	for ( proc_I=0; proc_I < self->swarm->nProc; proc_I++ ) {
+		(*globalParticlesOutsideDomainTotalPtr) += (*globalParticlesOutsideDomainCountsPtr)[proc_I];
+		if ( (*globalParticlesOutsideDomainCountsPtr)[proc_I] > (*maxGlobalParticlesOutsideDomainCountPtr) ) {
+			(*maxGlobalParticlesOutsideDomainCountPtr) = (*globalParticlesOutsideDomainCountsPtr)[proc_I];
+		}
+	}	
+
+	#if DEBUG
+	if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+		Journal_DPrintf( self->debug, "Global counts of particles moving outside domains:\n" );
+		Journal_DPrintf( self->debug, "\tTotal: %d, Counts: [", (*globalParticlesOutsideDomainTotalPtr) );
+		for ( proc_I=0; proc_I < self->swarm->nProc; proc_I++ ) {
+			Journal_DPrintf( self->debug, "%d, ", (*globalParticlesOutsideDomainCountsPtr)[proc_I] );
+		}	
+		Journal_DPrintf( self->debug, "]\n" );
+	}	
+	#endif
+}
+
+/* TODO: look at using MPI_Indexed instead */
+void ParticleMovementHandler_FinishReceiveAndUpdateShadowParticlesEnteringMyDomain( ParticleCommHandler* self ) {
+	MPI_Status	status;
+	Cell_ShadowTransferIndex	stCell_I;
+	Cell_LocalIndex			lCell_I;
+	Neighbour_Index			nbr_I;
+	Cell_ShadowTransferIndex	shadowCellsFromProcCount;
+	ShadowInfo*			cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*			procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index			nbrCount = procNbrInfo->procNbrCnt;
+	Particle_InCellIndex		incomingCellParticleCount;
+	Particle_InCellIndex		cParticle_I;
+	Particle_Index			lParticle_I;
+	Index				incomingParticle_I=0; /*Index into the array of all leaving particle indices */
+	Index				incomingParticleSetsNotYetReceivedCount;
+	Bool*				incomingParticlesReceived;
+	#if DEBUG
+	GlobalParticle*                 currParticle;
+	#endif
+
+	Journal_DPrintf( self->debug, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+	
+	incomingParticlesReceived = Memory_Alloc_Array_Unnamed( Bool, nbrCount );
+
+	/* Calculate how many particle sets we have to receive */
+	incomingParticleSetsNotYetReceivedCount = 0;
+	for ( nbr_I=0; nbr_I < nbrCount; nbr_I++ ) {
+		incomingParticlesReceived[nbr_I] = False;
+		if (self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] > 0) {
+			incomingParticleSetsNotYetReceivedCount++;
+		}
+	}
+
+	while ( incomingParticleSetsNotYetReceivedCount > 0 ) {
+		int flag = 0;
+		Journal_DPrintfL( self->debug, 3, "%d particle sets still to go...\n", incomingParticleSetsNotYetReceivedCount );
+		for ( nbr_I=0; nbr_I < nbrCount; nbr_I++ ) {
+			if ( (self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] > 0) &&
+				(False == incomingParticlesReceived[nbr_I]) )
+			{
+				MPI_Test( self->particlesArrivingFromNbrShadowCellsHandles[nbr_I], &flag, &status );
+				if ( False == flag ) {
+					/* No results yet from this proc -> continue to next. */
+					continue;
+				}
+				else {
+					Journal_DPrintfL( self->debug, 3, "Received particles from nbr %d (proc %d):\n",
+						nbr_I, procNbrInfo->procNbrTbl[nbr_I] );
+					Stream_Indent( self->debug );
+
+					incomingParticle_I = 0;
+					shadowCellsFromProcCount = cellShadowInfo->procShadowedCnt[nbr_I];
+
+				
+					for ( stCell_I=0; stCell_I < shadowCellsFromProcCount; stCell_I++ ) {
+
+						lCell_I = cellShadowInfo->procShadowedTbl[nbr_I][stCell_I];
+						Journal_DPrintfL( self->debug, 3, "Incoming cell %d (local index %d):\n",
+							stCell_I, lCell_I );
+						Stream_Indent( self->debug );
+
+						incomingCellParticleCount =
+							self->particlesArrivingFromNbrShadowCellCounts[nbr_I][stCell_I];
+
+						for ( cParticle_I=0; cParticle_I < incomingCellParticleCount; cParticle_I++ ) {	
+
+							#if DEBUG
+							currParticle = (GlobalParticle*)ParticleAt(
+								self->particlesArrivingFromNbrShadowCells[nbr_I],
+								incomingParticle_I,
+								self->swarm->particleExtensionMgr->finalSize );
+							Journal_DPrintfL( self->debug, 3, "Handling its PIC %d: - at "
+								"(%.2f,%.2f,%.2f)\n", cParticle_I,
+								currParticle->coord[0], currParticle->coord[1],
+								currParticle->coord[2] );
+							#endif
+
+							Stream_Indent( self->debug );
+
+							lParticle_I = ParticleMovementHandler_FindFreeSlotAndPrepareForInsertion( self );
+
+							Swarm_CopyParticleOntoSwarm(
+								self->swarm,
+								lParticle_I,
+								self->particlesArrivingFromNbrShadowCells[nbr_I], incomingParticle_I++ ); 
+
+							Swarm_AddParticleToCell( self->swarm, lCell_I, lParticle_I );
+							
+							Stream_UnIndent( self->debug );
+						}	
+						Stream_UnIndent( self->debug );
+					}
+					incomingParticlesReceived[nbr_I] = True;
+					incomingParticleSetsNotYetReceivedCount--;
+					Stream_UnIndent( self->debug );
+				}
+			}
+		}
+	}	
+
+	Memory_Free( incomingParticlesReceived );
+
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+/* +++ Managment of particle array insertions/deletions +++ */
+
+
+Particle_Index ParticleMovementHandler_FindFreeSlotAndPrepareForInsertion( ParticleCommHandler* self )
+{
+	Particle_Index	lParticle_I = 0;
+
+	if ( self->shadowParticlesLeavingMeUnfilledCount > 0 ) {
+		Journal_DPrintfL( self->debug, 3, "Still %d holes available from "
+			"particles leaving via shadow cells\n-> free slot to add into is %d\n",
+			self->shadowParticlesLeavingMeUnfilledCount,
+			self->shadowParticlesLeavingMeIndices[self->currShadowParticleLeavingMeIndex]);
+			
+		lParticle_I = self->shadowParticlesLeavingMeIndices[self->currShadowParticleLeavingMeIndex];
+
+		self->currShadowParticleLeavingMeIndex++;
+		self->shadowParticlesLeavingMeUnfilledCount--;
+	}
+	else if ( self->particlesOutsideDomainUnfilledCount ) {
+		Journal_DPrintfL( self->debug, 3, "Still %d holes available from "
+			"particles leaving domain direct\n-> free slot to add into is %d\n", 
+			self->particlesOutsideDomainUnfilledCount,
+			self->particlesOutsideDomainIndices[self->currParticleLeavingMyDomainIndex]);
+
+		lParticle_I = self->particlesOutsideDomainIndices[self->currParticleLeavingMyDomainIndex];
+
+		self->currParticleLeavingMyDomainIndex++;
+		self->particlesOutsideDomainUnfilledCount--;
+	}
+	else {
+		Journal_DPrintfL( self->debug, 3, "No holes left from leaving "
+			"particles\n-> slot to insert into is end of array %d\n", 
+			self->swarm->particleLocalCount );
+		lParticle_I = self->swarm->particleLocalCount;
+		/*
+		if ( self->swarm->particleLocalCount == self->swarm->particlesArraySize ) {
+			Journal_DPrintfL( self->debug, 3, "Particles array memory used up "
+				"-> increasing from %d entries by %d\n",
+				self->swarm->particlesArraySize, self->swarm->particlesArrayDelta );
+			self->swarm->particlesArraySize += self->swarm->particlesArrayDelta;
+			self->swarm->particles = Memory_Realloc_Array_Bytes(
+				self->swarm->particles,
+				self->swarm->particleExtensionMgr->finalSize,
+				self->swarm->particlesArraySize );
+		}
+		*/
+		self->swarm->particleLocalCount++;
+		Swarm_Realloc( self->swarm );
+	}
+
+	return lParticle_I;
+}
+
+
+void ParticleMovementHandler_FillRemainingHolesInLocalParticlesArray( ParticleCommHandler* self )
+{
+	Particle_Index		prevParticlesArraySize = self->swarm->particlesArraySize;
+	Particle_Index		numHolesToFill;
+	Particle_InCellIndex	cParticle_I;
+	StandardParticle*	oldPtrToMovedParticle;
+	Cell_LocalIndex		owningCell;
+	Particle_Index		indexToInsertAt;
+	Particle_Index*		leavingParticlesArray = NULL;
+	Index			currLeavingParticleArrayEntry = 0;
+	Index			highestLeavingParticleArrayEntry;
+	Index			leavingParticlesUnfilledCount = 0;
+	Particle_Index		highestLeavingParticleIndex;
+	Particle_Index		candidateParticleToMove;
+	Bool			finishedFlag = False;
+	Bool			mergedArrayCreated = False;
+	Particle_Index		prevParticleCount = self->swarm->particleLocalCount;
+	
+	Journal_DPrintf( self->debug, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	numHolesToFill = self->particlesOutsideDomainUnfilledCount + self->shadowParticlesLeavingMeUnfilledCount;
+	if ( numHolesToFill == 0 ) {
+		Journal_DPrintfL( self->debug, 2, "No holes to fill -> nothing to do, returning.\n" );
+		Stream_UnIndentBranch( Swarm_Debug );
+		return;
+	}
+	#if DEBUG
+	if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+		ParticleMovementHandler_PrintParticleSlotsYetToFill( self );
+	}	
+	#endif
+
+	/* work out the list we have to iterate over: */
+	if ( self->shadowParticlesLeavingMeUnfilledCount && !self->particlesOutsideDomainUnfilledCount ) {
+		Journal_DPrintfL( self->debug, 2, "Particles have only left via shadow cells -> no need to merge lists\n" );
+		leavingParticlesArray = &self->shadowParticlesLeavingMeIndices[self->currShadowParticleLeavingMeIndex];
+	}
+	else if ( self->particlesOutsideDomainUnfilledCount && !self->shadowParticlesLeavingMeUnfilledCount ) {
+		Journal_DPrintfL( self->debug, 2, "Particles have only left domain directly -> no need to merge lists\n" );
+		leavingParticlesArray = &self->particlesOutsideDomainIndices[self->currParticleLeavingMyDomainIndex];
+	} 
+	else {
+		Journal_DPrintfL( self->debug, 2, "Particles have left both via shadow cells and domain directly -> merge lists\n" );
+		leavingParticlesArray = ParticleMovementHandler_MergeListsOfUnfilledParticleSlots( self );
+		mergedArrayCreated = True;
+	}
+
+	/* Ok: while there are holes left to fill, find the highest candidate, move it, and reduce the count. */
+	Journal_DPrintfL( self->debug, 2, "Starting run through the %d particles to fill:\n", numHolesToFill );
+	Stream_IndentBranch( Swarm_Debug );
+
+	currLeavingParticleArrayEntry = 0;
+	highestLeavingParticleArrayEntry = numHolesToFill-1;
+	leavingParticlesUnfilledCount = numHolesToFill;
+
+	while ( leavingParticlesUnfilledCount > 0 ) {
+
+		indexToInsertAt = leavingParticlesArray[currLeavingParticleArrayEntry];
+		Journal_DPrintfL( self->debug, 3, "Attempting to fill leaving slot %d (at particle index %d):\n",
+			currLeavingParticleArrayEntry, indexToInsertAt );
+
+		Stream_Indent( self->debug );
+
+		/* This is where we work out the index of which particle to move into the free slot.
+		 * We Start from the end of the particles array, then decrement by 1 until we find a candidate that
+		 * hasn't itself already left. 
+		 * We also need to consider the possibility that every candidate higher than the current index
+		 * has also left, in which case we are done, and finish the while process. 
+		 * See the ParticleCommHandler Twiki page for diagrams illustrating this algorithm.
+		 */
+
+		candidateParticleToMove = self->swarm->particleLocalCount-1;
+		highestLeavingParticleIndex = leavingParticlesArray[highestLeavingParticleArrayEntry];
+		Journal_DPrintfL( self->debug, 3, "Searching for highest particle that hasn't also moved:\n" );
+		Stream_Indent( self->debug );	
+
+		while ( candidateParticleToMove == leavingParticlesArray[highestLeavingParticleArrayEntry] ) {
+			/* Check if that was the last candidate particle above the current one: */
+			/* This test needs to be at the top of this loop to handle the case where we have one
+			particle that's leaving */
+
+			if ( candidateParticleToMove <= indexToInsertAt ) {
+				Journal_DPrintfL( self->debug, 3, "** No more particles above current "
+					"hole %d to fill: we're done. **\n", indexToInsertAt );
+				/* Need the line below to mark the fact we failed to fill the current indexToInsertAt hole */
+				self->swarm->particleLocalCount--;
+				finishedFlag = True;
+				break;
+			}
+
+			Journal_DPrintfL( self->debug, 3, "Candidate particle %d has also left...\n",
+				candidateParticleToMove );
+
+			highestLeavingParticleArrayEntry--;
+			highestLeavingParticleIndex = leavingParticlesArray[highestLeavingParticleArrayEntry];
+			leavingParticlesUnfilledCount--;
+			self->swarm->particleLocalCount--;
+			candidateParticleToMove--;
+		}	
+		Stream_UnIndent( self->debug );	
+
+		if ( True == finishedFlag ) {
+			/* We must have hit the "no more candidate particles" criterion in the search loop, so
+			 * quit trying to fill empty holes entirely. */
+			Stream_UnIndent( self->debug );
+			break;
+		}
+
+		Journal_DPrintfL( self->debug, 3, "Highest valid particle found at index %d:\n",
+			candidateParticleToMove );
+		Journal_DFirewall( (candidateParticleToMove > indexToInsertAt), Swarm_Error,
+			"Error in %s: Empty hole filling\nalgorithm has stuffed up somehow,"
+			" since particle to be moved %d is <= slot to insert into %d.\n",
+			__func__, candidateParticleToMove, indexToInsertAt );
+		Stream_Indent( self->debug );	
+
+		Journal_DPrintfL( self->debug, 3, "Copying particle data from %d to %d\n",
+			candidateParticleToMove, indexToInsertAt );
+		Swarm_CopyParticleWithinSwarm( self->swarm, indexToInsertAt, candidateParticleToMove );
+
+		/* update the cell that the moved particle lives in to have the correct index into the
+		 * particle array for it. */
+		oldPtrToMovedParticle = Swarm_ParticleAt( self->swarm, candidateParticleToMove );
+		owningCell = oldPtrToMovedParticle->owningCell;
+		cParticle_I = Swarm_GetParticleIndexWithinCell( self->swarm, owningCell, candidateParticleToMove );
+		Journal_DPrintfL( self->debug, 3, "Updating owning cell: (Cell %d, PIC index %d) now -> p.i. %d\n",
+			owningCell, cParticle_I, indexToInsertAt );
+		self->swarm->cellParticleTbl[owningCell][cParticle_I] = indexToInsertAt;
+
+
+		Stream_UnIndent( self->debug );	
+
+		/* update the counters/indices */
+		currLeavingParticleArrayEntry++;
+		leavingParticlesUnfilledCount--;
+		self->swarm->particleLocalCount--;
+
+		Stream_UnIndent( self->debug );
+	}
+	Stream_UnIndentBranch( Swarm_Debug );
+
+	/* we only need to free the array of leaving particle slots if its a new merged list */
+	if ( mergedArrayCreated == True ) {
+		Memory_Free( leavingParticlesArray );
+	}
+
+	/* ------------------------- */
+	Journal_DPrintfL( self->debug, 2, "Local particle count reduced from %d to %d\n", prevParticleCount,
+		self->swarm->particleLocalCount );
+
+	/* Update the memory allocated to the particles array if particle count has reduced significantly */
+	while ( self->swarm->particlesArraySize > self->swarm->particleLocalCount + self->swarm->particlesArrayDelta ) {
+		self->swarm->particlesArraySize -= self->swarm->particlesArrayDelta;
+	}
+	if ( self->swarm->particlesArraySize < prevParticlesArraySize ) {
+		Journal_DPrintfL( self->debug, 2, "Reducing particles array entries from %d to %d\n",
+			prevParticlesArraySize, self->swarm->particlesArraySize );
+		Swarm_Realloc( self->swarm );
+		/*
+		self->swarm->particles = Memory_Realloc_Array_Bytes(
+			self->swarm->particles,
+			self->swarm->particleExtensionMgr->finalSize,
+			self->swarm->particlesArraySize );
+		*/
+	}	
+
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+Particle_Index* ParticleMovementHandler_MergeListsOfUnfilledParticleSlots( ParticleCommHandler* self )
+{
+	Particle_Index*		mergedLeavingParticleArray = NULL;
+	Particle_Index		slotsToFillTotalCount = 0;
+	Index			currMergedLeavingParticleEntry = 0;
+	Index			lowestUnmergedLeavingViaShadow = self->currShadowParticleLeavingMeIndex;
+	Index			lowestUnmergedLeavingDomain = self->currParticleLeavingMyDomainIndex;
+	Particle_Index		indexOfLowestUnmergedLeavingDomain = 0;
+	Index*			lowestUnmergedLeavingEntryToUpdatePtr = NULL;
+	Particle_Index		candidateMergeParticle = 0;
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_Indent( self->debug );
+
+	slotsToFillTotalCount = self->particlesOutsideDomainUnfilledCount + self->shadowParticlesLeavingMeUnfilledCount;
+	mergedLeavingParticleArray = Memory_Alloc_Array( Particle_Index, slotsToFillTotalCount, "mergedLeavingParticlesArray" );
+
+	while ( currMergedLeavingParticleEntry < slotsToFillTotalCount ) {
+		/* Need to initialise this to the max particle count every loop, in case the first condition is false,
+		so the 2nd will always hit it. */
+		candidateMergeParticle = self->swarm->particleLocalCount;
+		 
+		if ( lowestUnmergedLeavingViaShadow < self->shadowParticlesLeavingMeTotalCount ) {
+			candidateMergeParticle = self->shadowParticlesLeavingMeIndices[lowestUnmergedLeavingViaShadow];
+			lowestUnmergedLeavingEntryToUpdatePtr = &lowestUnmergedLeavingViaShadow;
+		}
+		if ( lowestUnmergedLeavingDomain < self->particlesOutsideDomainTotalCount ) {
+			indexOfLowestUnmergedLeavingDomain = self->particlesOutsideDomainIndices[lowestUnmergedLeavingDomain];
+
+			if ( indexOfLowestUnmergedLeavingDomain < candidateMergeParticle ) { 
+				candidateMergeParticle = indexOfLowestUnmergedLeavingDomain;
+				lowestUnmergedLeavingEntryToUpdatePtr = &lowestUnmergedLeavingDomain;
+			}	
+		}
+		
+		mergedLeavingParticleArray[currMergedLeavingParticleEntry++] = candidateMergeParticle;
+		(*lowestUnmergedLeavingEntryToUpdatePtr)++;
+
+		#if DEBUG
+		Journal_Firewall( lowestUnmergedLeavingViaShadow <= self->shadowParticlesLeavingMeTotalCount,
+			Swarm_Error, "Error: merging of unfilled particle lists stuffed up.\n" );
+		Journal_Firewall( lowestUnmergedLeavingDomain <= self->particlesOutsideDomainTotalCount,
+			Swarm_Error, "Error: merging of unfilled particle lists stuffed up.\n" );
+		#endif
+	}
+
+	#if DEBUG
+	if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+		Journal_DPrintf( self->debug, "Merged list of particles leaving proc:\n\t{" );
+		for ( currMergedLeavingParticleEntry=0; currMergedLeavingParticleEntry < slotsToFillTotalCount;
+			currMergedLeavingParticleEntry++ ) 
+		{
+			Journal_DPrintf( self->debug, "%d, ",
+				mergedLeavingParticleArray[currMergedLeavingParticleEntry] );
+		}
+		Journal_DPrintf( self->debug, "}\n" );
+	}
+	#endif
+	
+	Stream_UnIndent( self->debug );
+
+	return mergedLeavingParticleArray;
+}
+
+
+void ParticleMovementHandler_PrintParticleSlotsYetToFill( ParticleCommHandler* self ) {	
+	Index leavingParticleEntry;
+
+	Journal_DPrintf( self->debug, "%d slots yet to fill from particles leaving via shadow cells:\n",
+		self->shadowParticlesLeavingMeUnfilledCount );
+	leavingParticleEntry = self->currShadowParticleLeavingMeIndex;
+	Journal_DPrintf( self->debug, "\t{ " );
+	for ( ; leavingParticleEntry < self->shadowParticlesLeavingMeTotalCount; leavingParticleEntry++ ) {
+		Journal_DPrintf( self->debug, "%d, ", 
+			self->shadowParticlesLeavingMeIndices[leavingParticleEntry] );
+	}
+	Journal_DPrintf( self->debug, "}\n" );
+		
+	Journal_DPrintf( self->debug, "%d slots yet to fill from particles leaving domain directly:\n",
+		self->particlesOutsideDomainUnfilledCount );
+	leavingParticleEntry = self->currParticleLeavingMyDomainIndex;
+	Journal_DPrintf( self->debug, "\t{ " );
+	for ( ; leavingParticleEntry < self->particlesOutsideDomainTotalCount; leavingParticleEntry++ ) {
+		Journal_DPrintf( self->debug, "%d, ", 
+			self->particlesOutsideDomainIndices[leavingParticleEntry] );
+	}
+	Journal_DPrintf( self->debug, "}\n" );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleMovementHandler.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleMovementHandler.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,157 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Handles the communication of particles between processors when their coordinates are updated.
+**
+** Assumptions:
+**
+** Comments:
+**	If we ever decide we need more than one strategy for doing this, this will probably become an
+**	interface and we'll have separate instantiation classes. Can't see that need in the short
+**	term though so we'll just use the one class for now.
+**
+** $Id: ParticleMovementHandler.h 4001 2007-02-09 01:26:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+#ifndef __Domain_Swarm_ParticleMovementHandler_h__
+#define __Domain_Swarm_ParticleMovementHandler_h__
+
+	/** Textual name of this class */
+	extern const Type ParticleMovementHandler_Type;
+
+	#define __ParticleMovementHandler \
+		__ParticleCommHandler \
+		/* Virtual info */ \
+		/* Member info */ \
+		Index                           globalParticlesArrivingMyDomainCount; \
+		Index                           globalParticlesOutsideDomainTotal; \
+		Bool                            useGlobalFallbackCommStrategy; \
+		Bool                            defensive;
+
+
+	struct ParticleMovementHandler { __ParticleMovementHandler };	
+
+	/* --- virtual functions --- */
+
+	/** Constructor interface */
+	void* ParticleMovementHandler_DefaultNew( Name name );
+	
+	ParticleMovementHandler* ParticleMovementHandler_New(
+			Name name,
+			Bool useGlobalFallbackCommStrategy
+			);
+	
+	/** Private Constructor */
+	ParticleMovementHandler* _ParticleMovementHandler_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag,
+		Bool                                                            useGlobalFallbackCommStrategy
+		 );
+	
+	/** Variable initialiser */
+	void _ParticleMovementHandler_Init(
+		ParticleMovementHandler*     self,
+		Bool                     useGlobalFallbackCommStrategy
+		);
+
+	/** Stg_Class_Print() implementation */
+	void _ParticleMovementHandler_Print( void* pCommsHandler, Stream* stream );
+	
+	void _ParticleMovementHandler_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data );
+	
+	void _ParticleMovementHandler_Build( void* pCommsHandler, void *data );
+	
+	void _ParticleMovementHandler_Initialise( void* pCommsHandler, void *data );
+	
+	void _ParticleMovementHandler_Execute( void* pCommsHandler, void *data );
+
+	void _ParticleMovementHandler_Destroy( void* pCommsHandler, void *data );
+	
+	/** Copy */
+	#define ParticleMovementHandler_Copy( self ) \
+		(ParticleMovementHandler*)ParticleMovementHandler_CopyFunc( self, NULL, False, NULL, NULL )
+	#define ParticleMovementHandler_DeepCopy( self ) \
+		(ParticleMovementHandler*)ParticleMovementHandler_CopyFunc( self, NULL, True, NULL, NULL )
+	
+	void* _ParticleMovementHandler_CopyFunc( void* ParticleMovementHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Stg_Class_Delete() implementation */
+	void _ParticleMovementHandler_Delete(void* pCommsHandler );
+	
+	/* --- Public virtual function interfaces --- */
+	
+	/** Handle particle movement between processors */
+	void ParticleMovementHandler_HandleParticleMovementBetweenProcs( ParticleCommHandler* pCommsHandler );
+
+	/* --- virtual function implementations --- */
+
+	/* +++ Global fallback method related +++ */
+	void ParticleMovementHandler_DoGlobalFallbackCommunication( ParticleMovementHandler* self );
+
+	void ParticleMovementHandler_FindParticlesThatHaveMovedOutsideMyDomain( ParticleMovementHandler* self );
+
+	void ParticleMovementHandler_GetCountOfParticlesOutsideDomainPerProcessor(
+		ParticleMovementHandler*	self,
+		Particle_Index**	globalParticlesOutsideDomainCountsPtr,
+		Particle_Index*		maxGlobalParticlesOutsideDomainCountPtr,
+		Particle_Index*		globalParticlesOutsideDomainTotalPtr );
+		
+	void ParticleMovementHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains(
+		ParticleMovementHandler* self,
+		Particle_Index*      globalParticlesArrivingMyDomainCountPtr,
+		Particle_Index*      globalParticlesOutsideDomainTotalPtr );
+
+	void ParticleMovementHandler_EnsureParticleCountLeavingDomainsEqualsCountEnteringGlobally( ParticleMovementHandler* self );
+
+	void ParticleMovementHandler_ZeroGlobalCommStrategyCounters( ParticleMovementHandler* self );
+
+	/* --- private functions --- */
+	/* +++ Managment of particle array insertions/deletions +++ */
+	Particle_Index ParticleMovementHandler_FindFreeSlotAndPrepareForInsertion( ParticleCommHandler* self );
+
+	void ParticleMovementHandler_FillRemainingHolesInLocalParticlesArray( ParticleCommHandler*	self );
+
+	Particle_Index* ParticleMovementHandler_MergeListsOfUnfilledParticleSlots( ParticleCommHandler* self );
+
+	void ParticleMovementHandler_PrintParticleSlotsYetToFill( ParticleCommHandler* self );
+	void ParticleMovementHandler_FinishReceiveAndUpdateShadowParticlesEnteringMyDomain( ParticleCommHandler* self );
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleMovementHandler.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleMovementHandler.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ParticleMovementHandler</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">ParticleCommHandler</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleShadowSync.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleShadowSync.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,547 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ParticleShadowSync.c 4001 2007-02-09 01:26:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ShadowInfo.h"
+#include "ParticleCommHandler.h"
+#include "ParticleShadowSync.h"
+
+#include "SwarmClass.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type ParticleShadowSync_Type = "ParticleShadowSync";
+
+/* MPI tags */
+static const int SHADOW_PARTICLE_COUNTS_PER_CELL = 10;
+static const int SHADOW_PARTICLES = 20;
+
+void* ParticleShadowSync_DefaultNew( Name name )
+{
+	return _ParticleShadowSync_New( sizeof(ParticleShadowSync), ParticleShadowSync_Type,
+		_ParticleShadowSync_Delete, _ParticleShadowSync_Print, _ParticleShadowSync_CopyFunc,
+		(Stg_Component_DefaultConstructorFunction*)ParticleShadowSync_DefaultNew,
+		_ParticleShadowSync_Construct, _ParticleShadowSync_Build, _ParticleShadowSync_Initialise,
+		_ParticleShadowSync_Execute, _ParticleShadowSync_Destroy, name, False );
+}
+
+
+ParticleShadowSync* ParticleShadowSync_New( 
+		Name name,
+		void* swarm
+		)
+{
+		return _ParticleShadowSync_New( sizeof(ParticleShadowSync), ParticleShadowSync_Type,
+		_ParticleShadowSync_Delete, _ParticleShadowSync_Print, _ParticleShadowSync_CopyFunc,
+		(Stg_Component_DefaultConstructorFunction*)ParticleShadowSync_DefaultNew,
+		_ParticleShadowSync_Construct, _ParticleShadowSync_Build, _ParticleShadowSync_Initialise,
+		_ParticleShadowSync_Execute, _ParticleShadowSync_Destroy, name, True );
+}
+
+
+ParticleShadowSync* _ParticleShadowSync_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag
+		)
+{
+	ParticleShadowSync* self;
+	
+	/* Allocate memory */
+	
+	self = (ParticleShadowSync*)_ParticleCommHandler_New( sizeof(ParticleShadowSync), ParticleShadowSync_Type,
+		_ParticleShadowSync_Delete, _ParticleShadowSync_Print, _ParticleShadowSync_CopyFunc,
+		(Stg_Component_DefaultConstructorFunction*)ParticleShadowSync_DefaultNew,
+		_ParticleShadowSync_Construct, _ParticleShadowSync_Build, _ParticleShadowSync_Initialise,
+		_ParticleShadowSync_Execute, _ParticleShadowSync_Destroy, name, initFlag,
+		_ParticleCommHandler_AllocateOutgoingCountArrays,
+		NULL,
+		_ParticleCommHandler_FreeOutgoingArrays,
+		_ParticleCommHandler_AllocateIncomingCountArrays,
+		NULL,
+		_ParticleCommHandler_FreeIncomingArrays,
+		_ParticleCommHandler_BeginReceiveOfIncomingParticleCounts,
+		_ParticleShadowSync_FinishReceiveOfIncomingParticleCounts,
+		_ParticleShadowSync_BeginReceiveOfIncomingParticles,
+		_ParticleShadowSync_FinishReceiveOfIncomingParticles,
+		_ParticleShadowSync_SendParticleTotalsInShadowCellsToNbrs,
+		_ParticleShadowSync_SendShadowParticles,
+		_ParticleCommHandler_ConfirmOutgoingSendsCompleted,
+		ParticleShadowSync_HandleParticleMovementBetweenProcs );
+	
+	/* General info */
+	/* Virtual info */
+	
+	/* ParticleShadowSync info */
+	if( initFlag ){
+		_ParticleShadowSync_Init( self );
+	}
+	
+	return self;
+}
+
+
+void _ParticleShadowSync_Init(
+		ParticleShadowSync*     self )
+{
+	_ParticleCommHandler_Init( (ParticleCommHandler*)self );
+	self->particlesOutsideDomainIndices = NULL;
+	_ParticleCommHandler_ZeroShadowCommStrategyCounters( (ParticleCommHandler*)self );
+}
+
+
+void _ParticleShadowSync_Delete(void* pCommsHandler ) {
+
+	_ParticleCommHandler_Delete( pCommsHandler );
+}
+
+
+void _ParticleShadowSync_Print( void* pCommsHandler, Stream* stream ) {
+	ParticleShadowSync*	self = (ParticleShadowSync*)pCommsHandler;
+	
+	/* General info */
+	Journal_Printf( stream, "ParticleShadowSync (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_ParticleCommHandler_Print( self, stream );
+
+	/* Virtual info */
+}
+
+
+void* _ParticleShadowSync_CopyFunc( void* particleMovementHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	
+	return _ParticleCommHandler_Copy( particleMovementHandler, dest, deep,
+		   nameExt, ptrMap );
+}
+
+void _ParticleShadowSync_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data ){
+	ParticleShadowSync *self = (ParticleShadowSync*)pCommsHandler;
+
+	self->isConstructed = True;
+	_ParticleShadowSync_Init( self );
+}
+	
+void _ParticleShadowSync_Build( void* pCommsHandler, void *data ){
+}
+	
+void _ParticleShadowSync_Initialise( void* pCommsHandler, void *data ){
+	
+}
+	
+void _ParticleShadowSync_Execute( void* pCommsHandler, void *data ){
+	ParticleCommHandler*	self = (ParticleCommHandler*)pCommsHandler;
+	Swarm					*swarm = (Swarm*)data;
+	
+	self->swarm = swarm;
+	assert( self->swarm );
+
+	if( swarm->shadowTablesBuilt == False ){
+		_Swarm_BuildShadowParticles( self->swarm );
+	}
+
+	self->_commFunction( self );	
+}
+
+void _ParticleShadowSync_Destroy( void* pCommsHandler, void *data ){
+	
+}
+
+void _ParticleShadowSync_SendParticleTotalsInShadowCellsToNbrs( ParticleCommHandler* self )
+{	
+	Processor_Index			proc_I;
+	ShadowInfo*			cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*			procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		nbr_I, nbrCount;
+	Cell_Index              lCellID, cellParticleCount, shadowedCell_I;	
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	self->shadowParticlesLeavingMeTotalCount = 0;
+
+	nbrCount = procNbrInfo->procNbrCnt;
+	for( nbr_I = 0 ; nbr_I < nbrCount ; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+		
+		self->shadowParticlesLeavingMeTotalCounts[nbr_I] = 0;
+		for( shadowedCell_I = 0 ; shadowedCell_I < cellShadowInfo->procShadowedCnt[ nbr_I ]; shadowedCell_I++ ) {
+			lCellID = cellShadowInfo->procShadowedTbl[nbr_I][shadowedCell_I];
+			cellParticleCount = self->swarm->cellParticleCountTbl[ lCellID ];
+			self->shadowParticlesLeavingMeCountsPerCell[nbr_I][shadowedCell_I] = cellParticleCount;
+
+			self->shadowParticlesLeavingMeTotalCounts[nbr_I] += cellParticleCount;
+		}
+		MPI_Ssend( self->shadowParticlesLeavingMeCountsPerCell[nbr_I], cellShadowInfo->procShadowCnt[nbr_I], MPI_UNSIGNED,
+			proc_I, SHADOW_PARTICLE_COUNTS_PER_CELL, self->swarm->comm );
+	}
+
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+void _ParticleShadowSync_FinishReceiveOfIncomingParticleCounts( ParticleCommHandler* self ) {
+	MPI_Status			status;
+	Processor_Index			proc_I;
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbr_I;
+	int i = 0;
+
+	self->swarm->shadowParticleCount = 0;
+	/* TODO: may be worth converting the below into an MPI_Test loop */
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+		
+		MPI_Wait( self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I], &status );
+
+		self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] = 0;
+		for( i=0; i<cellShadowInfo->procShadowCnt[nbr_I]; i++ ){
+			Index shadowCell = 0;
+
+			shadowCell = cellShadowInfo->procShadowTbl[nbr_I][i];
+			self->swarm->shadowCellParticleCountTbl[shadowCell-self->swarm->cellLocalCount] = 0;
+
+			self->swarm->shadowCellParticleTbl[shadowCell] = Memory_Realloc_Array( self->swarm->shadowCellParticleTbl[shadowCell], Particle_Index,
+																	(self->particlesArrivingFromNbrShadowCellCounts[nbr_I][i]) );
+
+			self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] += self->particlesArrivingFromNbrShadowCellCounts[nbr_I][i];
+		}
+	
+		self->swarm->shadowParticleCount+= self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+	}
+}
+
+void _ParticleShadowSync_BeginReceiveOfIncomingParticles( ParticleCommHandler* pCommHandler ) {
+	ParticleShadowSync		*self = (ParticleShadowSync*)pCommHandler;
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	long                           incomingViaShadowArrayBytes = 0;
+	Neighbour_Index		        nbr_I;
+	Processor_Index			proc_I;
+	int i = 0;
+	char* recvLocation  = NULL;
+
+	self->particlesArrivingFromNbrShadowCellsHandles = Memory_Alloc_Array_Unnamed( MPI_Request*, procNbrInfo->procNbrCnt );
+	for( i=0; i<procNbrInfo->procNbrCnt; i++ ){
+		self->particlesArrivingFromNbrShadowCellsHandles[i] = Memory_Alloc_Array_Unnamed( MPI_Request, 1 );
+	}
+
+	self->swarm->shadowParticles = Memory_Realloc( self->swarm->shadowParticles,
+			self->swarm->particleExtensionMgr->finalSize*(self->swarm->shadowParticleCount) );
+	
+	recvLocation = (char*)self->swarm->shadowParticles;
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		
+		if ( self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] != 0 ) {
+			proc_I = procNbrInfo->procNbrTbl[nbr_I];
+
+			/* start non-blocking recv of particles */
+			incomingViaShadowArrayBytes = self->swarm->particleExtensionMgr->finalSize * 
+				self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+			
+			/*printf( "receiving %ld bytes\n", incomingViaShadowArrayBytes );*/
+			MPI_Irecv( recvLocation, incomingViaShadowArrayBytes, MPI_BYTE,
+				proc_I, SHADOW_PARTICLES, self->swarm->comm,
+				self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] );
+			
+			recvLocation += incomingViaShadowArrayBytes;
+		}
+	}
+}
+
+void _ParticleShadowSync_FinishReceiveOfIncomingParticles( ParticleCommHandler* pCommHandler ) {
+	ParticleShadowSync *self = (ParticleShadowSync*)pCommHandler;
+	MPI_Status			status;
+	Processor_Index			proc_I;
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Neighbour_Index		        nbr_I;
+	int i = 0, j = 0;
+	int shadowParticleCounter;
+	int shadowCell = 0;
+
+	shadowParticleCounter = 0;
+	/* TODO: may be worth converting the below into an MPI_Test loop */
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		proc_I = procNbrInfo->procNbrTbl[nbr_I];
+		
+		if( self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] > 0 ){
+			MPI_Wait( self->particlesArrivingFromNbrShadowCellsHandles[nbr_I], &status );
+		}
+	}
+
+	for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+		for( i=0; i<cellShadowInfo->procShadowCnt[nbr_I]; i++ ){
+			
+			shadowCell = cellShadowInfo->procShadowTbl[nbr_I][i];
+			for( j=0; j<self->particlesArrivingFromNbrShadowCellCounts[nbr_I][i]; j++ ){
+
+				Swarm_AddShadowParticleToShadowCell( self->swarm, shadowCell, shadowParticleCounter );
+				shadowParticleCounter++;
+			}
+		}
+	}
+}
+
+void _ParticleShadowSync_SendShadowParticles( ParticleCommHandler *self )
+{
+	ShadowInfo*		        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+	ProcNbrInfo*		        procNbrInfo = cellShadowInfo->procNbrInfo;
+	Processor_Index			proc_I;
+	int i = 0, j = 0, k = 0, cell = 0;
+	unsigned int	arrayIndex = 0;
+	long			arraySize = 0;
+	unsigned int	pIndex = 0;
+
+	self->shadowParticlesLeavingMeHandles = Memory_Alloc_Array_Unnamed( MPI_Request*, procNbrInfo->procNbrCnt );
+	self->shadowParticlesLeavingMe = Memory_Alloc_Array_Unnamed( Particle*, procNbrInfo->procNbrCnt );
+
+	for( i=0; i<procNbrInfo->procNbrCnt; i++ ){
+		proc_I = procNbrInfo->procNbrTbl[i];
+
+		if( self->shadowParticlesLeavingMeTotalCounts[i] != 0 ){
+
+			self->shadowParticlesLeavingMeHandles[i] = Memory_Alloc_Array_Unnamed( MPI_Request, 1 );
+
+			arraySize =  self->swarm->particleExtensionMgr->finalSize * self->shadowParticlesLeavingMeTotalCounts[i];
+			self->shadowParticlesLeavingMe[i] = Memory_Alloc_Bytes( arraySize, "Particle", "pCommHandler->outgoingPArray" );
+			memset( self->shadowParticlesLeavingMe[i], 0, arraySize );
+
+			arrayIndex = 0;
+			for( j=0; j<cellShadowInfo->procShadowedCnt[i]; j++ ){
+				cell = cellShadowInfo->procShadowedTbl[i][j];
+
+				for( k=0; k<self->swarm->cellParticleCountTbl[cell]; k++ ){
+					pIndex = self->swarm->cellParticleTbl[cell][k];
+				
+					Swarm_CopyParticleOffSwarm( self->swarm,
+							self->shadowParticlesLeavingMe[i], arrayIndex++,
+							pIndex );
+				}
+			}
+			
+			/*printf( "sending %ld bytes\n", self->shadowParticlesLeavingMeTotalCounts[i] * self->swarm->particleExtensionMgr->finalSize );*/
+			MPI_Issend( self->shadowParticlesLeavingMe[i],
+			self->shadowParticlesLeavingMeTotalCounts[i] * self->swarm->particleExtensionMgr->finalSize,
+			MPI_BYTE, proc_I, SHADOW_PARTICLES, self->swarm->comm,
+			self->shadowParticlesLeavingMeHandles[i] );
+		}
+	}
+}
+
+void ParticleShadowSync_HandleParticleMovementBetweenProcs( ParticleCommHandler* pCommsHandler ) {
+	ParticleShadowSync*	self = (ParticleShadowSync*)pCommsHandler;
+
+	Journal_DPrintfL( self->debug, 1, "In %s(), for swarm \"%s\":\n", __func__, self->swarm->name );
+	if ( 1 == self->swarm->nProc ) {
+		Journal_DPrintfL( self->debug, 1, "Serial run -> nothing to communicate in %s, returning.\n", __func__ );
+		Stream_UnIndentBranch( Swarm_Debug );
+		return;
+	}
+
+	Stream_IndentBranch( Swarm_Debug );
+	
+	if ( self->swarm->cellShadowCount > 0 ) {
+		/* Allocate the recv count arrays and handles */
+		
+		/*---_ParticleCommHandler_AllocateIncomingCountArrays( (ParticleCommHandler*)self );
+		_ParticleCommHandler_AllocateOutgoingCountArrays( (ParticleCommHandler*)self );*/
+		self->allocateIncomingCountArrays( (ParticleCommHandler*)self );
+		self->allocateOutgoingCountArrays( (ParticleCommHandler*)self );
+
+
+
+		/* First thing to do is begin non-blocking receive of incoming particles (for latency hiding) */
+		/*---_ParticleCommHandler_BeginReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );*/
+		self->beginReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );
+
+
+		/* Do a blocking send of outgoing counts, so our nbrs know what to receive */
+		//_ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs( (ParticleCommHandler*)self );
+	
+		/*---_ParticleShadowSync_SendParticleTotalsInShadowCellsToNbrs( (ParticleCommHandler*)self );*/
+		self->sendOutgoingParticleCounts( (ParticleCommHandler*)self );
+
+		
+		/* Now need to make sure that incoming particle counts are here, then begin receiving particles
+		   (We do this as early as possible for latency hiding purposes */
+		
+		/*---_ParticleShadowSync_FinishReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );*/
+		self->finishReceiveOfIncomingParticleCounts( (ParticleCommHandler*)self );
+
+
+		/*---_ParticleShadowSync_BeginReceiveOfIncomingParticles( (ParticleCommHandler*)self );
+		_ParticleShadowSync_SendShadowParticles( (ParticleCommHandler*)self );*/
+		self->beginReceiveOfIncomingParticles( (ParticleCommHandler*)self );
+		self->beginSendingParticles( (ParticleCommHandler*)self );
+
+
+		/*---_ParticleCommHandler_ConfirmOutgoingSendsCompleted( (ParticleCommHandler*)self );
+		_ParticleShadowSync_FinishReceiveOfIncomingParticles( self );*/
+		self->confirmOutgoingSendsCompleted( (ParticleCommHandler*)self );
+		self->finishReceiveOfIncomingParticlesAndUpdateIndices( (ParticleCommHandler*)self );
+
+
+		/*---_ParticleCommHandler_FreeOutgoingArrays( (ParticleCommHandler*)self );
+		_ParticleCommHandler_FreeIncomingArrays( (ParticleCommHandler*)self );*/
+		self->freeIncomingArrays( (ParticleCommHandler*)self );
+		self->freeOutgoingArrays( (ParticleCommHandler*)self );
+
+
+		/* This is where our own Data structure comes into play  Jules and Raq*/
+		//----_ParticleCommHandler_AllocateIncomingParticlesArrays( (ParticleCommHandler*)self );
+		//----_ParticleCommHandler_BeginReceiveOfIncomingParticles( (ParticleCommHandler*)self );
+			
+		/* OK, now begin sending out particles we know need to go to nbrs */
+		//----_ParticleCommHandler_AllocateOutgoingParticlesArrays( (ParticleCommHandler*)self );
+		//----_ParticleCommHandler_BeginSendingParticlesInShadowCellsToNbrs( (ParticleCommHandler*)self );
+	}
+	
+	MPI_Barrier( self->swarm->comm );
+
+	_ParticleCommHandler_ZeroShadowCommStrategyCounters( (ParticleCommHandler*)self );
+	
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+void ParticleShadowSync_FindParticlesThatHaveMovedOutsideMyDomain( ParticleShadowSync* self )
+{
+	Particle_Index		particlesOutsideDomainSize = 0;
+	GlobalParticle*         currParticle = NULL;
+	Particle_Index		lParticle_I = 0;
+
+	Journal_DPrintfL( self->debug, 1, "In %s():\n", __func__ );
+	Stream_IndentBranch( Swarm_Debug );
+
+	self->particlesOutsideDomainTotalCount = 0;
+	particlesOutsideDomainSize = self->swarm->particlesArrayDelta;
+
+
+	Journal_DPrintfL( self->debug, 1, "Checking the owning cell of each of my swarm's %d particles:\n",
+		self->swarm->particleLocalCount );
+	Stream_IndentBranch( Swarm_Debug );
+
+	for ( lParticle_I=0; lParticle_I < self->swarm->particleLocalCount; lParticle_I++ ) {
+
+		currParticle = (GlobalParticle*)Swarm_ParticleAt( self->swarm, lParticle_I );
+		if ( currParticle->owningCell == self->swarm->cellDomainCount ) {
+			Journal_DPrintfL( self->debug, 3, "particle %d has moved outside domain to (%.2f,%.2f,%.2f): "
+				"saving index\n", lParticle_I, currParticle->coord[0], currParticle->coord[1],
+								currParticle->coord[2] );
+			if ( self->particlesOutsideDomainTotalCount == particlesOutsideDomainSize ) { 
+				particlesOutsideDomainSize += self->swarm->particlesArrayDelta;
+				Journal_DPrintfL( self->debug, 3, "(Need more memory to save indexes: increasing from %d to %d.)\n",
+					self->particlesOutsideDomainTotalCount, particlesOutsideDomainSize );
+				self->particlesOutsideDomainIndices = Memory_Realloc_Array( self->particlesOutsideDomainIndices,
+					Particle_Index, particlesOutsideDomainSize );
+			}
+			self->particlesOutsideDomainIndices[self->particlesOutsideDomainTotalCount++] = lParticle_I;
+		}	
+
+	}	
+	Stream_UnIndentBranch( Swarm_Debug );
+
+	self->particlesOutsideDomainUnfilledCount = self->particlesOutsideDomainTotalCount;
+
+	#if DEBUG
+	{
+		Particle_Index		particle_I = 0;
+		if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+			Journal_DPrintf( self->debug, "%d Particles have moved outside my domain:\n\t[",
+				self->particlesOutsideDomainTotalCount );
+			for ( ; particle_I < self->particlesOutsideDomainTotalCount; particle_I++ ) {
+				Journal_DPrintf( self->debug, "%d, ", self->particlesOutsideDomainIndices[particle_I] );
+			}
+			Journal_DPrintf( self->debug, "]\n" );
+		}
+	}
+	#endif
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+void ParticleShadowSync_GetCountOfParticlesOutsideDomainPerProcessor(
+	ParticleShadowSync*	self,
+	Particle_Index**	globalParticlesOutsideDomainCountsPtr,
+	Particle_Index*		maxGlobalParticlesOutsideDomainCountPtr,
+	Particle_Index*		globalParticlesOutsideDomainTotalPtr )
+{
+	Processor_Index		proc_I;
+
+	(*globalParticlesOutsideDomainCountsPtr) = Memory_Alloc_Array( Particle_Index, self->swarm->nProc,
+		"(*globalParticlesOutsideDomainCountsPtr)" );
+		
+	MPI_Allgather( (&self->particlesOutsideDomainTotalCount), 1, MPI_UNSIGNED, 
+		(*globalParticlesOutsideDomainCountsPtr), 1, MPI_UNSIGNED, self->swarm->comm );
+	
+	(*globalParticlesOutsideDomainTotalPtr) = 0;
+	for ( proc_I=0; proc_I < self->swarm->nProc; proc_I++ ) {
+		(*globalParticlesOutsideDomainTotalPtr) += (*globalParticlesOutsideDomainCountsPtr)[proc_I];
+		if ( (*globalParticlesOutsideDomainCountsPtr)[proc_I] > (*maxGlobalParticlesOutsideDomainCountPtr) ) {
+			(*maxGlobalParticlesOutsideDomainCountPtr) = (*globalParticlesOutsideDomainCountsPtr)[proc_I];
+		}
+	}	
+
+	#if DEBUG
+	if ( Stream_IsPrintableLevel( self->debug, 2 ) ) {
+		Journal_DPrintf( self->debug, "Global counts of particles moving outside domains:\n" );
+		Journal_DPrintf( self->debug, "\tTotal: %d, Counts: [", (*globalParticlesOutsideDomainTotalPtr) );
+		for ( proc_I=0; proc_I < self->swarm->nProc; proc_I++ ) {
+			Journal_DPrintf( self->debug, "%d, ", (*globalParticlesOutsideDomainCountsPtr)[proc_I] );
+		}	
+		Journal_DPrintf( self->debug, "]\n" );
+	}	
+	#endif
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleShadowSync.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleShadowSync.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,137 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Handles the shadowing of particles. So procs can use particles information from neighbouring procs.
+**
+** Assumptions:
+**
+** Comments:
+**	
+**
+** $Id: ParticleShadowSync.h 4001 2007-02-09 01:26:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+#ifndef __Domain_Swarm_ParticleShadowSync_h__
+#define __Domain_Swarm_ParticleShadowSync_h__
+
+	/** Textual name of this class */
+	extern const Type ParticleShadowSync_Type;
+
+	#define __ParticleShadowSync \
+		__ParticleCommHandler 
+		/* Virtual info */ 
+		/* Member info */ 
+
+
+	struct ParticleShadowSync { __ParticleShadowSync };	
+
+	/* --- virtual functions --- */
+
+	/** Constructor interface */
+	void* ParticleShadowSync_DefaultNew( Name name );
+	
+	ParticleShadowSync* ParticleShadowSync_New(
+			Name name,
+			void* swarm
+			);
+	
+	/** Private Constructor */
+	ParticleShadowSync* _ParticleShadowSync_New( 
+		SizeT                                                           _sizeOfSelf,
+		Type                                                            type,
+		Stg_Class_DeleteFunction*                                       _delete,
+		Stg_Class_PrintFunction*                                        _print,
+		Stg_Class_CopyFunction*                                         _copy, 
+		Stg_Component_DefaultConstructorFunction*                       _defaultConstructor,
+		Stg_Component_ConstructFunction*                                _construct,
+		Stg_Component_BuildFunction*                                    _build,
+		Stg_Component_InitialiseFunction*                               _initialise,
+		Stg_Component_ExecuteFunction*                                  _execute,
+		Stg_Component_DestroyFunction*                                  _destroy,
+		Name                                                            name,
+		Bool                                                            initFlag );
+	
+	/** Variable initialiser */
+	void _ParticleShadowSync_Init(
+		ParticleShadowSync*     self );
+
+	/** Stg_Class_Print() implementation */
+	void _ParticleShadowSync_Print( void* pCommsHandler, Stream* stream );
+	
+	void _ParticleShadowSync_Construct( void* pCommsHandler, Stg_ComponentFactory* cf, void* data );
+	
+	void _ParticleShadowSync_Build( void* pCommsHandler, void *data );
+	
+	void _ParticleShadowSync_Initialise( void* pCommsHandler, void *data );
+	
+	void _ParticleShadowSync_Execute( void* pCommsHandler, void *data );
+
+	void _ParticleShadowSync_Destroy( void* pCommsHandler, void *data );
+	
+	/** Copy */
+	#define ParticleShadowSync_Copy( self ) \
+		(ParticleShadowSync*)ParticleShadowSync_CopyFunc( self, NULL, False, NULL, NULL )
+	#define ParticleShadowSync_DeepCopy( self ) \
+		(ParticleShadowSync*)ParticleShadowSync_CopyFunc( self, NULL, True, NULL, NULL )
+	
+	void* _ParticleShadowSync_CopyFunc( void* ParticleShadowSync, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Stg_Class_Delete() implementation */
+	void _ParticleShadowSync_Delete(void* pCommsHandler );
+	
+	/* --- Public virtual function interfaces --- */
+	
+	/** Handle particle movement between processors */
+	void ParticleShadowSync_HandleParticleMovementBetweenProcs( ParticleCommHandler* pCommsHandler );
+
+	/* --- virtual function implementations --- */
+
+	/* +++ Global fallback method related +++ */
+	void ParticleShadowSync_DoGlobalFallbackCommunication( ParticleShadowSync* self );
+
+	void ParticleShadowSync_FindParticlesThatHaveMovedOutsideMyDomain( ParticleShadowSync* self );
+
+	void ParticleShadowSync_GetCountOfParticlesOutsideDomainPerProcessor(
+		ParticleShadowSync*	self,
+		Particle_Index**	globalParticlesOutsideDomainCountsPtr,
+		Particle_Index*		maxGlobalParticlesOutsideDomainCountPtr,
+		Particle_Index*		globalParticlesOutsideDomainTotalPtr );
+		
+	void ParticleShadowSync_EnsureParticleCountLeavingDomainsEqualsCountEnteringGlobally( ParticleShadowSync* self );
+
+	void _ParticleShadowSync_FinishReceiveOfIncomingParticleCounts( ParticleCommHandler* self );
+	void _ParticleShadowSync_BeginReceiveOfIncomingParticles( ParticleCommHandler* self );
+	void _ParticleShadowSync_SendParticleTotalsInShadowCellsToNbrs( ParticleCommHandler* self );
+	void _ParticleShadowSync_SendShadowParticles( ParticleCommHandler* self );
+	void _ParticleShadowSync_FinishReceiveOfIncomingParticles( ParticleCommHandler* pCommHandler );
+
+	/* --- private functions --- */
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ParticleShadowSync.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ParticleShadowSync.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ParticleShadowSync</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">ParticleCommHandler</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PerCellParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PerCellParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,224 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: PerCellParticleLayout.c 3526 2006-04-13 03:59:17Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+
+const Type PerCellParticleLayout_Type = "PerCellParticleLayout";
+
+PerCellParticleLayout* _PerCellParticleLayout_New( 
+                SizeT                                                       _sizeOfSelf,
+                Type                                                        type,
+                Stg_Class_DeleteFunction*                                   _delete,
+                Stg_Class_PrintFunction*                                    _print,
+                Stg_Class_CopyFunction*                                     _copy,
+                Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+                Stg_Component_ConstructFunction*                            _construct,
+                Stg_Component_BuildFunction*                                _build,
+                Stg_Component_InitialiseFunction*                           _initialise,
+                Stg_Component_ExecuteFunction*                              _execute,
+                Stg_Component_DestroyFunction*                              _destroy,
+                ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+                PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+                PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+                Name                                                        name,
+                Bool                                                        initFlag,
+		CoordSystem                                                 coordSystem,
+                Bool                                                        weightsInitialisedAtStartup )
+{
+	PerCellParticleLayout*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(PerCellParticleLayout) );
+	self = (PerCellParticleLayout*)_ParticleLayout_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete, 
+			_print, 
+			_copy, 
+			_defaultConstructor,
+			_construct, 
+			_build, 
+			_initialise, 
+			_execute, 
+			_destroy, 
+			_setInitialCounts, 
+			_initialiseParticles, 
+			name, 
+			initFlag,
+			coordSystem,
+			weightsInitialisedAtStartup );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_initialCount = _initialCount;
+	self->_initialiseParticlesOfCell = _initialiseParticlesOfCell;
+	
+	/* PerCellParticleLayout info */
+	if( initFlag ){
+		_PerCellParticleLayout_Init( self, coordSystem, weightsInitialisedAtStartup );
+	}
+	
+	return self;
+}
+
+
+void _PerCellParticleLayout_Init(
+		void*                  particleLayout,
+		CoordSystem            coordSystem,
+		Bool                   weightsInitialisedAtStartup )
+{
+	PerCellParticleLayout* self = (PerCellParticleLayout*)particleLayout;
+	
+	self->isConstructed = True;
+
+	_ParticleLayout_Init( particleLayout, coordSystem, weightsInitialisedAtStartup );
+}
+
+void _PerCellParticleLayout_Delete( void* particleLayout ) {
+	PerCellParticleLayout* self = (PerCellParticleLayout*)particleLayout;
+	
+	_ParticleLayout_Delete( self );
+}
+
+void _PerCellParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	PerCellParticleLayout* self = (PerCellParticleLayout*)particleLayout;
+	
+	Journal_Printf( stream, "PerCellParticleLayout (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_ParticleLayout_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( stream, "\t_initialCount (func ptr): %p\n", self->_initialCount );
+	Journal_Printf( stream, "\t_initialiseParticlesOfCell (func ptr): %p\n", self->_initialiseParticlesOfCell );
+	
+}
+
+
+void* _PerCellParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	PerCellParticleLayout*		self = (PerCellParticleLayout*)particleLayout;
+	PerCellParticleLayout*		newPerCellParticleLayout;
+	
+	newPerCellParticleLayout = (PerCellParticleLayout*)_ParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+
+	/* Virtual methods */
+	newPerCellParticleLayout->_initialCount = self->_initialCount;
+	newPerCellParticleLayout->_initialiseParticlesOfCell = self->_initialiseParticlesOfCell;
+	
+	return (void*)newPerCellParticleLayout;
+}
+
+
+/* Note: this function is required to also set the total particle count */
+void _PerCellParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm )
+{
+	PerCellParticleLayout*	self = (PerCellParticleLayout*)particleLayout;
+	Swarm*			swarm = (Swarm*)_swarm;
+	Cell_DomainIndex	cell_I = 0;
+	char			tempStr[100];
+
+	for( cell_I = 0; cell_I < swarm->cellLocalCount; cell_I++ ) {
+		swarm->cellParticleCountTbl[cell_I] = PerCellParticleLayout_InitialCount( self, swarm->cellLayout, cell_I );
+		
+		/* Initially, just set to the same sizes as initial particle counts */
+		swarm->cellParticleSizeTbl[cell_I] = swarm->cellParticleCountTbl[cell_I];
+		sprintf( tempStr, "Swarm->cellParticleTbl[%d]", cell_I );
+		swarm->cellParticleTbl[cell_I] = Memory_Alloc_Array( Particle_Index, swarm->cellParticleCountTbl[cell_I], tempStr );
+		swarm->particleLocalCount += swarm->cellParticleCountTbl[cell_I];
+	}
+
+	/* Now initialise the shadow cell particle counts */
+	for (; cell_I < swarm->cellDomainCount; cell_I++ ) {
+		swarm->cellParticleCountTbl[cell_I] = 0;
+		swarm->cellParticleSizeTbl[cell_I] = 0;
+		swarm->cellParticleTbl[cell_I] = NULL;
+	}
+}
+
+void _PerCellParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm )
+{
+	PerCellParticleLayout*	self = (PerCellParticleLayout*)particleLayout;
+	Swarm*			swarm = (Swarm*)_swarm;
+	Cell_Index		cell_I;
+	Particle_InCellIndex	cellParticle_I;
+	Particle_Index		currParticleIndex = 0;
+	StandardParticle*	particle = NULL;
+	
+	/* Go through and init particles, cell-by-cell */
+	/* Note: don't put particles in the shadow cells... */
+	for( cell_I = 0; cell_I < swarm->cellLocalCount; cell_I++ ) {
+		Particle_InCellIndex		count = swarm->cellParticleCountTbl[cell_I];
+		
+		for( cellParticle_I = 0; cellParticle_I < count; cellParticle_I++ ) {
+			swarm->cellParticleTbl[cell_I][cellParticle_I] = currParticleIndex++;
+			particle = Swarm_ParticleInCellAt( swarm, cell_I, cellParticle_I );
+			particle->owningCell = cell_I;
+		}	
+
+		PerCellParticleLayout_InitialiseParticlesOfCell( self, swarm, cell_I );
+	}
+}
+
+void PerCellParticleLayout_InitialiseParticlesOfCell( void* particleLayout, void* _swarm, Cell_Index cell_I )
+{
+	PerCellParticleLayout* self = (PerCellParticleLayout*)particleLayout;
+	
+	self->_initialiseParticlesOfCell( self, _swarm, cell_I );
+}
+
+Particle_InCellIndex PerCellParticleLayout_InitialCount( void* particleLayout, void* _swarm, Cell_Index cell_I )
+{
+	PerCellParticleLayout* self = (PerCellParticleLayout*)particleLayout;
+	
+	return self->_initialCount( self, _swarm, cell_I );
+}
+
+
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PerCellParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PerCellParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,124 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class faciliting how particles of a cell are arranged. 
+**	This class is for layouts that define the initial particle positions
+**	relation to their elements, rather than globally.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: PerCellParticleLayout.h 3526 2006-04-13 03:59:17Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_PerCellParticleLayout_h__
+#define __Domain_Swarm_PerCellParticleLayout_h__
+	
+	/** @see PerCellParticleLayout_InitialCount */
+	typedef Particle_InCellIndex (PerCellParticleLayout_InitialCountFunction) ( 
+			void* particleLayout, 
+			void* cellLayout, 
+			Cell_Index cell_I );
+
+	/** @see PerCellParticleLayout_InitialiseParticlesOfCell */
+	typedef void (PerCellParticleLayout_InitialiseParticlesOfCellFunction) ( 
+			void* particleLayout, 
+			void* swarm, 
+			Cell_Index cell_I );
+	
+	/* Textual name of this class */
+	extern const Type PerCellParticleLayout_Type;
+	
+	/* ParticleLayout information */
+	#define __PerCellParticleLayout \
+		/* General info */ \
+		__ParticleLayout \
+		\
+		/* virtual information */ \
+		PerCellParticleLayout_InitialCountFunction*			_initialCount; \
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*	_initialiseParticlesOfCell;
+
+	struct PerCellParticleLayout { __PerCellParticleLayout };
+	
+	/* No "_New" and "_Init" as this is an abstract class */
+	
+	/* Creation implementation / Virtual constructor */
+	PerCellParticleLayout* _PerCellParticleLayout_New( 
+		SizeT                                                        _sizeOfSelf,
+		Type                                                         type,
+		Stg_Class_DeleteFunction*                                    _delete,
+		Stg_Class_PrintFunction*                                     _print,
+		Stg_Class_CopyFunction*                                      _copy,
+		Stg_Component_DefaultConstructorFunction*                    _defaultConstructor,
+		Stg_Component_ConstructFunction*                             _construct,
+		Stg_Component_BuildFunction*                                 _build,
+		Stg_Component_InitialiseFunction*                            _initialise,
+		Stg_Component_ExecuteFunction*                               _execute,
+		Stg_Component_DestroyFunction*                               _destroy,
+		ParticleLayout_SetInitialCountsFunction*                     _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                  _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                  _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*     _initialiseParticlesOfCell,
+		Name                                                         name,
+		Bool                                                         initFlag,
+		CoordSystem                                                  coordSystem,
+		Bool                                                         weightsInitialisedAtStartup );
+	
+	/* Initialise implementation */
+	void _PerCellParticleLayout_Init( 
+			void*                  particleLayout, 
+			CoordSystem            coordSystem, 
+			Bool                   weightsInitialisedAtStartup );
+	
+	/* Stg_Class_Delete a PerCellParticleLayout construct */
+	void _PerCellParticleLayout_Delete( void* particleLayout );
+	
+	/* Print a PerCellParticleLayout construct */
+	void _PerCellParticleLayout_Print( void* particleLayout, Stream* stream );
+	
+	/* Copy */
+	#define PerCellParticleLayout_Copy( self ) \
+		(PerCellParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define PerCellParticleLayout_DeepCopy( self ) \
+		(PerCellParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _PerCellParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _PerCellParticleLayout_SetInitialCounts( void* particleLayout, void* _swarm );
+	void _PerCellParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm );
+
+	/** Initialise all particles in a given cell */
+	void PerCellParticleLayout_InitialiseParticlesOfCell( void* particleLayout, void* swarm, Cell_Index cell_I );
+
+	/** Return the initial number of particles in cell */
+	Particle_InCellIndex PerCellParticleLayout_InitialCount( void* particleLayout, void* _swarm, Cell_Index cell_I );
+	
+#endif /* __Domain_Swarm_PerCellParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PerCellParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PerCellParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">PerCellParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">ParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PlaneParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PlaneParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,260 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: PlaneParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SpaceFillerParticleLayout.h"
+#include "PlaneParticleLayout.h"
+#include "CellLayout.h"
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+const Type PlaneParticleLayout_Type = "PlaneParticleLayout";
+
+const Index PlaneParticleLayout_Invalid = (Index) 0;
+
+PlaneParticleLayout* PlaneParticleLayout_New( 
+		Name name,
+		Dimension_Index dim,
+		Index totalInitialParticles, 
+		Axis planeAxis, 
+		double planeCoord )
+{
+	PlaneParticleLayout* self = (PlaneParticleLayout*) _PlaneParticleLayout_DefaultNew( name );
+
+	_PlaneParticleLayout_Init( self, dim, totalInitialParticles, planeAxis, planeCoord );
+	
+	return self;
+}
+
+PlaneParticleLayout* _PlaneParticleLayout_New( 
+		SizeT                                                   _sizeOfSelf,
+		Type                                                    type,
+		Stg_Class_DeleteFunction*                               _delete,
+		Stg_Class_PrintFunction*                                _print,
+		Stg_Class_CopyFunction*                                 _copy, 
+		Stg_Component_DefaultConstructorFunction*               _defaultConstructor,
+		Stg_Component_ConstructFunction*                        _construct,
+		Stg_Component_BuildFunction*                            _build,
+		Stg_Component_InitialiseFunction*                       _initialise,
+		Stg_Component_ExecuteFunction*                          _execute,
+		Stg_Component_DestroyFunction*                          _destroy,
+		ParticleLayout_SetInitialCountsFunction*                _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*             _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction*        _initialiseParticle,
+		Name                                                    name,
+		Bool                                                    initFlag,
+		Dimension_Index                                         dim,
+		Particle_Index                                          totalInitialParticles,
+		double                                                  averageInitialParticlesPerCell,
+		Axis                                                    planeAxis, 
+		double                                                  planeCoord )
+{
+	PlaneParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (PlaneParticleLayout*)_SpaceFillerParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		dim,
+		totalInitialParticles,
+		averageInitialParticlesPerCell );
+	
+	if ( initFlag ) {
+		_PlaneParticleLayout_Init( self, dim, totalInitialParticles, planeAxis, planeCoord );
+	}
+	
+	return self;
+}
+
+void _PlaneParticleLayout_Init( 
+		void*           particleLayout, 
+		Dimension_Index dim, 
+		Particle_Index  totalInitialParticles, 
+		Axis            planeAxis, 
+		double          planeCoord )
+{
+	PlaneParticleLayout* self = (PlaneParticleLayout*) particleLayout;
+
+	_SpaceFillerParticleLayout_Init( self, dim, totalInitialParticles, SpaceFillerParticleLayout_Invalid );
+
+	self->planeAxis  = planeAxis;
+	self->planeCoord = planeCoord;
+}
+
+
+void* _PlaneParticleLayout_DefaultNew( Name name ) {
+	return (void*)_PlaneParticleLayout_New( 
+			sizeof(PlaneParticleLayout),
+			PlaneParticleLayout_Type,
+			_PlaneParticleLayout_Delete,
+			_PlaneParticleLayout_Print,
+			_PlaneParticleLayout_Copy,
+			_PlaneParticleLayout_DefaultNew,
+			_PlaneParticleLayout_Construct,
+			_PlaneParticleLayout_Build,
+			_PlaneParticleLayout_Initialise,
+			_PlaneParticleLayout_Execute,
+			_PlaneParticleLayout_Destroy,
+			_GlobalParticleLayout_SetInitialCounts,
+			_SpaceFillerParticleLayout_InitialiseParticles,
+			_PlaneParticleLayout_InitialiseParticle,
+			name,
+			False,
+			0, /* dim */
+			0, /* totalInitialParticles */
+			0.0, /* averageInitialParticlesPerCell */
+			0, /* planeAxis */
+			0.0 /* planeCoord */ );
+}
+
+	
+void _PlaneParticleLayout_Destroy( void* particleLayout, void* data ){
+	
+}
+
+void _PlaneParticleLayout_Delete( void* particleLayout ) {
+	PlaneParticleLayout* self = (PlaneParticleLayout*)particleLayout;
+
+	/* Stg_Class_Delete parent class */
+	_SpaceFillerParticleLayout_Delete( self );
+
+}
+
+void _PlaneParticleLayout_Print( void* particleLayout, Stream* stream ) {
+	PlaneParticleLayout* self  = (PlaneParticleLayout*)particleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "PlaneParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_SpaceFillerParticleLayout_Print( self, stream );
+	
+	/* PlaneParticleLayout */
+	Journal_PrintValue( stream, self->planeAxis );
+	Journal_PrintValue( stream, self->planeCoord );
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _PlaneParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	PlaneParticleLayout*		self                    = (PlaneParticleLayout*)particleLayout;
+	PlaneParticleLayout*		newPlaneParticleLayout;
+	
+	newPlaneParticleLayout = _SpaceFillerParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newPlaneParticleLayout->planeAxis  = self->planeAxis;
+	newPlaneParticleLayout->planeCoord = self->planeCoord;
+
+	return (void*)newPlaneParticleLayout;
+}
+
+
+void _PlaneParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data ){
+	PlaneParticleLayout* self = (PlaneParticleLayout*) particleLayout;
+	Axis   planeAxis;
+	double planeCoord;
+	char*  planeAxisString;
+	
+	_SpaceFillerParticleLayout_Construct( self, cf, data );
+
+	planeAxisString = Stg_ComponentFactory_GetString( cf, self->name, "planeAxis", "" );
+	planeCoord = Stg_ComponentFactory_GetDouble( cf, self->name, "planeCoord", 0.0 );
+
+	/* Check to make sure that some value is given for plane axis */
+	Journal_Firewall( strlen( planeAxisString ) > 0, Journal_MyStream( Error_Type, self ),
+		"Error for %s '%s': No axis given in param 'planeAxis'.\n", self->type, self->name );
+
+	/* Make axis case insensitive */
+	planeAxisString[0] = toupper(planeAxisString[0]);
+	Journal_Firewall( planeAxisString[0] >= 'X' && planeAxisString[0] <= 'Z', Journal_MyStream( Error_Type, self ),
+		"Error for %s '%s': Incorrect axis '%c' given for param 'planeAxis'.\n", self->type, self->name,planeAxisString[0]);
+
+	planeAxis = planeAxisString[0] - 'X';
+
+	_PlaneParticleLayout_Init( self, self->dim, self->totalInitialParticles, planeAxis, planeCoord );
+	
+}
+	
+void _PlaneParticleLayout_Build( void* particleLayout, void* data ){
+	
+}
+	
+void _PlaneParticleLayout_Initialise( void* particleLayout, void* data ){
+}
+	
+void _PlaneParticleLayout_Execute( void* particleLayout, void* data ){
+	
+}
+
+void _PlaneParticleLayout_InitialiseParticle( 
+		void* spaceFillerParticleLayout, 
+		void* _swarm, 
+		Particle_Index newParticle_I,
+		void* _particle )
+{
+	PlaneParticleLayout*        self     = (PlaneParticleLayout*)spaceFillerParticleLayout;
+	Swarm*                      swarm    = (Swarm*)_swarm;
+	GlobalParticle*             particle = (GlobalParticle*)_particle;
+
+	_SpaceFillerParticleLayout_InitialiseParticle( self, swarm, newParticle_I, particle );
+	particle->coord[ self->planeAxis ] = self->planeCoord;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PlaneParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PlaneParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,126 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a space fill of the given shape.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: PlaneParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_PlaneParticleLayout_h__
+#define __Domain_Swarm_PlaneParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type PlaneParticleLayout_Type;
+	
+	extern const Index PlaneParticleLayout_Invalid;
+
+	/* PlaneParticleLayout information */
+	#define __PlaneParticleLayout \
+		/* General info */ \
+		__SpaceFillerParticleLayout \
+		/* Virtual info */ \
+		/* Other info */ \
+		Axis              planeAxis;        \
+		double            planeCoord;
+
+	struct PlaneParticleLayout { __PlaneParticleLayout };
+	
+	/* Create a new PlaneParticleLayout and initialise */
+	
+	PlaneParticleLayout* PlaneParticleLayout_New( 
+		Name name, 
+		Dimension_Index dim, 
+		Particle_Index totalInitialParticles, 
+		Axis planeAxis, 
+		double planeCoord );
+	
+	/* Creation implementation / Virtual constructor */
+	PlaneParticleLayout* _PlaneParticleLayout_New(
+		SizeT                                                   _sizeOfSelf,
+		Type                                                    type,
+		Stg_Class_DeleteFunction*                               _delete,
+		Stg_Class_PrintFunction*                                _print,
+		Stg_Class_CopyFunction*                                 _copy,
+		Stg_Component_DefaultConstructorFunction*               _defaultConstructor,
+		Stg_Component_ConstructFunction*                        _construct,
+		Stg_Component_BuildFunction*                            _build,
+		Stg_Component_InitialiseFunction*                       _initialise,
+		Stg_Component_ExecuteFunction*                          _execute,
+		Stg_Component_DestroyFunction*                          _destroy,
+		ParticleLayout_SetInitialCountsFunction*                _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*             _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction*        _initialiseParticle,
+		Name                                                    name,
+		Bool                                                    initFlag,
+		Dimension_Index                                         dim,
+		Particle_Index                                          totalInitialParticles,
+		double                                                  averageInitialParticlesPerCell,
+		Axis                                                    planeAxis,
+		double                                                  planeCoord );
+
+	void _PlaneParticleLayout_Init( 
+			void* particleLayout, 
+			Dimension_Index dim, 
+			Particle_Index totalInitialParticles, 
+			Axis planeAxis, 
+			double planeCoord );
+	
+	/* 'Stg_Class' Stuff */
+	void _PlaneParticleLayout_Delete( void* particleLayout );
+	void _PlaneParticleLayout_Print( void* particleLayout, Stream* stream );
+	#define PlaneParticleLayout_Copy( self ) \
+		(PlaneParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define PlaneParticleLayout_DeepCopy( self ) \
+		(PlaneParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _PlaneParticleLayout_Copy( void* particleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _PlaneParticleLayout_DefaultNew( Name name ) ;
+	void _PlaneParticleLayout_Construct( void* particleLayout, Stg_ComponentFactory *cf, void* data );
+	void _PlaneParticleLayout_Build( void* particleLayout, void* data );
+	void _PlaneParticleLayout_Initialise( void* particleLayout, void* data );
+	void _PlaneParticleLayout_Execute( void* particleLayout, void* data );
+	void _PlaneParticleLayout_Destroy( void* particleLayout, void* data );
+	
+	/* Initialises the coordinates of a cell's particle */
+	void _PlaneParticleLayout_InitialiseParticles( void* particleLayout, void* swarm ) ;
+	void _PlaneParticleLayout_InitialiseParticle( 
+			void* particleLayout, 
+			void* swarm, 
+			Particle_Index newParticle_I,
+			void* particle );
+
+#endif /* __StGermain_Domain_PlaneParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/PlaneParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/PlaneParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">PlaneParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">SpaceFillerParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This uses the SpaceFillerParticleLayout class to choose quasi-random particle positions and then projects them onto a plane</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+	<struct>
+		<param name="Name">planeAxis</param>
+		<param name="Type">String</param>
+		<param name="Default"></param>
+		<param name="Description">This is the axis of the plane. i.e. Either 'X', 'Y', or 'Z' (case insensitive).</param>
+	</struct>
+	<struct>
+		<param name="Name">planeCoord</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">This is the coordinate of the plane in the direction 'planeAxis'.</param>
+	</struct>	
+</list>
+
+<list name="Dependencies">
+</list>
+
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayout">
+		<param name="Type">PlaneParticleLayout</param>
+		<param name="totalInitialParticles">6000</param>
+		<param name="planeAxis">y</param>
+		<param name="planeCoord">1.0</param>
+	</struct>
+</param>
+
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Random.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Random.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,74 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Random.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Random.h"
+
+#include <assert.h>
+
+/* Park and Miller "minimul standard" constants */
+const long int Swarm_Random_RandMax = 2147483647;	/* Swarm_Random_RandMax = (2^31)-1, taken from max int */
+static const long int a = 16807;			/* a = 7^5, taken from algorithm */
+static const unsigned long int mask = 123459876;	/* taken from algorithm */
+
+/* Schrage's algorithm constants */
+static const long int q = 127773;			/* q = [Swarm_Random_RandMax / a] */
+static const long int r = 2836;				/* r = m mod a */
+
+/* Park and Miller "minimul standard" variables */
+static long Swarm_Random_maskedSeed;
+
+
+void Swarm_Random_Seed( long seed ) {
+	assert( mask - seed != 0 );
+	Swarm_Random_maskedSeed = seed ^ mask;
+}
+
+
+double Swarm_Random_Random() {
+	const long int tmp = Swarm_Random_maskedSeed / q;
+	Swarm_Random_maskedSeed = a * (Swarm_Random_maskedSeed - tmp * q) - r * tmp;
+	if( Swarm_Random_maskedSeed < 0 ) {
+		Swarm_Random_maskedSeed += Swarm_Random_RandMax;
+	}
+	return Swarm_Random_maskedSeed;
+}
+
+double Swarm_Random_Random_WithMinMax( double min, double max ) {
+	return ( max - min ) * Swarm_Random_Random() / (double)Swarm_Random_RandMax + min;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Random.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Random.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,68 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Random number generator.
+**
+** Assumptions:
+**	This is not thread safe (seed is a global variable).
+**
+** Comments:
+**	This is an implementation of Park and Miller, "Random Number Generators: Good ones are hard to find", Communications of the
+**		ACM, October 1988, Volume 31, No 10, pages 1192-1201. Also reference is Numerical Methods, Second Edition, and the
+**		GNU Scientific Library.
+**	
+**	Park and Miller "minimul standard" algorithm:  maskedSeed_j+1 = (a * maskedSeed_j) mod randMax,
+**		but the product of a and m-1 is the greater than the size of int, hence Schrange's algorithm is used.
+**	Schrage's algorithm applied: (a * maskedSeed_j) mod randMax = a * (maskedSeed_j mod q) - r * [maskedSeed_j / q],
+**		 and where the answer is < 0, add randMax.
+**	The 'mod' is equated with the algorithm: maskedSeed_j mod q = maskedSeed_j - [maskedSeed_j / q] * q,
+**		hence Schrage's application becomes: 
+**			tmp = [maskedSeed_j / q]
+**			a * (maskedSeed_j - tmp * q) - r * tmp
+**	
+**	The seed cannot be the mask value (123459876), else an assertion is thrown.
+**
+** $Id: Random.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_Random_h__
+#define __Domain_Swarm_Random_h__
+	
+	/* Maximum random number */
+	extern const long int Swarm_Random_RandMax;
+	
+	/* Seed */
+	void Swarm_Random_Seed( long seed );
+	
+	/* Random */
+	double Swarm_Random_Random();
+	double Swarm_Random_Random_WithMinMax( double min, double max ) ;
+	
+#endif /* __Domain_Swarm_Random_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/RandomParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/RandomParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,246 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RandomParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "RandomParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "Random.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+const Type RandomParticleLayout_Type = "RandomParticleLayout";
+
+
+RandomParticleLayout* RandomParticleLayout_New( 
+		Name                 name, 
+		Particle_InCellIndex cellParticleCount, 
+		unsigned int         seed ) 
+{
+	RandomParticleLayout* self = (RandomParticleLayout*) _RandomParticleLayout_DefaultNew( name );
+	_RandomParticleLayout_Init( self, cellParticleCount, seed );
+
+	return self;
+}
+
+RandomParticleLayout* _RandomParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy,
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                         initFlag,
+		Particle_InCellIndex                                        cellParticleCount,
+		unsigned int                                                seed )
+{
+	RandomParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (RandomParticleLayout*)_PerCellParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialCount,
+		_initialiseParticlesOfCell,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False );
+
+	if ( initFlag ) {
+		_RandomParticleLayout_Init( self, cellParticleCount, seed );
+	}
+	
+	return self;
+}
+
+void _RandomParticleLayout_Init( void* randomParticleLayout, Particle_InCellIndex cellParticleCount, unsigned int seed ) {
+	RandomParticleLayout* self = (RandomParticleLayout*)randomParticleLayout;
+
+	self->isConstructed     = True;
+	self->cellParticleCount = cellParticleCount;
+	self->seed              = seed;
+	
+	Swarm_Random_Seed( self->seed );
+
+	_PerCellParticleLayout_Init( randomParticleLayout, GlobalCoordSystem, False );
+}
+
+
+void _RandomParticleLayout_Delete( void* randomParticleLayout ) {
+	RandomParticleLayout* self = (RandomParticleLayout*)randomParticleLayout;
+	
+	/* Stg_Class_Delete parent class */
+	_PerCellParticleLayout_Delete( self );
+}
+
+void _RandomParticleLayout_Print( void* randomParticleLayout, Stream* stream ) {
+	RandomParticleLayout* self = (RandomParticleLayout*)randomParticleLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* randomParticleLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( randomParticleLayoutStream, "RandomParticleLayout (ptr): %p:\n", self );
+	
+	/* Parent class info */
+	_PerCellParticleLayout_Print( self, stream );
+	
+	/* RandomParticleLayout */
+	Journal_Printf( randomParticleLayoutStream, "\tcellParticleCount: %u\n", self->cellParticleCount );
+	Journal_Printf( randomParticleLayoutStream, "\tseed: %u\n", self->seed );
+}
+
+
+void* _RandomParticleLayout_Copy( void* randomParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	RandomParticleLayout*		self = (RandomParticleLayout*)randomParticleLayout;
+	RandomParticleLayout*		newRandomParticleLayout;
+	
+	newRandomParticleLayout = (RandomParticleLayout*)_PerCellParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newRandomParticleLayout->cellParticleCount = self->cellParticleCount;
+	newRandomParticleLayout->seed = self->seed;
+	
+	return (void*)newRandomParticleLayout;
+}
+
+
+void* _RandomParticleLayout_DefaultNew( Name name ) {
+	return (void*)_RandomParticleLayout_New( 
+			sizeof(RandomParticleLayout),
+			RandomParticleLayout_Type,
+			_RandomParticleLayout_Delete,
+			_RandomParticleLayout_Print, 
+			_RandomParticleLayout_Copy,
+			_RandomParticleLayout_DefaultNew,
+			_RandomParticleLayout_Construct,
+			_RandomParticleLayout_Build,
+			_RandomParticleLayout_Initialise,
+			_RandomParticleLayout_Execute,
+			_RandomParticleLayout_Destroy,
+			_PerCellParticleLayout_SetInitialCounts,
+			_PerCellParticleLayout_InitialiseParticles,
+			_RandomParticleLayout_InitialCount,
+			_RandomParticleLayout_InitialiseParticlesOfCell, 
+			name,
+			False,
+			0, /* cellParticleCount */
+			0  /* seed */ );
+}
+
+void _RandomParticleLayout_Construct( void* randomParticleLayout, Stg_ComponentFactory* cf, void* data ) {
+	RandomParticleLayout*       self = (RandomParticleLayout*)randomParticleLayout;
+	Particle_InCellIndex        cellParticleCount;
+	unsigned int                seed;
+
+	cellParticleCount = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "cellParticleCount", 0 );
+	seed = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "seed", 13 );
+	
+	_RandomParticleLayout_Init( self, cellParticleCount, seed );
+}
+	
+void _RandomParticleLayout_Build( void* randomParticleLayout, void* data ) {
+	
+}
+	
+void _RandomParticleLayout_Initialise( void* randomParticleLayout, void* data ) {
+	
+}
+	
+void _RandomParticleLayout_Execute( void* randomParticleLayout, void* data ) {
+	
+}
+	
+void _RandomParticleLayout_Destroy( void* randomParticleLayout, void* data ) {
+	
+}
+
+
+Particle_InCellIndex _RandomParticleLayout_InitialCount( void* randomParticleLayout, void* celllayout, Cell_Index cell_I ) {
+	RandomParticleLayout* self = (RandomParticleLayout*)randomParticleLayout;
+	return self->cellParticleCount;
+}
+
+void _RandomParticleLayout_InitialiseParticlesOfCell( void* randomParticleLayout, void* _swarm, Cell_Index cell_I ) {
+	Swarm*              	swarm = (Swarm*)_swarm;
+	Coord               	min;
+	Coord               	max;
+	Dimension_Index     	dim_I;
+	Particle_InCellIndex	particlesThisCell = swarm->cellParticleCountTbl[cell_I];
+	Particle_InCellIndex	cParticle_I = 0;
+	GlobalParticle*	        particle = NULL;
+	
+	Swarm_GetCellMinMaxCoords( swarm, cell_I, min, max );
+
+	for ( cParticle_I = 0; cParticle_I < particlesThisCell; cParticle_I++ ) {	
+		
+		particle = (GlobalParticle*)Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		particle->owningCell = cell_I;
+		
+		for ( dim_I = 0 ; dim_I < 3 ; dim_I++ ) {
+			particle->coord[ dim_I ] = Swarm_Random_Random_WithMinMax( min[ dim_I ], max[ dim_I ] );
+		}
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/RandomParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/RandomParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,111 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a randomly distributed particle layout within each cell.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: RandomParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_RandomParticleLayout_h__
+#define __Domain_Swarm_RandomParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type RandomParticleLayout_Type;
+	
+	/* RandomParticleLayout information */
+	#define __RandomParticleLayout \
+		__PerCellParticleLayout \
+		\
+		Particle_InCellIndex         cellParticleCount; /**< Number of particles in each cell to create initially */ \
+		unsigned int                 seed;              /**< The random seed used to generate positions. */
+
+	struct RandomParticleLayout { __RandomParticleLayout };
+	
+	/* Create a new RandomParticleLayout and initialise */
+	RandomParticleLayout* RandomParticleLayout_New( Name name, Particle_InCellIndex cellParticleCount, unsigned int seed ) ;
+	
+	/* Creation implementation / Virtual constructor */
+	RandomParticleLayout* _RandomParticleLayout_New( 
+                SizeT                                                       _sizeOfSelf,
+                Type                                                        type,
+                Stg_Class_DeleteFunction*                                   _delete,
+                Stg_Class_PrintFunction*                                    _print,
+                Stg_Class_CopyFunction*                                     _copy,
+                Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+                Stg_Component_ConstructFunction*                            _construct,
+                Stg_Component_BuildFunction*                                _build,
+                Stg_Component_InitialiseFunction*                           _initialise,
+                Stg_Component_ExecuteFunction*                              _execute,
+                Stg_Component_DestroyFunction*                              _destroy,
+                ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+                PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+                PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+                Name                                                        name,
+		Bool                                                        initFlag,
+		Particle_InCellIndex                                        cellParticleCount,
+		unsigned int                                                seed );
+
+	void _RandomParticleLayout_Init( 
+			void*                randomParticleLayout, 
+			Particle_InCellIndex cellParticleCount, 
+			unsigned int         seed);
+
+	/* 'Class' Stuff */
+	void _RandomParticleLayout_Delete( void* randomParticleLayout );
+	void _RandomParticleLayout_Print( void* randomParticleLayout, Stream* stream );
+	
+	#define RandomParticleLayout_Copy( self ) \
+		(RandomParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define RandomParticleLayout_DeepCopy( self ) \
+		(RandomParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _RandomParticleLayout_Copy( void* randomParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _RandomParticleLayout_DefaultNew( Name name ) ;
+	void _RandomParticleLayout_Construct( void* randomParticleLayout, Stg_ComponentFactory* cf, void* data );
+	void _RandomParticleLayout_Build( void* randomParticleLayout, void* data );
+	void _RandomParticleLayout_Initialise( void* randomParticleLayout, void* data );
+	void _RandomParticleLayout_Execute( void* randomParticleLayout, void* data );
+	void _RandomParticleLayout_Destroy( void* randomParticleLayout, void* data );
+	
+	Particle_InCellIndex _RandomParticleLayout_InitialCount( void* randomParticleLayout, void* celllayout,  Cell_Index cell_I );
+	
+	void _RandomParticleLayout_InitialiseParticlesOfCell( void* randomParticleLayout, void* _swarm, Cell_Index cell_I );
+
+
+	
+#endif /* __Domain_Swarm_RandomParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/RandomParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/RandomParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">RandomParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">PerCellParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">Randomly distributes particles within cells.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">cellParticleCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">The number of particles you want in each cell.</param>
+	</struct>
+	<struct>
+		<param name="Name">seed</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">13</param>
+		<param name="Description">The seed that you want to give the random number generator. The same seed will always give the same particle positions.</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayoutExample1">
+		<param name="Type">RandomParticleLayout</param>
+		<param name="cellParticleLayout">20</param>
+		<param name="seed">2</param>
+	</struct>
+</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/ShadowInfo.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/ShadowInfo.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,73 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Stores the information necessary to share shadow values between
+**	processors.
+**
+** Assumptions:
+**
+** Comments:
+**	May want to turn this into a full-fledged class eventually that
+**	actually transfers the information for you...
+**
+** $Id: ShadowInfo.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Mesh_ShadowInfo_h__
+#define __Domain_Mesh_ShadowInfo_h__
+
+struct ProcNbrInfo {
+	/** Count of neighbouring processors */
+	PartitionIndex	procNbrCnt;
+	/** The rank of each neighbour processor */
+	PartitionIndex*	procNbrTbl;
+};
+
+/** Stores the information necessary to transfer shadowed values between
+processors. */
+struct ShadowInfo {
+	/** Info on neigbouring processor indices */
+	ProcNbrInfo*	procNbrInfo;
+	/** For each nbr processor, count of how many of its shadow nodes
+	live on the current processor */
+	Index*		procShadowedCnt;
+	/** For each nbr processor, for each of its shadow nodes
+	that live on the current processor, gives the local index of that
+	node */
+	LocalIndex**	procShadowedTbl;
+	/** For each nbr processor, count of how many of my shadow nodes
+	live on that processor */
+	Index*		procShadowCnt;
+	/** For each nbr processor, for each of my shadow nodes that
+	live on that processor, gives its domain index on my proc. */
+	DomainIndex**	procShadowTbl;
+};
+
+#endif /* __Domain_Mesh_ShadowInfo_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SingleCellLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SingleCellLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,432 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SingleCellLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CellLayout.h"
+#include "SingleCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+const Type SingleCellLayout_Type = "SingleCellLayout";
+
+
+SingleCellLayout* SingleCellLayout_New( Name name, const Bool dimExists[3], const XYZ min, const XYZ max ) { 
+	SingleCellLayout* self = (SingleCellLayout*) _SingleCellLayout_DefaultNew( name );
+
+	_CellLayout_Init( (CellLayout*)self );
+	_SingleCellLayout_Init( self, dimExists, min, max );
+	return self;
+}
+
+SingleCellLayout* _SingleCellLayout_New( 
+		SizeT                                     _sizeOfSelf,
+		Type                                      type,
+		Stg_Class_DeleteFunction*                 _delete,
+		Stg_Class_PrintFunction*                  _print,
+		Stg_Class_CopyFunction*                   _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*          _construct,
+		Stg_Component_BuildFunction*              _build,
+		Stg_Component_InitialiseFunction*         _initialise,
+		Stg_Component_ExecuteFunction*            _execute,
+		Stg_Component_DestroyFunction*            _destroy,
+		CellLayout_CellCountFunction*             _cellLocalCount,
+		CellLayout_CellCountFunction*             _cellShadowCount,
+		CellLayout_PointCountFunction*            _pointCount,
+		CellLayout_InitialisePointsFunction*      _initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*  _mapElementIdToCellId,
+		CellLayout_IsInCellFunction*              _isInCell, 
+		CellLayout_CellOfFunction*                _cellOf,
+		CellLayout_GetShadowInfoFunction*         _getShadowInfo,		
+		Name                                      name,
+		Bool                                      initFlag,
+		const Bool                                dimExists[3],
+		const XYZ                                 min,
+		const XYZ                                 max )
+{
+	SingleCellLayout* self;
+	
+	/* Allocate memory */
+	self = (SingleCellLayout*)_CellLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_cellLocalCount,
+		_cellShadowCount,
+		_pointCount,
+		_initialisePoints,
+		_mapElementIdToCellId,
+		_isInCell,
+		_cellOf,
+		_getShadowInfo );
+	
+	/* Virtual info */
+	
+	/* SingleCellLayout info */
+	if( initFlag ){
+		_SingleCellLayout_Init( self, dimExists, min, max );
+	}
+	
+	return self;
+}
+
+void _SingleCellLayout_Init( void* cellLayout, const Bool dimExists[3], const XYZ min, const XYZ max ) { 
+	SingleCellLayout* self        = (SingleCellLayout*) cellLayout;
+	Dimension_Index   dim_I;
+	XYZ               minDefaults = { -1.0, -1.0, -1.0 };
+	XYZ               maxDefaults = { 1.0, 1.0, 1.0 };
+	
+	/* General and Virtual info should already be set */
+
+	self->isConstructed = True;
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		self->dimExists[dim_I] = dimExists[dim_I];
+	}
+	
+	/* Get min and max values */
+	if ( min )
+		memcpy( self->min, min, sizeof( XYZ ));
+	else
+		memcpy( self->min, minDefaults, sizeof( XYZ ));
+	if ( max )
+		memcpy( self->max, max, sizeof( XYZ ));
+	else
+		memcpy( self->max, maxDefaults, sizeof( XYZ ));
+
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		if ( !dimExists[dim_I] ) {
+			self->min[dim_I] = 0.0;
+			self->max[dim_I] = 0.0;
+		}
+	}	
+
+	/* Since pointcount and cell points are the same for all cells, calculate them now */
+	_SingleCellLayout_CalculateGlobalPointCount( self );
+	_SingleCellLayout_InitialiseGlobalCellPointPositions( self );
+}
+
+
+void _SingleCellLayout_Delete( void* singleCellLayout ) {
+	SingleCellLayout* self = (SingleCellLayout*)singleCellLayout;
+	
+	Memory_Free( self->cellPointCoords );
+
+	/* Stg_Class_Delete parent class */
+	_CellLayout_Delete( self );
+}
+
+void _SingleCellLayout_Print( void* singleCellLayout, Stream* stream ) {
+	SingleCellLayout* self = (SingleCellLayout*)singleCellLayout;
+	Index i;
+	
+	/* Set the Journal for printing informations */
+	Stream* singleCellLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( singleCellLayoutStream, "SingleCellLayout (ptr): %p\n", self ); 
+	
+	/* Parent class info */
+	_CellLayout_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* SingleCellLayout info */
+	Journal_Printf( singleCellLayoutStream, "self->dimExists[" );
+	for (i=I_AXIS; i < 3; i++ ) {
+		Journal_Printf( singleCellLayoutStream, " %d,", self->dimExists[i] );
+	}
+	Journal_Printf( singleCellLayoutStream, "]\n" );
+	
+	Journal_Printf( singleCellLayoutStream, "self->min[" );
+	for (i=I_AXIS; i < 3; i++ ) {
+		Journal_Printf( singleCellLayoutStream, " %f,", self->min[i] );
+	}	
+	Journal_Printf( singleCellLayoutStream, "]\n" );
+	
+	Journal_Printf( singleCellLayoutStream, "self->max[" );
+	for (i=I_AXIS; i < 3; i++ ) {
+		Journal_Printf( singleCellLayoutStream, " %f,", self->max[i] );
+	}	
+	Journal_Printf( singleCellLayoutStream, "]\n" );
+}
+
+
+void* _SingleCellLayout_Copy( void* singleCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SingleCellLayout*	self = (SingleCellLayout*)singleCellLayout;
+	SingleCellLayout*	newSingleCellLayout;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSingleCellLayout = _CellLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newSingleCellLayout->dimExists[0] = self->dimExists[0];
+	newSingleCellLayout->dimExists[1] = self->dimExists[1];
+	newSingleCellLayout->dimExists[2] = self->dimExists[2];
+	newSingleCellLayout->min[0] = self->min[0];
+	newSingleCellLayout->min[1] = self->min[1];
+	newSingleCellLayout->min[2] = self->min[2];
+	newSingleCellLayout->max[0] = self->max[0];
+	newSingleCellLayout->max[1] = self->max[1];
+	newSingleCellLayout->max[2] = self->max[2];
+	newSingleCellLayout->pointCount = self->pointCount;
+	
+	if( deep ) {
+		if( (newSingleCellLayout->cellPointCoords = PtrMap_Find( map, self->cellPointCoords )) == NULL && self->cellPointCoords ) {
+			unsigned	p_i;
+
+			newSingleCellLayout->cellPointCoords = Memory_Alloc_2DArray( double, newSingleCellLayout->pointCount, 3, "SingleCellLayout->cellPoints" );
+			for( p_i = 0; p_i < newSingleCellLayout->pointCount; p_i++ )
+				memcpy( newSingleCellLayout->cellPointCoords[p_i], self->cellPointCoords[p_i], 
+					sizeof(double) * 3 * newSingleCellLayout->pointCount );
+			PtrMap_Append( map, self->cellPointCoords, newSingleCellLayout->cellPointCoords );
+		}
+	}
+	else {
+		newSingleCellLayout->cellPointCoords = self->cellPointCoords;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSingleCellLayout;
+}
+
+void* _SingleCellLayout_DefaultNew( Name name ) {
+	return (void*)_SingleCellLayout_New( 
+			sizeof(SingleCellLayout), 
+			SingleCellLayout_Type,
+			_SingleCellLayout_Delete,
+			_SingleCellLayout_Print,
+			_SingleCellLayout_Copy,
+			_SingleCellLayout_DefaultNew,
+			_SingleCellLayout_Construct,
+			_SingleCellLayout_Build,
+			_SingleCellLayout_Initialise,
+			_SingleCellLayout_Execute,
+			_SingleCellLayout_Destroy,
+			_SingleCellLayout_CellLocalCount,
+			_SingleCellLayout_CellShadowCount,
+			_SingleCellLayout_PointCount,
+			_SingleCellLayout_InitialisePoints,
+			_SingleCellLayout_MapElementIdToCellId, 
+			_SingleCellLayout_IsInCell,
+			_SingleCellLayout_CellOf,
+			_SingleCellLayout_GetShadowInfo,
+			name,
+			False,
+			NULL, 
+			NULL,
+			NULL);
+}
+
+void _SingleCellLayout_Construct( void* singleCellLayout, Stg_ComponentFactory* cf, void* data ){
+	SingleCellLayout* self              = (SingleCellLayout*)singleCellLayout;
+	Bool              dimExists[]       = { False, False, False };
+	Dimension_Index   dim;
+	XYZ               min;
+	XYZ               max;
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	dimExists[ I_AXIS ] = Stg_ComponentFactory_GetBool( cf, self->name, "dimExistsI", True );
+	dimExists[ J_AXIS ] = Stg_ComponentFactory_GetBool( cf, self->name, "dimExistsJ", True );
+	dimExists[ K_AXIS ] = Stg_ComponentFactory_GetBool( cf, self->name, "dimExistsK", (dim == 3) );
+
+	min[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "minX", -1.0 );
+	min[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "minY", -1.0 );
+	min[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "minZ", -1.0 );
+
+	max[ I_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "maxX", 1.0 );
+	max[ J_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "maxY", 1.0 );
+	max[ K_AXIS ] = Stg_ComponentFactory_GetDouble( cf, self->name, "maxZ", 1.0 );
+
+	_CellLayout_Init( (CellLayout*)self );
+	_SingleCellLayout_Init( self, dimExists, min, max );
+}
+	
+void _SingleCellLayout_Build( void* singleCellLayout, void* data ){
+	
+}
+	
+void _SingleCellLayout_Initialise( void* singleCellLayout, void* data ){
+	
+}
+	
+void _SingleCellLayout_Execute( void* singleCellLayout, void* data ){
+	
+}
+	
+void _SingleCellLayout_Destroy( void* singleCellLayout, void* data ){
+	
+}
+
+Cell_Index _SingleCellLayout_CellLocalCount( void* singleCellLayout ) {
+	/* There is only one cell... */
+	return 1;
+}
+
+
+Cell_Index _SingleCellLayout_CellShadowCount( void* singleCellLayout ) {
+	/* No shadow cells */
+	return 0;
+}
+
+
+void _SingleCellLayout_CalculateGlobalPointCount( SingleCellLayout* self ) {
+	Index dim_I;
+
+	self->pointCount = 1;
+	for ( dim_I = I_AXIS; dim_I < 3; dim_I++ ) {
+		if ( self->dimExists[dim_I] )
+			self->pointCount *= 2;
+	}
+}
+
+
+Cell_PointIndex _SingleCellLayout_PointCount( void* singleCellLayout, Cell_Index cellIndex ) {
+	SingleCellLayout* self = (SingleCellLayout*)singleCellLayout;
+
+	/* already calculated, just return that value */
+	return self->pointCount;
+}
+
+
+void _SingleCellLayout_InitialiseGlobalCellPointPositions( SingleCellLayout* self ) {
+	Cell_PointIndex	point_I = 0;
+	Coord		tempCoord;
+	double*		currPointCoord = NULL;
+	Index		i, j, k;	/* loop iterators for each dimension */
+	
+	tempCoord[0] = self->min[I_AXIS];
+	tempCoord[1] = self->min[J_AXIS];
+	tempCoord[2] = self->min[K_AXIS];
+	 
+	self->cellPointCoords = Memory_Alloc_2DArray( double, self->pointCount, 3, "SingleCellLayout->cellPoints" );
+	
+	/* Now generate the coordinates */
+	for ( k=0; k <= self->dimExists[K_AXIS]; k++ ) {
+		for (j=0; j <= self->dimExists[J_AXIS]; j++ ) {
+			for (i=0; i <= self->dimExists[I_AXIS]; i++ ) {
+				currPointCoord = self->cellPointCoords[ RegularMeshUtils_ascendingIJK_ToHughesNodeNumberMap[point_I++] ];
+				currPointCoord[I_AXIS] = tempCoord[I_AXIS];
+				currPointCoord[J_AXIS] = tempCoord[J_AXIS];
+				currPointCoord[K_AXIS] = tempCoord[K_AXIS];
+
+				/* flip/flop the i for next time */
+				tempCoord[I_AXIS] = ( self->min[I_AXIS] == tempCoord[I_AXIS] ) ? self->max[I_AXIS] : self->min[I_AXIS];
+			}
+
+			/* flip/flop the j for next time */
+			tempCoord[J_AXIS] = ( self->min[J_AXIS] == tempCoord[J_AXIS] ) ? self->max[J_AXIS] : self->min[J_AXIS];
+		}
+		/* flip/flop the k for next time */
+		tempCoord[K_AXIS] = ( self->min[K_AXIS] == tempCoord[K_AXIS] ) ? self->max[K_AXIS] : self->min[K_AXIS];
+	}
+}
+
+
+void _SingleCellLayout_InitialisePoints( void* singleCellLayout, Cell_Index cellIndex, Cell_PointIndex pointCount, 
+		Cell_Points points ) 
+{
+	SingleCellLayout* self = (SingleCellLayout*)singleCellLayout;
+	Cell_PointIndex point_I = 0;
+
+	/* since points have been pre-calculated, just return pointers to them */
+	for ( point_I=0; point_I < pointCount; point_I++ ) {
+		points[point_I] = &self->cellPointCoords[point_I];
+	}
+}
+
+
+Cell_Index _SingleCellLayout_MapElementIdToCellId( void* cellLayout, Element_DomainIndex element_dI ) {
+	
+	/* Always 0: see the header comment */
+	return 0;
+}
+
+
+Bool _SingleCellLayout_IsInCell( void* singleCellLayout, Cell_Index cellIndex, void* particle ) {
+	SingleCellLayout* self = (SingleCellLayout*)singleCellLayout;
+	double** coord = (double**)particle;
+	Index dim_I = 0;
+	
+	for (dim_I=0; dim_I < 3; dim_I++ ) {
+		if ( self->dimExists[dim_I] ) {
+			if ( ((*coord)[dim_I] < self->min[dim_I]) || ((*coord)[dim_I] > self->max[dim_I]) ) {  
+				return False;
+			}	
+		}
+	}	
+	
+	return True;
+}
+
+
+Cell_Index _SingleCellLayout_CellOf( void* singleCellLayout, void* particle ) {
+	
+	/* in the single cell case, all particles belong to this cell */
+	return 0;
+}
+
+
+ShadowInfo* _SingleCellLayout_GetShadowInfo( void* singleCellLayout ) {
+	/* SingleCellLayout*      self = (SingleCellLayout*)singleCellLayout; */
+
+	/* TODO: this should return a shadow info with at least nbr info for my processors */
+	Journal_Firewall( 0, Swarm_Warning, "Error: %s not implemented yet!\n", __func__ );
+	return NULL;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SingleCellLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SingleCellLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,147 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the CellLayout abstract class to a cell dimExists that has one single cell (when used with a
+**	FiniteElementMesh, all elements in the mesh will use this same cell).
+**
+** Assumptions:
+**
+** Comments:
+**	User needs to pass in an array, saying which dimensions exist ( can be generated from the MeshDecomp)
+**
+** $Id: SingleCellLayout.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SingleCellLayout_h__
+#define __Domain_Swarm_SingleCellLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type SingleCellLayout_Type;
+	
+	/* SingleCellLayout information */
+	#define __SingleCellLayout \
+		/* General info */ \
+		__CellLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* SingleCellLayout info */ \
+		Bool            dimExists[3];    /** Defines whether each dimension exists in current sim*/\
+		XYZ             min;             /** Max top-right-back corner of cell */\
+		XYZ             max;             /** Min bottom-left-front corner of cell */ \
+		double**        cellPointCoords; /** Generated cell points in single cell */\
+		Cell_PointIndex pointCount;	     /** Count of points in single cell */\
+
+	struct SingleCellLayout { __SingleCellLayout };
+	
+	/* Create a new SingleCellLayout and initialise */
+	
+	SingleCellLayout* SingleCellLayout_New( Name name, const Bool dimExists[3], const XYZ min, const XYZ max ) ;
+
+	/* Creation implementation / Virtual constructor */
+	SingleCellLayout* _SingleCellLayout_New( 
+		SizeT                                     _sizeOfSelf,
+		Type                                      type,
+		Stg_Class_DeleteFunction*                 _delete,
+		Stg_Class_PrintFunction*                  _print,
+		Stg_Class_CopyFunction*                   _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*          _construct,
+		Stg_Component_BuildFunction*              _build,
+		Stg_Component_InitialiseFunction*         _initialise,
+		Stg_Component_ExecuteFunction*            _execute,
+		Stg_Component_DestroyFunction*            _destroy,
+		CellLayout_CellCountFunction*             _cellLocalCount,
+		CellLayout_CellCountFunction*             _cellShadowCount,
+		CellLayout_PointCountFunction*            _pointCount,
+		CellLayout_InitialisePointsFunction*      _initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*  _mapElementIdToCellId,
+		CellLayout_IsInCellFunction*              _isInCell, 
+		CellLayout_CellOfFunction*                _cellOf,
+		CellLayout_GetShadowInfoFunction*         _getShadowInfo,		
+		Name                                      name,
+		Bool                                      initFlag,
+		const Bool                                dimExists[3],
+		const XYZ                                 min,
+		const XYZ                                 max );
+
+	/* Initialise implementation */
+	void _SingleCellLayout_Init( void* cellLayout, const Bool dimExists[3], const XYZ min, const XYZ max );
+	
+	/* Stg_Class_Delete implementation */
+	void _SingleCellLayout_Delete( void* singleCellLayout );
+	void _SingleCellLayout_Print( void* singleCellLayout, Stream* stream );
+	#define SingleCellLayout_Copy( self ) \
+		(SingleCellLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SingleCellLayout_DeepCopy( self ) \
+		(SingleCellLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _SingleCellLayout_Copy( void* singleCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Class Info */
+	void* _SingleCellLayout_DefaultNew( Name name );
+	void _SingleCellLayout_Construct( void* singleCellLayout, Stg_ComponentFactory* cf, void* data );
+	void _SingleCellLayout_Build( void* singleCellLayout, void* data );
+	void _SingleCellLayout_Initialise( void* singleCellLayout, void* data );
+	void _SingleCellLayout_Execute( void* singleCellLayout, void* data );
+	void _SingleCellLayout_Destroy( void* singleCellLayout, void* data );
+	
+	/** Returns the number of local cells in this cellLayout */
+	Cell_Index _SingleCellLayout_CellLocalCount( void* singleCellLayout );
+	
+	/** Returns the number of shadow cells in this cellLayout */
+	Cell_Index _SingleCellLayout_CellShadowCount( void* singleCellLayout );
+	
+	/** Returns the cell point count... this is the cellLayout's single node count */
+	Cell_PointIndex _SingleCellLayout_PointCount( void* singleCellLayout, Cell_Index cellIndex );
+	
+	/** Returns the cell point array... this is the cellLayout's single node array */
+	void _SingleCellLayout_InitialisePoints( void* singleCellLayout, Cell_Index cellIndex, Cell_PointIndex pointCount, 
+		Cell_Points points );
+	
+	/** Implements CellLayout_MapElementIdToCellId(): always return 0, since all elements correspond to the same cell */
+	Cell_Index _SingleCellLayout_MapElementIdToCellId( void* cellLayout, unsigned element_dI );
+	
+	/* Specify whether a particle is in a given cell */
+	Bool _SingleCellLayout_IsInCell( void* singleCellLayout, Cell_Index cellIndex, void* particle );
+	
+	/* Obtain which cell a given coord lives in */
+	Cell_Index _SingleCellLayout_CellOf( void* singleCellLayout, void* particle );
+	
+	/* Get the shadow info */
+	ShadowInfo* _SingleCellLayout_GetShadowInfo( void* singleCellLayout );
+	
+	/* --- Private Functions --- */
+
+	void _SingleCellLayout_CalculateGlobalPointCount( SingleCellLayout* self );
+
+	void _SingleCellLayout_InitialiseGlobalCellPointPositions( SingleCellLayout* self );
+	
+#endif /* __Domain_Swarm_SingleCellLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SingleCellLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SingleCellLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SingleCellLayout</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">CellLayout</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">dimExistsI</param>
+		<param name="Type">Bool</param>
+		<param name="Default">True</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">dimExistsJ</param>
+		<param name="Type">Bool</param>
+		<param name="Default">True</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name"></param>
+		<param name="Type">Bool( cf, self->name, "dimExistsK", </param>
+		<param name="Default"></param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">minX</param>
+		<param name="Type">Double</param>
+		<param name="Default">-1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">minY</param>
+		<param name="Type">Double</param>
+		<param name="Default">-1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">minZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">-1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">maxX</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">maxY</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">maxZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SpaceFillerParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SpaceFillerParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,286 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SpaceFillerParticleLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SpaceFillerParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+const Type SpaceFillerParticleLayout_Type = "SpaceFillerParticleLayout";
+
+const Index SpaceFillerParticleLayout_Invalid = (Index) 0;
+
+SpaceFillerParticleLayout* SpaceFillerParticleLayout_New( 
+		Name                    name,
+		Dimension_Index         dim,
+		Particle_Index          totalInitialParticles,
+		double                  averageInitialParticlesPerCell )
+{
+	SpaceFillerParticleLayout* self = (SpaceFillerParticleLayout*) _SpaceFillerParticleLayout_DefaultNew( name );
+	_SpaceFillerParticleLayout_Init( self, dim, totalInitialParticles, averageInitialParticlesPerCell );
+	return self;
+}
+
+SpaceFillerParticleLayout* _SpaceFillerParticleLayout_New( 
+                SizeT                                            _sizeOfSelf,
+                Type                                             type,
+                Stg_Class_DeleteFunction*                        _delete,
+                Stg_Class_PrintFunction*                         _print,
+                Stg_Class_CopyFunction*                          _copy,
+                Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+                Stg_Component_ConstructFunction*                 _construct,
+                Stg_Component_BuildFunction*                     _build,
+                Stg_Component_InitialiseFunction*                _initialise,
+                Stg_Component_ExecuteFunction*                   _execute,
+                Stg_Component_DestroyFunction*                   _destroy,
+                ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+                GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+                Name                                             name,
+		Bool                                             initFlag,
+                Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		double                                           averageInitialParticlesPerCell )
+{
+	SpaceFillerParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (SpaceFillerParticleLayout*)_GlobalParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False,
+		totalInitialParticles,
+		averageInitialParticlesPerCell );
+
+	if ( initFlag ) {
+		_SpaceFillerParticleLayout_Init( self, dim, totalInitialParticles, averageInitialParticlesPerCell );
+	}
+
+	return self;
+}
+
+void _SpaceFillerParticleLayout_Init( 
+		void*                   spaceFillerParticleLayout,
+		Dimension_Index         dim,
+		Particle_Index          totalInitialParticles,
+		double                  averageInitialParticlesPerCell )
+{
+	SpaceFillerParticleLayout*	self = (SpaceFillerParticleLayout*) spaceFillerParticleLayout;
+
+	self->isConstructed = True;
+	self->dim           = dim;
+
+	self->sobolGenerator[I_AXIS] = SobolGenerator_NewFromTable( "xSobolGenerator" );
+	self->sobolGenerator[J_AXIS] = SobolGenerator_NewFromTable( "ySobolGenerator" );
+	if ( dim == 3 )
+		self->sobolGenerator[K_AXIS] = SobolGenerator_NewFromTable( "zSobolGenerator" );
+
+	/* Must set one or the other. Fail if both set, or none */
+	Journal_Firewall( 
+		(totalInitialParticles == SpaceFillerParticleLayout_Invalid)
+			^ ((Index)averageInitialParticlesPerCell == SpaceFillerParticleLayout_Invalid),
+		Journal_MyStream( Error_Type, self ),
+		"Error in func %s for %s '%s' - Both averageInitialParticlesPerCell and totalInitialParticles%sspecified.\n",
+		__func__, 
+		self->type, 
+		self->name,
+		(totalInitialParticles == SpaceFillerParticleLayout_Invalid) ? " not " : " " );
+	
+	self->totalInitialParticles = totalInitialParticles;
+	self->averageInitialParticlesPerCell = averageInitialParticlesPerCell;
+
+	_GlobalParticleLayout_Init( self, GlobalCoordSystem, False, totalInitialParticles, averageInitialParticlesPerCell );
+}
+
+
+	
+void _SpaceFillerParticleLayout_Delete( void* spaceFillerParticleLayout ) {
+	SpaceFillerParticleLayout* self = (SpaceFillerParticleLayout*)spaceFillerParticleLayout;
+	Dimension_Index            dim_I;
+
+	for ( dim_I = 0 ; dim_I < self->dim ; dim_I++ ) 
+		Stg_Class_Delete( self->sobolGenerator[ dim_I ] );
+
+	_GlobalParticleLayout_Delete( self );
+}
+
+void _SpaceFillerParticleLayout_Print( void* spaceFillerParticleLayout, Stream* stream ) {
+	SpaceFillerParticleLayout* self  = (SpaceFillerParticleLayout*)spaceFillerParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "SpaceFillerParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_GlobalParticleLayout_Print( self, stream );
+	
+	/* SpaceFillerParticleLayout */
+	Journal_PrintValue( stream, self->dim );
+	
+	Stream_UnIndent( stream );
+}
+
+void* _SpaceFillerParticleLayout_Copy( void* spaceFillerParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SpaceFillerParticleLayout*		self                    = (SpaceFillerParticleLayout*)spaceFillerParticleLayout;
+	SpaceFillerParticleLayout*		newSpaceFillerParticleLayout;
+	
+	newSpaceFillerParticleLayout = (SpaceFillerParticleLayout*)_GlobalParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newSpaceFillerParticleLayout->dim = self->dim;
+
+	return (void*)newSpaceFillerParticleLayout;
+}
+
+void* _SpaceFillerParticleLayout_DefaultNew( Name name ) {
+	return (void*)_SpaceFillerParticleLayout_New( 
+			sizeof(SpaceFillerParticleLayout),
+			SpaceFillerParticleLayout_Type,
+			_SpaceFillerParticleLayout_Delete,
+			_SpaceFillerParticleLayout_Print,
+			_SpaceFillerParticleLayout_Copy,
+			_SpaceFillerParticleLayout_DefaultNew,
+			_SpaceFillerParticleLayout_Construct,
+			_SpaceFillerParticleLayout_Build,
+			_SpaceFillerParticleLayout_Initialise,
+			_SpaceFillerParticleLayout_Execute,
+			_SpaceFillerParticleLayout_Destroy,
+			_GlobalParticleLayout_SetInitialCounts,
+			_SpaceFillerParticleLayout_InitialiseParticles,
+			_SpaceFillerParticleLayout_InitialiseParticle,
+			name,
+			False,
+			0,  /* dim */
+			0,  /* totalInitialParticles */
+			0.0 /* averageInitialParticlesPerCell */);
+}
+
+
+void _SpaceFillerParticleLayout_Construct( void* spaceFillerParticleLayout, Stg_ComponentFactory *cf, void* data ) {
+	SpaceFillerParticleLayout* self = (SpaceFillerParticleLayout*) spaceFillerParticleLayout;
+	Dimension_Index            dim;
+	Particle_Index             totalInitialParticles;
+	double                     averageInitialParticlesPerCell;
+	
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	totalInitialParticles = Stg_ComponentFactory_GetUnsignedInt( 
+			cf, 
+			self->name, 
+			"totalInitialParticles", 
+			SpaceFillerParticleLayout_Invalid );
+	averageInitialParticlesPerCell = (double)Stg_ComponentFactory_GetUnsignedInt( 
+			cf, 
+			self->name, 
+			"averageInitialParticlesPerCell", 
+			SpaceFillerParticleLayout_Invalid );
+
+	_SpaceFillerParticleLayout_Init( self, dim, totalInitialParticles, averageInitialParticlesPerCell );
+}
+	
+void _SpaceFillerParticleLayout_Build( void* spaceFillerParticleLayout, void* data ) {
+}
+void _SpaceFillerParticleLayout_Initialise( void* spaceFillerParticleLayout, void* data ) {
+}	
+void _SpaceFillerParticleLayout_Execute( void* spaceFillerParticleLayout, void* data ) {	
+}
+void _SpaceFillerParticleLayout_Destroy( void* spaceFillerParticleLayout, void* data ) {	
+}
+
+void _SpaceFillerParticleLayout_InitialiseParticles( void* spaceFillerParticleLayout, void* swarm ) {
+	SpaceFillerParticleLayout*        self     = (SpaceFillerParticleLayout*)spaceFillerParticleLayout;
+
+	/* Initialise random number generator */
+	_GlobalParticleLayout_InitialiseParticles( self, swarm );
+}
+
+void _SpaceFillerParticleLayout_InitialiseParticle( 
+		void*             spaceFillerParticleLayout, 
+		void*             _swarm, 
+		Particle_Index    newParticle_I,
+		void*             _particle )
+{
+	SpaceFillerParticleLayout*  self     = (SpaceFillerParticleLayout*)spaceFillerParticleLayout;
+	Swarm*                      swarm    = (Swarm*)_swarm;
+	double				minCrd[3];
+	double				maxCrd[3];
+	Dimension_Index             dim_I;
+	double*                     coord;
+	GlobalParticle*             particle = (GlobalParticle*)_particle;
+
+	/* Note: we have to assume element cell layout to get the full box coords - maybe these
+	should be available as part of all cell layouts */
+	Mesh*			    mesh = ((ElementCellLayout*)swarm->cellLayout)->mesh;
+
+	Mesh_GetGlobalCoordRange( mesh, minCrd, maxCrd );
+
+	coord = particle->coord;
+	memset( coord, 0, sizeof(Coord) );
+
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		coord[ dim_I ] = SobolGenerator_GetNextNumber_WithMinMax(
+			self->sobolGenerator[ dim_I ], 
+			minCrd[ dim_I ], 
+			maxCrd[ dim_I ]);
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SpaceFillerParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SpaceFillerParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,121 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a spaceFillerly distributed particle layout.
+**      Uses SobolGenerator by default
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: SpaceFillerParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SpaceFillerParticleLayout_h__
+#define __Domain_Swarm_SpaceFillerParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type SpaceFillerParticleLayout_Type;
+	
+	extern const Index SpaceFillerParticleLayout_Invalid;
+
+	/* SpaceFillerParticleLayout information */
+	#define __SpaceFillerParticleLayout \
+		__GlobalParticleLayout \
+		\
+		Dimension_Index              dim;                      \
+		SobolGenerator*              sobolGenerator[3];        \
+
+	struct SpaceFillerParticleLayout { __SpaceFillerParticleLayout };
+	
+	/* Create a new SpaceFillerParticleLayout and initialise */
+	SpaceFillerParticleLayout* SpaceFillerParticleLayout_New( 
+			Name                    name, 
+			Dimension_Index         dim, 
+			Particle_Index          totalInitialParticles,
+			double                  averageInitialParticlesPerCell );
+	
+	/* Creation implementation / Virtual constructor */
+	SpaceFillerParticleLayout* _SpaceFillerParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		double                                           averageInitialParticlesPerCell );
+	
+	void _SpaceFillerParticleLayout_Init( 
+			void*                   spaceFillerParticleLayout, 
+			Dimension_Index         dim, 
+			Particle_Index          totalInitialParticles,
+			double                  averageInitialParticlesPerCell );
+	
+	/* 'Stg_Class' Stuff */
+	void _SpaceFillerParticleLayout_Delete( void* spaceFillerParticleLayout );
+	void _SpaceFillerParticleLayout_Print( void* spaceFillerParticleLayout, Stream* stream );
+	#define SpaceFillerParticleLayout_Copy( self ) \
+		(SpaceFillerParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SpaceFillerParticleLayout_DeepCopy( self ) \
+		(SpaceFillerParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _SpaceFillerParticleLayout_Copy( void* spaceFillerParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _SpaceFillerParticleLayout_DefaultNew( Name name ) ;
+	void _SpaceFillerParticleLayout_Construct( void* spaceFillerParticleLayout, Stg_ComponentFactory *cf, void* data );
+	void _SpaceFillerParticleLayout_Build( void* spaceFillerParticleLayout, void* data );
+	void _SpaceFillerParticleLayout_Initialise( void* spaceFillerParticleLayout, void* data );
+	void _SpaceFillerParticleLayout_Execute( void* spaceFillerParticleLayout, void* data );
+	void _SpaceFillerParticleLayout_Destroy( void* spaceFillerParticleLayout, void* data );
+	
+	/* Initialises the coordinates of a cell's particle */
+	void _SpaceFillerParticleLayout_InitialiseParticles( void* spaceFillerParticleLayout, void* swarm );
+	void _SpaceFillerParticleLayout_InitialiseParticle( 
+			void*             spaceFillerParticleLayout,
+			void*             _swarm,
+			Particle_Index    newParticle_I,
+			void*             particle );
+
+
+#endif /* __Domain_Swarm_SpaceFillerParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SpaceFillerParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SpaceFillerParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SpaceFillerParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">GlobalParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This uses the SobolGenerator class to quasi-randomly fill particles throughout the whole global domain.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">averageInitialParticlesPerCell</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">SpaceFillerParticleLayout_Invalid</param>
+		<param name="Description">This is the average number of particles per cell. This number will be multiplied by the total number of cells to get the total inital particle number count. (If you use this parameter, you cannot set the 'totalInitialParticles' parameter as well).</param>
+	</struct>
+	<struct>
+		<param name="Name">totalInitialParticles</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">SpaceFillerParticleLayout_Invalid</param>
+		<param name="Description">This is the total number of particles that will be created to fill the global domain. (If you use this parameter, you cannot set the 'averageInitialParticlesPerCell' parameter as well).</param>
+	</struct>
+</list>
+
+<list name="Dependencies">
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayoutExample1">
+		<param name="Type">SpaceFillerParticleLayout</param>
+		<param name="totalInitialParticles">6000</param>
+	</struct>
+	<struct name="particleLayoutExample2">
+		<param name="Type">SpaceFillerParticleLayout</param>
+		<param name="averageInitialParticlesPerCell">20</param>
+	</struct>	
+</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/StandardParticle.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/StandardParticle.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,52 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Swarm_Register.c 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+
+#include "StandardParticle.h"
+
+const Type StandardParticle_Type = "StandardParticle";
+const Type LocalParticle_Type    = "LocalParticle";
+const Type GlobalParticle_Type   = "GlobalParticle";
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/StandardParticle.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/StandardParticle.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,82 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Defines a particle in StGermain. Collectively, a group of particles deemed a swarm.
+**
+**	All particles in StGermain have the notion of being within a cell - a owning cell.
+**	Particles can then be categorised into using a local coordinate system (local to the owning cell)
+**	or a global coordinate system (to the whole domain).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: StandardParticle.h 3526 2006-04-13 03:59:17Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_StandardParticle_h__
+#define __Domain_Swarm_StandardParticle_h__
+
+	extern const Type StandardParticle_Type;
+	extern const Type LocalParticle_Type;
+	extern const Type GlobalParticle_Type;
+
+	/** Standard base class for particle */
+	#define __BaseParticle \
+		Cell_DomainIndex	owningCell;	/**< The cell in a mesh which this particle currently lives in */
+
+	struct BaseParticle { __BaseParticle };
+
+	/* For backward compatibility */
+	#if 0
+	#define __StandardParticle \
+		__BaseParticle \
+		Coord                   coord;
+		
+	struct StandardParticle { __StandardParticle };
+	#endif
+
+	struct StandardParticle { __BaseParticle };
+
+	/** A particle with a local coordinate system */
+	#define __LocalParticle \
+		__BaseParticle \
+		Coord                   xi;             /**< Local coordinates within element/cell */
+
+	struct LocalParticle { __LocalParticle };
+
+	/** A particle with a global coordinate system */
+	#define __GlobalParticle \
+		__BaseParticle \
+		Coord                   coord;          /**< The global coordinates of this particle */ 
+
+	struct GlobalParticle { __GlobalParticle };
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Swarm.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Swarm.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,86 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	External header file to libDomain_Swarm.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Swarm.h 4171 2007-08-16 03:33:59Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_h__
+#define __Domain_Swarm_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+
+	#include "ShadowInfo.h"
+	#include "StandardParticle.h"
+	#include "IntegrationPoint.h"
+	#include "CellLayout.h"
+	#include "ParticleLayout.h"
+	#include "SwarmClass.h"
+	#include "Swarm_Register.h"
+	#include "ParticleCommHandler.h"
+	#include "ParticleMovementHandler.h"
+	#include "ParticleShadowSync.h"
+	#include "SingleCellLayout.h"
+	#include "ElementCellLayout.h"
+	#include "SingleCellLayout.h"
+	#include "TriSingleCellLayout.h"
+	#include "Random.h"
+	#include "PerCellParticleLayout.h"
+	#include "RandomParticleLayout.h"
+	#include "MeshParticleLayout.h"
+	#include "GaussParticleLayout.h"
+	#include "TriGaussParticleLayout.h"
+	#include "GaussBorderParticleLayout.h"
+	#include "GlobalParticleLayout.h"
+	#include "LineParticleLayout.h"
+	#include "FileParticleLayout.h"
+	#include "SpaceFillerParticleLayout.h"
+	#include "UnionParticleLayout.h"
+	#include "WithinShapeParticleLayout.h"
+	#include "PlaneParticleLayout.h"
+	#include "ManualParticleLayout.h"
+	#include "SwarmVariable_Register.h"
+	#include "SwarmVariable.h"
+	#include "OperatorSwarmVariable.h"
+	#include "SwarmOutput.h"
+	#include "SwarmDump.h"
+	#include "SwarmShapeVC.h"
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Domain_Swarm_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmClass.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmClass.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1677 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmClass.c 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "SwarmClass.h"
+
+#include "StandardParticle.h"
+#include "ShadowInfo.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SingleCellLayout.h"
+#include "FileParticleLayout.h"
+#include "ParticleCommHandler.h"
+#include "ParticleMovementHandler.h"
+#include "ParticleShadowSync.h"
+#include "IntegrationPoint.h"
+#include "SwarmVariable_Register.h"
+#include "SwarmVariable.h"
+#include "Swarm_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type Swarm_Type = "Swarm";
+const Name defaultSwarmParticleCommHandlerName = "defaultSwarmPHandlerName";
+
+/** Default extra factor to malloc for particles array. This is because the number of particles on each process
+may increase due to advection, splitting/merging etc, and we want to avoid reallocing if possible. */
+static const double       DEFAULT_EXTRA_PARTICLES_FACTOR = 0.05;
+static const unsigned int MINIMUM_PARTICLES_ARRAY_DELTA = 100;
+static const unsigned int DEFAULT_CELL_PARTICLE_TBL_DELTA = 4;
+
+/* --- Function Definitions --- */
+
+Swarm* Swarm_DefaultNew( Name name ) {
+	return (Swarm*)_Swarm_DefaultNew( name );
+}
+
+Swarm* Swarm_New( 
+		Name                                  name,
+		void*                                 cellLayout,
+		void*                                 particleLayout,
+		Dimension_Index                       dim,
+		SizeT                                 particleSize,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm,
+		void*				      ics ) 
+{
+	return _Swarm_New( 
+			sizeof(Swarm),
+			Swarm_Type,
+			_Swarm_Delete,
+			_Swarm_Print,
+			_Swarm_Copy,
+			_Swarm_DefaultNew,
+			_Swarm_Construct,
+			_Swarm_Build,
+			_Swarm_Initialise,
+			_Swarm_Execute,
+			_Swarm_Destroy,
+			name, 
+			True, 
+			(CellLayout*)cellLayout,
+			(ParticleLayout*)particleLayout,
+			dim,
+			particleSize,
+			DEFAULT_CELL_PARTICLE_TBL_DELTA,
+			DEFAULT_EXTRA_PARTICLES_FACTOR,
+			extensionMgr_Register, 
+			variable_Register,
+			comm, 
+			ics );
+}
+
+Swarm* _Swarm_New(
+		SizeT                                 _sizeOfSelf,
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,
+		Name                                  name,
+		Bool                                  initFlag,
+		CellLayout*                           cellLayout,
+		ParticleLayout*                       particleLayout,
+		Dimension_Index                       dim,
+		SizeT                                 particleSize,
+		Particle_InCellIndex                  cellParticleTblDelta, 
+		double                                extraParticlesFactor,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm,
+		void*				      ics )
+{
+	Swarm* self;
+	
+	/* Allocate memory */
+	self = (Swarm*)_Stg_Component_New( 
+			_sizeOfSelf, 
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build, 
+			_initialise,
+			_execute,
+			_destroy,
+			name, 
+			NON_GLOBAL );
+
+	self->particleSize = particleSize;
+	self->commHandlerList = Stg_ObjectList_New();
+	self->nSwarmVars = 0;
+	self->swarmVars = NULL;
+	
+	/* Swarm info */
+	if( initFlag )
+		_Swarm_Init( 
+				self,
+				cellLayout,
+				particleLayout,
+				dim,
+				cellParticleTblDelta,
+				extraParticlesFactor,
+				extensionMgr_Register,
+				variable_Register,
+				comm, 
+				ics );
+	
+	return self;
+}
+
+void _Swarm_Init( 
+		Swarm*                                self, 
+		void*                                 cellLayout,
+		void*                                 particleLayout,
+		Dimension_Index                       dim,
+		Particle_InCellIndex                  cellParticleTblDelta, 
+		double                                extraParticlesFactor,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm,
+		void*				      ics )
+{
+	StandardParticle   particle;
+	Stream*            errorStream = Journal_Register( Error_Type, self->type );
+	
+	self->isConstructed = True;
+	self->debug = Stream_RegisterChild( Swarm_Debug, self->type );
+	self->dim   = dim;
+	self->comm = comm;
+	MPI_Comm_rank( comm, (int *)&self->myRank );
+	MPI_Comm_size( comm, (int *)&self->nProc );
+	self->stillDoingInitialisation = True;
+	/* Check point and reload by default - only things like integration swarms will turn this off */
+	self->isSwarmTypeToCheckPointAndReload = True;
+
+	self->cellLayout = (CellLayout*)cellLayout;
+	self->particleLayout = (ParticleLayout*)particleLayout;
+	
+	/* Check that if either the CellLayout or ParticleLayout is inappropriate to be checkpointed,
+		we set tthe appropriate flags -- PatrickSunter, 22 August 2006 */
+	if ( Stg_Class_IsInstance( self->cellLayout, SingleCellLayout_Type ) ) {
+		self->isSwarmTypeToCheckPointAndReload = False;
+	}
+	
+	self->cellLocalCount = 0;
+	self->cellDomainCount = 0;
+	self->cellShadowCount = 0;
+	self->cellPointTbl = NULL;
+	self->cellPointCountTbl = NULL;
+	
+	self->cellParticleTbl = NULL;
+	self->cellParticleCountTbl = NULL;
+	self->cellParticleSizeTbl = NULL;
+	self->shadowCellParticleTbl = NULL;
+	self->shadowCellParticleCountTbl = NULL;
+	self->shadowParticleCount = 0;
+	self->cellParticleTblDelta = cellParticleTblDelta;
+	
+	self->particles = NULL;
+	self->shadowParticles = NULL;
+	self->particleLocalCount = 0;
+	self->particlesArraySize = 0;
+	self->particlesArrayDelta = 0;
+	self->extraParticlesFactor = extraParticlesFactor;
+
+	self->shadowTablesBuilt = False;
+
+	Journal_Firewall( extraParticlesFactor > 0.0, errorStream, "Error - in %s: extraParticlesFactor "
+		"given as %.3f, but this must be greater than zero to allow swarm to be realloc'ed larger "
+		"if necessary\n", extraParticlesFactor );
+
+	if ( variable_Register ) {
+		self->swarmVariable_Register = SwarmVariable_Register_New( variable_Register );
+	}
+	else {
+		self->swarmVariable_Register = NULL;
+	}
+
+	self->particleExtensionMgr = ExtensionManager_New_OfStruct( "particle", self->particleSize );
+	ExtensionManager_Register_Add( extensionMgr_Register, self->particleExtensionMgr );
+
+	self->owningCellVariable = Swarm_NewScalarVariable(
+			self,
+			"OwningCell",
+			GetOffsetOfMember( particle , owningCell ),
+			Variable_DataType_Int ); /* Should be unsigned int */
+
+	self->swarmReg_I = Swarm_Register_Add( Swarm_Register_GetSwarm_Register(), self );
+
+	if ( ics ) {
+		self->ics = Stg_CheckType( ics, VariableCondition );
+	}
+
+	self->incArray = IArray_New();
+}
+
+
+void* _Swarm_ParticleInCellAt( void* swarm, Cell_Index cell_I, Particle_InCellIndex cParticle_I ) {
+	Swarm* self =	(Swarm*)swarm;
+	
+	return (void*)Swarm_ParticleInCellAt( self, cell_I, cParticle_I );
+}
+
+
+void* _Swarm_ParticleAt( void* swarm, Particle_Index dParticle_I ) {
+	Swarm* self = (Swarm*)swarm;
+	
+	return (void*)Swarm_ParticleAt( self, dParticle_I );
+}
+
+
+void _Swarm_Delete( void* swarm ) {
+	Swarm*			self = (Swarm*)swarm;
+	Cell_LocalIndex		cell_I;
+	
+	Stg_ObjectList_DeleteAllObjects( self->commHandlerList );
+	Stg_Class_Delete( self->commHandlerList );
+
+	FreeArray( self->swarmVars );
+
+	Memory_Free( self->cellPointTbl );
+	Memory_Free( self->cellPointCountTbl );
+	
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		if( self->cellParticleTbl[cell_I] ){
+			Memory_Free( self->cellParticleTbl[cell_I] );
+		}
+
+		if(self->shadowTablesBuilt){
+			if( self->shadowCellParticleTbl[cell_I] ){
+				Memory_Free( self->shadowCellParticleTbl[cell_I] );
+			}
+		}
+	}
+
+	if( self->shadowTablesBuilt ){
+		Memory_Free( self->shadowCellParticleTbl );
+		Memory_Free( self->shadowCellParticleCountTbl );
+		if ( self->shadowParticles ) {
+			ExtensionManager_Free( self->particleExtensionMgr, self->shadowParticles );
+		}
+	}
+
+	Memory_Free( self->cellParticleTbl );
+	Memory_Free( self->cellParticleCountTbl );
+	Memory_Free( self->cellParticleSizeTbl );
+	if ( self->particles ) {
+		ExtensionManager_Free( self->particleExtensionMgr, self->particles );
+	}
+
+	/* Delete SwarmVariable_Register if it has been created */
+	if ( self->swarmVariable_Register ) {
+		Stg_Class_Delete( self->swarmVariable_Register );
+	}
+
+	NewClass_Delete( self->incArray );
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Swarm_Print( void* swarm, Stream* stream ) {
+	Swarm* self = (Swarm*)swarm;
+	
+	Cell_Index cell_I;
+	
+	/* Set the Journal for printing informations */
+	Stream* swarmStream = stream;
+	
+	/* General info */
+	Journal_Printf( swarmStream, "Swarm (ptr): %p\n", self );
+	
+	/* Parent class info */
+	_Stg_Component_Print( self, stream );
+	
+	/* Virtual info */
+
+	/* Swarm info */
+	Stg_Class_Print( self->cellLayout, stream );
+	Stg_Class_Print( self->particleLayout, stream );
+	Journal_Printf( swarmStream, "\tcellLocalCount: %u\n", self->cellLocalCount );
+	Journal_Printf( swarmStream, "\tcellDomainCount: %u\n", self->cellDomainCount );
+	Journal_Printf( swarmStream, "\tcellShadowCount: %u\n", self->cellShadowCount );
+	Journal_Printf( swarmStream, "\tcellPointCountTbl (ptr): %p\n", self->cellPointCountTbl );
+	Journal_Printf( swarmStream, "\tcellPointCountTbl[0-%u]: ", self->cellDomainCount );
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		Journal_Printf( swarmStream, "%.3u ", self->cellPointCountTbl[cell_I] );
+	}
+	Journal_Printf( swarmStream, "\n" );
+	
+	Journal_Printf( swarmStream, "\tcellPointTbl (ptr): %p\n", self->cellPointTbl );
+	Journal_Printf( swarmStream, "\tcellPointTbl[0-%u]: {\n", self->cellDomainCount );
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		Cell_PointIndex point_I;
+
+		Journal_Printf( swarmStream, "\tcellPointTbl[%u][0-%u]: ", cell_I, self->cellPointCountTbl[cell_I] );
+		for( point_I = 0; point_I < self->cellPointCountTbl[cell_I]; point_I++ ) {
+			Journal_Printf( swarmStream, "{%.3g %.3g %.3g} ",
+				(*self->cellPointTbl[cell_I][point_I])[0], 
+				(*self->cellPointTbl[cell_I][point_I])[1], 
+				(*self->cellPointTbl[cell_I][point_I])[2] );
+		}
+		Journal_Printf( swarmStream, "\n" );
+	}
+	Journal_Printf( swarmStream, "}\n" );
+	Journal_Printf( swarmStream, "\n" );
+	
+	Journal_Printf( swarmStream, "\tcellParticleCountTbl (ptr): %p\n", self->cellParticleCountTbl );
+	Journal_Printf( swarmStream, "\tcellParticleCountTbl[0-%u]: ", self->cellDomainCount );
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		Journal_Printf( swarmStream, "%.3u ", self->cellParticleCountTbl[cell_I] );
+	}
+	Journal_Printf( swarmStream, "\n" );
+	Journal_Printf( swarmStream, "\tcellParticleSizeTbl (ptr): %p\n", self->cellParticleSizeTbl );
+	Journal_Printf( swarmStream, "\tcellParticleSizeTbl[0-%u]: ", self->cellDomainCount );
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		Journal_Printf( swarmStream, "%.3u ", self->cellParticleSizeTbl[cell_I] );
+	}
+	Journal_Printf( swarmStream, "\n" );
+
+	/* Print( self->particleExtensionMgr, stream ); */
+	Journal_Printf( swarmStream, "\tcellParticleTbl (ptr): %p\n", self->cellParticleTbl );
+	Journal_Printf( swarmStream, "\tcellParticleTbl [0-%u]: {\n", self->cellDomainCount );
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		Particle_InCellIndex cParticle_I;
+		Particle_Index dParticle_I;
+
+		Journal_Printf( swarmStream, "\t\tcellParticleTbl[%u][0-%u]:\n", cell_I, self->cellParticleCountTbl[cell_I] );
+		for( cParticle_I = 0; cParticle_I < self->cellParticleCountTbl[cell_I]; cParticle_I++ ) {
+			dParticle_I = self->cellParticleTbl[cell_I][cParticle_I];
+			Journal_Printf( swarmStream, "\t\t\t(part. index) %d\n", dParticle_I );
+			/* TODO: should probably handle this by having a particle print E.P.
+			   which the swarm holds, which can be extended to print the 
+			   particles correctly.
+			   Check how the mesh handles this for elements and nodes... */
+			#if 0
+			Journal_Printf( swarmStream, "\t\t\t(ptr) %p\n", Swarm_ParticleAt( self, dParticle_I ) );
+			Journal_Printf( swarmStream, "\t\t\t%g %g %g\n", 
+				(*(Coord*)Swarm_ParticleAt( self, cell_I, particle_I ))[0], 
+				(*(Coord*)Swarm_ParticleAt( self, cell_I, particle_I ))[1], 
+				(*(Coord*)Swarm_ParticleAt( self, cell_I, particle_I ))[2] );
+			#endif	
+		}
+		Journal_Printf( swarmStream, "\n" );
+	}
+	Journal_Printf( swarmStream, "\t}\n" );
+	Journal_Printf( swarmStream, "\tparticlesArraySize: %d\n", self->particlesArraySize );
+	Journal_Printf( swarmStream, "\tparticlesArrayDelta: %d\n", self->particlesArrayDelta );
+	Journal_Printf( swarmStream, "\textraParticlesFactor: %.3g\n", self->extraParticlesFactor );
+
+	if ( self->ics ) {
+		Stg_Class_Print( self->ics, stream );
+	}
+	else {
+		Journal_Printf( stream, "\tics: (null)... not provided (may be Operator type)\n" );
+	}
+}
+
+
+void* _Swarm_Copy( void* swarm, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Swarm*		self = (Swarm*)swarm;
+	Swarm*		newSwarm;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSwarm = _Stg_Component_Copy( self, dest, deep, nameExt, map );
+	PtrMap_Append( map, self, newSwarm );
+	
+	newSwarm->myRank = self->myRank;
+	newSwarm->nProc = self->nProc;
+	newSwarm->comm = self->comm;
+	newSwarm->cellLocalCount = self->cellLocalCount;
+	newSwarm->cellDomainCount = self->cellDomainCount;
+	newSwarm->cellShadowCount = self->cellShadowCount;
+	newSwarm->cellParticleTblDelta = self->cellParticleTblDelta;
+	newSwarm->particleLocalCount = self->particleLocalCount;
+	newSwarm->particlesArraySize = self->particlesArraySize;
+	newSwarm->particlesArrayDelta = self->particlesArrayDelta;
+	newSwarm->extraParticlesFactor = self->extraParticlesFactor;
+	
+	if( self->shadowTablesBuilt ){
+		newSwarm->shadowParticleCount = self->shadowParticleCount;
+	}
+
+	if( deep ) {
+		/* Classes */
+		newSwarm->cellLayout = (CellLayout*)Stg_Class_Copy( self->cellLayout, NULL, deep, nameExt, map );
+		newSwarm->particleLayout = (ParticleLayout*)Stg_Class_Copy( self->particleLayout, NULL, deep, nameExt, map );
+		newSwarm->debug = (Stream*)Stg_Class_Copy( self->debug, NULL, deep, nameExt, map );
+		newSwarm->particleExtensionMgr = (ExtensionManager*)Stg_Class_Copy( self->particleExtensionMgr, NULL, deep, nameExt, map 
+);
+		newSwarm->commHandlerList = (Stg_ObjectList*)Stg_Class_Copy( self->commHandlerList, NULL, deep, nameExt, map );
+		
+		/* Arrays */
+		if( (newSwarm->cellPointCountTbl = PtrMap_Find( map, self->cellPointCountTbl )) == NULL ) {
+			if( self->cellPointCountTbl ) {
+				newSwarm->cellPointCountTbl = Memory_Alloc_Array( Cell_PointIndex, newSwarm->cellDomainCount, "Swarm->cellPointCountTbl" );
+				memcpy( newSwarm->cellPointCountTbl, self->cellPointCountTbl, newSwarm->cellDomainCount * sizeof( Cell_PointIndex ) );
+				PtrMap_Append( map, self->cellPointCountTbl, newSwarm->cellPointCountTbl );
+			}
+			else {
+				newSwarm->cellPointCountTbl = NULL;
+			}
+		}
+		
+		if( (newSwarm->cellPointTbl = PtrMap_Find( map, self->cellPointTbl )) == NULL ) {
+			if( newSwarm->cellPointCountTbl && self->cellPointTbl ) {
+				Index	cell_I;
+				
+				newSwarm->cellPointTbl = Memory_Alloc_2DComplex( Cell_Point, newSwarm->cellDomainCount, newSwarm->cellPointCountTbl, "Swarm->cellPointTbl" );
+				for( cell_I = 0; cell_I < newSwarm->cellDomainCount; cell_I++ ) {
+					memcpy( newSwarm->cellPointTbl[cell_I], self->cellPointTbl[cell_I], newSwarm->cellPointCountTbl[cell_I] * sizeof(Cell_Point) );
+				}
+				PtrMap_Append( map, self->cellPointTbl, newSwarm->cellPointTbl );
+			}
+			else {
+				newSwarm->cellPointTbl = NULL;
+			}
+		}
+		
+		if( (newSwarm->cellParticleCountTbl = PtrMap_Find( map, self->cellParticleCountTbl )) == NULL ) {
+			if( self->cellParticleCountTbl ) {
+				newSwarm->cellParticleCountTbl = Memory_Alloc_Array( Particle_InCellIndex, newSwarm->cellDomainCount, "Swarm->cellParticleCountTbl" );
+				memcpy( newSwarm->cellParticleCountTbl, self->cellParticleCountTbl, newSwarm->cellDomainCount * sizeof( Particle_InCellIndex ) );
+				PtrMap_Append( map, self->cellParticleCountTbl, newSwarm->cellParticleCountTbl );
+			}
+			else {
+				newSwarm->cellParticleCountTbl = NULL;
+			}
+		}
+		
+		if( (newSwarm->cellParticleSizeTbl = PtrMap_Find( map, self->cellParticleSizeTbl )) == NULL ) {
+			if( self->cellParticleSizeTbl ) {
+				newSwarm->cellParticleSizeTbl = Memory_Alloc_Array( Particle_InCellIndex, newSwarm->cellDomainCount, "Swarm->cellParticleSizeTbl" );
+				memcpy( newSwarm->cellParticleSizeTbl, self->cellParticleSizeTbl, newSwarm->cellDomainCount * sizeof( Particle_InCellIndex ) );
+				PtrMap_Append( map, self->cellParticleSizeTbl, newSwarm->cellParticleSizeTbl );
+			}
+			else {
+				newSwarm->cellParticleSizeTbl = NULL;
+			}
+		}
+		
+		if( (newSwarm->cellParticleTbl = PtrMap_Find( map, self->cellParticleTbl )) == NULL ) {
+			if( newSwarm->cellParticleCountTbl && self->cellParticleTbl ) {
+				Index	cell_I;
+				
+				newSwarm->cellParticleTbl = Memory_Alloc_Array( Cell_Particles, newSwarm->cellDomainCount, "Swarm->cellParticleTbl" );
+				for( cell_I = 0; cell_I < newSwarm->cellDomainCount; cell_I++ ) {
+					if( newSwarm->cellParticleCountTbl[cell_I] ) {
+						newSwarm->cellParticleTbl[cell_I] = Memory_Alloc_Array( Particle_Index, newSwarm->cellParticleCountTbl[cell_I], "Swarm->cellParticleTbl[]" );
+						memcpy( newSwarm->cellParticleTbl[cell_I], self->cellParticleTbl[cell_I], newSwarm->cellParticleCountTbl[cell_I] * sizeof(Particle_Index) );
+					}
+					else {
+						newSwarm->cellParticleTbl[cell_I] = NULL;
+					}
+				}
+				PtrMap_Append( map, self->cellParticleTbl, newSwarm->cellParticleTbl );
+			}
+			else {
+				newSwarm->cellParticleTbl = NULL;
+			}
+		}
+		
+		if( (newSwarm->particles = PtrMap_Find( map, self->particles )) == NULL ) {
+			if( self->particles ) {
+				newSwarm->particles = (Particle_List)ExtensionManager_Malloc( newSwarm->particleExtensionMgr, newSwarm->particlesArraySize );
+				memcpy( newSwarm->particles, self->particles, newSwarm->particlesArraySize * ExtensionManager_GetFinalSize( newSwarm->particleExtensionMgr ) );
+				PtrMap_Append( map, self->particles, newSwarm->particles );
+			}
+			else {
+				newSwarm->particles = NULL;
+			}
+		}
+
+		/*shadow info*/
+		if( self->shadowTablesBuilt ){
+
+			if( (newSwarm->shadowCellParticleCountTbl = PtrMap_Find( map, self->shadowCellParticleCountTbl )) == NULL ) {
+				if( self->shadowCellParticleCountTbl ) {
+					newSwarm->shadowCellParticleCountTbl = Memory_Alloc_Array( Particle_InCellIndex, newSwarm->cellDomainCount, "Swarm->shadowCellParticleCountTbl" );
+					memcpy( newSwarm->shadowCellParticleCountTbl, self->shadowCellParticleCountTbl, newSwarm->cellDomainCount * sizeof( Particle_InCellIndex ) );
+					PtrMap_Append( map, self->shadowCellParticleCountTbl, newSwarm->shadowCellParticleCountTbl );
+				}
+				else {
+					newSwarm->shadowCellParticleCountTbl = NULL;
+				}
+			}
+		
+			if( (newSwarm->shadowCellParticleTbl = PtrMap_Find( map, self->shadowCellParticleTbl )) == NULL ) {
+				if( newSwarm->shadowCellParticleCountTbl && self->shadowCellParticleTbl ) {
+					Index	cell_I;
+				
+					newSwarm->shadowCellParticleTbl = Memory_Alloc_Array( Cell_Particles, newSwarm->cellDomainCount, "Swarm->shadowCellParticleTbl" );
+					for( cell_I = 0; cell_I < newSwarm->cellDomainCount; cell_I++ ) {
+						if( newSwarm->shadowCellParticleCountTbl[cell_I] ) {
+							newSwarm->shadowCellParticleTbl[cell_I] = Memory_Alloc_Array( Particle_Index, newSwarm->shadowCellParticleCountTbl[cell_I],
+									"Swarm->shadowCellParticleTbl[]" );
+							memcpy( newSwarm->shadowCellParticleTbl[cell_I], self->shadowCellParticleTbl[cell_I],
+									newSwarm->shadowCellParticleCountTbl[cell_I] * sizeof(Particle_Index) );
+						}
+						else {
+							newSwarm->shadowCellParticleTbl[cell_I] = NULL;
+						}
+					}
+					PtrMap_Append( map, self->shadowCellParticleTbl, newSwarm->shadowCellParticleTbl );
+				}
+				else {
+					newSwarm->shadowCellParticleTbl = NULL;
+				}
+			}
+		
+			if( (newSwarm->shadowParticles = PtrMap_Find( map, self->shadowParticles )) == NULL ) {
+				if( self->shadowParticles ) {
+					newSwarm->shadowParticles = (Particle_List)ExtensionManager_Malloc( newSwarm->particleExtensionMgr, newSwarm->shadowParticleCount);
+					memcpy( newSwarm->shadowParticles, self->shadowParticles,
+							newSwarm->shadowParticleCount* ExtensionManager_GetFinalSize( newSwarm->particleExtensionMgr ) );
+					PtrMap_Append( map, self->shadowParticles, newSwarm->shadowParticles );
+				}
+				else {
+					newSwarm->shadowParticles = NULL;
+				}
+			}		
+		}
+
+		newSwarm->ics = self->ics ? (VariableCondition*)Stg_Class_Copy( self->ics, NULL, deep, nameExt, map ) : NULL;
+	}
+	else {
+		newSwarm->cellLayout = self->cellLayout;
+		newSwarm->particleLayout = self->particleLayout;
+		newSwarm->debug = self->debug;
+		newSwarm->cellPointTbl = self->cellPointTbl;
+		newSwarm->cellPointCountTbl = self->cellPointCountTbl;
+		newSwarm->cellParticleTbl = self->cellParticleTbl;
+		newSwarm->cellParticleCountTbl = self->cellParticleCountTbl;
+		newSwarm->cellParticleSizeTbl = self->cellParticleSizeTbl;
+		newSwarm->particles = self->particles;
+
+		newSwarm->shadowCellParticleTbl = self->shadowCellParticleTbl;
+		newSwarm->shadowCellParticleCountTbl = self->shadowCellParticleCountTbl;
+		newSwarm->shadowParticles = self->shadowParticles;
+
+		newSwarm->particleExtensionMgr = self->particleExtensionMgr;
+		newSwarm->commHandlerList = self->commHandlerList;
+
+		newSwarm->ics = self->ics;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSwarm;
+}
+
+void* _Swarm_DefaultNew( Name name ) {
+	return _Swarm_New( 
+			sizeof(Swarm),
+			Swarm_Type,
+			_Swarm_Delete,
+			_Swarm_Print,
+			_Swarm_Copy,
+			_Swarm_DefaultNew,
+			_Swarm_Construct,
+			_Swarm_Build, 
+			_Swarm_Initialise,
+			_Swarm_Execute,
+			_Swarm_Destroy,
+			name, 
+			False, 
+			NULL,                       /* cellLayout */
+			NULL,                       /* particleLayout */
+			0,                          /* dim */
+			sizeof(IntegrationPoint),   /* particleSize */
+			0,	                    /* cellParticleTblDelta */
+			0,                          /* extraParticlesFactor */
+			NULL,                       /* extensionMgr_Register */
+			NULL,                       /* variable_Register */
+			MPI_COMM_WORLD,
+		        NULL );			    /* ics */
+}
+
+void _Swarm_Construct( void* swarm, Stg_ComponentFactory* cf, void* data ) {
+	Swarm*                  self                     = (Swarm*)swarm;
+	CellLayout*             cellLayout               = NULL;
+	ParticleLayout*         particleLayout           = NULL;
+	void*                   extensionManagerRegister = NULL;
+	double                  extraParticlesFactor     = 0.0;
+	Particle_InCellIndex    cellParticleTblDelta     = 0;
+	Dimension_Index         dim;
+	Type                    particleType;
+	Variable_Register*      variable_Register        = NULL;
+	AbstractContext*        context 		 = NULL;
+	VariableCondition* 	ic            		 = NULL;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", AbstractContext, True, data );
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+	
+	particleType = Stg_ComponentFactory_GetString( cf, self->name, "ParticleType", IntegrationPoint_Type );
+	
+	cellLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  CellLayout_Type, CellLayout,  True, data ) ;
+	particleLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  ParticleLayout_Type, ParticleLayout, True, data );
+	
+	extensionManagerRegister = Stg_ObjectList_Get( cf->registerRegister, "ExtensionManager_Register" );
+	assert( extensionManagerRegister );
+	variable_Register = Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variable_Register );
+	
+	cellParticleTblDelta = 
+		Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "cellParticleTblDelta", DEFAULT_CELL_PARTICLE_TBL_DELTA);
+	extraParticlesFactor = 
+		Stg_ComponentFactory_GetDouble( cf, self->name, "extraParticlesFactor", DEFAULT_EXTRA_PARTICLES_FACTOR );
+	
+	{
+		unsigned int count = 0;
+		int i = 0;
+		Stg_Component **components = NULL;
+
+		components = (Stg_Component**)Stg_ComponentFactory_ConstructByList( 
+			cf, 
+			self->name, 
+			"ParticleCommHandlers", 
+			Stg_ComponentFactory_Unlimited, 
+			ParticleCommHandler, 
+			False, 
+			&count, 
+			data );
+
+		if( count == 0 ){
+ 			Journal_Printf( self->debug, "Warning: Swarm has 0 Communication handlers..!\n" );
+ 		}
+ 		else{
+ 			for( i=0; i<count; i++ ){
+ 				Stg_ObjectList_Append( self->commHandlerList, components[i] );
+ 			}
+ 			Memory_Free( components );
+		}
+	}
+
+	/* construct the variable condition IC */
+	ic = Stg_ComponentFactory_ConstructByKey( cf, self->name, "IC", VariableCondition, False, data );
+	
+	_Swarm_Init( 
+			self,
+			cellLayout,
+			particleLayout, 
+			dim,
+			cellParticleTblDelta,
+			extraParticlesFactor,
+			extensionManagerRegister,
+			variable_Register,
+			context->communicator,
+			ic );
+}
+
+
+void _Swarm_Build( void* swarm, void* data ) {
+	Swarm* self = (Swarm*)swarm;
+	AbstractContext* context = (AbstractContext*)data;
+	
+	Journal_DPrintf( self->debug, "In %s(): for swarm \"%s\" (of type %s)\n", __func__, self->name, self->type ); 
+	Stream_IndentBranch( Swarm_Debug );
+
+	Stg_Component_Build( self->cellLayout, data, False );
+	Stg_Component_Build( self->particleLayout, data, False );
+	
+	Journal_DPrintf( self->debug, "allocating memory for cell->particle mappings:\n" );
+	_Swarm_BuildCells( self, data );
+	Journal_DPrintf( self->debug, "...done.\n" );
+
+	/* if loading from checkpoint, then delete the particle layout
+	 * created due to the user's specification in the input file,
+	 * and replace it with a FileParticleLayout, so that the particles
+	 * can be re-loaded with their exact state at the checkpointed time
+	 */
+	if ( context && context->loadFromCheckPoint ) {
+		Journal_DPrintf( self->debug, "detected loadFromCheckPoint mode enabled:\n" );
+		Stream_Indent( self->debug );
+
+		if ( False == self->isSwarmTypeToCheckPointAndReload ) {
+			Journal_DPrintf( self->debug, "...but this swarm type is set to not be checkpointed/reloaded, "
+				"so continuing.\n" );
+		}
+		else {
+			Swarm_ReplaceCurrentParticleLayoutWithFileParticleLayout( self, context );
+		}	
+		Stream_UnIndent( self->debug );
+	}
+	
+	Journal_DPrintf( self->debug, "allocating memory for particles:\n" );
+	_Swarm_BuildParticles( self, data );
+	Journal_DPrintf( self->debug, "...done.\n" );
+
+	Journal_DPrintf( self->debug, "setting up the particle owningCell SwarmVariable:\n" );
+	Stg_Component_Build( self->owningCellVariable, data, False );
+	Journal_DPrintf( self->debug, "...done.\n" );
+	
+	/* these three functions were in initialise function before... 10.08.07*/
+	_Swarm_InitialiseCells( self, data );
+	_Swarm_InitialiseParticles( self, data );
+	Stg_Component_Initialise( self->owningCellVariable, data, False );
+	/**/
+
+	Stream_UnIndentBranch( Swarm_Debug );
+	Journal_DPrintf( self->debug, "...done in %s().\n", __func__ );
+
+	if( self->ics && !(context && (True == context->loadFromCheckPoint) ) ) {
+		Stg_Component_Build( self->ics, data, False );
+	}
+}
+
+			
+void _Swarm_Initialise( void* swarm, void* data ) {
+	Swarm* self = (Swarm*)swarm;
+	AbstractContext* context = (AbstractContext*)data; 
+	
+	Journal_DPrintf( self->debug, "In %s(): for swarm \"%s\" (of type %s)\n", __func__, self->name, self->type ); 
+	Stream_IndentBranch( Swarm_Debug );
+	
+	self->stillDoingInitialisation = False;
+
+	Stream_UnIndentBranch( Swarm_Debug );
+	Journal_DPrintf( self->debug, "...done in %s().\n", __func__ );
+
+	if( self->ics || ( context && (True == context->loadFromCheckPoint) ) ) {
+		Journal_DPrintf( self->debug, "applying the ICs for this swarm.\n" );
+		Stream_Indent( self->debug );
+		Stg_Component_Initialise( self->ics, data, False );
+		/* call the initial conditions plugin here */
+		VariableCondition_Apply( self->ics, data );
+	}
+}
+
+
+void _Swarm_Execute( void* swarm, void* data ) {
+}
+
+void _Swarm_Destroy( void* swarm, void* data ) {
+}
+
+void _Swarm_BuildCells( void* swarm, void* data ) {
+	Swarm*			self = (Swarm*)swarm;
+	Cell_Index		cell_I;
+	Cell_PointIndex		pointCount;
+	
+	/* Need to do this first - as the cellLayout may be dependent on a mesh etc */
+	Stg_Component_Build( self->cellLayout, data, False );
+
+	Journal_DPrintf( self->debug, "In %s():\n", __func__ ); 
+	Stream_IndentBranch( Swarm_Debug );
+
+	self->cellLocalCount = CellLayout_CellLocalCount( self->cellLayout );
+	self->cellShadowCount = CellLayout_CellShadowCount( self->cellLayout );
+	self->cellDomainCount = self->cellLocalCount + self->cellShadowCount;
+
+	Journal_DPrintf( self->debug, "CellLayout \"%s\" (of type %s) returned cell counts of:\n"
+		"cellLocalCount: %u, cellShadowCount: %u, cellDomainCount: %u",
+		self->cellLayout->name, self->cellLayout->type,
+		self->cellLocalCount, self->cellShadowCount, self->cellDomainCount );
+
+	self->cellPointCountTbl = Memory_Alloc_Array( Cell_PointIndex, self->cellDomainCount, "Swarm->cellPointCountTbl" );
+	pointCount = 0;
+
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		self->cellPointCountTbl[cell_I] = CellLayout_PointCount( self->cellLayout, cell_I );
+		pointCount += self->cellPointCountTbl[cell_I];
+	}
+
+	self->cellPointTbl = Memory_Alloc_2DComplex( Cell_Point, self->cellDomainCount, self->cellPointCountTbl, "Swarm->cellPointTbl" );
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void _Swarm_BuildParticles( void* swarm, void* data ) {
+	Swarm*			self = (Swarm*)swarm;
+	
+	/* Need to do this first - as the particleLayout may be dependent on a mesh etc */
+	Stg_Component_Build( self->particleLayout, data, False );
+
+	self->cellParticleCountTbl = Memory_Alloc_Array( Particle_InCellIndex, self->cellDomainCount,
+		"Swarm->cellParticleCountTbl" );
+	self->cellParticleSizeTbl = Memory_Alloc_Array( Particle_InCellIndex, self->cellDomainCount,
+		"Swarm->cellParticleSizeTbl" );
+	self->cellParticleTbl = Memory_Alloc_Array( Cell_Particles, self->cellDomainCount, "Swarm->cellParticleTbl" ); 
+	
+	ParticleLayout_SetInitialCounts( self->particleLayout, self );
+	
+	/* Now allocate the particles array */
+	/* We allocate extra space to try & avoid avoid reallocing later as particles are advected etc. */
+	self->particlesArrayDelta = (Particle_Index)( (double) self->particleLocalCount * self->extraParticlesFactor);
+	if ( 0 == self->particlesArrayDelta ) {
+		self->particlesArrayDelta = MINIMUM_PARTICLES_ARRAY_DELTA;		
+	}
+
+	self->particlesArraySize = self->particleLocalCount + self->particlesArrayDelta;
+
+	self->particles = (Particle_List)ExtensionManager_Malloc( self->particleExtensionMgr, self->particlesArraySize );
+}
+
+void _Swarm_BuildShadowParticles( void* swarm ) {
+	Swarm*			self = (Swarm*)swarm;
+	int i = 0;
+	
+	self->shadowTablesBuilt = True;
+
+	self->shadowCellParticleCountTbl = Memory_Alloc_Array( Particle_InCellIndex, self->cellDomainCount,
+		"Swarm->shadowCellParticleCountTbl" );
+	self->shadowCellParticleTbl = Memory_Alloc_Array( Cell_Particles, self->cellDomainCount, "Swarm->shadowCellParticleTbl" );
+	for( i=0; i<self->cellDomainCount; i++ ){
+		self->shadowCellParticleTbl[i] = NULL;
+	}
+	
+	self->shadowParticles = NULL;
+}
+
+void _Swarm_InitialiseCells( void* swarm, void* data ) {
+	Swarm*			self = (Swarm*)swarm;
+	Cell_Index		cell_I;
+	
+	/* Need to do this first - as the cellLayout may be dependent on a mesh etc */
+	Stg_Component_Initialise( self->cellLayout, data, False );
+
+	for( cell_I = 0; cell_I < self->cellDomainCount; cell_I++ ) {
+		CellLayout_InitialiseCellPoints( self->cellLayout, cell_I, self->cellPointCountTbl[cell_I], 
+			self->cellPointTbl[cell_I] );
+	}
+}
+
+
+void _Swarm_InitialiseParticles( void* swarm, void* data ) {
+	Swarm*			self = (Swarm*)swarm;
+	
+	/* Need to do this first - as the particleLayout may be dependent on a mesh etc */
+	Stg_Component_Initialise( self->particleLayout, data, False );
+
+	ParticleLayout_InitialiseParticles( self->particleLayout, self );
+
+	/* Need to re-do the delta calculation here, since if using a global particle layouts, we didn't know the 
+	 * localParticleCount until the above call, and had just used a default delta. We can now calculate the
+	 * correct one. */
+	self->particlesArrayDelta = (Particle_Index)( (double) self->particleLocalCount * self->extraParticlesFactor);
+	if ( 0 == self->particlesArrayDelta ) {
+		self->particlesArrayDelta = MINIMUM_PARTICLES_ARRAY_DELTA;		
+	}
+
+	Swarm_UpdateAllParticleOwners( self );
+}
+
+
+/** This function assmes particle advection and hence global coords are used */
+void Swarm_UpdateAllParticleOwners( void* swarm ) {
+	Swarm*			self = (Swarm*)swarm;
+	Particle_Index		lParticle_I;
+
+	/* TODO: need to reconsideer - gauss particle layout should be allowed, but not swarms that have no local
+	 * co-ordinates */
+	if ( self->particleLayout->coordSystem == LocalCoordSystem ) {
+		/* Assumption: Local coord layouts don't go through advection so no need to update */
+		return;
+	}
+	
+	Journal_DPrintfL( self->debug, 1, "In %s() for Swarm \"%s\"\n", __func__, self->name );
+	Stream_IndentBranch( Swarm_Debug );	
+	for ( lParticle_I=0; lParticle_I < self->particleLocalCount; lParticle_I++ ) {
+		Swarm_UpdateParticleOwner( self, lParticle_I );
+	}
+
+	/* UpdateAllParticleOwners is called during initialisation,to set up initial
+	 * ownership relationships, and if that's the case we don't want to invoke
+	 * the ParticleCommHandler since we know there's been no movement between
+	 * processors yet. */
+	if ( False == self->stillDoingInitialisation ) { 
+		/*Stg_Component_Execute( self->particleCommunicationHandler[0], NULL, True );
+		Stg_Component_Execute( self->particleCommunicationHandler[1], NULL, True );*/
+		{
+			int ii;
+			for( ii=0; ii<self->commHandlerList->count; ii++ ){
+				ParticleCommHandler *pComm = NULL;
+
+				pComm = (ParticleCommHandler*)(Stg_ObjectList_At(self->commHandlerList, ii));
+				Stg_Component_Execute( pComm, self, True);
+			}
+		}
+	}
+
+	Stream_UnIndentBranch( Swarm_Debug );	
+}
+
+
+void Swarm_UpdateParticleOwner( void* swarm, Particle_Index particle_I ) {
+	Swarm* 			self           = (Swarm*)swarm;
+	GlobalParticle*	        particle       = (GlobalParticle*) Swarm_ParticleAt( self, particle_I );
+	Cell_DomainIndex	newOwningCell;
+	Particle_InCellIndex	cParticle_I;
+	Coord*			coordPtr       = &particle->coord;
+
+	Journal_DPrintfL( self->debug, 3, "In %s: for particle %d, old cell %d\n", __func__,
+		particle_I, particle->owningCell );
+	Stream_Indent( self->debug );	
+	
+	Journal_DPrintfL( self->debug, 3, "updated coord (%f,%f,%f) is: ", (*coordPtr)[0], (*coordPtr)[1], (*coordPtr)[2] );
+
+	newOwningCell = CellLayout_CellOf( self->cellLayout, particle );
+
+	if ( newOwningCell == particle->owningCell ) {
+		Journal_DPrintfL( self->debug, 3, "still in same cell.\n" );
+	}
+	else {
+		Cell_LocalIndex		oldOwningCell = particle->owningCell;
+
+		Journal_DPrintfL( self->debug, 3, "in new cell %d.\n", newOwningCell );
+		cParticle_I = Swarm_GetParticleIndexWithinCell( self, particle->owningCell, particle_I );
+		Swarm_RemoveParticleFromCell( self, oldOwningCell, cParticle_I );
+	
+		/* if new cell is in my domain, add entry to new cell's table */
+		if ( newOwningCell == self->cellDomainCount ) {
+			Journal_DPrintfL( self->debug, 3, "New cell == domain count -> Particle has moved outside domain.\n" );
+			particle->owningCell = self->cellDomainCount;
+		}	
+		#ifdef CAUTIOUS
+		else if ( newOwningCell >= self->cellDomainCount ) {	
+			Stream*    errorStream = Journal_Register( Error_Type, self->type );
+
+			Journal_Firewall( 0, errorStream,
+				"Error - in %s(): particle %u's new domain cell calculated as "
+				"%u, but this is greater than the count of domain cells %u. "
+				"Something has gone wrong.\n",
+				__func__, particle_I, newOwningCell, self->cellDomainCount );
+		}		
+		#endif
+		else {
+			Swarm_AddParticleToCell( self, newOwningCell, particle_I );
+		}
+	}
+	Stream_UnIndent( self->debug );	
+}
+
+
+void Swarm_RemoveParticleFromCell( void* swarm, Cell_DomainIndex dCell_I, Particle_InCellIndex cParticle_I ) {
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_InCellIndex*	sizePtr = &self->cellParticleSizeTbl[dCell_I];
+	Particle_InCellIndex*	countPtr = &self->cellParticleCountTbl[dCell_I];
+
+	Journal_DPrintfL( self->debug, 3, "Removing PIC %d from cell %d: particle count now %d",
+		cParticle_I, dCell_I, (*countPtr)-1 );
+	self->cellParticleTbl[dCell_I][cParticle_I] = self->cellParticleTbl[dCell_I][*countPtr-1];
+	(*countPtr)--;
+	if ( *countPtr == (*sizePtr - self->cellParticleTblDelta) ) {
+		Journal_DPrintfL( self->debug, 3, " - (reducing entries alloced to %d)", (*countPtr) );
+		(*sizePtr) = *countPtr;
+		self->cellParticleTbl[dCell_I] = Memory_Realloc_Array( self->cellParticleTbl[dCell_I],
+			Particle_Index, *sizePtr );
+	}
+	Journal_DPrintfL( self->debug, 3, "\n" );
+}
+
+
+void Swarm_DeleteParticle( void* swarm, Particle_Index particleToDelete_lI ) {
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_InCellIndex    cParticle_I = 0;
+	Particle_Index          lastParticle_I = 0;
+	GlobalParticle*         lastParticle = NULL;	
+	GlobalParticle*         particleToDelete = NULL;	
+	SizeT                   particleSize = self->particleExtensionMgr->finalSize;
+	Stream*                 errorStr = Journal_Register( Error_Type, self->type );
+
+	Journal_Firewall( particleToDelete_lI < self->particleLocalCount, errorStr,
+		"Error- in %s(): particleToDelete_lI passed in (%u) is >= swarm's local particle count %u.\n",
+		__func__, particleToDelete_lI, self->particleLocalCount );
+
+	particleToDelete = (GlobalParticle*)Swarm_ParticleAt( self, particleToDelete_lI );
+	cParticle_I = Swarm_GetParticleIndexWithinCell( self, particleToDelete->owningCell, particleToDelete_lI );
+
+	Swarm_RemoveParticleFromCell( self, particleToDelete->owningCell, cParticle_I );
+
+	lastParticle_I = self->particleLocalCount - 1;
+	lastParticle   = (GlobalParticle*)Swarm_ParticleAt( self, lastParticle_I );
+
+	/* In the current data structure for particles (a regular array), if we delete a particle we need to "swap"
+	 * the 'last' particle into the hole we just created, and update it's cell's reference to it.
+	 * The only special case is if the particle we are deleting happens to be the last particle, in which case
+	 * no swap is necessary. */ 
+	if ( particleToDelete_lI != lastParticle_I ) {
+		/* Get last Particle information */
+		Cell_Index            lastParticle_CellIndex       = lastParticle->owningCell;
+		Particle_InCellIndex  lastParticle_IndexWithinCell = 0;
+		
+		lastParticle_IndexWithinCell = Swarm_GetParticleIndexWithinCell( self, lastParticle_CellIndex, lastParticle_I);
+
+		Journal_DPrintfL( self->debug, 2, 
+				"Copying over particle %u using last particle %u from cell %u (cell particle index - %u)\n", 
+				particleToDelete_lI, lastParticle_I, lastParticle_CellIndex, lastParticle_IndexWithinCell );
+
+		/* Copy over particle */
+		memcpy( particleToDelete, lastParticle, particleSize );
+			
+		/* Change value in cell particle table to point to new index in array */
+		self->cellParticleTbl[lastParticle_CellIndex][ lastParticle_IndexWithinCell ] = particleToDelete_lI;
+	}
+
+	/* Re-set memory at location of last particle to zero so it is clear that it's been deleted */
+	memset( lastParticle, 0, particleSize );
+
+	self->particleLocalCount--;
+	/* Call the memory management function in case we need to re-allocate the swarm size smaller now */
+	Swarm_Realloc( swarm );
+}
+
+
+void Swarm_DeleteParticleAndReplaceWithNew( void* swarm, Particle_Index particleToDelete_lI,
+		void* replacementParticle, Cell_Index replacementParticle_cellIndex )
+{
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_InCellIndex    cParticle_I = 0;
+	GlobalParticle*         particleToDelete = NULL;	
+	Stream*                 errorStr = Journal_Register( Error_Type, self->type );
+	
+	Journal_Firewall( particleToDelete_lI < self->particleLocalCount, errorStr,
+		"Error- in %s(): particleToDelete_lI passed in (%u) is >= swarm's local particle count %u.\n",
+		__func__, particleToDelete_lI, self->particleLocalCount );
+
+	particleToDelete = (GlobalParticle*)Swarm_ParticleAt( self, particleToDelete_lI );
+	cParticle_I = Swarm_GetParticleIndexWithinCell( self, particleToDelete->owningCell, particleToDelete_lI );
+
+	Swarm_RemoveParticleFromCell( self, particleToDelete->owningCell, cParticle_I );
+
+	Journal_DPrintfL( self->debug, 2, 
+		"Copying over particle %u using replacement particle, and adding it to cell %u\n", 
+		particleToDelete_lI, replacementParticle_cellIndex );
+
+	/* Copy over particle to delete with it's replacement */
+	memcpy( particleToDelete, replacementParticle, self->particleExtensionMgr->finalSize );
+			
+	/* Add a reference to replacement particle in appropriate cell entry */
+	Swarm_AddParticleToCell( self, replacementParticle_cellIndex, particleToDelete_lI );
+}
+
+
+void Swarm_AddParticleToCell( void* swarm, Cell_DomainIndex dCell_I, Particle_Index particle_I ) {
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_InCellIndex*	newCountPtr = &self->cellParticleCountTbl[dCell_I];
+	Particle_InCellIndex*	newSizePtr = &self->cellParticleSizeTbl[dCell_I];
+	#ifdef CAUTIOUS
+	Stream*                 errorStream = Journal_Register( Error_Type, self->type );
+	#endif
+
+	Journal_DPrintfL( self->debug, 3, "Adding particle %d to cell %d: cell's particle count now %d",
+		particle_I, dCell_I, (*newCountPtr)+1 );
+
+	#ifdef CAUTIOUS
+	Journal_Firewall( dCell_I < self->cellDomainCount, errorStream,
+		"Error - in %s(): cannot add particle %u to req. domain cell, since "
+		"dCell_I passed in of %u is greater than the count of domain cells %u.\n",
+		__func__, particle_I, dCell_I, self->cellDomainCount );
+	#endif
+
+	Swarm_ParticleAt( self, particle_I)->owningCell = dCell_I;
+
+	if ( *newCountPtr == *newSizePtr ) {
+		(*newSizePtr) += self->cellParticleTblDelta;
+		Journal_DPrintfL( self->debug, 3, " - (increasing entries alloced to %d)", (*newSizePtr) );
+		self->cellParticleTbl[dCell_I] = Memory_Realloc_Array( self->cellParticleTbl[dCell_I],
+			Particle_Index, (*newSizePtr) );
+	}	
+	self->cellParticleTbl[dCell_I][*newCountPtr] = particle_I;
+	(*newCountPtr)++;
+	Journal_DPrintfL( self->debug, 3, "\n" );
+}
+
+void Swarm_AddShadowParticleToShadowCell( void* swarm, Cell_DomainIndex dCell_I, Particle_Index shadowParticle_I ) {
+	Swarm* 			self = (Swarm*)swarm;
+	
+	if( self->shadowTablesBuilt ){
+		Particle_InCellIndex*	newCountPtr = &self->shadowCellParticleCountTbl[dCell_I-self->cellLocalCount];
+		#ifdef CAUTIOUS
+		Stream*                 errorStream = Journal_Register( Error_Type, self->type );
+		#endif
+
+		Journal_DPrintfL( self->debug, 3, "Adding shadow particle %d to shadow cell %d: shadow cell's particle count now %d",
+			shadowParticle_I, dCell_I, (*newCountPtr)+1 );
+
+		#ifdef CAUTIOUS
+		Journal_Firewall( dCell_I < self->cellDomainCount, errorStream,
+				"Error - in %s(): cannot add particle %u to req. shadow cell, since "
+			"dCell_I passed in of %u is greater than the count of domain cells %u.\n",
+			__func__, shadowParticle_I, dCell_I, self->cellDomainCount );
+		#endif
+
+		Swarm_ShadowParticleAt( self, shadowParticle_I)->owningCell = dCell_I;
+
+		self->shadowCellParticleTbl[dCell_I][*newCountPtr] = shadowParticle_I;
+		(*newCountPtr)++;
+		Journal_DPrintfL( self->debug, 3, "\n" );
+	}
+}
+
+Particle_InCellIndex Swarm_GetParticleIndexWithinCell( void* swarm, Cell_DomainIndex owningCell, Particle_Index particle_I) {
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_InCellIndex	cParticle_I;
+	Particle_InCellIndex	particleCount = self->cellParticleCountTbl[owningCell];
+
+	/* find the PIC index in the cell */
+	for ( cParticle_I=0; cParticle_I < particleCount; cParticle_I++ ) {
+		if ( particle_I == self->cellParticleTbl[owningCell][cParticle_I] ) break;
+	}	
+	#if DEBUG
+		Journal_Firewall( cParticle_I < self->cellParticleCountTbl[owningCell], Swarm_Error,
+			"Error- In func %s: Particle %u not found among cell %u's %u particles.\n",
+			__func__, particle_I, owningCell, particleCount );
+	#endif
+
+	return cParticle_I;
+}
+
+Particle_Index Swarm_FindClosestParticle( void* _swarm, Dimension_Index dim, double* coord, double *distance) {
+	Swarm*               swarm       = (Swarm*) _swarm;
+	Particle_InCellIndex cParticle_I;
+	Cell_LocalIndex      lCell_I;
+	GlobalParticle       testParticle;
+	double               minDistance;
+	double               distanceToParticle;
+	NeighbourIndex       neighbourCount;
+	NeighbourIndex       neighbour_I;
+	NeighbourIndex*      neighbourList;
+	Particle_Index       closestParticle_I;
+
+	/* Find cell this coordinate is in */
+	memcpy( testParticle.coord, coord, sizeof(Coord) );
+	/* First specify the particle doesn't have an owning cell yet, so as
+	not to confuse the search algorithm */
+	testParticle.owningCell = swarm->cellDomainCount;
+	lCell_I = CellLayout_CellOf( swarm->cellLayout, &testParticle );
+
+	/* Test if this cell is on this processor - if not then bail */
+	if (lCell_I >= swarm->cellLocalCount)
+		return (Particle_Index) -1;
+
+	/* Find Closest Particle in this Cell */
+	cParticle_I = Swarm_FindClosestParticleInCell( swarm, lCell_I, dim, coord, &minDistance );
+
+	/* Convert to Local Particle Index */
+	closestParticle_I = swarm->cellParticleTbl[ lCell_I ][ cParticle_I ];
+
+	/* Find neighbours to this cell - TODO This Assumes ElementCellLayout */
+	/*Mesh_GetIncidence( ((ElementCellLayout*)swarm->cellLayout)->mesh, dim, lCell_I, dim, 
+			   &neighbourCount, &neighbourList );*/
+	Mesh_GetIncidence( ((ElementCellLayout*)swarm->cellLayout)->mesh, dim, lCell_I, MT_VERTEX, /* dave - 05.09.07 */
+			   ((ElementCellLayout*)swarm)->incArray );
+	neighbourCount = IArray_GetSize( ((ElementCellLayout*)swarm)->incArray );
+	neighbourList = IArray_GetPtr( ((ElementCellLayout*)swarm)->incArray );
+
+	/* Loop over neighbours */
+	for ( neighbour_I = 0 ; neighbour_I < neighbourCount ; neighbour_I++ ) {
+		lCell_I = neighbourList[ neighbour_I ];
+
+		/* TODO - Be more clever than checking every particle in this cell */
+		if( lCell_I < swarm->cellDomainCount ) { /* dave - 05.09.07 */
+			cParticle_I = Swarm_FindClosestParticleInCell( swarm, lCell_I, dim, coord, &distanceToParticle );
+
+			/* Check to see if closest particle in this cell is closest to this coord */
+			if (minDistance > distanceToParticle) {
+				minDistance = distanceToParticle;
+				closestParticle_I = swarm->cellParticleTbl[ lCell_I ][ cParticle_I ];
+			}
+		}
+	}
+
+	/* Return Distance to this particle */
+	if (distance != NULL)
+		*distance = minDistance;
+	return closestParticle_I;
+}
+
+
+Particle_InCellIndex Swarm_FindClosestParticleInCell( void* swarm, Cell_DomainIndex dCell_I, Dimension_Index dim, double* coord, double* distance ) {
+	Swarm*               self                = (Swarm*) swarm;
+	Particle_InCellIndex cParticle_I         = 0;
+	Particle_InCellIndex particle_I          = 0;
+	GlobalParticle*      particle            = NULL;
+	double               minDistance         = HUGE_VAL;
+	double               distanceToParticle;
+
+	/* TODO: need to reconsideer - gauss particle layout should be allowed, but not swarms that have no local
+	 * co-ordinates */
+	/*
+	Journal_Firewall(
+		self->particleLayout->coordSystem == GlobalCoordSystem,
+		Journal_MyStream( Error_Type, self ),
+		"Error in %s(), swarm %s:%s is not using a global coord system\n",
+		__func__,
+		self->type,
+		self->name );
+	*/	
+	
+	Journal_Firewall( dCell_I < self->cellDomainCount, Swarm_Error, "Bad Cell_DomainIndex %u.\n", dCell_I );
+
+	/* Loop over particles find closest to vertex */
+	for( cParticle_I = 0 ; cParticle_I < self->cellParticleCountTbl[dCell_I] ; cParticle_I++ ) {
+		particle = (GlobalParticle*)Swarm_ParticleInCellAt( self, dCell_I, cParticle_I );
+
+		/* Calculate distance to particle */
+		distanceToParticle = 
+			(particle->coord[ I_AXIS ] - coord[ I_AXIS ]) * 
+			(particle->coord[ I_AXIS ] - coord[ I_AXIS ]) +
+			(particle->coord[ J_AXIS ] - coord[ J_AXIS ]) * 
+			(particle->coord[ J_AXIS ] - coord[ J_AXIS ]) ;
+
+		if (dim == 3) {
+			distanceToParticle += 
+				(particle->coord[ K_AXIS ] - coord[ K_AXIS ]) * 
+				(particle->coord[ K_AXIS ] - coord[ K_AXIS ]) ;
+		}
+		/* Don't do square root here because it is unnessesary: i.e. a < b <=> sqrt(a) < sqrt(b) */
+			
+		/* Check if this is the closest particle */
+		if (minDistance > distanceToParticle) {
+			particle_I = cParticle_I;
+			minDistance = distanceToParticle;
+		}
+	}
+
+	/* Return Distance to this particle */
+	if (distance != NULL)
+		/* Do square root here in case someone wants to actually use this distance */
+		*distance = sqrt(minDistance);
+
+	return particle_I;
+}
+
+void Swarm_PrintParticleCoords( void* swarm, Stream* stream ) {
+	Swarm* 			self = (Swarm*)swarm;
+	Particle_Index		lParticle_I=0;
+	GlobalParticle*   	currParticle = NULL;
+	double*			coord = NULL;
+	
+	Journal_Printf( stream, "Printing coords of all local processor particles:\n" );
+	
+	Stream_Indent( stream );
+	for ( lParticle_I = 0; lParticle_I < self->particleLocalCount; lParticle_I++ ) {
+		currParticle = (GlobalParticle*)Swarm_ParticleAt( self, lParticle_I );
+		coord = currParticle->coord;
+
+		Journal_Printf( stream, "local particle %6d: (%7.5g, %7.5g, %7.5g)\n",
+			lParticle_I, coord[0], coord[1], coord[2] );
+	}
+	Stream_UnIndent( stream );
+}
+
+
+void Swarm_PrintParticleCoords_ByCell( void* swarm, Stream* stream ) {
+	Swarm* 			self = (Swarm*)swarm;
+	Cell_Index		lCell_I=0;
+	Particle_InCellIndex	cParticle_I=0;
+	Particle_Index		lParticle_I=0;
+	GlobalParticle*         currParticle = NULL;
+	double*			coord = NULL;
+	
+	Journal_Printf( stream, "Printing coords of all local particles, cell-by-cell:\n" );
+	
+	Stream_Indent( stream );
+	for ( lCell_I = 0; lCell_I < self->cellLocalCount; lCell_I++ ) {
+		Journal_Printf( stream, "Local Cell %3d:\n", lCell_I );
+		
+		for ( cParticle_I = 0; cParticle_I < self->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			lParticle_I = self->cellParticleTbl[lCell_I][cParticle_I];
+			currParticle = (GlobalParticle*)Swarm_ParticleAt( self, lParticle_I );
+			coord = currParticle->coord;
+
+			Journal_Printf( stream, "\tpart. InCell %3d (local index %6d): (%7.5g, %7.5g, %7.5g)\n",
+				cParticle_I, lParticle_I, coord[0], coord[1], coord[2] );
+		}		
+	}
+	Stream_UnIndent( stream );
+}
+
+
+void Swarm_GetCellMinMaxCoords( void* swarm, Cell_DomainIndex cell_I, Coord min, Coord max ) {
+	Swarm*              self     =  (Swarm*) swarm;
+	Dimension_Index		dim_I;
+	Cell_PointIndex		cPoint_I;
+	double*             currCoord;
+
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		min[dim_I] = (*self->cellPointTbl[cell_I][0])[dim_I];
+		max[dim_I] = (*self->cellPointTbl[cell_I][0])[dim_I];
+	}
+
+	for ( cPoint_I = 1; cPoint_I < self->cellPointCountTbl[cell_I]; cPoint_I++ ) {
+		for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+			currCoord = (*self->cellPointTbl[cell_I][cPoint_I]);
+			if ( currCoord[dim_I] < min[dim_I] ) {
+				min[dim_I] = currCoord[dim_I];
+			}
+			else if ( currCoord[dim_I] > max[dim_I] ) {
+				max[dim_I] = currCoord[dim_I];
+			}
+		}
+	}
+}
+
+
+
+SwarmVariable* Swarm_NewScalarVariable( 
+		void*                           swarm,
+		Name                            nameExt,
+		SizeT                           dataOffset,
+		Variable_DataType               dataType )
+{
+	Swarm*                   self              = (Swarm*) swarm;
+	Name                     name;
+	Variable*                variable;
+	SizeT                    dataOffsets[]     = { 0 };		/* Init value later */
+	Variable_DataType        dataTypes[]       = { 0 };		/* Init value later */
+	Index                    dataTypeCounts[]  = { 1 };
+	SwarmVariable*           swarmVariable;
+	Variable_Register*       variable_Register      = NULL;
+	SwarmVariable_Register*  swarmVariable_Register = NULL;
+
+	Journal_Firewall(
+		dataOffset < ExtensionManager_GetFinalSize( self->particleExtensionMgr ),
+		Journal_MyStream( Error_Type, self ),
+		"Error in func %s - Attempting to create a SwarmVariable on an extension that does not exists.\n"
+		"\t%s %s\n"
+		"\tdataOffset = %d, particle size = %d\n",
+		__func__,
+		self->type,
+		self->name,
+		dataOffset,
+		ExtensionManager_GetFinalSize( self->particleExtensionMgr ) );
+		
+	dataOffsets[0] = dataOffset;
+	dataTypes[0]   = dataType;
+	
+	/* Get Pointers To Registers */
+	swarmVariable_Register = self->swarmVariable_Register;
+	if ( swarmVariable_Register ) 
+		variable_Register = swarmVariable_Register->variable_Register;
+	
+	name = Stg_Object_AppendSuffix( self, nameExt );
+	variable = Variable_New( 
+		name,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		0, /* no component names */
+		&self->particleExtensionMgr->finalSize,
+		&self->particleLocalCount,
+		NULL,
+		(void**)&self->particles,
+		variable_Register );
+
+	swarmVariable = SwarmVariable_New( name, self, variable, 1 );
+	
+	Memory_Free( name );
+
+	return swarmVariable;
+}
+
+SwarmVariable* Swarm_NewVectorVariable( 
+		void*                           _swarm,
+		Name                            nameExt,
+		SizeT                           dataOffset,
+		Variable_DataType               dataType,
+		Index                           dataTypeCount,
+		...                         /* vector component names */ )
+{
+	Swarm*                   self             = (Swarm*) _swarm;
+	Variable*                variable;
+	SizeT                    dataOffsets[]    = { 0 };	/* Init later... */
+	Variable_DataType	     dataTypes[]      = { 0 };	/* Init later... */	
+	Index                    dataTypeCounts[] = { 0 };	/* Init later... */	
+	Name*                    dataNames;
+	Index                    vector_I;
+	Name                     name;
+	SwarmVariable*           swarmVariable;
+	Variable_Register*       variable_Register      = NULL;
+	SwarmVariable_Register*  swarmVariable_Register = NULL;
+	va_list                  ap;
+
+	/* Initialise arrays */
+	dataOffsets[0]    = dataOffset;
+	dataTypes[0]      = dataType;
+	dataTypeCounts[0] = dataTypeCount;
+	
+	/* Create name for normal variable */
+	Stg_asprintf( &name, "%s-%s", self->name, nameExt );
+
+	/* Get names of extra variables */
+	dataNames = Memory_Alloc_Array( Name, dataTypeCount, "dataNames" );
+	va_start( ap, dataTypeCount );
+	for( vector_I = 0; vector_I < dataTypeCount; vector_I++ ) {
+		dataNames[vector_I] = Stg_Object_AppendSuffix( self, (Name) va_arg( ap, Name ) );
+	}
+	va_end( ap );
+	
+	/* Get Pointers To Registers */
+	swarmVariable_Register = self->swarmVariable_Register;
+	if ( swarmVariable_Register ) 
+		variable_Register = swarmVariable_Register->variable_Register;
+	
+	/* Construct */
+	variable = Variable_New( 
+		name,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames,
+		&self->particleExtensionMgr->finalSize,
+		&self->particleLocalCount,
+		NULL,
+		(void**)&self->particles,
+		variable_Register );
+
+	/* Need to free these guys individually */
+	for( vector_I = 0; vector_I < dataTypeCount; vector_I++ ) {
+		if ( swarmVariable_Register && variable_Register ) {
+			SwarmVariable_New( 
+					dataNames[ vector_I ],
+					self, 
+					Variable_Register_GetByName( variable_Register, dataNames[ vector_I ] ),
+					1 );
+		}
+		Memory_Free( dataNames[ vector_I ] );
+	}
+	swarmVariable = SwarmVariable_New( name, self, variable, dataTypeCount );
+
+	Memory_Free( dataNames );
+	Memory_Free( name );
+	
+	return swarmVariable;
+}
+
+
+void Swarm_Realloc( void* swarm ) {
+	Swarm*         self               = (Swarm*) swarm;
+	Particle_Index particleLocalCount = self->particleLocalCount;
+	Particle_Index delta              = self->particlesArrayDelta;
+	int v_i;
+
+	if ( particleLocalCount <= self->particlesArraySize - delta ) {
+		/* Decrease size of array if necessary */
+		self->particlesArraySize = particleLocalCount;
+	}
+	else if ( particleLocalCount >= self->particlesArraySize ) {
+		/* Increase size of array if necessary */
+		self->particlesArraySize = particleLocalCount + delta;
+	}
+	else {
+		/* If no change in the size of the array happened then get out of this function */
+		return;
+	}
+
+	/* Do realloc */
+	self->particles = Memory_Realloc_Array_Bytes(
+			self->particles,
+			self->particleExtensionMgr->finalSize,
+			self->particlesArraySize );
+
+	/*
+	** FUCK: NEED TO UPDATE THINGS IF ARRAYS ARE REALLOC'D
+	*/
+	for( v_i = 0; v_i < self->nSwarmVars; v_i++ ) {
+		if( self->swarmVars[v_i]->variable )
+			Variable_Update( self->swarmVars[v_i]->variable );
+	}
+
+
+#ifdef DEBUG
+	/* Set extra memory at end of array to zero */
+	if ( self->particlesArraySize > particleLocalCount ) {
+		Particle_Index newParticleCount = self->particlesArraySize - particleLocalCount;
+		void*          startNewParticlePtr = Swarm_ParticleAt( self, particleLocalCount );
+		memset( startNewParticlePtr, 0, self->particleExtensionMgr->finalSize * newParticleCount );
+	}
+#endif	
+}
+
+
+void Swarm_CheckCoordsAreFinite( void* swarm ) {
+	Swarm*              self               = (Swarm*) swarm;
+	GlobalParticle*     particle;
+	double*             coord;
+	Stream*             errorStream        = Journal_Register( Error_Type, self->type );
+	Dimension_Index     dim                = self->dim;
+	Particle_Index      particleLocalCount = self->particleLocalCount;
+	Particle_Index      lParticle_I;
+
+	for ( lParticle_I = 0 ; lParticle_I < particleLocalCount ; lParticle_I++ ) {
+		particle = (GlobalParticle*)Swarm_ParticleAt( self, lParticle_I );
+		coord    = particle->coord;
+		
+		Journal_Firewall( 
+				! isinf( coord[0] ) && ! isinf( coord[1] ) && ( dim == 2 || ! isinf(coord[2]) ), 
+				errorStream,
+				"Error in func %s - Coord for particle with %u is not finite (%g, %g, %g).\n", 
+				__func__, lParticle_I, coord[0], coord[1], (dim == 3 ? coord[2] : 0.0) );
+	}
+}
+
+
+void Swarm_AssignIndexWithinShape( void* swarm, void* _shape, Variable* variableToAssign, Index indexToAssign ) {
+	Swarm*            self              = Stg_CheckType( swarm, Swarm );
+	Stg_Shape*        shape             = Stg_CheckType( _shape, Stg_Shape );
+	GlobalParticle*   particle;
+	Particle_Index    lParticle_I;
+
+	Journal_Firewall( 
+		self->particleLocalCount == variableToAssign->arraySize,
+		Journal_Register( Error_Type, self->type ),
+		"In func %s: Trying to assign to variable '%s' with a different number of values \
+		than the number of particles in swarm '%s'.\n",
+		__func__, variableToAssign->name, self->name );
+		
+
+
+	for ( lParticle_I = 0 ; lParticle_I < self->particleLocalCount ; lParticle_I++ ) {
+		particle = (GlobalParticle*)Swarm_ParticleAt( self, lParticle_I );
+
+		if ( Stg_Shape_IsCoordInside( shape, particle->coord ) ) 
+			Variable_SetValueInt( variableToAssign, lParticle_I, indexToAssign );
+	}
+}
+
+StandardParticle* Swarm_CreateNewParticle( void* swarm, Particle_Index* newParticle_I ) {
+	Swarm*              self               = (Swarm*) swarm;
+
+	*newParticle_I = self->particleLocalCount;
+	self->particleLocalCount++;
+	Swarm_Realloc( self );
+	
+	return Swarm_ParticleAt( self, *newParticle_I );
+}
+
+
+void Swarm_ReplaceCurrentParticleLayoutWithFileParticleLayout( void* swarm, void* _context ) {
+	Swarm*               self = (Swarm*)swarm;
+	AbstractContext*     context = (AbstractContext*)_context;
+	char                 name[1024];
+	char                 swarmSaveFileName[4096];
+
+	sprintf( name, "%s-fileParticleLayout", self->name );
+	Swarm_GetCheckpointFilenameForGivenTimestep( self, context, swarmSaveFileName );
+	
+	Journal_DPrintf( self->debug, "overriding the particleLayout specified via XML/constructor\n"
+		"of \"%s\" (of type %s) with a FileParticleLayout to load\n"
+		"this swarm's checkpoint file from outputPath \"%s\",\n"
+		"with prefix \"%s\" from timestep %u with total name:\n\"%s\"\n",
+		self->particleLayout->name, self->particleLayout->type,
+		context->outputPath,
+		context->checkPointPrefixString, context->restartTimestep,
+		swarmSaveFileName );
+
+	/* TODO: deleting this makes sense if this swarm "owns" the particle layout. Is it
+	* possible for 2 swarms to have the same particle layout? I guess so - may need
+	* to rethink later. Deleting is ok though for now since the "reference counter"
+	* was incremented when we got it out of the LC register.
+	* PatrickSunter - 13 June 2006
+	*/
+	Stg_Class_Delete( self->particleLayout );
+
+	self->particleLayout = (ParticleLayout*)FileParticleLayout_New( name, swarmSaveFileName ); 
+}
+
+
+void Swarm_GetCheckpointFilenameForGivenTimestep( Swarm* self, AbstractContext* context, char* swarmSaveFileName ) {
+	if ( strlen(context->checkPointPrefixString) > 0 ) {
+		sprintf( swarmSaveFileName, "%s/%s.%s.%05d.dat", context->outputPath,
+			context->checkPointPrefixString, self->name, context->restartTimestep );
+	}
+	else {
+		sprintf( swarmSaveFileName, "%s/%s.%05d.dat", context->outputPath,
+			self->name, context->restartTimestep );
+	}
+}
+
+Bool Swarm_AddCommHandler( Swarm *self, void *commHandler )
+{
+	assert( commHandler );
+
+	if( IsChild( ((Stg_Component*)commHandler)->type, ParticleCommHandler_Type ) ){
+		Stg_ObjectList_Append( self->commHandlerList, commHandler );
+		return True;
+	}
+	else{
+		Journal_Firewall( 0, self->debug, "Trying to add a class which is not of the type ParticleCommHandler..!\n " );
+		return False;
+	}
+}
+
+void Swarm_AddVariable( Swarm* self, SwarmVariable* swarmVar ) {
+	assert( self );
+	assert( swarmVar );
+
+	self->swarmVars = MemRearray( self->swarmVars, SwarmVariable*, self->nSwarmVars + 1, 
+				      SwarmClass_Type );
+	self->swarmVars[self->nSwarmVars] = swarmVar;
+	self->nSwarmVars++;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmClass.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmClass.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,339 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	This module represents the state of a particle swarm on a serial or parallel implementation.
+**	Its behaviour is dedicated to ensuring the integrity of the swarm.. it does not effect the state of what the swarm contains.
+**	An swarm is an organised collection of particles... equivalent to a mesh being a collection of organised nodes.
+**
+** Assumptions:	stream = Journal_Register (Info_Type, "myStream");	
+**	The cell layout does not change... i.e. number of cells does not change.
+**	All cells are considered local.
+**
+** Comments:
+**	All particles are considered local (those that move into shadow cells will be moved
+**	to appropriate processor immediately.)
+**	Communication is more efficient when shadow depth is equal to at least 1
+**
+** $Id: SwarmClass.h 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmClass_h__
+#define __Domain_Swarm_SwarmClass_h__
+	
+
+	/* Textual name of this class */
+	extern const Type Swarm_Type;
+
+	/* Swarm information */
+	#define __Swarm \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		\
+		/* General info */ \
+		CellLayout*                     cellLayout; \
+		ParticleLayout*                 particleLayout; \
+		Dimension_Index                 dim;             \
+		ExtensionManager_Register*      extension_Register; \
+		Stream*                         debug; \
+		unsigned	                 myRank; \
+		unsigned        	         nProc; \
+		MPI_Comm                        comm; \
+		/** Used to tell the Swarm_UpdateParticleOwners function whether or not
+		 * parallel comms is necessary. */ \
+		Bool                            stillDoingInitialisation; \
+		/** Used to tell the checkpointing and reloading functions whether this
+		 * swarm type should actually be checkpointed. */ \
+		Bool                            isSwarmTypeToCheckPointAndReload; \
+		\
+		/* Cell related */ \
+		/** The number of local 'cells': equiv to elements for the swarm */ \
+		Cell_Index                      cellLocalCount; \
+		/** The number of domain cells */ \
+		Cell_Index                      cellDomainCount; \
+		/** The number of shadow cells */ \
+		Cell_Index                      cellShadowCount; \
+		/** Cell points are the geometry of each cell: indexed by cell */ \
+		Cell_PointsList                 cellPointTbl; \
+		/** Count of how many cell points per cell */ \
+		Cell_PointIndexList             cellPointCountTbl; \
+		\
+		/* Particle related */ \
+		/** The indices of each particle... */ \
+		Cell_ParticlesList              cellParticleTbl; \
+		/** The count of how many particles are in each cell */ \
+		Cell_ParticlesIndexList         cellParticleCountTbl; \
+		/** The size of how many particle index entries are alloced in each cell */ \
+		Cell_ParticlesIndexList         cellParticleSizeTbl; \
+		/** Number of particle index entries to change by when memory added/removed */ \
+		Particle_InCellIndex            cellParticleTblDelta; \
+		/** The actual array of particles... */ \
+		Particle_List                   particles; \
+		SizeT                           particleSize;          /**< Size of each particle in bytes */ \
+		Particle_Index                  particleLocalCount; \
+		Particle_Index                  particlesArraySize; \
+		Particle_Index                  particlesArrayDelta; \
+		double                          extraParticlesFactor; \
+		/*shaodw info*/								\
+		/** The indices of each shadow particle... */ \
+		Bool                            shadowTablesBuilt; \
+		Cell_ParticlesList              shadowCellParticleTbl; \
+		/** The count of how many shadow particles are in each cell */ \
+		Cell_ParticlesIndexList         shadowCellParticleCountTbl; \
+		/** The actual shadow particles */ \
+		Particle_List                   shadowParticles; \
+		Particle_Index                  shadowParticleCount; \
+		/** Variable Stuff */ \
+		SwarmVariable_Register*         swarmVariable_Register; \
+		SwarmVariable*                  owningCellVariable; \
+		/** Extension manager for particles */ \
+		ExtensionManager*               particleExtensionMgr; \
+		/** Particle Communication handler */ \
+		\
+		Stg_ObjectList                  *commHandlerList; \
+		int				nSwarmVars; \
+		SwarmVariable			**swarmVars; \
+		\
+		VariableCondition*		ics; \
+		Index                           swarmReg_I; /**< Own index inside the Swarm_Register */ \
+						\
+		IArray*				incArray;
+
+	struct Swarm { __Swarm };
+	
+	
+	/* Create a new Swarm and initialise */
+	Swarm* Swarm_DefaultNew( Name name );
+
+	Swarm* Swarm_New( 
+		Name                                  name,
+		void*                                 cellLayout,
+		void*                                 particleLayout,
+		Dimension_Index                       dim,
+		SizeT                                 particleSize,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm,
+	        /* modified the constructor function to take in initial conditions */	
+	        void*				      ics ) ;
+	
+	/* Creation implementation / Virtual constructor */
+	Swarm* _Swarm_New(
+		SizeT                                 _sizeOfSelf,
+		Type                                  type,
+		Stg_Class_DeleteFunction*             _delete,
+		Stg_Class_PrintFunction*              _print,
+		Stg_Class_CopyFunction*               _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*      _construct,
+		Stg_Component_BuildFunction*          _build,
+		Stg_Component_InitialiseFunction*     _initialise,
+		Stg_Component_ExecuteFunction*        _execute,
+		Stg_Component_DestroyFunction*        _destroy,
+		Name                                  name,
+		Bool                                  initFlag,
+		CellLayout*                           cellLayout,
+		ParticleLayout*                       particleLayout,
+		Dimension_Index                       dim,
+		SizeT                                 particleSize,
+		Particle_InCellIndex                  cellParticleTblDelta, 
+		double                                extraParticlesFactor,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm, 
+	        /* modified the constructor function to take in initial conditions */	
+		void*				      ics );
+
+	void _Swarm_Init( 
+		Swarm*                                self, 
+		void*                                 cellLayout,
+		void*                                 particleLayout,
+		Dimension_Index                       dim,
+		Particle_InCellIndex                  cellParticleTblDelta, 
+		double                                extraParticlesFactor,
+		ExtensionManager_Register*            extensionMgr_Register,
+		Variable_Register*                    variable_Register,
+		MPI_Comm                              comm,
+	        /* modified the init function to take in initial conditions */	
+		void*				      ics );
+	
+	/* For use when Particle is not yet a complete type */
+	#define Swarm_ParticleInElementAt( self, dElement_I, cParticle_I ) \
+		Swarm_ParticleInCellAt( self, CellLayout_MapElementIdToCellId( ((Swarm*)(swarm))->cellLayout, (dElement_I) ) , (cParticle_I) )
+	#define Swarm_ParticleInCellAt( self, cell_I, cParticle_I ) \
+		Swarm_ParticleAt( self, (self)->cellParticleTbl[(cell_I)][(cParticle_I)] )
+		
+	void* _Swarm_ParticleInCellAt( void* swarm, Cell_Index cell_I, Particle_InCellIndex cParticle_I );
+	
+	#define Swarm_ParticleAt( self, dParticle_I ) \
+		( ParticleAt( (self)->particles, (dParticle_I), (self)->particleExtensionMgr->finalSize ) )
+	
+	#define Swarm_ShadowParticleAt( self, dParticle_I ) \
+		( ParticleAt( (self)->shadowParticles, (dParticle_I), (self)->particleExtensionMgr->finalSize ) )
+
+	#define ParticleAt( array, particle_I, particleSize ) \
+		((StandardParticle*)((ArithPointer)(array) + (particle_I) * (particleSize)))
+
+	#define CopyParticle( destArray, destIndex, srcArray, srcIndex, pSize ) \
+		(memcpy( ParticleAt( (destArray), (destIndex), (pSize) ), ParticleAt( (srcArray), (srcIndex), (pSize) ), (pSize) ))
+
+	#define Swarm_CopyParticleWithinSwarm( self, destIndex, srcIndex ) \
+		( CopyParticle( (self)->particles, (destIndex), (self)->particles, (srcIndex), (self)->particleExtensionMgr->finalSize ) )
+
+	#define Swarm_CopyParticleOntoSwarm( self, destIndex, srcArray, srcIndex ) \
+		( CopyParticle( (self)->particles, destIndex, srcArray, srcIndex, (self)->particleExtensionMgr->finalSize ) )
+
+	#define Swarm_CopyParticleOffSwarm( self, destArray, destIndex, srcIndex ) \
+		( CopyParticle( (destArray), (destIndex), (self)->particles, (srcIndex), (self)->particleExtensionMgr->finalSize ) )
+
+	void* _Swarm_ParticleAt( void* swarm, Particle_Index dParticle_I );
+	
+	/* --- Virtual Functions --- */
+	
+	/* Deletion implementation */
+	void _Swarm_Delete( void* swarm );
+	
+	/* Print implementation */
+	void _Swarm_Print( void* swarm, Stream* stream );
+	
+	/* Copy */
+	#define Swarm_Copy( self ) \
+		(Swarm*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Swarm_DeepCopy( self ) \
+		(Swarm*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Swarm_Copy( void* swarm, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _Swarm_DefaultNew( Name name );
+	void _Swarm_Construct( void* swarm, Stg_ComponentFactory* cf, void* data );
+	void _Swarm_Build( void* swarm, void* data );
+	#define _Swarm_Initialize _Swarm_Initialise
+	void _Swarm_Initialise( void* swarm, void* data );
+	void _Swarm_Execute( void* swarm, void* data );
+	void _Swarm_Destroy( void* swarm, void* data );
+	
+	/* --- Public functions --- */
+	
+	/** Update the owning cell of all particles: should be called just after the user sets the new position of each
+	cell. As part of this function, the ParticleCommHandler is used to move the particles between 
+	processors where necessary. */
+	void Swarm_UpdateAllParticleOwners( void* swarm );
+	
+	/** Update the owning cell of a particle: usually called as part of the Swarm_UpdateAllParticleOwners() function.  */
+	void Swarm_UpdateParticleOwner( void* swarm, Particle_Index particle_I );
+
+	/** Removes a particle from a cell: the cell will have no record of owning that particle. */
+	void Swarm_RemoveParticleFromCell( void* swarm, Cell_DomainIndex dCell_I, Particle_InCellIndex cParticle_I );
+
+	/** Removes a particle from both its cell, and the particles array. Current implementation will switch the last
+ 	 *  particle to the empty hole created by the one being removed, but a linked list algorithm would
+ 	 *  be different. */
+	void Swarm_DeleteParticle( void* swarm, Particle_Index lParticle_I );
+
+	/** Removes a particle from both its cell, and the particles array - replacing it with a new particle.
+	 *  This function should be used, as compared to Swarm_DeleteParticle(), when you have a new/incoming
+	 *  particle needing to be inserted at the same time. Using this function will save overhead by
+	 *  combining the two operations. */
+	void Swarm_DeleteParticleAndReplaceWithNew( void* swarm, Particle_Index particleToDelete_lI,
+		void* replacementParticle, Cell_Index replacementParticle_cellIndex );
+
+	/** Adds a particle to a cell: the cell will now have that particle's index stored in its table of owned cells. */
+	void Swarm_AddParticleToCell( void* swarm, Cell_DomainIndex dCell_I, Particle_Index particle_I );
+	void Swarm_AddShadowParticleToShadowCell( void* swarm, Cell_DomainIndex dCell_I, Particle_Index shadowParticle_I );
+
+	/** Utility function to get a particle's PIC index within a cell from its index in the array of all local particles */
+	Particle_InCellIndex Swarm_GetParticleIndexWithinCell( void* swarm, Cell_DomainIndex owningCell, Particle_Index particle_I);
+
+	/** Utility functions to find closest particles to a particular coordinate 'coord' */
+	Particle_Index       Swarm_FindClosestParticle( void* _swarm, Dimension_Index dim, double* coord, double* distance) ;
+	Particle_InCellIndex Swarm_FindClosestParticleInCell( void* _swarm, Cell_DomainIndex dCell_I, Dimension_Index dim, double* coord, double* distance ) ;
+
+	/** Prints coordinates of all local particles */
+	void Swarm_PrintParticleCoords( void* swarm, Stream* stream );
+
+	/** Prints coordinates of all local particles - indexed by cell */
+	void Swarm_PrintParticleCoords_ByCell( void* swarm, Stream* stream );
+
+	/** Gets the min and max coordinates of the cell */
+	void Swarm_GetCellMinMaxCoords( void* swarm, Cell_DomainIndex cell_I, Coord min, Coord max ) ;
+
+	SwarmVariable* Swarm_NewScalarVariable( 
+		void*                           swarm,
+		Name                            nameExt,
+		SizeT                           dataOffset,
+		Variable_DataType               dataType );
+	
+	SwarmVariable* Swarm_NewVectorVariable( 
+		void*                           _swarm,
+		Name                            nameExt,
+		SizeT                           dataOffset,
+		Variable_DataType               dataType,
+		Index                           dataTypeCount,
+		...                         /* vector component names */ );
+
+	void Swarm_Realloc( void* swarm ) ;
+
+	void Swarm_CheckCoordsAreFinite( void* swarm ) ;
+
+	void Swarm_AssignIndexWithinShape( void* swarm, void* _shape, Variable* variableToAssign, Index indexToAssign ) ;
+
+	/* --- Private Functions --- */
+	
+	/* Build cells */
+	void _Swarm_BuildCells( void* swarm, void* data );
+	
+	/* Build particles */
+	void _Swarm_BuildParticles( void* swarm, void* data );
+
+	void _Swarm_BuildShadowParticles( void* swarm );
+	
+	/* Initialise cells */
+	void _Swarm_InitialiseCells( void* swarm, void* data );
+	
+	/* Initialise particles */
+	void _Swarm_InitialiseParticles( void* swarm, void* data );
+
+	/** This function creates a new particle at the end of the swarm */
+	StandardParticle* Swarm_CreateNewParticle( void* swarm, Particle_Index* newParticle_I ) ;
+
+	/** For loading from checkpoints : replaces current particle layout with a file particle layout */
+	void Swarm_ReplaceCurrentParticleLayoutWithFileParticleLayout( void* swarm, void* _context );
+
+	/** simple function that determines logic for creating a swarm checkpoint filename */
+	void Swarm_GetCheckpointFilenameForGivenTimestep( Swarm* self, AbstractContext* context, char* swarmSaveFileName );
+
+	/** Function that adds a Communication Handler to a swarm. Expected to be run through C, since in
+	 * constructing via XML you should have just passed in a list at the Construct phase. */
+	Bool Swarm_AddCommHandler( Swarm *self, void *commHandler );
+
+	void Swarm_AddVariable( Swarm* self, SwarmVariable* swarmVar );
+
+#endif /* __Domain_Swarm_SwarmClass_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmClass.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmClass.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Swarm</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">ParticleType</param>
+		<param name="Type">String</param>
+		<param name="Default">IntegrationPoint</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">cellParticleTblDelta</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">DEFAULT_CELL_PARTICLE_TBL_DELTA</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">extraParticlesFactor</param>
+		<param name="Type">Double</param>
+		<param name="Default">DEFAULT_EXTRA_PARTICLES_FACTOR</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">CellLayout</param>
+		<param name="Type">CellLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 551 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">ParticleLayout</param>
+		<param name="Type">ParticleLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 552 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmDump.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmDump.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,299 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmDump.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "SwarmDump.h"
+#include "SwarmVariable.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type SwarmDump_Type = "SwarmDump";
+
+
+SwarmDump* SwarmDump_New(		
+		Name                                               name,
+		void*                                              context,
+		Swarm**                                            swarmList,
+		Index                                              swarmCount,
+		Bool                                               newFileEachTime )
+{
+	SwarmDump* self = _SwarmDump_DefaultNew( name );
+
+	_SwarmDump_Init( self, context, swarmList, swarmCount, newFileEachTime );
+	return self;
+}
+
+SwarmDump* _SwarmDump_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                       _delete,
+		Stg_Class_PrintFunction*	                       _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction*                   _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		Name                                               name ) 
+{
+	SwarmDump*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(SwarmDump) );
+	self = (SwarmDump*)_Stg_Component_New( 
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			name, 
+			NON_GLOBAL );
+	
+	/* Virtual functions */
+
+	return self;
+}
+
+void _SwarmDump_Init( 
+		SwarmDump*                                         self,
+		void*                                              context,
+		Swarm**                                            swarmList,
+		Index                                              swarmCount,
+		Bool                                               newFileEachTime )
+{
+	self->isConstructed = True;
+
+	self->swarmList = Memory_Alloc_Array( Swarm*, swarmCount, "swarmList" );
+	memcpy( self->swarmList, swarmList, swarmCount * sizeof(Swarm*) );
+	self->swarmCount = swarmCount;
+
+	self->newFileEachTime = newFileEachTime;
+		
+	/* Only append hook to context's save EP if context is given */
+	if ( context ) {
+		EP_AppendClassHook( Context_GetEntryPoint( context, AbstractContext_EP_SaveClass ), SwarmDump_Execute, self );
+	}
+}
+
+
+void _SwarmDump_Delete( void* swarmDump ) {
+	SwarmDump* self = (SwarmDump*) swarmDump;
+	
+	Memory_Free( self->swarmList );
+	_Stg_Component_Delete( self );
+}
+
+void _SwarmDump_Print( void* _swarmDump, Stream* stream ) {
+	SwarmDump* self = (SwarmDump*) _swarmDump;
+	Index      swarm_I;
+
+	Journal_Printf( stream, "SwarmDump - '%s'\n", self->name );
+	Stream_Indent( stream );
+	_Stg_Component_Print( self, stream );
+
+	for ( swarm_I = 0 ; swarm_I < self->swarmCount ; swarm_I++ ) {
+		Journal_Printf( stream, "Swarm - '%s'\n", self->swarmList[ swarm_I ]->name );
+	}
+
+	Stream_UnIndent( stream );
+}
+
+void* _SwarmDump_Copy( void* swarmDump, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SwarmDump*	self = (SwarmDump*)swarmDump;
+	SwarmDump*	newSwarmDump;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSwarmDump = _Stg_Component_Copy( self, dest, deep, nameExt, map );
+	memcpy( newSwarmDump->swarmList, self->swarmList, self->swarmCount * sizeof(Swarm*) );
+	newSwarmDump->swarmCount = self->swarmCount;
+
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+				
+	return (void*)newSwarmDump;
+}
+
+
+void* _SwarmDump_DefaultNew( Name name ) {
+		return (void*) _SwarmDump_New( 
+			sizeof(SwarmDump), 
+			SwarmDump_Type, 
+			_SwarmDump_Delete, 
+			_SwarmDump_Print,
+			_SwarmDump_Copy, 
+			_SwarmDump_DefaultNew,
+			_SwarmDump_Construct,
+			_SwarmDump_Build, 
+			_SwarmDump_Initialise, 
+			_SwarmDump_Execute, 
+			_SwarmDump_Destroy, 
+			name );
+}
+void _SwarmDump_Construct( void* swarmDump, Stg_ComponentFactory* cf, void* data ) {
+	SwarmDump*	            self         = (SwarmDump*)swarmDump;
+	Swarm**                 swarmList;
+	AbstractContext*        context;
+	Bool                    newFileEachTime;
+	Index                   swarmCount;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", AbstractContext, True, data ) ;
+	swarmList = Stg_ComponentFactory_ConstructByList( 
+		cf, 
+		self->name, 
+		"Swarm", 
+		Stg_ComponentFactory_Unlimited, 
+		Swarm, 
+		True, 
+		&swarmCount,
+		data ) ;
+	newFileEachTime = Stg_ComponentFactory_GetBool( cf, self->name, "newFileEachTime", True );
+
+	_SwarmDump_Init( 
+			self,
+			context,
+			swarmList,
+			swarmCount,
+			newFileEachTime );
+
+	Memory_Free( swarmList );
+}
+
+void _SwarmDump_Build( void* swarmDump, void* data ) {
+	SwarmDump*	 self                = (SwarmDump*)     swarmDump;
+	Index        swarm_I;
+
+	for ( swarm_I = 0 ; swarm_I < self->swarmCount ; swarm_I++ ) {
+		Stg_Component_Build( self->swarmList[ swarm_I ], data, False );
+	}
+}
+
+void _SwarmDump_Initialise( void* swarmDump, void* data ) {
+	SwarmDump*	 self                = (SwarmDump*)     swarmDump;
+	Index        swarm_I;
+
+	for ( swarm_I = 0 ; swarm_I < self->swarmCount ; swarm_I++ ) {
+		Stg_Component_Initialise( self->swarmList[ swarm_I ], data, False );
+	}
+}
+
+void _SwarmDump_Execute( void* swarmDump, void* data ) {
+	SwarmDump*	      self                = (SwarmDump*)     swarmDump;
+	AbstractContext*  context             = Stg_CheckType( data, AbstractContext );
+	Stream*           stream              = Journal_Register( MPIStream_Type, Swarm_Type );
+	Particle_Index    particleLocalCount;
+	SizeT             particleSize;
+	Name              filename;
+	Index             swarm_I;
+	Swarm*            swarm;
+	Stream*           info = Journal_Register( Info_Type, self->type );
+	Processor_Index   rank_I;
+
+	Journal_DPrintf( info, "Proc %d: beginning Swarm binary checkpoint in %s():\n", self->swarmList[0]->myRank, __func__ );
+	Stream_Indent( info );
+	
+	for ( swarm_I = 0 ; swarm_I < self->swarmCount ; swarm_I++ ) {
+		swarm = self->swarmList[ swarm_I ];
+		particleLocalCount = swarm->particleLocalCount;
+		particleSize = (SizeT) swarm->particleExtensionMgr->finalSize;
+
+		if ( self->newFileEachTime ) {
+			if ( strlen(context->checkPointPrefixString) > 0 ) {
+				Stg_asprintf( &filename, "%s/%s.%s.%05d.dat", context->outputPath,
+					context->checkPointPrefixString, swarm->name, context->timeStep );
+			}
+			else {
+				Stg_asprintf( &filename, "%s/%s.%05d.dat", context->outputPath,
+					swarm->name, context->timeStep );
+			}
+		}	
+		else { 
+			if ( strlen(context->checkPointPrefixString) > 0 ) {
+				Stg_asprintf( &filename, "%s/%s.%s.dat", context->outputPath,
+					context->checkPointPrefixString, swarm->name );
+			}
+			else {
+				Stg_asprintf( &filename, "%s/%s.dat", context->outputPath, swarm->name );
+			}
+		}	
+
+		for ( rank_I = 0; rank_I < swarm->nProc; rank_I++ ) {
+			if ( swarm->myRank == rank_I ) {
+				Journal_DPrintf( info, "Proc %d: for swarm \"%s\", dumping its %u particles of size %u bytes "
+					"each (= %g bytes total) to file %s\n", swarm->myRank, swarm->name, particleLocalCount,
+					particleSize, (float)(particleLocalCount * particleSize), filename );
+			}	
+			MPI_Barrier( swarm->comm );
+		}
+
+		Stream_RedirectFile( stream, filename );
+
+		MPIStream_WriteAllProcessors( stream, swarm->particles, particleSize, (SizeT) particleLocalCount, swarm->comm );
+
+		Stream_CloseFile( stream );
+		Memory_Free( filename );
+	}
+	Stream_UnIndent( info );
+	Journal_DPrintf( info, "Proc %d: finished Swarm binary checkpoint.\n", self->swarmList[0]->myRank );
+}
+
+void _SwarmDump_Destroy( void* swarmDump, void* data ) {
+}
+
+/** Virtual Function Wrappers */
+void SwarmDump_Execute( void* swarmDump, void* context ) {
+	SwarmDump*	  self                = (SwarmDump*)     swarmDump;
+
+	self->_execute( self, context );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmDump.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmDump.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,105 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+**	$Id: SwarmDump.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmDump_h__
+#define __Domain_Swarm_SwarmDump_h__
+
+	/** Textual name of this class */
+	extern const Type SwarmDump_Type;
+	
+	/** SwarmDump contents */
+	#define __SwarmDump \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		\
+		/* Member info */ \
+		Swarm**                                            swarmList;             \
+		Index                                              swarmCount;            \
+		Bool                                               newFileEachTime;
+
+	struct SwarmDump { __SwarmDump };	
+
+	/** Creation implementation */
+	SwarmDump* SwarmDump_New(		
+		Name                                               name,
+		void*                                              context,
+		Swarm**                                            swarmList,
+		Index                                              swarmCount,
+		Bool                                               newFileEachTime );
+	
+	SwarmDump* _SwarmDump_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                       _delete,
+		Stg_Class_PrintFunction*	                       _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction*                   _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		Name                                               name );
+
+	/** Member initialisation implementation */
+	void _SwarmDump_Init( 
+		SwarmDump*                                         self,
+		void*                                              context,
+		Swarm**                                            swarmList,
+		Index                                              swarmCount,
+		Bool                                               newFileEachTime );
+	
+	void _SwarmDump_Delete( void* swarmDump ) ;
+	void _SwarmDump_Print( void* _swarmDump, Stream* stream ) ;
+	void* _SwarmDump_Copy( void* swarmDump, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	#define SwarmDump_Copy( self ) \
+		(SwarmDump*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _SwarmDump_DefaultNew( Name name );
+	void _SwarmDump_Construct( void* swarmDump, Stg_ComponentFactory* cf, void* data ) ;
+	void _SwarmDump_Build( void* swarmDump, void* data ) ;
+	void _SwarmDump_Initialise( void* swarmDump, void* data ) ;
+	void _SwarmDump_Execute( void* swarmDump, void* data ) ;
+	void _SwarmDump_Destroy( void* swarmDump, void* data ) ;
+
+	/** Virtual Function Wrappers */
+	void SwarmDump_Execute( void* swarmDump, void* context ) ;
+
+#endif /* __Domain_Swarm_SwarmDump_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmDump.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmDump.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SwarmDump</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">newFileEachTime</param>
+		<param name="Type">Bool</param>
+		<param name="Default">True</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">context</param>
+		<param name="Type">AbstractContext</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 181 of the c file and then remove this comment afterwards -->
+
+
+<!-- PLEASE, check line number 182 for a dependency and add its information and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmOutput.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmOutput.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,388 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmOutput.c 4011 2007-02-19 05:54:38Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "SwarmOutput.h"
+#include "SwarmVariable.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type SwarmOutput_Type = "SwarmOutput";
+
+
+SwarmOutput* SwarmOutput_New(		
+		Name                                               name,
+		void*                                              context,
+		Swarm*                                             swarm,
+		Name                                               baseFilename,
+		unsigned int                                       columnWidth, 
+		unsigned int                                       decimalLength,
+		char*                                              borderString )		
+{
+	SwarmOutput* self = _SwarmOutput_DefaultNew( name );
+
+	_SwarmOutput_Init( self, context, swarm, baseFilename, columnWidth, decimalLength, borderString );
+	return self;
+}
+
+SwarmOutput* _SwarmOutput_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                       _delete,
+		Stg_Class_PrintFunction*	                       _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction*                   _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		SwarmOutput_PrintHeaderFunction*                   _printHeader,		
+		SwarmOutput_PrintDataFunction*                     _printData,
+		Name                                               name ) 
+{
+	SwarmOutput*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(SwarmOutput) );
+	self = (SwarmOutput*)_Stg_Component_New( 
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			name, 
+			NON_GLOBAL );
+	
+	/* Virtual functions */
+	self->_printHeader                = _printHeader;
+	self->_printData                  = _printData;
+
+	return self;
+}
+
+void _SwarmOutput_Init( 
+		SwarmOutput*                                       self,
+		void*                                              context,
+		Swarm*                                             swarm,
+		Name                                               baseFilename,
+		unsigned int                                       columnWidth, 
+		unsigned int                                       decimalLength,
+		char*                                              borderString )
+{
+	SwarmVariable* swarmVariable;
+	ExtensionInfo_Index handle;
+	/* Add ourselves to the register for later retrieval by clients */
+	self->isConstructed = True;
+
+	self->swarm                  = swarm;
+	self->baseFilename           = baseFilename;
+
+	handle = ExtensionManager_Add( swarm->particleExtensionMgr, SwarmOutput_Type, sizeof( int ) );
+	swarmVariable = Swarm_NewScalarVariable( 
+			swarm,
+			"globalIndexVariable",
+			(ArithPointer) ExtensionManager_Get( swarm->particleExtensionMgr, 0, handle ), 
+			Variable_DataType_Int );
+	self->globalIndexVariable = swarmVariable->variable;
+
+	self->columnWidth = columnWidth;
+	self->borderString = StG_Strdup( borderString );
+	Stg_asprintf( &self->doubleFormatString, "%%%d.%dg", columnWidth, decimalLength );
+
+	EP_AppendClassHook( Context_GetEntryPoint( context, AbstractContext_EP_DumpClass ),	SwarmOutput_Execute, self );
+}
+
+
+void _SwarmOutput_Delete( void* swarmOutput ) {
+	SwarmOutput* self = (SwarmOutput*) swarmOutput;
+
+	Memory_Free( self->doubleFormatString );
+	Memory_Free( self->borderString );
+	_Stg_Component_Delete( self );
+}
+
+void _SwarmOutput_Print( void* _swarmOutput, Stream* stream ) {
+	SwarmOutput* self = (SwarmOutput*) _swarmOutput;
+
+	Journal_Printf( stream, "SwarmOutput - '%s'\n", self->name );
+	Stream_Indent( stream );
+	_Stg_Component_Print( self, stream );
+
+	Journal_PrintPointer( stream, self->_printHeader );
+	Journal_PrintPointer( stream, self->_printData );
+
+	Journal_Printf( stream, "Swarm - '%s'\n", self->swarm->name );
+	Journal_Printf( stream, "globalIndexVariable - '%s'\n", self->globalIndexVariable->name );
+
+	Stream_UnIndent( stream );
+}
+
+void* _SwarmOutput_Copy( void* swarmOutput, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SwarmOutput*	self = (SwarmOutput*)swarmOutput;
+	SwarmOutput*	newSwarmOutput;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSwarmOutput = _Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	newSwarmOutput->_printHeader               = self->_printHeader;
+	newSwarmOutput->_printData                 = self->_printData  ;
+
+	newSwarmOutput->swarm                      = self->swarm;
+	newSwarmOutput->globalIndexVariable        = self->globalIndexVariable;
+
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+				
+	return (void*)newSwarmOutput;
+}
+
+
+void* _SwarmOutput_DefaultNew( Name name ) {
+		return (void*) _SwarmOutput_New( 
+			sizeof(SwarmOutput), 
+			SwarmOutput_Type, 
+			_SwarmOutput_Delete, 
+			_SwarmOutput_Print,
+			_SwarmOutput_Copy, 
+			_SwarmOutput_DefaultNew,
+			_SwarmOutput_Construct,
+			_SwarmOutput_Build, 
+			_SwarmOutput_Initialise, 
+			_SwarmOutput_Execute, 
+			_SwarmOutput_Destroy, 
+			_SwarmOutput_PrintHeader,
+			_SwarmOutput_PrintData,
+			name );
+}
+void _SwarmOutput_Construct( void* swarmOutput, Stg_ComponentFactory* cf, void* data ) {
+	SwarmOutput*	        self         = (SwarmOutput*)swarmOutput;
+	Swarm*                  swarm;
+	AbstractContext*        context;
+	Name                    baseFilename;
+
+	swarm        =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "Swarm", Swarm, True, data  ) ;
+	context      =  Stg_ComponentFactory_ConstructByName(  cf,  "context", AbstractContext,  True, data ) ;
+	baseFilename = Stg_ComponentFactory_GetString( cf, self->name, "baseFilename", self->name );
+
+	_SwarmOutput_Init( 
+			self,
+			context,
+			swarm, 
+			baseFilename, 
+			Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "columnWidth", 12 ), 
+			Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "decimalLength", 6 ), 
+			Stg_ComponentFactory_GetString( cf, self->name, "borderString", "    " ) );
+}
+
+void _SwarmOutput_Build( void* swarmOutput, void* data ) {
+	SwarmOutput*	 self                = (SwarmOutput*)     swarmOutput;
+
+	Stg_Component_Build( self->globalIndexVariable, data, False );
+}
+
+void _SwarmOutput_Initialise( void* swarmOutput, void* data ) {
+	SwarmOutput*	 self                = (SwarmOutput*)     swarmOutput;
+	AbstractContext* context             = (AbstractContext*) data;
+	Swarm*           swarm               = self->swarm;
+	Variable*        globalIndexVariable = self->globalIndexVariable;
+	Particle_Index   lParticle_I;
+	Name             filename;
+	Stream*          stream              = Journal_Register( Info_Type, SwarmOutput_Type );
+	
+	Stg_Component_Initialise( self->globalIndexVariable, context, False );
+
+	_SwarmOutput_SetGlobalIndicies( self, context );
+
+	for ( lParticle_I = 0 ; lParticle_I < swarm->particleLocalCount ; lParticle_I++ ) {
+		/* Open file */
+		Stg_asprintf( &filename, "%s.%05d.dat", self->baseFilename, Variable_GetValueInt( globalIndexVariable, lParticle_I ) );
+		Stream_RedirectFile_WithPrependedPath( stream, context->outputPath, filename );
+
+		/* Print to file */
+		SwarmOutput_PrintHeader( self, stream, lParticle_I, data );
+		Journal_Printf( stream, "\n" );
+		Stream_CloseAndFreeFile( stream );
+	}
+}
+
+void _SwarmOutput_Execute( void* swarmOutput, void* data ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	AbstractContext*  context             = (AbstractContext*) data;
+	Swarm*            swarm               = self->swarm;
+	Variable*         globalIndexVariable = self->globalIndexVariable;
+	Particle_Index    lParticle_I;
+	Name              filename;
+	Stream*           stream              = Journal_Register( Info_Type, SwarmOutput_Type );
+
+	Variable_Update( globalIndexVariable );
+
+	for ( lParticle_I = 0 ; lParticle_I < swarm->particleLocalCount ; lParticle_I++ ) {
+		/* Open file */
+		Stg_asprintf( &filename, "%s.%05d.dat", self->baseFilename, Variable_GetValueInt( globalIndexVariable, lParticle_I ) );
+		Stream_AppendFile_WithPrependedPath( stream, context->outputPath, filename );
+
+		/* Print to file */
+		SwarmOutput_PrintData( self, stream, lParticle_I, data );
+		Journal_Printf( stream, "\n" );
+		Stream_Flush( stream );
+		Stream_CloseAndFreeFile( stream );
+	}
+}
+
+void _SwarmOutput_Destroy( void* swarmOutput, void* data ) {
+}
+
+/*** Default Implementations ***/
+void _SwarmOutput_PrintHeader( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	char*             firstBorderString;
+
+	/* Print First Border with '#' in the front */
+	firstBorderString = StG_Strdup( self->borderString );
+	firstBorderString[0] = '#';
+	Journal_Printf( stream, firstBorderString );
+	Memory_Free( firstBorderString );
+
+	Journal_PrintString_WithLength( stream, "Timestep", self->columnWidth );
+
+	SwarmOutput_PrintString( self, stream, "Time" );
+	SwarmOutput_PrintString( self, stream, "CoordX" );
+	SwarmOutput_PrintString( self, stream, "CoordY" );
+	SwarmOutput_PrintString( self, stream, "CoordZ" );
+}
+
+void _SwarmOutput_PrintData( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	AbstractContext*  context             = (AbstractContext*) data;
+	Swarm*            swarm               = self->swarm;
+	GlobalParticle*   particle            = (GlobalParticle*)Swarm_ParticleAt( swarm, lParticle_I );
+	double*           coord               = particle->coord;
+		
+	SwarmOutput_PrintValue( self, stream, context->timeStep );
+	SwarmOutput_PrintValue( self, stream, context->currentTime + AbstractContext_Dt( context ) );
+	SwarmOutput_PrintValue( self, stream, coord[ I_AXIS ] );
+	SwarmOutput_PrintValue( self, stream, coord[ J_AXIS ] );
+	SwarmOutput_PrintValue( self, stream, coord[ K_AXIS ] );
+}
+
+
+/** Virtual Function Wrappers */
+void SwarmOutput_Execute( void* swarmOutput, void* context ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+
+	self->_execute( self, context );
+}
+void SwarmOutput_PrintHeader( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* context ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	self->_printHeader( self, stream, lParticle_I, context );
+}
+void SwarmOutput_PrintData( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* context ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	self->_printData( self, stream, lParticle_I, context );
+}
+
+void _SwarmOutput_SetGlobalIndicies( void* swarmOutput, void* data ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	AbstractContext*  context             = (AbstractContext*) data;
+	Swarm*            swarm               = self->swarm;
+	Variable*         globalIndexVariable = self->globalIndexVariable;
+	Particle_Index    lParticle_I;
+	Particle_Index    particleCount       = 0;
+	int               rank                = context->rank;
+	int               nproc               = context->nproc;
+	MPI_Status        status;
+
+	Variable_Update( globalIndexVariable );
+
+	/* Receive total number of particles from previous processor */
+	if ( rank != 0 ) {
+		MPI_Recv( &particleCount, 1, MPI_UNSIGNED, rank - 1, 0, context->communicator, &status );
+	}
+	
+	/* Assign value to particle */
+	for ( lParticle_I = 0 ; lParticle_I < swarm->particleLocalCount ; lParticle_I++ ) {
+		Variable_SetValueInt( globalIndexVariable, lParticle_I, particleCount );
+		particleCount++;
+	}
+
+	/* Send total number of particles next processor */
+	if ( rank != nproc - 1 ) {
+		MPI_Send( &particleCount, 1, MPI_UNSIGNED, rank + 1, 0, context->communicator );
+	}
+}
+
+void SwarmOutput_PrintString( void* swarmOutput, Stream* stream, char* string ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+
+	Journal_Printf( stream, "%s", self->borderString );
+	Journal_PrintString_WithLength( stream, string, self->columnWidth );
+}
+
+void SwarmOutput_PrintDouble( void* swarmOutput, Stream* stream, double value ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+
+	Journal_Printf( stream, "%s", self->borderString );
+	Journal_Printf( stream, self->doubleFormatString, value );
+}
+
+void SwarmOutput_PrintTuple( void* swarmOutput, Stream* stream, double* value, Index size ) {
+	SwarmOutput*	  self                = (SwarmOutput*)     swarmOutput;
+	Index             count;
+
+	Journal_Printf( stream, "%s", self->borderString );
+	for( count = 0 ; count < size ; count++ ) {
+		Journal_Printf( stream, self->doubleFormatString, value[count] );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmOutput.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmOutput.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,132 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+**	$Id: SwarmOutput.h 4011 2007-02-19 05:54:38Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmOutput_h__
+#define __Domain_Swarm_SwarmOutput_h__
+
+	/** Textual name of this class */
+	extern const Type SwarmOutput_Type;
+	
+	typedef void    (SwarmOutput_PrintHeaderFunction) ( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data );
+	typedef void    (SwarmOutput_PrintDataFunction) ( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data );
+	
+	/** SwarmOutput contents */
+	#define __SwarmOutput \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		SwarmOutput_PrintHeaderFunction*                   _printHeader;          \
+		SwarmOutput_PrintDataFunction*                     _printData;            \
+		\
+		/* Member info */ \
+		Swarm*                                             swarm;                 \
+		Name                                               baseFilename;          \
+		ExtensionInfo_Index                                handle;                \
+		Variable*                                          globalIndexVariable;   \
+		Index                                              columnWidth;           \
+		char*                                              borderString;          \
+		char*                                              doubleFormatString;    \
+
+	struct SwarmOutput { __SwarmOutput };	
+
+	/** Creation implementation */
+	SwarmOutput* SwarmOutput_New(		
+		Name                                               name,
+		void*                                              context,
+		Swarm*                                             swarm,
+		Name                                               baseFilename,
+		unsigned int                                       columnWidth, 
+		unsigned int                                       decimalLength,
+		char*                                              borderString );		
+	
+	SwarmOutput* _SwarmOutput_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                       _delete,
+		Stg_Class_PrintFunction*	                       _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction*                   _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		SwarmOutput_PrintHeaderFunction*                   _printHeader,		
+		SwarmOutput_PrintDataFunction*                     _printData,
+		Name                                               name );
+
+	/** Member initialisation implementation */
+	void _SwarmOutput_Init( 
+		SwarmOutput*                                       self,
+		void*                                              context,
+		Swarm*                                             swarm,
+		Name                                               baseFilename,
+		unsigned int                                       columnWidth, 
+		unsigned int                                       decimalLength,
+		char*                                              borderString );
+	
+	void _SwarmOutput_Delete( void* swarmOutput ) ;
+	void _SwarmOutput_Print( void* _swarmOutput, Stream* stream ) ;
+	void* _SwarmOutput_Copy( void* swarmOutput, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	#define SwarmOutput_Copy( self ) \
+		(SwarmOutput*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _SwarmOutput_DefaultNew( Name name );
+	void _SwarmOutput_Construct( void* swarmOutput, Stg_ComponentFactory* cf, void* data ) ;
+	void _SwarmOutput_Build( void* swarmOutput, void* data ) ;
+	void _SwarmOutput_Initialise( void* swarmOutput, void* data ) ;
+	void _SwarmOutput_Execute( void* swarmOutput, void* data ) ;
+	void _SwarmOutput_Destroy( void* swarmOutput, void* data ) ;
+
+	void _SwarmOutput_PrintHeader( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data ) ;
+	void _SwarmOutput_PrintData( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* data ) ;
+	
+	/** Virtual Function Wrappers */
+	void SwarmOutput_Execute( void* swarmOutput, void* context ) ;
+	void SwarmOutput_PrintHeader( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* context ) ;
+	void SwarmOutput_PrintData( void* swarmOutput, Stream* stream, Particle_Index lParticle_I, void* context ) ;
+
+	void _SwarmOutput_SetGlobalIndicies( void* swarmOutput, void* data ) ;
+	void SwarmOutput_PrintString( void* swarmOutput, Stream* stream, char* string ) ;
+	void SwarmOutput_PrintDouble( void* swarmOutput, Stream* stream, double value ) ;
+	void SwarmOutput_PrintTuple( void* swarmOutput, Stream* stream, double* value, Index size );
+	#define SwarmOutput_PrintValue( swarmOutput, stream, value )\
+		SwarmOutput_PrintDouble( swarmOutput, stream, (double) ( value ) )
+
+#endif /* __Domain_Swarm_SwarmOutput_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmOutput.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmOutput.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SwarmOutput</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">baseFilename</param>
+		<param name="Type">String</param>
+		<param name="Default">self->name</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">columnWidth</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">12</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">decimalLength</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">6</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">borderString</param>
+		<param name="Type">String</param>
+		<param name="Default">"    " )</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Swarm</param>
+		<param name="Type">Swarm</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 208 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">context</param>
+		<param name="Type">AbstractContext</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 209 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmShapeVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmShapeVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,592 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmShapeVC.c 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmShapeVC.h"
+
+#include "Swarm.h"
+#include <assert.h>
+#include <string.h>
+
+const Type SwarmShapeVC_Type = "SwarmShapeVC";
+const Name defaultSwarmShapeVCName = "defaultSwarmShapeVCName";
+
+/*-----------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+VariableCondition* SwarmShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data )
+{
+	return (VariableCondition*) 
+		SwarmShapeVC_New( defaultSwarmShapeVCName, NULL, variable_Register, conFunc_Register, dictionary, (Swarm*)data );
+}
+
+SwarmShapeVC* SwarmShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                                dictionary,
+		void*                                       _swarm )
+{
+	SwarmShapeVC* self = (SwarmShapeVC*) _SwarmShapeVC_DefaultNew( name );
+
+	_VariableCondition_Init( self, variable_Register, conFunc_Register, dictionary );
+	_SwarmShapeVC_Init( self, _dictionaryEntryName, _swarm );
+
+	return self;
+}
+
+SwarmShapeVC* _SwarmShapeVC_New( 
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy,
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		VariableCondition_BuildSelfFunc*            _buildSelf, 
+		VariableCondition_PrintConciseFunc*         _printConcise,
+		VariableCondition_ReadDictionaryFunc*       _readDictionary,
+		VariableCondition_GetSetFunc*               _getSet,
+		VariableCondition_GetVariableCountFunc*     _getVariableCount,
+		VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+		VariableCondition_GetValueIndexFunc*        _getValueIndex,
+		VariableCondition_GetValueCountFunc*        _getValueCount,
+		VariableCondition_GetValueFunc*             _getValue,
+		VariableCondition_ApplyFunc*	  	    _apply, 
+		Name                                        name  )
+{
+	SwarmShapeVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(SwarmShapeVC));
+	self = (SwarmShapeVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		False,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		NULL, 
+		NULL,
+		NULL );
+	
+	/* Virtual info */
+	
+	return self;
+}
+
+
+void _SwarmShapeVC_Init(
+		void*                                       variableCondition, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _swarm )
+{
+	SwarmShapeVC*			self = (SwarmShapeVC*) variableCondition;
+
+	self->isConstructed        = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_swarm                = (Swarm*)_swarm;
+	self->_entryTbl            = 0;
+	self->_entryCount          = 0;
+
+	assert( _swarm && Stg_Class_IsInstance( _swarm, Swarm_Type ) );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+
+void _SwarmShapeVC_Delete(void* variableCondition) {
+	SwarmShapeVC*	self = (SwarmShapeVC*)variableCondition;
+	
+	if ( self->_entryTbl ) 
+		Memory_Free(self->_entryTbl);
+
+	if ( self->shapeName )
+		Memory_Free( self->shapeName );
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _SwarmShapeVC_Print(void* variableCondition, Stream* stream) {
+	SwarmShapeVC*                self = (SwarmShapeVC*)variableCondition;
+	SwarmShapeVC_Entry_Index     entry_I;
+	Index                   array_I;
+	
+	/* General info */
+	Journal_Printf( stream, "SwarmShapeVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( stream, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( stream, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( stream, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	if ( self->_shape )
+		Journal_Printf( stream, "\t_shape: %s '%s'\n", self->_shape->type, self->_shape->name );
+	
+	Journal_Printf( stream, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( stream, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl) {
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++) {
+			Journal_Printf( stream, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( stream, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( stream, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( stream, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type) {
+				case VC_ValueType_Double:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( stream, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( stream, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( stream, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( stream, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( stream, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( stream, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( stream, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for ( array_I = 0;  array_I < self->_entryTbl[entry_I].value.as.typeArray.size;  array_I++)
+							Journal_Printf( stream, "\t\t\t\tasDoubleArray[%u]: %g\n",  array_I,
+								self->_entryTbl[entry_I].value.as.typeArray.array[ array_I]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( stream, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	}
+	Journal_Printf( stream, "\t_swarm (ptr): %p\n", self->_swarm);
+	
+	/* Print parent */
+	_VariableCondition_Print( self );
+}
+
+
+void* _SwarmShapeVC_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	SwarmShapeVC*   self           = (SwarmShapeVC*)variableCondition;
+	SwarmShapeVC*   newSwarmShapeVC;
+	PtrMap*         map            = ptrMap;
+	Bool            ownMap         = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSwarmShapeVC = (SwarmShapeVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newSwarmShapeVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newSwarmShapeVC->_shape = self->_shape;
+	newSwarmShapeVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newSwarmShapeVC->_swarm = (Swarm*)Stg_Class_Copy( self->_swarm, NULL, deep, nameExt, map );
+		
+		if( (newSwarmShapeVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newSwarmShapeVC->_entryTbl = Memory_Alloc_Array( SwarmShapeVC_Entry, newSwarmShapeVC->_entryCount, "SwarmShapeVC->_entryTbl");
+			memcpy( newSwarmShapeVC->_entryTbl, self->_entryTbl, sizeof(SwarmShapeVC_Entry) * newSwarmShapeVC->_entryCount );
+			PtrMap_Append( map, newSwarmShapeVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newSwarmShapeVC->_swarm = self->_swarm;
+		newSwarmShapeVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSwarmShapeVC;
+}
+	
+/****************** Stg_Component Virtual Functions ******************/
+void* _SwarmShapeVC_DefaultNew( Name name ) {
+	return (void*) _SwarmShapeVC_New(
+		sizeof(SwarmShapeVC), 
+		SwarmShapeVC_Type, 
+		_SwarmShapeVC_Delete, 
+		_SwarmShapeVC_Print, 
+		_SwarmShapeVC_Copy,
+		_SwarmShapeVC_DefaultNew,
+		_SwarmShapeVC_Construct,	
+		_SwarmShapeVC_Build,
+		/*_VariableCondition_Initialise,*/
+		_SwarmShapeVC_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		_SwarmShapeVC_BuildSelf, 
+		_SwarmShapeVC_PrintConcise,
+		_SwarmShapeVC_ReadDictionary,
+		_SwarmShapeVC_GetSet, 
+		_SwarmShapeVC_GetVariableCount, 
+		_SwarmShapeVC_GetVariableIndex, 
+		_SwarmShapeVC_GetValueIndex, 
+		_SwarmShapeVC_GetValueCount, 
+		_SwarmShapeVC_GetValue,
+		_VariableCondition_Apply, 
+		name );
+}
+
+void _SwarmShapeVC_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* data ) {
+	SwarmShapeVC*	self    		= (SwarmShapeVC*)variableCondition;
+	void*		conFunc_Register 	= NULL;
+	void*		variable_Register 	= NULL;
+
+	self = Stg_ComponentFactory_ConstructByName( cf, self->name, SwarmShapeVC, False, data );
+
+	conFunc_Register = (void*)Stg_ObjectList_Get( cf->registerRegister, "ConditionFunction_Register" );
+	assert( conFunc_Register );
+	self->conFunc_Register = conFunc_Register; 
+	
+	variable_Register = (void*)Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variable_Register );
+	self->variable_Register = variable_Register;
+
+	_VariableCondition_Init( self, variable_Register, conFunc_Register, NULL );
+	
+	self->dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
+}
+
+void _SwarmShapeVC_Build(  void* variableCondition, void* data ) {
+	SwarmShapeVC*		self 	= (SwarmShapeVC*)variableCondition;
+	AbstractContext* 	context = (AbstractContext*) data;
+	
+	assert( context && Stg_Class_IsInstance( context, AbstractContext_Type ) );
+
+	self->_swarm =  Stg_ComponentFactory_ConstructByKey(  context->CF, self->name, "Swarm", Swarm,  True, 0  ) ; /* 08.08.07 */
+	assert( self->_swarm );
+	
+	self->_shape =  Stg_ComponentFactory_ConstructByKey(  context->CF, self->name, "Shape", Stg_Shape,  True, 0 /* dummy */  ) ;
+	assert( self->_shape );
+
+	_VariableCondition_Build( self, data );
+
+	Stg_Component_Build( self->_shape, data, False );
+	/*_SwarmShapeVC_BuildSelf( self, data );*/
+}
+	
+/****************** VariableCondition Virtual Functions ******************/
+void _SwarmShapeVC_BuildSelf(  void* variableCondition, void* data /* for build phase */ ) {
+	SwarmShapeVC*         	self    = (SwarmShapeVC*)variableCondition;
+	AbstractContext* 	context = (AbstractContext*) data;
+
+	assert( context && Stg_Class_IsInstance( context, AbstractContext_Type ) );
+
+	/* dave - 06.08.07 */
+	/*self->shapeName = Stg_ComponentFactory_GetString( context->CF, self->name, "Shape", "" );
+*/
+	/*Journal_Firewall( strlen( self->shapeName ) > 0, Journal_MyStream( Error_Type, self ),
+			"You need to fill out the 'Shape' dictionary entry for this SwarmShapeVC.\n" );*/
+	/*assert( self->shapeName );*/
+	
+	/*Stg_Component_Build( self->_swarm, data, False );*/ /* remove this call? */
+	Stg_Component_Build( self->_shape, data, False );
+}
+
+/* added to call the porisity field standard condition plugin */
+void _SwarmShapeVC_Initialise(  void* variableCondition, void* data ) {
+	SwarmShapeVC*	self = (SwarmShapeVC*)variableCondition;
+
+	_VariableCondition_Initialise( self, data );
+
+	/* need to call the standard condition function here */
+}
+	
+void _SwarmShapeVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	SwarmShapeVC* self = (SwarmShapeVC*) variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, Shape: %s '%s'", self->type, self->_shape->type, self->_shape->name );
+}
+
+void _SwarmShapeVC_ReadDictionary( void* variableCondition, void* dict /**/ ) {
+	SwarmShapeVC*                  	self = (SwarmShapeVC*)variableCondition;
+	Dictionary_Entry_Value*   	vcDictVal;
+	Dictionary_Entry_Value    	_vcDictVal;
+	Dictionary_Entry_Value*   	varsVal;
+	SwarmShapeVC_Entry_Index	entry_I;
+	Dictionary*			dictionary = (Dictionary*)dict; /**/
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else {
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+
+	/* i think this vcDictVal is nonsense?? */	
+	if (vcDictVal) {
+		/* Get Name of Shape from dictionary - Grab pointer to shape later on */
+		self->shapeName = StG_Strdup( 
+				Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "Shape" )) );
+
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( SwarmShapeVC_Entry, self->_entryCount, "SwarmShapeVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++) {
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func")) {
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (Index) -1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+						"definition of swarmShapeVC \"%s\" (applies to shape \"%s\"), the cond. func. applied to "
+						"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+						__func__, self->_dictionaryEntryName, self->shapeName,
+						self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+					self->_entryTbl[entry_I].value.as.typeArray.size, "SwarmShapeVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+IndexSet* _SwarmShapeVC_GetSet(void* variableCondition) {
+	SwarmShapeVC*		self = (SwarmShapeVC*)variableCondition;
+	Swarm*			swarm = self->_swarm;
+	IndexSet*		set;
+	Index           	particleDomainCount;
+	unsigned		particleIndex;
+	GlobalParticle*		particle; /* check that this is ok for the given swarm type */
+
+	/*Stg_Component_Initialise( swarm, NULL, False );*/
+	/*Stg_Component_Build( swarm, NULL, False );*/
+
+	particleDomainCount = swarm->particleLocalCount; /* sizeof(swarm particle array) - think this is right?? */
+	set = IndexSet_New( particleDomainCount );
+
+	for( particleIndex = 0; particleIndex < particleDomainCount; particleIndex++ ) {
+		particle = (GlobalParticle*)Swarm_ParticleAt( swarm, particleIndex );
+		if( Stg_Shape_IsCoordInside( self->_shape, particle->coord ) ) {
+			IndexSet_Add( set, particleIndex );
+		}	
+	}
+
+	return set;
+}
+
+VariableCondition_VariableIndex _SwarmShapeVC_GetVariableCount(void* variableCondition, Index globalIndex) {
+	SwarmShapeVC*	self = (SwarmShapeVC*)variableCondition;
+
+	return self->_entryCount;
+}
+
+Variable_Index _SwarmShapeVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex) {
+	SwarmShapeVC*   self          = (SwarmShapeVC*)variableCondition;
+	Variable_Index  searchedIndex = 0;
+	Stream*         errorStr      = Journal_Register( Error_Type, self->type );
+	Name            varName;
+
+	Index		swarmVar_I;
+	Swarm*		swarm		= self->_swarm;
+	char*		swarmVarName;
+
+	varName = self->_entryTbl[varIndex].varName;
+
+	swarmVarName = (char*)calloc( strlen(swarm->name) + 1 + strlen(varName) + 1, sizeof(char) );
+	strcat( swarmVarName, swarm->name );
+	strcat( swarmVarName, "-" );
+	strcat( swarmVarName, varName );
+	/*searchedIndex = (Variable_Index)-1;
+	for( swarmVar_I = 0; swarmVar_I < self->_swarm->nSwarmVars; swarmVar_I++ ) {
+		if( swarm->swarmVars[swarmVar_I]->name && !strcmp(swarmVarName, swarm->swarmVars[swarmVar_I]->name) ) {
+			searchedIndex = swarmVar_I;
+		}
+	}*/
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, swarmVarName );
+	
+	Journal_Firewall( 
+			( searchedIndex < self->variable_Register->count ),
+			errorStr,
+			"Error- in %s: searching for index of varIndex %u (\"%s\") at global node number %u failed"
+			" - register returned index %u, greater than count %u.\n",
+			__func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _SwarmShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _SwarmShapeVC_GetValueCount(void* variableCondition) {
+	SwarmShapeVC*	self = (SwarmShapeVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _SwarmShapeVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex) {
+	SwarmShapeVC*	self = (SwarmShapeVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmShapeVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmShapeVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,153 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: SwarmShapeVC.h 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmShapeVC_h__
+#define __Domain_Swarm_SwarmShapeVC_h__
+	
+	extern const Type SwarmShapeVC_Type;
+	
+	#define __SwarmShapeVC_Entry \
+		Name                                        varName; \
+		VariableCondition_Value                     value; \
+	
+	typedef struct { __SwarmShapeVC_Entry } SwarmShapeVC_Entry;
+	
+	#define __SwarmShapeVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name                                        _dictionaryEntryName; \
+		SwarmShapeVC_Entry_Index                    _entryCount;          \
+		SwarmShapeVC_Entry*                         _entryTbl;            \
+		Swarm*                                      _swarm;               \
+		Stg_Shape*                                  _shape;               \
+		Name                                        shapeName;  \
+
+
+	struct SwarmShapeVC { __SwarmShapeVC };
+	
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition* SwarmShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data );
+	
+
+	SwarmShapeVC* SwarmShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                            dictionary,
+		void*                                       _mesh );
+	
+	SwarmShapeVC* _SwarmShapeVC_New( 
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy,
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		VariableCondition_BuildSelfFunc*            _buildSelf, 
+		VariableCondition_PrintConciseFunc*         _printConcise,
+		VariableCondition_ReadDictionaryFunc*       _readDictionary,
+		VariableCondition_GetSetFunc*               _getSet,
+		VariableCondition_GetVariableCountFunc*     _getVariableCount,
+		VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+		VariableCondition_GetValueIndexFunc*        _getValueIndex,
+		VariableCondition_GetValueCountFunc*        _getValueCount,
+		VariableCondition_GetValueFunc*             _getValue,
+		VariableCondition_ApplyFunc*	 	    _apply, 
+		Name                                        name );
+	
+	void _SwarmShapeVC_Init(
+		void*                                       shapeVC, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _mesh );
+	
+	/* Stg_Class Virtual Functions */
+	void _SwarmShapeVC_Delete( void* shapeVC );
+	void _SwarmShapeVC_Print( void* shapeVC, Stream* stream );
+	void* _SwarmShapeVC_Copy( void* shapeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	#define SwarmShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SwarmShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	/* Stg_Component Virtual Functions */
+	void* _SwarmShapeVC_DefaultNew( Name name );
+	/* added to call porosity distribution functions standard condition functions plugin */
+	void _SwarmShapeVC_Initialise(  void* shapeVC, void* data );
+	void _SwarmShapeVC_Build(  void* shapeVC, void* data );
+	void _SwarmShapeVC_Construct( void* shapeVC, Stg_ComponentFactory* cf, void* data );
+	
+	/* VariableCondition Virtual Functions */
+	void _SwarmShapeVC_BuildSelf( void* shapeVC, void* data );
+	void _SwarmShapeVC_PrintConcise( void* variableCondition, Stream* stream );
+	void _SwarmShapeVC_ReadDictionary( void* variableCondition, void* dictionary );
+	IndexSet* _SwarmShapeVC_GetSet( void* variableCondition );
+	VariableCondition_VariableIndex	_SwarmShapeVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	Variable_Index _SwarmShapeVC_GetVariableIndex(
+		void*                                       variableCondition,
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _SwarmShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _SwarmShapeVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value	_SwarmShapeVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmShapeVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmShapeVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SwarmShapeVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">self->shapeName</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 325 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,399 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmVariable.c 4139 2007-06-12 02:39:52Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmClass.h"
+#include "SwarmVariable_Register.h"
+#include "SwarmVariable.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type SwarmVariable_Type = "SwarmVariable";
+
+SwarmVariable* SwarmVariable_New(		
+		Name                                               name,
+		Swarm*                                             swarm,
+		Variable*                                          variable,
+		Index                                              dofCount )
+{
+	SwarmVariable* self = (SwarmVariable*) _SwarmVariable_DefaultNew( name );
+
+	SwarmVariable_InitAll( self, swarm, variable, dofCount );
+
+	return self;
+}
+
+SwarmVariable* _SwarmVariable_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                       _delete,
+		Stg_Class_PrintFunction*	                       _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction                    _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		SwarmVariable_ValueAtFunction*                     _valueAt,
+		SwarmVariable_GetGlobalValueFunction*              _getMinGlobalMagnitude,
+		SwarmVariable_GetGlobalValueFunction*              _getMaxGlobalMagnitude,		
+		Name                                               name )
+{
+	SwarmVariable*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(SwarmVariable) );
+	self = (SwarmVariable*)_Stg_Component_New( 
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			name, 
+			NON_GLOBAL );
+	
+	/* Virtual functions */
+	self->_valueAt                    = _valueAt;
+	self->_getMinGlobalMagnitude      = _getMinGlobalMagnitude;
+	self->_getMaxGlobalMagnitude      = _getMaxGlobalMagnitude;
+
+	return self;
+}
+
+void _SwarmVariable_Init( SwarmVariable* self, Swarm* swarm, Variable* variable, Index dofCount ) {
+	/* Add ourselves to the register for later retrieval by clients */
+	self->isConstructed = True;
+
+	self->swarm                  = swarm;
+	self->variable               = variable;
+	self->dofCount               = dofCount;
+	self->swarmVariable_Register = swarm->swarmVariable_Register;
+	self->dim                    = swarm->dim;
+	
+	if( swarm )
+		Swarm_AddVariable( swarm, self );
+	if ( self->swarmVariable_Register != NULL )	
+		SwarmVariable_Register_Add( self->swarmVariable_Register, self );
+}
+
+void SwarmVariable_InitAll( void* swarmVariable, Swarm* swarm, Variable* variable, Index dofCount ) {
+	SwarmVariable* self = (SwarmVariable*) swarmVariable;
+
+	/* Should be calling InitAll of parent here */
+
+	/* Call my Init function */
+	_SwarmVariable_Init( self, swarm, variable, dofCount );
+}
+
+void _SwarmVariable_Delete( void* swarmVariable ) {
+	SwarmVariable* self = (SwarmVariable*) swarmVariable;
+	_Stg_Component_Delete( self );
+}
+
+void _SwarmVariable_Print( void* _swarmVariable, Stream* stream ) {
+	SwarmVariable* self = (SwarmVariable*) _swarmVariable;
+
+	Journal_Printf( stream, "SwarmVariable - '%s'\n", self->name );
+	Stream_Indent( stream );
+	_Stg_Component_Print( self, stream );
+
+	Journal_PrintPointer( stream, self->_valueAt );
+	Journal_PrintPointer( stream, self->_getMinGlobalMagnitude );
+	Journal_PrintPointer( stream, self->_getMaxGlobalMagnitude );
+
+	Journal_Printf( stream, "Swarm - '%s'\n", self->swarm->name );
+	if ( self->variable != NULL )
+		Journal_Printf( stream, "Variable - '%s'\n", self->variable->name );
+
+	Journal_PrintValue( stream, self->dofCount );
+	Journal_PrintPointer( stream, self->swarmVariable_Register );
+	Stream_UnIndent( stream );
+}
+
+void* _SwarmVariable_Copy( void* swarmVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SwarmVariable*	self = (SwarmVariable*)swarmVariable;
+	SwarmVariable*	newSwarmVariable;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSwarmVariable = _Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	newSwarmVariable->_valueAt                   = self->_valueAt;
+	newSwarmVariable->_getMinGlobalMagnitude     = self->_getMinGlobalMagnitude  ;
+	newSwarmVariable->_getMaxGlobalMagnitude     = self->_getMaxGlobalMagnitude;
+
+	newSwarmVariable->swarm                      = self->swarm;
+	newSwarmVariable->variable                   = self->variable;
+	newSwarmVariable->dofCount                   = self->dofCount;
+	newSwarmVariable->swarmVariable_Register     = self->swarmVariable_Register;
+
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+				
+	return (void*)newSwarmVariable;
+}
+
+
+void* _SwarmVariable_DefaultNew( Name name ) {
+		return (void*) _SwarmVariable_New( 
+			sizeof(SwarmVariable), 
+			SwarmVariable_Type, 
+			_SwarmVariable_Delete, 
+			_SwarmVariable_Print,
+			_SwarmVariable_Copy, 
+			_SwarmVariable_DefaultNew,
+			_SwarmVariable_Construct,
+			_SwarmVariable_Build, 
+			_SwarmVariable_Initialise, 
+			_SwarmVariable_Execute, 
+			_SwarmVariable_Destroy, 
+			_SwarmVariable_ValueAt,
+			_SwarmVariable_GetMinGlobalMagnitude,
+			_SwarmVariable_GetMaxGlobalMagnitude,
+			name );
+}
+
+void _SwarmVariable_Construct( void* swarmVariable, Stg_ComponentFactory* cf, void* data ) {
+	SwarmVariable*	        self         = (SwarmVariable*)swarmVariable;
+	Swarm*                  swarm;
+	Variable*               variable;
+	Index                   dofCount;
+
+	swarm    =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "Swarm", Swarm, True, data  ) ;
+	variable =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "Variable", Variable,  False, data  ) ;
+	dofCount = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "dofCount", 0 );
+
+	_SwarmVariable_Init( self, swarm, variable, dofCount );
+	
+}
+
+void _SwarmVariable_Build( void* swarmVariable, void* data ) {
+	SwarmVariable*	        self         = (SwarmVariable*)swarmVariable;
+
+	if ( self->variable )
+		Stg_Component_Build( self->variable, data, False );
+}
+
+void _SwarmVariable_Initialise( void* swarmVariable, void* data ) {
+	SwarmVariable*	        self         = (SwarmVariable*)swarmVariable;
+
+	if ( self->variable ) {
+		Variable_Update( self->variable );
+		Stg_Component_Initialise( self->variable, data, False );
+	}
+}
+
+void _SwarmVariable_Execute( void* swarmVariable, void* data ) {
+}
+
+void _SwarmVariable_Destroy( void* swarmVariable, void* data ) {
+}
+
+double SwarmVariable_GetMinGlobalMagnitude( void* swarmVariable ) {
+	SwarmVariable*	self = (SwarmVariable*)swarmVariable;
+	return self->_getMinGlobalMagnitude( self );
+}
+
+double SwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable ) {
+	SwarmVariable*	self = (SwarmVariable*)swarmVariable;
+	return self->_getMaxGlobalMagnitude( self );
+}
+
+/*** Default Implementations ***/
+
+void _SwarmVariable_ValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self = (SwarmVariable*)swarmVariable;
+	Variable*       variable = self->variable;
+
+	switch( variable->dataTypes[0] ) {
+		case Variable_DataType_Double:
+			self->_valueAt = _SwarmVariable_ValueAtDouble;
+			break;
+		case Variable_DataType_Int:
+			self->_valueAt = _SwarmVariable_ValueAtInt;
+			break;
+		case Variable_DataType_Float:
+			self->_valueAt = _SwarmVariable_ValueAtFloat;
+			break;
+		case Variable_DataType_Char:
+			self->_valueAt = _SwarmVariable_ValueAtChar;
+			break;
+		case Variable_DataType_Short:
+			self->_valueAt = _SwarmVariable_ValueAtShort;
+			break;
+		default:
+			assert(0);
+	}
+	SwarmVariable_ValueAt( self, lParticle_I, value );
+}
+
+
+	
+void _SwarmVariable_ValueAtDouble( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self = (SwarmVariable*)swarmVariable;
+	double*         dataPtr;
+
+	dataPtr = Variable_GetPtrDouble( self->variable, lParticle_I );
+	memcpy( value, dataPtr, sizeof(double) * self->dofCount );
+}
+void _SwarmVariable_ValueAtInt( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self     = (SwarmVariable*)swarmVariable;
+	Variable*       variable = self->variable;
+	Dof_Index       dofCount = self->dofCount;
+	Dof_Index       dof_I;
+
+	for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
+		value[ dof_I ] = (double) Variable_GetValueAtInt( variable, lParticle_I, dof_I );
+	}
+}
+void _SwarmVariable_ValueAtFloat( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self     = (SwarmVariable*)swarmVariable;
+	Variable*       variable = self->variable;
+	Dof_Index       dofCount = self->dofCount;
+	Dof_Index       dof_I;
+
+	for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
+		value[ dof_I ] = (double) Variable_GetValueAtFloat( variable, lParticle_I, dof_I );
+	}
+}
+void _SwarmVariable_ValueAtChar( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self     = (SwarmVariable*)swarmVariable;
+	Variable*       variable = self->variable;
+	Dof_Index       dofCount = self->dofCount;
+	Dof_Index       dof_I;
+
+	for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
+		value[ dof_I ] = (double) Variable_GetValueAtChar( variable, lParticle_I, dof_I );
+	}
+}
+void _SwarmVariable_ValueAtShort( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
+	SwarmVariable*	self     = (SwarmVariable*)swarmVariable;
+	Variable*       variable = self->variable;
+	Dof_Index       dofCount = self->dofCount;
+	Dof_Index       dof_I;
+
+	for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
+		value[ dof_I ] = (double) Variable_GetValueAtShort( variable, lParticle_I, dof_I );
+	}
+}
+	
+
+double _SwarmVariable_GetMinGlobalMagnitude( void* swarmVariable ) {
+	SwarmVariable*	self               = (SwarmVariable*)swarmVariable;
+	double*         value;
+	Swarm*          swarm              = self->swarm;
+	Particle_Index  particleLocalCount = swarm->particleLocalCount;
+	Particle_Index  lParticle_I;
+	double          localMin           = HUGE_VAL;
+	double          globalMin;
+	Index           dofCount           = self->dofCount;
+	double          magnitude;
+
+	value = Memory_Alloc_Array( double, dofCount, "value" );
+
+	/* Search through all local particles and find smallest value of variable */
+	for ( lParticle_I = 0 ; lParticle_I < particleLocalCount ; lParticle_I++ ) {
+		SwarmVariable_ValueAt( self, lParticle_I, value );
+
+		if ( dofCount == 1 )
+			magnitude = value[0];
+		else 
+                  assert(0); /*TODO */
+
+		if ( localMin > magnitude )
+			localMin = magnitude;
+	}
+
+	Memory_Free( value );
+	MPI_Allreduce( &localMin, &globalMin, dofCount, MPI_DOUBLE, MPI_MIN, swarm->comm );
+
+	return globalMin;
+}
+
+
+double _SwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable ) {
+	SwarmVariable*	self               = (SwarmVariable*)swarmVariable;
+	double*         value;
+	Swarm*          swarm              = self->swarm;
+	Particle_Index  particleLocalCount = swarm->particleLocalCount;
+	Particle_Index  lParticle_I;
+	double          localMax           = -HUGE_VAL;
+	double          globalMax;
+	Index           dofCount           = self->dofCount;
+	double          magnitude;
+
+	value = Memory_Alloc_Array( double, dofCount, "value" );
+
+	/* Search through all local particles and find smallest value of variable */
+	for ( lParticle_I = 0 ; lParticle_I < particleLocalCount ; lParticle_I++ ) {
+		SwarmVariable_ValueAt( self, lParticle_I, value );
+
+		if ( dofCount == 1 )
+			magnitude = value[0];
+		else 
+                  assert(0); /*TODO */
+
+		if ( localMax < magnitude )
+			localMax = magnitude;
+	}
+
+	Memory_Free( value );
+	MPI_Allreduce( &localMax, &globalMax, dofCount, MPI_DOUBLE, MPI_MAX, swarm->comm );
+	
+	return globalMax;
+}
+
+	
+
+
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmVariable.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmVariable.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,133 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+**	$Id: SwarmVariable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmVariable_h__
+#define __Domain_Swarm_SwarmVariable_h__
+
+	/** Textual name of this class */
+	extern const Type SwarmVariable_Type;
+	
+	typedef void    (SwarmVariable_ValueAtFunction) ( void* swarmVariable, Particle_Index lParticle_I, double* value );
+	typedef double  (SwarmVariable_GetGlobalValueFunction) ( void* swarmVariable );
+	
+	/** SwarmVariable contents */
+	#define __SwarmVariable \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		SwarmVariable_ValueAtFunction*                     _valueAt; \
+		SwarmVariable_GetGlobalValueFunction*              _getMinGlobalMagnitude; \
+		SwarmVariable_GetGlobalValueFunction*              _getMaxGlobalMagnitude; \
+		\
+		/* Member info */ \
+		Swarm*                                             swarm;                       \
+		Variable*                                          variable;                    \
+		Index                                              dofCount;                    \
+		Dimension_Index                                    dim;                         \
+		SwarmVariable_Register*                            swarmVariable_Register;      \
+
+	struct SwarmVariable { __SwarmVariable };	
+
+	/** General Virtual Functions */
+	#define SwarmVariable_Copy( self ) \
+		(SwarmVariable*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+
+	/** Creation implementation */
+	void* _SwarmVariable_DefaultNew( Name name );
+
+	SwarmVariable* SwarmVariable_New(		
+		Name                                               name,
+		Swarm*                                             swarm,
+		Variable*                                          variable,
+		Index                                              dofCount );
+	
+	SwarmVariable* _SwarmVariable_New(
+		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*	                   _delete,
+		Stg_Class_PrintFunction*	                   _print, 
+		Stg_Class_CopyFunction*	                           _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction                    _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		SwarmVariable_ValueAtFunction*                     _valueAt,
+		SwarmVariable_GetGlobalValueFunction*              _getMinGlobalMagnitude,
+		SwarmVariable_GetGlobalValueFunction*              _getMaxGlobalMagnitude,		
+		Name                                               name );
+
+
+	/** Member initialisation implementation */
+	void SwarmVariable_InitAll( void* swarmVariable, Swarm* swarm, Variable* variable, Index dofCount ) ;
+	
+	void _SwarmVariable_Delete( void* swarmVariable ) ;
+	void _SwarmVariable_Print( void* _swarmVariable, Stream* stream ) ;
+	void _SwarmVariable_Construct( void* swarmVariable, Stg_ComponentFactory* cf, void* data ) ;
+	void _SwarmVariable_Build( void* swarmVariable, void* data ) ;
+	void _SwarmVariable_Execute( void* swarmVariable, void* data ) ;
+	void _SwarmVariable_Destroy( void* swarmVariable, void* data ) ;
+	void _SwarmVariable_Initialise( void* swarmVariable, void* data ) ;
+	
+	/* Copy */
+	void* _SwarmVariable_Copy( void* swarmVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Interface to determine the value of the swarm at a specific particle. */
+	#define SwarmVariable_ValueAt( swarmVariable, lParticle_I, value ) \
+		((SwarmVariable*)swarmVariable)->_valueAt( swarmVariable, lParticle_I, value )
+
+	/** Interface for finding the minimum value for all particles globally */
+	double SwarmVariable_GetMinGlobalMagnitude( void* swarmVariable );
+
+	/** Interface for finding the maximum value for all particles globally */
+	double SwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable );
+
+	/*** Default Implementations ***/
+	void _SwarmVariable_ValueAt( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _SwarmVariable_ValueAtDouble( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _SwarmVariable_ValueAtInt( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _SwarmVariable_ValueAtFloat( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _SwarmVariable_ValueAtChar( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+	void _SwarmVariable_ValueAtShort( void* swarmVariable, Particle_Index lParticle_I, double* value ) ;
+
+	double _SwarmVariable_GetMaxGlobalMagnitude( void* swarmVariable ) ;
+	double _SwarmVariable_GetMinGlobalMagnitude( void* swarmVariable ) ;
+
+#endif /* __Domain_Swarm_SwarmVariable_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmVariable.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmVariable.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SwarmVariable</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dofCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Swarm</param>
+		<param name="Type">Swarm</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 202 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">No</param>
+		<param name="Name">Variable</param>
+		<param name="Type">Variable</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 203 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmVariable_Register.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmVariable_Register.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,58 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SwarmVariable_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "SwarmVariable_Register.h"
+
+#include <assert.h>
+
+
+const Type SwarmVariable_Register_Type = "SwarmVariable_Register";
+
+SwarmVariable_Register*	SwarmVariable_Register_New( Variable_Register* variable_Register ) {
+	SwarmVariable_Register* self = (SwarmVariable_Register*) _NamedObject_Register_New(
+		sizeof(SwarmVariable_Register),
+		SwarmVariable_Register_Type,
+		_NamedObject_Register_Delete,
+		_NamedObject_Register_Print,
+		NULL );
+
+	self->variable_Register = variable_Register;
+
+	return self;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/SwarmVariable_Register.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/SwarmVariable_Register.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,85 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Allows users to access SwarmVariables based on their textual name,
+**	or index.
+**
+** Assumptions:
+**
+** Comments:
+**
+**
+** $Id: SwarmVariable_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_SwarmVariable_Register_h__
+#define __Domain_Swarm_SwarmVariable_Register_h__
+	
+	
+	extern const Type SwarmVariable_Register_Type;
+	
+	#define __SwarmVariable_Register \
+		/* General info */ \
+		__NamedObject_Register \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Variable_Register* variable_Register;
+
+	struct SwarmVariable_Register { __SwarmVariable_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	SwarmVariable_Register*	SwarmVariable_Register_New( Variable_Register* variable_Register );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	#define SwarmVariable_Register_Add NamedObject_Register_Add
+
+	#define SwarmVariable_Register_GetIndex NamedObject_Register_GetIndex 
+
+	#define SwarmVariable_Register_GetByName( self, swarmVariableName ) \
+		( (SwarmVariable*) NamedObject_Register_GetByName( self, swarmVariableName ) ) 
+
+	#define SwarmVariable_Register_GetByIndex( self, swarmVariableIndex ) \
+		( (SwarmVariable*) NamedObject_Register_GetByIndex( self, swarmVariableIndex ) )
+
+	#define SwarmVariable_Register_PrintAllEntryNames NamedObject_Register_PrintAllEntryNames
+
+#endif /* __Domain_Swarm_SwarmVariable_Register_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Swarm_Register.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Swarm_Register.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,237 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Swarm_Register.c 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Swarm_Register.h"
+
+#include "ParticleLayout.h"
+#include "SwarmClass.h"
+#include "SwarmDump.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Swarm_Register_Type = "Swarm_Register";
+Swarm_Register* stgSwarm_Register = NULL;
+
+Swarm_Register* _Swarm_Register_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*			_copy )
+{
+	Swarm_Register* self = NULL;
+
+	assert( _sizeOfSelf >= sizeof(Swarm_Register) );
+	self = (Swarm_Register*) _Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	return self;
+}
+	
+Swarm_Register* Swarm_Register_New(  )
+{
+	Swarm_Register* self = NULL;
+
+	self = _Swarm_Register_New( 
+			sizeof(Swarm_Register), 
+			Swarm_Register_Type,
+			_Swarm_Register_Delete,
+			_Swarm_Register_Print,
+			NULL);
+
+	Swarm_Register_Init( self );
+
+	if ( !stgSwarm_Register ) {
+		stgSwarm_Register = self;
+	}
+	return self;
+}
+
+void _Swarm_Register_Init( Swarm_Register* self )
+{
+}
+	
+void Swarm_Register_Init( Swarm_Register* self )
+{
+	assert( self );
+
+	self->swarmList = Stg_ObjectList_New( );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Swarm_Register_Delete( void* swarmRegister )
+{
+	Swarm_Register* self = (Swarm_Register *) swarmRegister;
+
+	assert( self );
+
+	/** Actually, don't delete all swarms as they have already been deleted by the
+	live component register : or else leave it up to the user */
+	/* Stg_ObjectList_DeleteAllObjects( self->swarmList ); */
+
+	Stg_Class_Delete( self->swarmList );
+	if ( stgSwarm_Register == self ) {
+		stgSwarm_Register = NULL;
+	}
+	_Stg_Class_Delete( self );
+}
+
+void _Swarm_Register_Print( void* swarmRegister, Stream* stream )
+{
+	Swarm_Register* self = (Swarm_Register *) swarmRegister;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Swarm_Register (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	Journal_Printf( (void*) stream, "swarmList (ptr): %p\n", self->swarmList );
+	Stg_Class_Print( self->swarmList, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Index Swarm_Register_Add( Swarm_Register* self, void* swarm )
+{
+	assert( self );
+	return Stg_ObjectList_Append( self->swarmList, swarm );
+}
+	
+Swarm* Swarm_Register_Get( Swarm_Register* self, Name name )
+{
+	assert( self );
+	
+	return (Swarm*)Stg_ObjectList_Get( self->swarmList, name );
+}
+
+Swarm* Swarm_Register_At( void* swarmRegister, Index index ) {
+	Swarm_Register* self      = (Swarm_Register *) swarmRegister;
+	assert( self );
+
+	return (Swarm*) Stg_ObjectList_At( self->swarmList, index );
+}
+	
+unsigned int Swarm_Register_GetCount( Swarm_Register* self )
+{
+	assert( self );
+
+	return self->swarmList->count;
+}
+
+Index Swarm_Register_GetIndexFromPointer( Swarm_Register* self, void* ptr ) {
+	Index i;
+
+	for ( i = 0; i < self->swarmList->count; ++i ) {
+		if ( (void*)self->swarmList->data[i] == ptr ) {
+			return i;
+		}
+	}
+
+	return (Index)-1;
+}
+
+
+Swarm_Register* Swarm_Register_GetSwarm_Register() {
+	return stgSwarm_Register;
+}
+
+
+void Swarm_Register_SaveAllRegisteredSwarms( Swarm_Register* self, void* context ) {
+	Index                     swarmCount = self->swarmList->count;
+	Swarm**                   swarmList = NULL;
+	Index                     swarm_I;
+	Index                     swarmsToDumpCount = 0;
+	SwarmDump*                swarmDumper;
+	Swarm*                    swarm;
+	Stream*                   info = Journal_Register( Info_Type, self->type );
+
+	if ( swarmCount == 0 ) {
+		return;
+	}	
+	
+	Journal_Printf( info, "In %s(): about to save the swarms to disk:\n", __func__ );
+
+	swarmList = Memory_Alloc_Array_Unnamed( Swarm*, swarmCount ); 
+
+	for ( swarm_I=0 ; swarm_I < swarmCount; swarm_I++ ) {
+		swarm = Swarm_Register_At( self, swarm_I );
+		if ( swarm->isSwarmTypeToCheckPointAndReload == True ) {
+			swarmList[swarmsToDumpCount++] = swarm;
+		}
+	}
+	
+	if ( swarmsToDumpCount == 0 ) {
+		Journal_Printf( info, "found 0 swarms that need to be checkpointed -> nothing to do\n",
+			swarmsToDumpCount );
+	}
+	else {
+		Journal_Printf( info, "\t(found %u swarms that need to be checkpointed)\n",
+			swarmsToDumpCount );
+
+		/* Create new SwarmDump object to check point the swarms
+		 * We're not passing in the 'context' as the second argument because we don't need the swarm dumper to 
+		 * add a hook on the Save entrypoint - contexts can manually execute this function */ 
+		swarmDumper = SwarmDump_New( "swarmDumper", NULL, swarmList, swarmsToDumpCount, True );
+		/* Passing the context through allows the swarmDumper to check requested strings etc */
+		SwarmDump_Execute( swarmDumper, context );
+		Stg_Class_Delete( swarmDumper );
+	}
+
+	Memory_Free( swarmList );
+	Journal_Printf( info, "%s: saving of swarms completed.\n", __func__ );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/Swarm_Register.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/Swarm_Register.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,98 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Swarm_Register.h 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Domain_Swarm_Swarm_Register_h__
+#define __Domain_Swarm_Swarm_Register_h__
+
+	extern const Type Swarm_Register_Type;
+	extern Swarm_Register* stgSwarm_Register;		/**< Swarm register singleton. */
+	
+	#define __Swarm_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Class info */ \
+		Stg_ObjectList*		swarmList;
+		
+	struct Swarm_Register { __Swarm_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	/* Creation implementation */
+	Swarm_Register* _Swarm_Register_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*			_copy
+		);
+	
+	Swarm_Register* Swarm_Register_New();
+
+	void _Swarm_Register_Init( Swarm_Register* self );
+	
+	void Swarm_Register_Init( Swarm_Register* self );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Swarm_Register_Delete( void* swarmRegister );
+	
+	void _Swarm_Register_Print( void* swarmRegister, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	Index Swarm_Register_Add( Swarm_Register* self, void* swarm );
+	
+	Swarm* Swarm_Register_Get( Swarm_Register* self, Name name );
+	Swarm* Swarm_Register_At( void* swarmRegister, Index index ) ;
+	
+	unsigned int Swarm_Register_GetCount( Swarm_Register* self );
+	Index Swarm_Register_GetIndexFromPointer( Swarm_Register* self, void* ptr );
+	Swarm_Register* Swarm_Register_GetSwarm_Register();
+
+	void Swarm_Register_SaveAllRegisteredSwarms( Swarm_Register* self, void* context );
+
+#endif /* __Domain_Swarm_Swarm_Register_h__ */
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriGaussParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriGaussParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,300 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TriGaussParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "TriGaussParticleLayout.h"
+
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+#include "IntegrationPoint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+
+
+const Type TriGaussParticleLayout_Type = "TriGaussParticleLayout";
+
+TriGaussParticleLayout* TriGaussParticleLayout_New( Name name, unsigned int dim, unsigned int particlesPerCell ) {
+	TriGaussParticleLayout* self = (TriGaussParticleLayout*)_TriGaussParticleLayout_DefaultNew( name );
+
+	_TriGaussParticleLayout_Init( self, dim, particlesPerCell );
+
+	return self;
+}
+
+TriGaussParticleLayout* _TriGaussParticleLayout_New( 
+                SizeT                                                       _sizeOfSelf,
+                Type                                                        type,
+                Stg_Class_DeleteFunction*                                   _delete,
+                Stg_Class_PrintFunction*                                    _print,
+                Stg_Class_CopyFunction*                                     _copy,
+                Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+                Stg_Component_ConstructFunction*                            _construct,
+                Stg_Component_BuildFunction*                                _build,
+                Stg_Component_InitialiseFunction*                           _initialise,
+                Stg_Component_ExecuteFunction*                              _execute,
+                Stg_Component_DestroyFunction*                              _destroy,
+                ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+                ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+                PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+                PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+                Name                                                        name,
+                Bool                                                        initFlag,
+                unsigned int                                                dim,
+                unsigned int                                                particlesPerCell )
+{
+	TriGaussParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (TriGaussParticleLayout*)_PerCellParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialCount,
+		_initialiseParticlesOfCell,
+		name,
+		initFlag,
+		LocalCoordSystem,
+		True );
+	
+	if( initFlag ){
+		_TriGaussParticleLayout_Init( self, dim, particlesPerCell );
+	}
+	
+	return self;
+}
+
+
+void _TriGaussParticleLayout_Init(
+		TriGaussParticleLayout* self,
+		unsigned int            dim,
+		unsigned int            particlesPerCell )
+{
+	self->isConstructed    = True;
+	self->dim              = dim;
+	self->particlesPerCell = particlesPerCell;
+	
+	_PerCellParticleLayout_Init( self, LocalCoordSystem, True );
+}
+
+void _TriGaussParticleLayout_Delete( void* triGaussParticleLayout ) {
+	TriGaussParticleLayout* self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	
+	_PerCellParticleLayout_Delete( self );
+}
+
+void _TriGaussParticleLayout_Print( void* triGaussParticleLayout, Stream* stream ) {
+	TriGaussParticleLayout* self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* triGaussParticleLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( triGaussParticleLayoutStream, "TriGaussParticleLayout (ptr): %p:\n", self );
+	
+	/* Parent class info */
+	_PerCellParticleLayout_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* TriGaussParticleLayout */
+	Journal_Printf( triGaussParticleLayoutStream, "\tdim: %u\n", self->dim );
+	Journal_Printf( triGaussParticleLayoutStream, "\tparticlesPerCell: %u\n", self->particlesPerCell  );
+}
+
+
+void* _TriGaussParticleLayout_Copy( void* triGaussParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	TriGaussParticleLayout*		self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	TriGaussParticleLayout*		newTriGaussParticleLayout;
+	
+	newTriGaussParticleLayout = (TriGaussParticleLayout*)_PerCellParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	return (void*)newTriGaussParticleLayout;
+}
+
+void* _TriGaussParticleLayout_DefaultNew( Name name ) {
+	return _TriGaussParticleLayout_New(
+			sizeof(TriGaussParticleLayout),
+			TriGaussParticleLayout_Type,
+			_TriGaussParticleLayout_Delete,
+			_TriGaussParticleLayout_Print,
+			_TriGaussParticleLayout_Copy,
+			_TriGaussParticleLayout_DefaultNew,
+			_TriGaussParticleLayout_Construct,
+			_TriGaussParticleLayout_Build,
+			_TriGaussParticleLayout_Initialise,
+			_TriGaussParticleLayout_Execute,
+			_TriGaussParticleLayout_Destroy,
+			_PerCellParticleLayout_SetInitialCounts,
+			_PerCellParticleLayout_InitialiseParticles,
+			_TriGaussParticleLayout_InitialCount,
+			_TriGaussParticleLayout_InitialiseParticlesOfCell,
+			name,
+			False,
+			0,
+			0 );
+}
+
+void _TriGaussParticleLayout_Construct( void* triGaussParticleLayout, Stg_ComponentFactory* cf, void* data ){
+	TriGaussParticleLayout *self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	unsigned int dim;
+	unsigned int particlesPerCell;
+
+	dim = Dictionary_Entry_Value_AsUnsignedInt(
+		Dictionary_GetDefault( cf->rootDict, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) ) );
+
+	particlesPerCell = Dictionary_Entry_Value_AsUnsignedInt(
+		Dictionary_GetDefault( cf->rootDict, "particlesPerCell", Dictionary_Entry_Value_FromUnsignedInt( 1 ) ) );
+
+	_TriGaussParticleLayout_Init( self, dim, particlesPerCell );
+}
+	
+void _TriGaussParticleLayout_Build( void* triGaussParticleLayout, void* data ) {
+}
+	
+void _TriGaussParticleLayout_Initialise( void* triGaussParticleLayout, void* data ) {
+}
+	
+void _TriGaussParticleLayout_Execute( void* triGaussParticleLayout, void* data ) {
+}
+	
+void _TriGaussParticleLayout_Destroy( void* triGaussParticleLayout, void* data ) {
+}
+
+Particle_InCellIndex _TriGaussParticleLayout_InitialCount( void* triGaussParticleLayout, void* celllayout, Cell_Index cell_I )
+{
+	TriGaussParticleLayout* self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	Particle_InCellIndex count;
+	int dim;	
+	
+	dim = self->dim;
+	count = (Particle_InCellIndex)( self->particlesPerCell );
+	
+	return count;
+}
+
+
+/* remember this only has to initialise one cell of particles at a time */
+void _TriGaussParticleLayout_InitialiseParticlesOfCell( void* triGaussParticleLayout, void* _swarm, Cell_Index cell_I )
+{
+	#define MAX_DIM 3
+	#define MAX_GAUSS_POINTS_2D 1
+	#define MAX_GAUSS_POINTS_3D 1
+	TriGaussParticleLayout*   self = (TriGaussParticleLayout*)triGaussParticleLayout;
+	Swarm*                    swarm = (Swarm*)_swarm;
+	IntegrationPoint*         integrationPoint = NULL;
+
+	Particle_InCellIndex      cParticle_I = 0;
+
+	Particle_InCellIndex ppc;
+	int dim;
+	static double weight[20];
+	static double xi[20][3];
+	static int beenHere = 0;
+	int d;
+	
+	dim = self->dim;
+	ppc = self->particlesPerCell;
+	
+	if( dim == 2 ) {
+		if( ppc == 1 ) {
+			weight[0] = 0.5;
+
+			xi[0][0] = 0.333333333333;
+			xi[0][1] = 0.333333333333;				
+		}
+		if( ppc > MAX_GAUSS_POINTS_2D ) {
+			Journal_Firewall(
+				ppc > MAX_GAUSS_POINTS_2D,
+				Journal_MyStream( Error_Type, self ),
+				"In %s(), error: particlesPerCell greater than implementated tabulated gauss values of %d\n",
+				__func__,
+				MAX_GAUSS_POINTS_2D );
+		}
+	}
+	else if ( dim == 3 ) {
+		if( ppc == 1 ) {
+			weight[0] = 0.5;			
+
+			xi[0][0] = 0.333333333333;
+			xi[0][1] = 0.333333333333;				
+			xi[0][2] = 0.333333333333;				
+		}
+		if( ppc > MAX_GAUSS_POINTS_3D ) {
+			Journal_Firewall(
+				ppc > MAX_GAUSS_POINTS_3D,
+				Journal_MyStream( Error_Type, self ),
+				"In %s(), error: particlesPerCell greater than implementated tabulated gauss values of %d\n",
+				__func__,
+				MAX_GAUSS_POINTS_3D );
+		}
+	}
+
+	assert( ppc <= swarm->cellParticleCountTbl[cell_I] );
+	
+	for ( cParticle_I = 0; cParticle_I < ppc; cParticle_I++ ) {
+		integrationPoint = (IntegrationPoint*)Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		integrationPoint->owningCell = cell_I;
+			
+		for( d = 0; d < dim; d++ ) {
+			/*integrationPoint->coord[d] = xi[cParticle_I][d];*/
+			integrationPoint->xi[d] = xi[cParticle_I][d];
+		}
+		
+		integrationPoint->weight = weight[cParticle_I];
+		
+		beenHere = 1;
+	}	
+	
+	
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriGaussParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriGaussParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a particle layout at points designed for optimal gaussian integration.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: TriGaussParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_TriGaussParticleLayout_h__
+#define __Domain_Swarm_TriGaussParticleLayout_h__
+
+	
+	/* Textual name of this class */
+	extern const Type TriGaussParticleLayout_Type;
+	
+	#define __TriGaussParticleLayout \
+		__PerCellParticleLayout \
+		\
+		unsigned int dim;              /**< The number of dimensions to use */ \
+	        unsigned int particlesPerCell; /**< The number of points to use per cell */
+
+	struct TriGaussParticleLayout { __TriGaussParticleLayout };
+	
+	/* Create a new TriGaussParticleLayout and initialise */
+	TriGaussParticleLayout* TriGaussParticleLayout_New( Name name, unsigned int dim, unsigned int particlesPerCell );
+	
+	/* Creation implementation / Virtual constructor */
+	TriGaussParticleLayout* _TriGaussParticleLayout_New( 
+		SizeT                                                       _sizeOfSelf,
+		Type                                                        type,
+		Stg_Class_DeleteFunction*                                   _delete,
+		Stg_Class_PrintFunction*                                    _print,
+		Stg_Class_CopyFunction*                                     _copy,
+		Stg_Component_DefaultConstructorFunction*                   _defaultConstructor,
+		Stg_Component_ConstructFunction*                            _construct,
+		Stg_Component_BuildFunction*                                _build,
+		Stg_Component_InitialiseFunction*                           _initialise,
+		Stg_Component_ExecuteFunction*                              _execute,
+		Stg_Component_DestroyFunction*                              _destroy,
+		ParticleLayout_SetInitialCountsFunction*                    _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*                 _initialiseParticles,
+		PerCellParticleLayout_InitialCountFunction*                 _initialCount,
+		PerCellParticleLayout_InitialiseParticlesOfCellFunction*    _initialiseParticlesOfCell,
+		Name                                                        name,
+		Bool                                                        initFlag,
+		unsigned int                                                dim,
+		unsigned int                                                particlesPerCell );
+	
+	/* Initialise implementation */
+	void _TriGaussParticleLayout_Init( 
+			TriGaussParticleLayout* self, 
+			unsigned int            dim, 
+			unsigned int            particlesPerCell );
+	
+	/* Stg_Class_Delete implementation */
+	void _TriGaussParticleLayout_Delete( void* triGaussParticleLayout );
+	
+	/* Print implementation */
+	void _TriGaussParticleLayout_Print( void* triGaussParticleLayout, Stream* stream );
+	
+	/* Copy */
+	#define TriGaussParticleLayout_Copy( self ) \
+		(TriGaussParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define TriGaussParticleLayout_DeepCopy( self ) \
+		(TriGaussParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _TriGaussParticleLayout_Copy( void* triGaussParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void* _TriGaussParticleLayout_DefaultNew( Name name );
+	void  _TriGaussParticleLayout_Construct( void* triGaussParticleLayout, Stg_ComponentFactory* cf, void* data );
+	void  _TriGaussParticleLayout_Build( void* triGaussParticleLayout, void* data );
+	void  _TriGaussParticleLayout_Initialise( void* triGaussParticleLayout, void* data );
+	void  _TriGaussParticleLayout_Execute( void* triGaussParticleLayout, void* data );
+	void  _TriGaussParticleLayout_Destroy( void* triGaussParticleLayout, void* data );
+	
+	Particle_InCellIndex _TriGaussParticleLayout_InitialCount( 
+			void* triGaussParticleLayout, 
+			void* celllayout, 
+			Cell_Index cell_I );
+	
+	void _TriGaussParticleLayout_InitialiseParticlesOfCell( void* triGaussParticleLayout, void* swarm, Cell_Index cell_I );
+	
+#endif /* __Domain_Swarm_TriGaussParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriGaussParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriGaussParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">TriGaussParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">PerCellParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriSingleCellLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriSingleCellLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,334 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TriSingleCellLayout.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CellLayout.h"
+#include "TriSingleCellLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+const Type TriSingleCellLayout_Type = "TriSingleCellLayout";
+
+TriSingleCellLayout* TriSingleCellLayout_DefaultNew( Name name )
+{
+	return (TriSingleCellLayout*)_TriSingleCellLayout_New( sizeof(TriSingleCellLayout), TriSingleCellLayout_Type,
+		_TriSingleCellLayout_Delete, _TriSingleCellLayout_Print, _TriSingleCellLayout_Copy,
+		(Stg_Component_DefaultConstructorFunction*)TriSingleCellLayout_DefaultNew, _TriSingleCellLayout_Construct,
+		_TriSingleCellLayout_Build, _TriSingleCellLayout_Initialise, _TriSingleCellLayout_Execute,
+		_TriSingleCellLayout_Destroy, name, False,
+		_TriSingleCellLayout_CellLocalCount, _TriSingleCellLayout_CellShadowCount,
+		_TriSingleCellLayout_PointCount, _TriSingleCellLayout_InitialisePoints,
+		_TriSingleCellLayout_MapElementIdToCellId, _TriSingleCellLayout_IsInCell,
+		_TriSingleCellLayout_CellOf, _TriSingleCellLayout_GetShadowInfo,
+		0, NULL );
+}
+
+TriSingleCellLayout* TriSingleCellLayout_New( Name name, int dim, Dictionary* dictionary ) { 
+	return _TriSingleCellLayout_New( sizeof(TriSingleCellLayout), TriSingleCellLayout_Type, _TriSingleCellLayout_Delete,
+		_TriSingleCellLayout_Print, _TriSingleCellLayout_Copy,
+		(Stg_Component_DefaultConstructorFunction*)TriSingleCellLayout_DefaultNew, _TriSingleCellLayout_Construct,
+		_TriSingleCellLayout_Build, _TriSingleCellLayout_Initialise, _TriSingleCellLayout_Execute,
+		_TriSingleCellLayout_Destroy, name, True,
+		_TriSingleCellLayout_CellLocalCount, _TriSingleCellLayout_CellShadowCount,
+		_TriSingleCellLayout_PointCount, _TriSingleCellLayout_InitialisePoints,
+		_TriSingleCellLayout_MapElementIdToCellId, _TriSingleCellLayout_IsInCell,
+		_TriSingleCellLayout_CellOf, _TriSingleCellLayout_GetShadowInfo, dim, dictionary );
+}
+
+void TriSingleCellLayout_Init( TriSingleCellLayout* self, Name name, int dim, Dictionary* dictionary ) { 
+	/* General info */
+	self->type = TriSingleCellLayout_Type;
+	self->_sizeOfSelf = sizeof(TriSingleCellLayout);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _TriSingleCellLayout_Delete;
+	self->_print = _TriSingleCellLayout_Print;
+	self->_copy = _TriSingleCellLayout_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*) TriSingleCellLayout_DefaultNew;
+	self->_construct = _TriSingleCellLayout_Construct;
+	self->_build = _TriSingleCellLayout_Build;
+	self->_initialise = _TriSingleCellLayout_Initialise;
+	self->_execute = _TriSingleCellLayout_Execute;
+	self->_destroy = _TriSingleCellLayout_Destroy;
+	self->_cellLocalCount = _TriSingleCellLayout_CellLocalCount,
+	self->_cellShadowCount = _TriSingleCellLayout_CellShadowCount,
+	self->_pointCount = _TriSingleCellLayout_PointCount,
+	self->_initialisePoints = _TriSingleCellLayout_InitialisePoints,
+	self->_mapElementIdToCellId = _TriSingleCellLayout_MapElementIdToCellId;
+	self->_isInCell = _TriSingleCellLayout_IsInCell,
+	self->_cellOf = _TriSingleCellLayout_CellOf,
+	self->_getShadowInfo = _TriSingleCellLayout_GetShadowInfo;
+
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_CellLayout_Init( (CellLayout*)self );
+	
+	/* TriSingleCellLayout info */
+	_TriSingleCellLayout_Init( self, dim );
+}
+
+TriSingleCellLayout* _TriSingleCellLayout_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print,
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,		
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo,		
+		int					dim, 
+		Dictionary*				dictionary )
+{
+	TriSingleCellLayout* self;
+	
+	/* Allocate memory */
+	self = (TriSingleCellLayout*)_CellLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_cellLocalCount,
+		_cellShadowCount,
+		_pointCount,
+		_initialisePoints,
+		_mapElementIdToCellId,
+		_isInCell,
+		_cellOf,
+		_getShadowInfo );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* TriSingleCellLayout info */
+	if( initFlag ){
+		_TriSingleCellLayout_Init( self, dim );
+	}
+	
+	return self;
+}
+
+
+void _TriSingleCellLayout_Init( TriSingleCellLayout* self, int dim ) { 
+	/* General and Virtual info should already be set */
+	
+	/* SingleCellInfo info */
+	self->isConstructed = True;
+	self->dim = dim;
+}
+
+
+void _TriSingleCellLayout_Delete( void* triSingleCellLayout ) {
+	TriSingleCellLayout* self = (TriSingleCellLayout*)triSingleCellLayout;
+	
+	/* Stg_Class_Delete parent class */
+	_CellLayout_Delete( self );
+}
+
+void _TriSingleCellLayout_Print( void* triSingleCellLayout, Stream* stream ) {
+	TriSingleCellLayout* self = (TriSingleCellLayout*)triSingleCellLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* triSingleCellLayoutStream = stream;
+	
+	/* General info */
+	Journal_Printf( triSingleCellLayoutStream, "TriSingleCellLayout (ptr): %p\n", self ); 
+	
+	/* Parent class info */
+	_CellLayout_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* TriSingleCellLayout info */
+	Journal_Printf( triSingleCellLayoutStream, "self->dim: %u", self->dim );
+}
+
+
+void* _TriSingleCellLayout_Copy( void* triSingleCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	TriSingleCellLayout*	self = (TriSingleCellLayout*)triSingleCellLayout;
+	TriSingleCellLayout*	newTriSingleCellLayout;
+	
+	newTriSingleCellLayout = _CellLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newTriSingleCellLayout->dictionary = self->dictionary;
+	newTriSingleCellLayout->dim = self->dim;
+	
+	return (void*)newTriSingleCellLayout;
+}
+	
+void _TriSingleCellLayout_Construct( void *triSingleCellLayout, Stg_ComponentFactory *cf, void* data ){
+	TriSingleCellLayout *self = (TriSingleCellLayout*)triSingleCellLayout;
+	Dimension_Index dim = 0;
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+	assert( dim );
+
+	self->dictionary = cf->rootDict;
+	
+	_CellLayout_Init( (CellLayout*)self );
+	_TriSingleCellLayout_Init( (TriSingleCellLayout*)self, dim );
+}
+	
+void _TriSingleCellLayout_Build( void* triSingleCellLayout, void* data ){
+	
+}
+	
+void _TriSingleCellLayout_Initialise( void* triSingleCellLayout, void* data ){
+	
+}
+	
+void _TriSingleCellLayout_Execute( void* triSingleCellLayout, void* data ){
+	
+}
+	
+void _TriSingleCellLayout_Destroy( void* triSingleCellLayout, void* data ){
+	
+}
+
+Cell_Index _TriSingleCellLayout_CellLocalCount( void* triSingleCellLayout ) {
+	/* There is only one cell... */
+	return 1;
+}
+
+
+Cell_Index _TriSingleCellLayout_CellShadowCount( void* triSingleCellLayout ) {
+	/* No shadow cells */
+	return 0;
+}
+
+
+Cell_PointIndex _TriSingleCellLayout_PointCount( void* triSingleCellLayout, Cell_Index cellIndex ) {
+	TriSingleCellLayout* self = (TriSingleCellLayout*)triSingleCellLayout;
+	
+	switch( self->dim ) {
+		case 1:
+			return 2;
+		case 2:
+			return 3;
+		case 3:
+			return 4;
+		default:
+			assert( 0 );
+	}
+	return 0;
+}
+
+
+void _TriSingleCellLayout_InitialisePoints( 
+		void*			triSingleCellLayout, 
+		Cell_Index		cellIndex, 
+		Cell_PointIndex		pointCount, 
+		Cell_Points		points ) 
+{
+	TriSingleCellLayout* self = (TriSingleCellLayout*)triSingleCellLayout;
+	
+	switch( self->dim ) {
+		case 1:
+			assert( 0 );
+		case 2:
+			*points[0] = Memory_Alloc_Array( double, self->dim, "points[0]" );
+			*points[1] = Memory_Alloc_Array( double, self->dim, "points[1]" );
+			*points[2] = Memory_Alloc_Array( double, self->dim, "points[2]" );
+			
+			(*points[0])[0] = 0.0f;
+			(*points[0])[1] = 0.0f;
+			(*points[1])[0] = 1.0f;
+			(*points[1])[1] = 0.0f;
+			(*points[2])[0] = 0.0f;
+			(*points[2])[1] = 1.0f;
+			break;
+		case 3:
+			assert( 0 );
+		default:
+			assert( 0 );
+	}
+}
+
+
+Cell_Index _TriSingleCellLayout_MapElementIdToCellId( void* cellLayout, Element_DomainIndex element_dI ) {
+	
+	/* Always 0: see the header comment */
+	return 0;
+}
+
+
+Bool _TriSingleCellLayout_IsInCell( void* triSingleCellLayout, Cell_Index cellIndex, void* particle ) {
+	assert( 0 );
+	return 0;
+}
+
+
+Cell_Index _TriSingleCellLayout_CellOf( void* triSingleCellLayout, void* particle ) {
+	assert( 0 );
+	return 0;
+}
+
+
+ShadowInfo* _TriSingleCellLayout_GetShadowInfo( void* triSingleCellLayout ) {
+  /*TriSingleCellLayout*      self = (TriSingleCellLayout*)triSingleCellLayout; */
+
+	/* TODO: this should return a shadow info with at least nbr info for my processors */
+	Journal_Firewall( 0, Swarm_Warning, "Error: %s not implemented yet!\n", __func__ );
+	return NULL;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriSingleCellLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriSingleCellLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,154 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the CellLayout abstract class to a cell layout that has one single cell, of same dimensionality as a
+given mesh layout.
+**
+** Assumptions:
+**
+** Comments:
+**	"RegularMeshLayout*"  in the constuctor can be set to 0, but must then be set manually before the swarm is created.
+**	At the moment, only does a rectangular or hexahedral cell - need to generalise for triangular mesh shapes
+**		(more info. needs to be provided on the meshLayout).
+**
+** $Id: TriSingleCellLayout.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_TriSingleCellLayout_h__
+#define __Domain_Swarm_TriSingleCellLayout_h__
+
+	
+	/* Textual name of this class */
+	extern const Type TriSingleCellLayout_Type;
+	
+	/* TriSingleCellLayout information */
+	#define __TriSingleCellLayout \
+		/* General info */ \
+		__CellLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* TriSingleCellLayout info */ \
+		Dictionary*			dictionary; \
+		int				dim;
+
+	struct TriSingleCellLayout { __TriSingleCellLayout };
+	
+	
+	/* Create a new TriSingleCellLayout and initialise */
+	TriSingleCellLayout* TriSingleCellLayout_DefaultNew( Name name );
+	
+	TriSingleCellLayout* TriSingleCellLayout_New( Name name, int dim, Dictionary* dictionary );
+	
+	/* Initialise a TriSingleCellLayout construct */
+	void TriSingleCellLayout_Init( TriSingleCellLayout* self, Name name, int dim, Dictionary* dictionary );
+	
+	/* Creation implementation / Virtual constructor */
+	TriSingleCellLayout* _TriSingleCellLayout_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print,
+		Stg_Class_CopyFunction*			_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*		_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*		_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		CellLayout_CellCountFunction*		_cellLocalCount,
+		CellLayout_CellCountFunction*		_cellShadowCount,
+		CellLayout_PointCountFunction*		_pointCount,
+		CellLayout_InitialisePointsFunction*	_initialisePoints,
+		CellLayout_MapElementIdToCellIdFunction*	_mapElementIdToCellId,
+		CellLayout_IsInCellFunction*		_isInCell, 
+		CellLayout_CellOfFunction*		_cellOf,
+		CellLayout_GetShadowInfoFunction*	_getShadowInfo,		
+		int					dim,
+		Dictionary* dictionary );
+	
+	/* Initialise implementation */
+	void _TriSingleCellLayout_Init( TriSingleCellLayout* self, int dim );
+	
+	/* Stg_Class_Delete implementation */
+	void _TriSingleCellLayout_Delete( void* triSingleCellLayout );
+	
+	/* Print implementation */
+	void _TriSingleCellLayout_Print( void* triSingleCellLayout, Stream* stream );
+	
+	/* Copy */
+	#define TriSingleCellLayout_Copy( self ) \
+		(TriSingleCellLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define TriSingleCellLayout_DeepCopy( self ) \
+		(TriSingleCellLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _TriSingleCellLayout_Copy( void* triSingleCellLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _TriSingleCellLayout_Construct( void *triSingleCellLayout, Stg_ComponentFactory *cf, void* data );
+	
+	void _TriSingleCellLayout_Build( void* triSingleCellLayout, void* data );
+	
+	void _TriSingleCellLayout_Initialise( void* triSingleCellLayout, void* data );
+	
+	void _TriSingleCellLayout_Execute( void* triSingleCellLayout, void* data );
+	
+	void _TriSingleCellLayout_Destroy( void* triSingleCellLayout, void* data );
+	
+	/* Returns the number of cells in this layout*/
+	Cell_Index _TriSingleCellLayout_CellLocalCount( void* triSingleCellLayout );
+	
+	/* Returns the number of cells in this layout*/
+	Cell_Index _TriSingleCellLayout_CellShadowCount( void* triSingleCellLayout );
+	
+	/* Returns the cell point count... this is the layout's single node count */
+	Cell_PointIndex _TriSingleCellLayout_PointCount( void* triSingleCellLayout, Cell_Index cellIndex );
+	
+	/* Returns the cell point array... this is the layout's single node array */
+	void _TriSingleCellLayout_InitialisePoints( 
+		void*			triSingleCellLayout, 
+		Cell_Index		cellIndex, 
+		Cell_PointIndex		pointCount, 
+		Cell_Points		points );
+	
+	/** Implements CellLayout_MapElementIdToCellId(): always return 0, since all elements correspond to the same cell */
+	Cell_Index _TriSingleCellLayout_MapElementIdToCellId( void* cellLayout, unsigned element_dI );		
+
+	/* Specify whether a particle is in a given cell */
+	Bool _TriSingleCellLayout_IsInCell( void* triSingleCellLayout, Cell_Index cellIndex, void* particle );
+	
+	/* Obtain which cell a given coord lives in */
+	Cell_Index _TriSingleCellLayout_CellOf( void* triSingleCellLayout, void* particle );
+	
+	/* Get the shadow info */
+	ShadowInfo* _TriSingleCellLayout_GetShadowInfo( void* triSingleCellLayout );
+	
+#endif /* __Domain_Swarm_TriSingleCellLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/TriSingleCellLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/TriSingleCellLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">TriSingleCellLayout</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">CellLayout</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/UnionParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/UnionParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,253 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: UnionParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "UnionParticleLayout.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+const Type UnionParticleLayout_Type = "UnionParticleLayout";
+
+UnionParticleLayout* UnionParticleLayout_New(
+		Name                                             name, 
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount )
+{
+	UnionParticleLayout* self = (UnionParticleLayout*) _UnionParticleLayout_DefaultNew( name );
+	_UnionParticleLayout_Init( self, particleLayoutList, particleLayoutCount );
+	return self;
+}
+
+UnionParticleLayout* _UnionParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount )
+{
+	UnionParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (UnionParticleLayout*)_GlobalParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		GlobalCoordSystem,
+		False,
+		0,
+		0 );
+
+	if ( initFlag ) {
+		_UnionParticleLayout_Init( self, particleLayoutList, particleLayoutCount );
+	}
+
+	return self;
+}
+
+void _UnionParticleLayout_Init( 
+		void*                                            unionParticleLayout, 
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount )
+{
+	UnionParticleLayout*	self = (UnionParticleLayout*) unionParticleLayout;
+	self->isConstructed = True;
+	
+	self->particleLayoutList = particleLayoutList;
+	self->particleLayoutCount = particleLayoutCount;
+
+	_GlobalParticleLayout_Init( self, GlobalCoordSystem, False, 0, 0 );
+}
+
+
+	
+void _UnionParticleLayout_Delete( void* unionParticleLayout ) {
+	UnionParticleLayout* self = (UnionParticleLayout*)unionParticleLayout;
+
+	_GlobalParticleLayout_Delete( self );
+}
+
+void _UnionParticleLayout_Print( void* unionParticleLayout, Stream* stream ) {
+	UnionParticleLayout* self  = (UnionParticleLayout*)unionParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "UnionParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_GlobalParticleLayout_Print( self, stream );
+	
+	/* UnionParticleLayout */
+	
+	Stream_UnIndent( stream );
+}
+
+void* _UnionParticleLayout_Copy( void* unionParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	UnionParticleLayout*		self                    = (UnionParticleLayout*)unionParticleLayout;
+	UnionParticleLayout*		newUnionParticleLayout;
+	
+	newUnionParticleLayout = (UnionParticleLayout*)_GlobalParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	return (void*)newUnionParticleLayout;
+}
+
+void* _UnionParticleLayout_DefaultNew( Name name ) {
+	return (void*)_UnionParticleLayout_New( 
+			sizeof(UnionParticleLayout),
+			UnionParticleLayout_Type,
+			_UnionParticleLayout_Delete,
+			_UnionParticleLayout_Print,
+			_UnionParticleLayout_Copy,
+			_UnionParticleLayout_DefaultNew,
+			_UnionParticleLayout_Construct,
+			_UnionParticleLayout_Build,
+			_UnionParticleLayout_Initialise,
+			_UnionParticleLayout_Execute,
+			_UnionParticleLayout_Destroy,
+			_UnionParticleLayout_SetInitialCounts,
+			_UnionParticleLayout_InitialiseParticles,
+			_UnionParticleLayout_InitialiseParticle,
+			name,
+			False,
+			NULL,
+			0 );
+}
+
+
+void _UnionParticleLayout_Construct( void* unionParticleLayout, Stg_ComponentFactory *cf, void* data ) {
+	UnionParticleLayout*   self = (UnionParticleLayout*) unionParticleLayout;
+	GlobalParticleLayout** particleLayoutList;
+	Index                  particleLayoutCount;
+
+	particleLayoutList = Stg_ComponentFactory_ConstructByList( 
+		cf, 
+		self->name, 
+		"ParticleLayoutList", 
+		Stg_ComponentFactory_Unlimited, 
+		GlobalParticleLayout, 
+		True, 
+		&particleLayoutCount,
+		data );
+
+	_UnionParticleLayout_Init( self, particleLayoutList, particleLayoutCount );
+}
+	
+void _UnionParticleLayout_Build( void* unionParticleLayout, void* data ) {
+}
+void _UnionParticleLayout_Initialise( void* unionParticleLayout, void* data ) {
+}	
+void _UnionParticleLayout_Execute( void* unionParticleLayout, void* data ) {	
+}
+void _UnionParticleLayout_Destroy( void* unionParticleLayout, void* data ) {	
+}
+
+void _UnionParticleLayout_SetInitialCounts( void* unionParticleLayout, void* _swarm ) {
+	UnionParticleLayout*        self     = (UnionParticleLayout*)unionParticleLayout;
+	Swarm*                      swarm    = (Swarm*)_swarm;
+	Index                       layout_I;
+
+	/* Get total number of particles from total number of layouts in the list */
+	self->totalInitialParticles = 0 ;
+	for ( layout_I = 0 ; layout_I < self->particleLayoutCount ; layout_I++ ) {
+		ParticleLayout_SetInitialCounts( self->particleLayoutList[ layout_I ], swarm );
+		self->totalInitialParticles += self->particleLayoutList[ layout_I ]->totalInitialParticles;
+	}
+
+	/* Call parent function */
+	_GlobalParticleLayout_SetInitialCounts( self, swarm );
+}
+void _UnionParticleLayout_InitialiseParticles( void* unionParticleLayout, void* swarm ) {
+	UnionParticleLayout*        self     = (UnionParticleLayout*)unionParticleLayout;
+
+	/* Call parent function */
+	_GlobalParticleLayout_InitialiseParticles( self, swarm );
+}
+
+void _UnionParticleLayout_InitialiseParticle( 
+		void*             unionParticleLayout, 
+		void*             swarm, 
+		Particle_Index    newParticle_I,
+		void*             particle )
+{
+	UnionParticleLayout*        self     = (UnionParticleLayout*)unionParticleLayout;
+	Index                       layout_I;
+
+	/* Loop over particle layouts until you find which layout should initialise this particle 
+	 * When one particle layout finishes initialises all its particles, then the next one begins. */
+	for ( layout_I = 0 ; layout_I < self->particleLayoutCount ; layout_I++ ) {
+		/* See if this particle belongs to this particle layout */
+		if ( newParticle_I < self->particleLayoutList[ layout_I ]->totalInitialParticles ) {
+			GlobalParticleLayout_InitialiseParticle( self->particleLayoutList[ layout_I ], swarm, newParticle_I, particle );
+			return;
+		}
+
+		/* Decrement particle number */
+		newParticle_I -= self->particleLayoutList[ layout_I ]->totalInitialParticles;
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/UnionParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/UnionParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,116 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: UnionParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_UnionParticleLayout_h__
+#define __Domain_Swarm_UnionParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type UnionParticleLayout_Type;
+	
+	extern const Index UnionParticleLayout_Invalid;
+
+	/* UnionParticleLayout information */
+	#define __UnionParticleLayout \
+		__GlobalParticleLayout \
+		\
+		GlobalParticleLayout**                           particleLayoutList;            \
+		Index                                            particleLayoutCount;
+
+	struct UnionParticleLayout { __UnionParticleLayout };
+	
+	/* Create a new UnionParticleLayout and initialise */
+	UnionParticleLayout* UnionParticleLayout_New( 
+		Name                                             name, 
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount );
+	
+	/* Creation implementation / Virtual constructor */
+	UnionParticleLayout* _UnionParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount );
+	
+	void _UnionParticleLayout_Init( 
+		void*                                            unionParticleLayout, 
+		GlobalParticleLayout**                           particleLayoutList,
+		Index                                            particleLayoutCount );
+	
+	/* 'Stg_Class' Stuff */
+	void _UnionParticleLayout_Delete( void* unionParticleLayout );
+	void _UnionParticleLayout_Print( void* unionParticleLayout, Stream* stream );
+	#define UnionParticleLayout_Copy( self ) \
+		(UnionParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define UnionParticleLayout_DeepCopy( self ) \
+		(UnionParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _UnionParticleLayout_Copy( void* unionParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _UnionParticleLayout_DefaultNew( Name name ) ;
+	void _UnionParticleLayout_Construct( void* unionParticleLayout, Stg_ComponentFactory *cf, void* data );
+	void _UnionParticleLayout_Build( void* unionParticleLayout, void* data );
+	void _UnionParticleLayout_Initialise( void* unionParticleLayout, void* data );
+	void _UnionParticleLayout_Execute( void* unionParticleLayout, void* data );
+	void _UnionParticleLayout_Destroy( void* unionParticleLayout, void* data );
+	
+	void _UnionParticleLayout_SetInitialCounts( void* unionParticleLayout, void* _swarm );
+	/* Initialises the coordinates of a cell's particle */
+	void _UnionParticleLayout_InitialiseParticles( void* unionParticleLayout, void* swarm );
+	void _UnionParticleLayout_InitialiseParticle( 
+			void*             unionParticleLayout,
+			void*             _swarm,
+			Particle_Index    newParticle_I,
+			void*             particle );
+
+
+#endif /* __Domain_Swarm_UnionParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/UnionParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/UnionParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">UnionParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">GlobalParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This is a particle layout that simply combines many particle layouts together into one. When one particle layout finishes initialises all its particles, then the next one begins.</param>
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">ParticleLayoutList</param>
+		<param name="Type">GlobalParticleLayout</param>
+		<param name="Description">This is a list of all the particle layouts that you want to combine into one.</param>
+	</struct>
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/WithinShapeParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/WithinShapeParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,265 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: WithinShapeParticleLayout.c 4102 2007-05-16 01:09:00Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SpaceFillerParticleLayout.h"
+#include "WithinShapeParticleLayout.h"
+#include "CellLayout.h"
+#include "SwarmClass.h"
+#include "StandardParticle.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+const Type WithinShapeParticleLayout_Type = "WithinShapeParticleLayout";
+
+const Index WithinShapeParticleLayout_Invalid = (Index) 0;
+
+WithinShapeParticleLayout* WithinShapeParticleLayout_New(
+		Name                    name,
+		Dimension_Index         dim,
+		Particle_Index          totalInitialParticles,
+		Stg_Shape*              shape )
+{
+	WithinShapeParticleLayout* self = (WithinShapeParticleLayout*) _WithinShapeParticleLayout_DefaultNew( name );
+	_WithinShapeParticleLayout_Init( self, dim, totalInitialParticles, 0.0, shape );
+
+	return self;
+}
+
+WithinShapeParticleLayout* _WithinShapeParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy,
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Dimension_Index                                  dim,
+		Particle_Index                                   totalInitialParticles,
+		double                                           averageInitialParticlesPerCell,
+		Stg_Shape*                                       shape )
+{
+	WithinShapeParticleLayout* self;
+	
+	/* Allocate memory */
+	self = (WithinShapeParticleLayout*)_SpaceFillerParticleLayout_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		_setInitialCounts,
+		_initialiseParticles,
+		_initialiseParticle,
+		name,
+		initFlag,
+		dim,
+		totalInitialParticles,
+		averageInitialParticlesPerCell );
+
+	if ( initFlag ) {
+		_WithinShapeParticleLayout_Init( self, dim, totalInitialParticles, averageInitialParticlesPerCell, shape );
+	}
+
+	return self;
+}
+
+void _WithinShapeParticleLayout_Init(
+		void*                   withinShapeParticleLayout,
+		Dimension_Index         dim,
+		Particle_Index          totalInitialParticles,
+		double                  averageInitialParticlesPerCell,
+		Stg_Shape*              shape )
+{
+	WithinShapeParticleLayout*	self = (WithinShapeParticleLayout*) withinShapeParticleLayout;
+
+	self->isConstructed = True;
+	self->shape         = shape;
+
+	_SpaceFillerParticleLayout_Init( self, dim, totalInitialParticles, averageInitialParticlesPerCell );
+}
+
+
+
+	
+void _WithinShapeParticleLayout_Delete( void* withinShapeParticleLayout ) {
+	WithinShapeParticleLayout* self = (WithinShapeParticleLayout*)withinShapeParticleLayout;
+
+	/* Stg_Class_Delete parent class */
+	_SpaceFillerParticleLayout_Delete( self );
+
+}
+
+void _WithinShapeParticleLayout_Print( void* withinShapeParticleLayout, Stream* stream ) {
+	WithinShapeParticleLayout* self  = (WithinShapeParticleLayout*)withinShapeParticleLayout;
+	
+	/* General info */
+	Journal_Printf( stream, "WithinShapeParticleLayout (ptr): %p:\n", self );
+	Stream_Indent( stream );
+	
+	/* Parent class info */
+	_SpaceFillerParticleLayout_Print( self, stream );
+	
+	/* WithinShapeParticleLayout */
+	Stg_Class_Print( self->shape, stream );
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _WithinShapeParticleLayout_Copy( void* withinShapeParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	WithinShapeParticleLayout*		self                    = (WithinShapeParticleLayout*)withinShapeParticleLayout;
+	WithinShapeParticleLayout*		newWithinShapeParticleLayout;
+	
+	newWithinShapeParticleLayout = _SpaceFillerParticleLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	if ( deep ) {
+		newWithinShapeParticleLayout->shape = (Stg_Shape*)Stg_Class_Copy( self->shape, NULL, deep, nameExt, ptrMap );
+	}
+	else {
+		newWithinShapeParticleLayout->shape = self->shape;
+	}
+
+	return (void*)newWithinShapeParticleLayout;
+}
+
+void* _WithinShapeParticleLayout_DefaultNew( Name name ) {
+	return (void*)_WithinShapeParticleLayout_New( 
+			sizeof(WithinShapeParticleLayout),
+			WithinShapeParticleLayout_Type,
+			_WithinShapeParticleLayout_Delete,
+			_WithinShapeParticleLayout_Print,
+			_WithinShapeParticleLayout_Copy,
+			_WithinShapeParticleLayout_DefaultNew,
+			_WithinShapeParticleLayout_Construct,
+			_WithinShapeParticleLayout_Build,
+			_WithinShapeParticleLayout_Initialise,
+			_WithinShapeParticleLayout_Execute,
+			_WithinShapeParticleLayout_Destroy,
+			_GlobalParticleLayout_SetInitialCounts,
+			_WithinShapeParticleLayout_InitialiseParticles,
+			_SpaceFillerParticleLayout_InitialiseParticle,
+			name,
+			False,
+			0,   /* dim */
+			0,   /* totalInitialParticles */
+			0.0, /* averageInitialParticlesPerCell */
+			NULL /* shape */ );
+}
+
+void _WithinShapeParticleLayout_Construct( void* withinShapeParticleLayout, Stg_ComponentFactory *cf, void* data ) {
+	WithinShapeParticleLayout* self = (WithinShapeParticleLayout*) withinShapeParticleLayout;
+	Stg_Shape*      shape;
+	
+	_SpaceFillerParticleLayout_Construct( self, cf, data );
+
+	shape = Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "shape", Stg_Shape,  True, data ) ;
+
+	_WithinShapeParticleLayout_Init( 
+			self, 
+			self->dim, 
+			self->totalInitialParticles, 
+			self->averageInitialParticlesPerCell, 
+			shape );
+}
+	
+void _WithinShapeParticleLayout_Build( void* withinShapeParticleLayout, void* data ) {
+}
+void _WithinShapeParticleLayout_Initialise( void* withinShapeParticleLayout, void* data ) {
+}
+void _WithinShapeParticleLayout_Execute( void* withinShapeParticleLayout, void* data ) {
+}
+void _WithinShapeParticleLayout_Destroy( void* withinShapeParticleLayout, void* data ) {
+}
+
+void _WithinShapeParticleLayout_InitialiseParticles( void* particleLayout, void* _swarm )
+{
+	WithinShapeParticleLayout*	self          = (WithinShapeParticleLayout*)particleLayout;
+	Swarm*			        swarm         = (Swarm*)_swarm;
+	GlobalParticle*                 particle      = NULL;
+	Particle_Index		        lParticle_I   = 0;
+	Particle_Index		        newParticle_I = 0;
+	Cell_Index		        cell_I;
+	
+	/* Go through and init particles */
+	while( newParticle_I < self->totalInitialParticles ) {
+		
+		particle = (GlobalParticle*)Swarm_ParticleAt( swarm, lParticle_I );
+
+		GlobalParticleLayout_InitialiseParticle( self, swarm, newParticle_I, particle );
+
+		/* Test the particle is inside our desired shape */
+		if ( Stg_Shape_IsCoordInside( self->shape, particle->coord ) ) {
+			
+			newParticle_I++;
+			/* Work out which cell the new particle is in */
+			/* First specify the particle doesn't have an owning cell yet, so as
+			not to confuse the search algorithm */
+			particle->owningCell = swarm->cellDomainCount;
+			cell_I = CellLayout_CellOf( swarm->cellLayout, particle );
+
+			/* If we found a further particle inside our domain add it to a cell */
+			if ( cell_I < swarm->cellLocalCount ) {
+				/* Add it to that cell */
+				Swarm_AddParticleToCell( swarm, cell_I, lParticle_I );
+				lParticle_I++;
+				swarm->particleLocalCount++;
+				Swarm_Realloc( swarm );
+			}
+		}
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/WithinShapeParticleLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/WithinShapeParticleLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ParticleLayout abstract class to a space fill of the given shape.
+**
+** Assumptions:
+**	Cell is a right-angled cuboid.
+**
+** Comments:
+**
+** $Id: WithinShapeParticleLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_WithinShapeParticleLayout_h__
+#define __Domain_Swarm_WithinShapeParticleLayout_h__
+	
+
+	/* Textual name of this class */
+	extern const Type WithinShapeParticleLayout_Type;
+	
+	extern const Index WithinShapeParticleLayout_Invalid;
+
+	/* WithinShapeParticleLayout information */
+	#define __WithinShapeParticleLayout \
+		/* General info */ \
+		__SpaceFillerParticleLayout \
+		/* Virtual info */ \
+		/* Other info */ \
+		Stg_Shape*                    shape; 
+
+	struct WithinShapeParticleLayout { __WithinShapeParticleLayout };
+	
+	/* Create a new WithinShapeParticleLayout and initialise */
+	
+	WithinShapeParticleLayout* WithinShapeParticleLayout_New( 
+			Name                    name, 
+			Dimension_Index         dim, 
+			Particle_Index          totalInitialParticles, 
+			Stg_Shape*              shape );
+	
+	/* Creation implementation / Virtual constructor */
+	WithinShapeParticleLayout* _WithinShapeParticleLayout_New( 
+		SizeT                                            _sizeOfSelf,
+		Type                                             type,
+		Stg_Class_DeleteFunction*                        _delete,
+		Stg_Class_PrintFunction*                         _print,
+		Stg_Class_CopyFunction*                          _copy, 
+		Stg_Component_DefaultConstructorFunction*        _defaultConstructor,
+		Stg_Component_ConstructFunction*                 _construct,
+		Stg_Component_BuildFunction*                     _build,
+		Stg_Component_InitialiseFunction*                _initialise,
+		Stg_Component_ExecuteFunction*                   _execute,
+		Stg_Component_DestroyFunction*                   _destroy,
+		ParticleLayout_SetInitialCountsFunction*         _setInitialCounts,
+		ParticleLayout_InitialiseParticlesFunction*      _initialiseParticles,
+		GlobalParticleLayout_InitialiseParticleFunction* _initialiseParticle,
+		Name                                             name,
+		Bool                                             initFlag,
+		Dimension_Index                                  dim, 
+		Particle_Index                                   totalInitialParticles, 
+		double                                           averageInitialParticlesPerCell,
+		Stg_Shape*                                       shape );
+	
+	void _WithinShapeParticleLayout_Init( 
+			void*                   withinShapeParticleLayout, 
+			Dimension_Index         dim, 
+			Particle_Index          totalInitialParticles, 
+			double                  averageInitialParticlesPerCell,
+			Stg_Shape*              shape );
+
+	/* 'Stg_Class' Stuff */
+	void _WithinShapeParticleLayout_Delete( void* withinShapeParticleLayout );
+	void _WithinShapeParticleLayout_Print( void* withinShapeParticleLayout, Stream* stream );
+	#define WithinShapeParticleLayout_Copy( self ) \
+		(WithinShapeParticleLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define WithinShapeParticleLayout_DeepCopy( self ) \
+		(WithinShapeParticleLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _WithinShapeParticleLayout_Copy( void* withinShapeParticleLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Stuff */
+	void* _WithinShapeParticleLayout_DefaultNew( Name name ) ;
+	void _WithinShapeParticleLayout_Construct( void* withinShapeParticleLayout, Stg_ComponentFactory *cf, void* data );
+	void _WithinShapeParticleLayout_Build( void* withinShapeParticleLayout, void* data );
+	void _WithinShapeParticleLayout_Initialise( void* withinShapeParticleLayout, void* data );
+	void _WithinShapeParticleLayout_Execute( void* withinShapeParticleLayout, void* data );
+	void _WithinShapeParticleLayout_Destroy( void* withinShapeParticleLayout, void* data );
+	
+	void _WithinShapeParticleLayout_InitialiseParticles( void* withinShapeParticleLayout, void* swarm ) ;
+	void _WithinShapeParticleLayout_InitialiseParticle( 
+			void*          withinShapeParticleLayout, 
+			void*          swarm, 
+			Particle_Index newParticle_I,
+			void*          particle);
+
+#endif /* __StGermain_Domain_Shape_WithinShapeParticleLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/WithinShapeParticleLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/WithinShapeParticleLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">WithinShapeParticleLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Swarm/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">SpaceFillerParticleLayout</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This uses the SpaceFillerParticleLayout class to choose quasi-random particle positions, but it only places a particle there if it is within a particular shape.</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">shape</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">This is the shape within which all the particles will be laid out.</param>
+	</struct>
+</list>
+
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+	<struct name="particleLayout">
+		<param name="Type">WithinShapeParticleLayout</param>
+		<param name="totalInitialParticles">6000</param>
+		<param name="shape">boxShape</param>
+	</struct>
+</param>
+
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,130 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+lib = StgDomainSwarm
+libstatic = yes
+libdynamic = yes
+includes = StgDomain/Swarm
+
+SRCS = \
+	CellLayout.c \
+	ElementCellLayout.c \
+	FileParticleLayout.c \
+	Finalise.c \
+	GaussBorderParticleLayout.c \
+	GaussParticleLayout.c \
+	GlobalParticleLayout.c \
+	Init.c \
+	IntegrationPoint.c \
+	LineParticleLayout.c \
+	ManualParticleLayout.c \
+	MeshParticleLayout.c \
+	OperatorSwarmVariable.c \
+	ParticleCommHandler.c \
+	ParticleLayout.c \
+	ParticleMovementHandler.c \
+	ParticleShadowSync.c \
+	PerCellParticleLayout.c \
+	PlaneParticleLayout.c \
+	Random.c \
+	RandomParticleLayout.c \
+	SingleCellLayout.c \
+	SpaceFillerParticleLayout.c \
+	StandardParticle.c \
+	SwarmClass.c \
+	SwarmDump.c \
+	SwarmOutput.c \
+	SwarmShapeVC.c \
+	SwarmVariable.c \
+	SwarmVariable_Register.c \
+	Swarm_Register.c \
+	TriGaussParticleLayout.c \
+	TriSingleCellLayout.c \
+	UnionParticleLayout.c \
+	WithinShapeParticleLayout.c
+	
+HDRS = \
+	CellLayout.h \
+	ElementCellLayout.h \
+	FileParticleLayout.h \
+	Finalise.h \
+	GaussBorderParticleLayout.h \
+	GaussParticleLayout.h \
+	GlobalParticleLayout.h \
+	Init.h \
+	IntegrationPoint.h \
+	LineParticleLayout.h \
+	ManualParticleLayout.h \
+	MeshParticleLayout.h \
+	OperatorSwarmVariable.h \
+	ParticleCommHandler.h \
+	ParticleLayout.h \
+	ParticleMovementHandler.h \
+	ParticleShadowSync.h \
+	PerCellParticleLayout.h \
+	PlaneParticleLayout.h \
+	Random.h \
+	RandomParticleLayout.h \
+	ShadowInfo.h \
+	SingleCellLayout.h \
+	SpaceFillerParticleLayout.h \
+	StandardParticle.h \
+	Swarm.h \
+	SwarmClass.h \
+	SwarmDump.h \
+	SwarmOutput.h \
+	SwarmShapeVC.h \
+	SwarmVariable.h \
+	SwarmVariable_Register.h \
+	Swarm_Register.h \
+	TriGaussParticleLayout.h \
+	TriSingleCellLayout.h \
+	UnionParticleLayout.h \
+	WithinShapeParticleLayout.h \
+	shortcuts.h \
+	types.h
+
+EXTERNAL_INCLUDES = 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainMesh -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/shortcuts.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/shortcuts.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Shortcuts to complex types in the eyes of the Domain_Swarm user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_shortcuts_h__
+#define __Domain_Swarm_shortcuts_h__
+
+	/* Domain_Swarm shortcuts */
+
+#endif /* __Domain_Swarm_shortcuts_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/src/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/src/types.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: types.h 4172 2007-08-16 03:34:16Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Swarm_types_h__
+#define __Domain_Swarm_types_h__
+	
+	/* Types user needs to define */
+	typedef struct _Particle			Particle;
+
+	typedef struct ProcNbrInfo	ProcNbrInfo;
+	typedef struct ShadowInfo	ShadowInfo;
+
+	/** Types of coordinate system a particle/swarm is using */
+	typedef enum {
+		LocalCoordSystem = 0,
+		GlobalCoordSystem
+	} CoordSystem;
+
+	/* Cell types ... for readability */
+	typedef Index					Cell_Index;
+	typedef Index					Cell_LocalIndex;
+	typedef Index					Cell_DomainIndex;
+	typedef Index					Cell_ShadowIndex;
+	typedef Index					Cell_ShadowTransferIndex;
+	typedef double**				Cell_Point;
+	typedef Cell_Point*				Cell_Points;
+	typedef Cell_Points*				Cell_PointsList;
+	typedef Index					Cell_PointIndex;
+	typedef Cell_PointIndex*			Cell_PointIndexList;
+	
+	/* Particle types ... for readability */
+	typedef Index					Particle_Index;
+	typedef Index					Particle_InCellIndex;
+	typedef Particle_Index*				Cell_Particles;
+	typedef Cell_Particles*				Cell_ParticlesList;
+	typedef Particle_InCellIndex*			Cell_ParticlesIndexList;
+	typedef char                                    Particle_Bool;
+
+	typedef Particle*				Particle_List;
+	
+	typedef Index					SwarmShapeVC_Entry_Index;
+
+	/* Domain_Swarm types/classes */
+	typedef struct CellLayout			CellLayout;
+	typedef struct SingleCellLayout			SingleCellLayout;
+	typedef struct TriSingleCellLayout		TriSingleCellLayout;
+	typedef struct ElementCellLayout		ElementCellLayout;
+	typedef struct ParticleLayout			ParticleLayout;
+	typedef struct PerCellParticleLayout		PerCellParticleLayout;
+	typedef struct RandomParticleLayout		RandomParticleLayout;
+	typedef struct MeshParticleLayout		MeshParticleLayout;
+	typedef struct GaussParticleLayout		GaussParticleLayout;
+	typedef struct TriGaussParticleLayout		TriGaussParticleLayout;
+	typedef struct GaussBorderParticleLayout	GaussBorderParticleLayout;
+	typedef struct GlobalParticleLayout		GlobalParticleLayout;
+	typedef struct SpaceFillerParticleLayout        SpaceFillerParticleLayout;
+	typedef struct WithinShapeParticleLayout        WithinShapeParticleLayout;
+	typedef struct PlaneParticleLayout	        PlaneParticleLayout;
+	typedef struct UnionParticleLayout	        UnionParticleLayout;
+	typedef struct ManualParticleLayout		ManualParticleLayout;
+	typedef struct LineParticleLayout		LineParticleLayout;
+	typedef struct FileParticleLayout		FileParticleLayout;
+	typedef struct Swarm				Swarm;
+	typedef struct Swarm_Register			Swarm_Register;
+	typedef struct SwarmDump			SwarmDump;
+	typedef struct ParticleCommHandler		ParticleCommHandler;
+	typedef struct ParticleMovementHandler		ParticleMovementHandler;
+	typedef struct ParticleShadowSync               ParticleShadowSync;
+	typedef struct SwarmVariable_Register           SwarmVariable_Register;
+	typedef struct SwarmVariable			SwarmVariable;
+	typedef struct OperatorSwarmVariable		OperatorSwarmVariable;
+	typedef struct SwarmOutput			SwarmOutput;
+	typedef struct SwarmShapeVC			SwarmShapeVC;
+
+	typedef struct BaseParticle                     BaseParticle;
+	typedef struct StandardParticle			StandardParticle;
+	typedef struct LocalParticle			LocalParticle;
+	typedef struct GlobalParticle			GlobalParticle;
+	typedef struct IntegrationPoint			IntegrationPoint;
+	
+	/* output streams: initialised in Swarm_Init() */
+	extern Stream* Swarm_VerboseConfig;
+	extern Stream* Swarm_Debug;
+	extern Stream* Swarm_Warning;
+	extern Stream* Swarm_Error;
+	
+#endif /* __Domain_Swarm_types_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/Bouncer/Bouncer.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/Bouncer/Bouncer.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,119 @@
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <assert.h>
+#include <string.h>
+
+const Type StGermain_Bouncer_Type = "StGermain_Bouncer";
+
+typedef struct {
+	__Codelet
+} StGermain_Bouncer;
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+void StGermain_Bouncer_UpdatePositions( DomainContext* context ) {
+	Cell_LocalIndex			lCell_I;
+	Particle_InCellIndex		cParticle_I;
+	Particle* 	        	currParticle;
+	Index				dim_I;
+	Swarm*                          swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	BlockGeometry*                  blockGeom;
+	Stream*                         stream = Journal_Register( Debug_Type, "particleUpdate" );
+	unsigned int                    movementSpeedDivisor = 5;
+	Particle_Index                  lParticle_I = 0;
+
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	
+	blockGeom = (BlockGeometry*) LiveComponentRegister_Get( context->CF->LCRegister, "geometry" );
+
+	if ( context->timeStep == 1 ) {
+		/* for each particle, set a random velocity */
+		for ( lParticle_I=0; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+			currParticle = (Particle*)Swarm_ParticleAt( swarm, lParticle_I );
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->velocity[dim_I] = ((double) ( rand() - (double)(RAND_MAX)/2 )) / RAND_MAX * 0.1;
+			}	
+		}
+	}
+	
+	for ( lCell_I=0; lCell_I < swarm->cellLocalCount; lCell_I++ ) {
+		Journal_Printf( stream, "\tUpdating Particles positions in local cell %d:\n", lCell_I );
+		for ( cParticle_I=0; cParticle_I < swarm->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			Coord movementVector = {0,0,0};
+			Coord newParticleCoord = {0,0,0};
+			Coord* oldCoord;
+
+			currParticle = (Particle*)Swarm_ParticleInCellAt( swarm, lCell_I, cParticle_I );
+			oldCoord = &currParticle->coord;
+			Journal_Printf( stream, "\t\tUpdating particleInCell %d:\n", cParticle_I );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				movementVector[dim_I] = currParticle->velocity[dim_I] / movementSpeedDivisor;
+				if ( ( currParticle->velocity[dim_I] < 0 ) 
+					&& ( fabs(currParticle->velocity[dim_I] ) > ((*oldCoord)[dim_I] - blockGeom->min[dim_I]) ) )
+				{
+					Journal_Printf( stream, "\t\tFlipping vel in %d dir\n", dim_I );
+					movementVector[dim_I] *= -1;
+					currParticle->velocity[dim_I] *= -1;
+				}	
+				if ( ( currParticle->velocity[dim_I] > 0 ) 
+					&& ( fabs(currParticle->velocity[dim_I] ) > ( blockGeom->max[dim_I] - (*oldCoord)[dim_I] ) ) )
+				{
+					Journal_Printf( stream, "\t\tFlipping vel in %d dir\n", dim_I );
+					movementVector[dim_I] *= -1;
+					currParticle->velocity[dim_I] *= -1;
+				}	
+				
+				newParticleCoord[dim_I] = (*oldCoord)[dim_I] + movementVector[dim_I];
+			}
+
+			Journal_Printf( stream, "\t\tChanging its coords from (%f,%f,%f) to (%f,%f,%f):\n",
+				(*oldCoord)[0], (*oldCoord)[1], (*oldCoord)[2],
+				newParticleCoord[0], newParticleCoord[1], newParticleCoord[2] );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->coord[dim_I] = newParticleCoord[dim_I];
+			}
+		}
+	}
+
+	Swarm_UpdateAllParticleOwners( swarm );
+}
+
+
+void _StGermain_Bouncer_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	DomainContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DomainContext, True, data );
+	
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Solve, StGermain_Bouncer_UpdatePositions );
+}
+
+
+void* _StGermain_Bouncer_DefaultNew( Name name ) {
+	return Codelet_New(
+			StGermain_Bouncer_Type,
+			_StGermain_Bouncer_DefaultNew,
+			_StGermain_Bouncer_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+	}
+
+Index StGermain_Bouncer_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, StGermain_Bouncer_Type, "0", _StGermain_Bouncer_DefaultNew );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/Bouncer/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/Bouncer/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+#subdirs := tests
+
+# Source Code and Header files
+SRCS := $(wildcard *.c)
+HDRS := $(wildcard *.h)
+
+# What to call the plugin
+modName := $(shell basename `pwd`)
+mod = ${PROJECT}_${modName}
+
+# Where to put header files
+includes = ${PROJECT}/${modName}
+
+# External Libraries and Headers
+packages = STGERMAIN MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,38 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3636 2006-06-13 10:09:59Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = SingleAttractor VaryingCornerAttractors Bouncer Spinner
+
+def_tst = libStGermainDiscretisationSwarm
+
+def_srcs = $(wildcard *.c)
+
+def_checks = $(wildcard test*.*of*.sh)
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/SingleAttractor/SingleAttractor.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/SingleAttractor/SingleAttractor.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,123 @@
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <assert.h>
+#include <string.h>
+
+const Type StGermain_SingleAttractor_Type = "StGermain_SingleAttractor";
+
+typedef struct {
+	__Codelet
+} StGermain_SingleAttractor;
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+void StGermain_SingleAttractor_UpdatePositions( DomainContext* context ) {
+	Cell_LocalIndex			lCell_I;
+	Particle_InCellIndex		cParticle_I;
+	Particle* 	        	currParticle;
+	Index				dim_I;
+	Swarm*                          swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	Coord                           attractorPoint;
+	Mesh*				mesh;
+	Stream*                         stream = Journal_Register( Info_Type, "particleUpdate" );
+	unsigned int                    movementSpeedDivisor = 0;
+	int                             movementSign = 1;
+	unsigned int                    explosionPeriod = 20;
+	double				minCrd[3], maxCrd[3];
+
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	movementSpeedDivisor = Dictionary_GetDouble_WithDefault( context->dictionary, "movementSpeedDivisor", 10 );
+	
+	mesh = (Mesh*)LiveComponentRegister_Get( context->CF->LCRegister, "mesh-linear" );
+	Mesh_GetGlobalCoordRange( mesh, minCrd, maxCrd );
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		attractorPoint[dim_I] = (maxCrd[dim_I] - minCrd[dim_I]) / 3;
+	}
+	Journal_Printf( stream, "Calculated attractor point is at (%f,%f,%f):\n", attractorPoint[0], attractorPoint[1], attractorPoint[2] );
+	
+	/* Now decide if we are attracting or repelling */
+	if ( ( ( (context->timeStep - 1) / explosionPeriod ) % 2 ) == 0 ) {
+		Journal_Printf( stream, "Timestep %d - Implosive mode\n", context->timeStep );
+		movementSign = 1;
+	}
+	else {
+		Journal_Printf( stream, "Timestep %d - Explosive mode\n", context->timeStep );
+		movementSign = -1;
+	}	
+
+	
+	for ( lCell_I=0; lCell_I < swarm->cellLocalCount; lCell_I++ ) {
+		Journal_Printf( stream, "\tUpdating Particles positions in local cell %d:\n", lCell_I );
+		for ( cParticle_I=0; cParticle_I < swarm->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			Coord movementVector = {0,0,0};
+			Coord newParticleCoord = {0,0,0};
+			Coord* oldCoord;
+
+			currParticle = (Particle*)Swarm_ParticleInCellAt( swarm, lCell_I, cParticle_I );
+			oldCoord = &currParticle->coord;
+			Journal_Printf( stream, "\t\tUpdating particleInCell %d:\n", cParticle_I );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				movementVector[dim_I] = ( attractorPoint[dim_I] - (*oldCoord)[dim_I] ) /
+					movementSpeedDivisor;
+				movementVector[dim_I] *= movementSign;	
+				if ( movementSign == -1 ) {
+					movementVector[dim_I] *= (float)movementSpeedDivisor / (movementSpeedDivisor-1); 
+				}
+				newParticleCoord[dim_I] = (*oldCoord)[dim_I] + movementVector[dim_I];
+			}
+			memcpy( currParticle->velocity, movementVector, 3*sizeof(double) ); 
+
+			Journal_Printf( stream, "\t\tChanging its coords from (%f,%f,%f) to (%f,%f,%f):\n",
+				(*oldCoord)[0], (*oldCoord)[1], (*oldCoord)[2],
+				newParticleCoord[0], newParticleCoord[1], newParticleCoord[2] );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->coord[dim_I] = newParticleCoord[dim_I];
+			}
+		}
+	}
+
+	Swarm_UpdateAllParticleOwners( swarm );
+}
+
+
+void _StGermain_SingleAttractor_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	DomainContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DomainContext, True, data );
+	Stream_SetPrintingRank( 
+		Journal_Register( Info_Type, "Context" ),
+		Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Solve, StGermain_SingleAttractor_UpdatePositions );
+}
+
+
+void* _StGermain_SingleAttractor_DefaultNew( Name name ) {
+	return Codelet_New(
+			StGermain_SingleAttractor_Type,
+			_StGermain_SingleAttractor_DefaultNew,
+			_StGermain_SingleAttractor_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+	}
+
+Index StGermain_SingleAttractor_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, StGermain_SingleAttractor_Type, "0", _StGermain_SingleAttractor_DefaultNew );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/SingleAttractor/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/SingleAttractor/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+#subdirs := tests
+
+# Source Code and Header files
+SRCS := $(wildcard *.c)
+HDRS := $(wildcard *.h)
+
+# What to call the plugin
+modName := $(shell basename `pwd`)
+mod = ${PROJECT}_${modName}
+
+# Where to put header files
+includes = ${PROJECT}/${modName}
+
+# External Libraries and Headers
+packages = STGERMAIN MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/Spinner/Spinner.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/Spinner/Spinner.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,118 @@
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+#define PI 3.1415926535897931
+
+const Type StGermain_Spinner_Type = "StGermain_Spinner";
+
+typedef struct {
+	__Codelet
+} StGermain_Spinner;
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+void StGermain_Spinner_UpdatePositions( DomainContext* context ) {
+	Cell_LocalIndex			lCell_I;
+	Particle_InCellIndex		cParticle_I;
+	Particle* 	        	currParticle;
+	Index				dim_I;
+	Swarm*                          swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	BlockGeometry*                  blockGeom;
+	Stream*                         stream = Journal_Register( Debug_Type, "particleUpdate" );
+	unsigned int                    movementSpeedDivisor = 100;
+	double                          x, y;
+	Bool                            reverseMode = False;
+	Index                           reverseTimeStep;
+	
+	reverseTimeStep = Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "reverseTimeStep", 100 );
+	if ( context->timeStep >= reverseTimeStep ) {
+		Journal_Printf( stream, "Current timestep %d >= reverse step -> reversing flow field.\n",
+			context->timeStep );
+		reverseMode = True;	
+	}	
+
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	
+	blockGeom = (BlockGeometry*) LiveComponentRegister_Get( context->CF->LCRegister, "geometry" );
+
+	for ( lCell_I=0; lCell_I < swarm->cellLocalCount; lCell_I++ ) {
+		Journal_Printf( stream, "\tUpdating Particles positions in local cell %d:\n", lCell_I );
+		for ( cParticle_I=0; cParticle_I < swarm->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			Coord movementVector = {0,0,0};
+			Coord newParticleCoord = {0,0,0};
+			Coord* oldCoord;
+
+			currParticle = (Particle*)Swarm_ParticleInCellAt( swarm, lCell_I, cParticle_I );
+			oldCoord = &currParticle->coord;
+			Journal_Printf( stream, "\t\tUpdating particleInCell %d:\n", cParticle_I );
+
+			x = currParticle->coord[0];
+			y = currParticle->coord[1];
+			movementVector[0] = 2 * -1 * pow( sin( PI * x ), 2 ) * sin( PI * y ) * cos( PI * y );
+			movementVector[1] = 2 *  1 * pow( sin( PI * y ), 2 ) * sin( PI * x ) * cos( PI * x );
+			movementVector[2] = 0;
+
+			if ( reverseMode ) {
+				movementVector[0] *= -1;
+				movementVector[1] *= -1;
+			}
+			
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				movementVector[dim_I] /= movementSpeedDivisor;
+				currParticle->velocity[dim_I] = movementVector[dim_I];
+				newParticleCoord[dim_I] = (*oldCoord)[dim_I] + movementVector[dim_I];
+			}
+
+			Journal_Printf( stream, "\t\tChanging its coords from (%f,%f,%f) to (%f,%f,%f):\n",
+				(*oldCoord)[0], (*oldCoord)[1], (*oldCoord)[2],
+				newParticleCoord[0], newParticleCoord[1], newParticleCoord[2] );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->coord[dim_I] = newParticleCoord[dim_I];
+			}
+		}
+	}
+
+	Swarm_UpdateAllParticleOwners( swarm );
+}
+
+
+void _StGermain_Spinner_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	DomainContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DomainContext, True, data );
+	
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Solve, StGermain_Spinner_UpdatePositions );
+}
+
+
+void* _StGermain_Spinner_DefaultNew( Name name ) {
+	return Codelet_New(
+			StGermain_Spinner_Type,
+			_StGermain_Spinner_DefaultNew,
+			_StGermain_Spinner_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+	}
+
+Index StGermain_Spinner_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, StGermain_Spinner_Type, "0", _StGermain_Spinner_DefaultNew );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/Spinner/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/Spinner/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+#subdirs := tests
+
+# Source Code and Header files
+SRCS := $(wildcard *.c)
+HDRS := $(wildcard *.h)
+
+# What to call the plugin
+modName := $(shell basename `pwd`)
+mod = ${PROJECT}_${modName}
+
+# Where to put header files
+includes = ${PROJECT}/${modName}
+
+# External Libraries and Headers
+packages = STGERMAIN MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,161 @@
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <assert.h>
+#include <string.h>
+
+const Type StGermain_VaryingCornerAttractors_Type = "StGermain_VaryingCornerAttractors";
+
+typedef struct {
+	__Codelet
+} StGermain_VaryingCornerAttractors;
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+void StGermain_VaryingCornerAttractors_UpdatePositions( DomainContext* context ) {
+	Cell_LocalIndex			lCell_I;
+	Particle_InCellIndex		cParticle_I;
+	Particle* 	        	currParticle;
+	Index				dim_I;
+	Swarm*                          swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	Coord                           attractorPoint;
+	BlockGeometry*                  blockGeometry;
+	Stream*                         stream = Journal_Register( Debug_Type, "particleUpdate" );
+	unsigned int                    movementSpeedDivisor = 10;
+	int                             movementSign = 1;
+	unsigned int                    cornerPeriod = 10;
+	unsigned int                    numCorners = (swarm->dim-1)*4;
+	unsigned int                    explosionPeriod = numCorners*cornerPeriod;
+	Coord                           cornerCoords[8];
+	int                             modValue = 0;
+	int                             cornerIndex = 0;
+
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	
+	blockGeometry = (BlockGeometry*) LiveComponentRegister_Get( context->CF->LCRegister, "geometry" );
+
+		/* Bottom left corner */
+	cornerCoords[0][I_AXIS] = blockGeometry->min[I_AXIS];
+	cornerCoords[0][J_AXIS] = blockGeometry->min[J_AXIS];
+	cornerCoords[0][K_AXIS] = blockGeometry->min[K_AXIS];
+	/* Bottom right corner */
+	cornerCoords[1][I_AXIS] = blockGeometry->max[I_AXIS];
+	cornerCoords[1][J_AXIS] = blockGeometry->min[J_AXIS];
+	cornerCoords[1][K_AXIS] = blockGeometry->min[K_AXIS];
+	/* Top right corner */
+	cornerCoords[2][I_AXIS] = blockGeometry->max[I_AXIS];
+	cornerCoords[2][J_AXIS] = blockGeometry->max[J_AXIS];
+	cornerCoords[2][K_AXIS] = blockGeometry->min[K_AXIS];
+	/* Top left corner */
+	cornerCoords[3][I_AXIS] = blockGeometry->min[I_AXIS];
+	cornerCoords[3][J_AXIS] = blockGeometry->max[J_AXIS];
+	cornerCoords[3][K_AXIS] = blockGeometry->min[K_AXIS];
+	/* Bottom left corner */
+	cornerCoords[4][I_AXIS] = blockGeometry->min[I_AXIS];
+	cornerCoords[4][J_AXIS] = blockGeometry->max[J_AXIS];
+	cornerCoords[4][K_AXIS] = blockGeometry->max[K_AXIS];
+	/* Bottom right corner */
+	cornerCoords[5][I_AXIS] = blockGeometry->min[I_AXIS];
+	cornerCoords[5][J_AXIS] = blockGeometry->min[J_AXIS];
+	cornerCoords[5][K_AXIS] = blockGeometry->max[K_AXIS];
+	/* Top right corner */
+	cornerCoords[6][I_AXIS] = blockGeometry->max[I_AXIS];
+	cornerCoords[6][J_AXIS] = blockGeometry->min[J_AXIS];
+	cornerCoords[6][K_AXIS] = blockGeometry->max[K_AXIS];
+	/* Top left corner */
+	cornerCoords[7][I_AXIS] = blockGeometry->max[I_AXIS];
+	cornerCoords[7][J_AXIS] = blockGeometry->max[J_AXIS];
+	cornerCoords[7][K_AXIS] = blockGeometry->max[K_AXIS];
+
+	/* calculate which corner */
+	modValue = (context->timeStep - 1) % (numCorners * cornerPeriod);
+	cornerIndex = modValue / cornerPeriod;
+	memcpy( attractorPoint, cornerCoords[cornerIndex], 3 * sizeof(double) );
+	Journal_Printf( stream, "Calculated attractor point is at (%f,%f,%f):\n", attractorPoint[0], attractorPoint[1], attractorPoint[2] );
+	
+	/* Can't really explode in this test as particles go out of box */
+	#if 0
+	/* Now decide if we are attracting or repelling */
+	if ( ( ( (context->timeStep - 1) / explosionPeriod ) % 2 ) == 0 ) {
+		Journal_Printf( stream, "Timestep %d - Implosive mode\n", context->timeStep );
+		movementSign = 1;
+	}
+	else {
+		Journal_Printf( stream, "Timestep %d - Explosive mode\n", context->timeStep );
+		movementSign = -1;
+	}	
+	#endif
+
+	
+	for ( lCell_I=0; lCell_I < swarm->cellLocalCount; lCell_I++ ) {
+		Journal_Printf( stream, "\tUpdating Particles positions in local cell %d:\n", lCell_I );
+		for ( cParticle_I=0; cParticle_I < swarm->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			Coord movementVector = {0,0,0};
+			Coord newParticleCoord = {0,0,0};
+			Coord* oldCoord;
+
+			currParticle = (Particle*)Swarm_ParticleInCellAt( swarm, lCell_I, cParticle_I );
+			oldCoord = &currParticle->coord;
+			Journal_Printf( stream, "\t\tUpdating particleInCell %d:\n", cParticle_I );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				movementVector[dim_I] = ( attractorPoint[dim_I] - (*oldCoord)[dim_I] ) /
+					movementSpeedDivisor;
+				movementVector[dim_I] *= movementSign;	
+				if ( movementSign == -1 ) {
+					movementVector[dim_I] *= (float)movementSpeedDivisor / (movementSpeedDivisor-1); 
+				}
+				newParticleCoord[dim_I] = (*oldCoord)[dim_I] + movementVector[dim_I];
+			}
+			memcpy( currParticle->velocity, movementVector, 3*sizeof(double) ); 
+
+			Journal_Printf( stream, "\t\tChanging its coords from (%f,%f,%f) to (%f,%f,%f):\n",
+				(*oldCoord)[0], (*oldCoord)[1], (*oldCoord)[2],
+				newParticleCoord[0], newParticleCoord[1], newParticleCoord[2] );
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->coord[dim_I] = newParticleCoord[dim_I];
+			}
+		}
+	}
+
+	Swarm_UpdateAllParticleOwners( swarm );
+}
+
+
+void _StGermain_VaryingCornerAttractors_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	DomainContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DomainContext, True, data );
+	
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Solve, StGermain_VaryingCornerAttractors_UpdatePositions );
+}
+
+
+void* _StGermain_VaryingCornerAttractors_DefaultNew( Name name ) {
+	return Codelet_New(
+			StGermain_VaryingCornerAttractors_Type,
+			_StGermain_VaryingCornerAttractors_DefaultNew,
+			_StGermain_VaryingCornerAttractors_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+	}
+
+Index StGermain_VaryingCornerAttractors_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, StGermain_VaryingCornerAttractors_Type, "0",
+	_StGermain_VaryingCornerAttractors_DefaultNew );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/VaryingCornerAttractors/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/VaryingCornerAttractors/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,24 @@
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+#subdirs := tests
+
+# Source Code and Header files
+SRCS := $(wildcard *.c)
+HDRS := $(wildcard *.h)
+
+# What to call the plugin
+modName := $(shell basename `pwd`)
+mod = ${PROJECT}_${modName}
+
+# Where to put header files
+includes = ${PROJECT}/${modName}
+
+# External Libraries and Headers
+packages = STGERMAIN MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,21 @@
+Printing coords of all local processor particles:
+	local particle      0: (      0,       1,       0)
+	local particle      1: (      0,  2.6842,       0)
+	local particle      2: (      0,  4.3684,       0)
+	local particle      3: (      0,  6.0526,       0)
+	local particle      4: (      0,  7.7368,       0)
+	local particle      5: (      0,  9.4211,       0)
+	local particle      6: (0.10526,      11,       0)
+	local particle      7: ( 1.7895,      11,       0)
+	local particle      8: ( 3.4737,      11,       0)
+	local particle      9: ( 5.1579,      11,       0)
+	local particle     10: ( 6.8421,      11,       0)
+	local particle     11: ( 8.5263,      11,       0)
+	local particle     12: ( 10.211,      11,       0)
+	local particle     13: ( 11.895,      11,       0)
+	local particle     14: ( 13.579,      11,       0)
+	local particle     15: ( 15.263,      11,       0)
+	local particle     16: ( 16.947,      11,       0)
+	local particle     17: ( 18.632,      11,       0)
+	local particle     18: ( 20.316,      11,       0)
+	local particle     19: (     22,      11,       0)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,187 @@
+SpaceFillerParticleLayout (ptr): 0x6459a0:
+	GlobalParticleLayout (ptr): 0x6459a0
+	ParticleLayout (ptr): 0x6459a0
+	Stg_Class (ptr): 0x6459a0
+		sizeOfSelf: 272
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0x2aaaaaaca404
+		_print (func ptr): 0x2aaaaaaca455
+		_copy (func ptr): 0x2aaaaaaca508
+		_setInitialCounts (func ptr): 0x2aaaaaac078f
+		_initialiseParticles (func ptr): 0x2aaaaaaca742
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0x2aaaaaaca769
+		totalInitialParticles: 160
+		averageInitialParticlesPerCell: 20
+	self->dim = 3
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      5): (     50,      75,    37.5)
+		part. InCell   1 (local index     17): (   87.5,   18.75,  15.625)
+		part. InCell   2 (local index     19): (   37.5,   93.75,  28.125)
+		part. InCell   3 (local index     33): (   6.25,  71.875,  82.812)
+		part. InCell   4 (local index     35): (  56.25,  46.875,  70.312)
+		part. InCell   5 (local index     47): (  93.75,  53.125,  98.438)
+		part. InCell   6 (local index     53): (  43.75,  28.125,  60.938)
+		part. InCell   7 (local index     71): ( 84.375,  26.562,  49.219)
+		part. InCell   8 (local index     77): ( 34.375,  51.562,  11.719)
+		part. InCell   9 (local index     89): ( 21.875,  45.312,  33.594)
+		part. InCell  10 (local index     91): ( 71.875,  70.312,  21.094)
+		part. InCell  11 (local index    105): ( 78.125,  98.438,  66.406)
+		part. InCell  12 (local index    107): ( 28.125,  23.438,  78.906)
+		part. InCell  13 (local index    119): ( 15.625,  79.688,  50.781)
+		part. InCell  14 (local index    125): ( 65.625,  4.6875,  88.281)
+		part. InCell  15 (local index    129): ( 32.812,  7.0312,  69.141)
+		part. InCell  16 (local index    131): ( 82.812,  82.031,  81.641)
+		part. InCell  17 (local index    143): ( 70.312,  13.281,  59.766)
+		part. InCell  18 (local index    149): ( 20.312,  88.281,  97.266)
+		part. InCell  19 (local index    159): ( 26.562,  66.406,  39.453)
+	Local Cell   1:
+		part. InCell   0 (local index      0): (    200,     100,      50)
+		part. InCell   1 (local index      7): (    125,    62.5,   68.75)
+		part. InCell   2 (local index     13): (    175,    37.5,   81.25)
+		part. InCell   3 (local index     25): (  162.5,   56.25,  59.375)
+		part. InCell   4 (local index     27): (  112.5,   31.25,  96.875)
+		part. InCell   5 (local index     41): ( 131.25,   9.375,  39.062)
+		part. InCell   6 (local index     43): ( 181.25,  84.375,  1.5625)
+		part. InCell   7 (local index     55): ( 168.75,  15.625,  29.688)
+		part. InCell   8 (local index     61): ( 118.75,  90.625,  17.188)
+		part. InCell   9 (local index     63): ( 159.38,  89.062,  80.469)
+		part. InCell  10 (local index     69): ( 109.38,  14.062,  67.969)
+		part. InCell  11 (local index     81): ( 146.88,  82.812,  89.844)
+		part. InCell  12 (local index     83): ( 196.88,  7.8125,  52.344)
+		part. InCell  13 (local index     97): ( 153.12,  35.938,  10.156)
+		part. InCell  14 (local index     99): ( 103.12,  60.938,  47.656)
+		part. InCell  15 (local index    111): ( 140.62,  42.188,  19.531)
+		part. InCell  16 (local index    117): ( 190.62,  67.188,  32.031)
+		part. InCell  17 (local index    137): ( 107.81,  69.531, 0.39062)
+		part. InCell  18 (local index    139): ( 157.81,  44.531,  37.891)
+		part. InCell  19 (local index    151): ( 195.31,  50.781,  16.016)
+		part. InCell  20 (local index    157): ( 145.31,  25.781,  28.516)
+	Local Cell   2:
+		part. InCell   0 (local index      2): (    300,      50,      75)
+		part. InCell   1 (local index     10): (    225,    12.5,   43.75)
+		part. InCell   2 (local index     12): (    275,    87.5,    6.25)
+		part. InCell   3 (local index     24): (  262.5,    6.25,  34.375)
+		part. InCell   4 (local index     30): (  212.5,   81.25,  21.875)
+		part. InCell   5 (local index     40): ( 231.25,  59.375,  64.062)
+		part. InCell   6 (local index     46): ( 281.25,  34.375,  76.562)
+		part. InCell   7 (local index     58): ( 268.75,  65.625,  54.688)
+		part. InCell   8 (local index     60): ( 218.75,  40.625,  92.188)
+		part. InCell   9 (local index     66): ( 259.38,  39.062,  5.4688)
+		part. InCell  10 (local index     68): ( 209.38,  64.062,  42.969)
+		part. InCell  11 (local index     80): ( 246.88,  32.812,  14.844)
+		part. InCell  12 (local index     86): ( 296.88,  57.812,  27.344)
+		part. InCell  13 (local index     96): ( 253.12,  85.938,  85.156)
+		part. InCell  14 (local index    102): ( 203.12,  10.938,  72.656)
+		part. InCell  15 (local index    114): ( 240.62,  92.188,  94.531)
+		part. InCell  16 (local index    116): ( 290.62,  17.188,  57.031)
+		part. InCell  17 (local index    136): ( 207.81,  19.531,  75.391)
+		part. InCell  18 (local index    142): ( 257.81,  94.531,  62.891)
+		part. InCell  19 (local index    154): ( 295.31, 0.78125,  91.016)
+		part. InCell  20 (local index    156): ( 245.31,  75.781,  53.516)
+	Local Cell   3:
+		part. InCell   0 (local index      4): (    350,      25,    62.5)
+		part. InCell   1 (local index     16): (  387.5,   68.75,  90.625)
+		part. InCell   2 (local index     22): (  337.5,   43.75,  53.125)
+		part. InCell   3 (local index     32): ( 306.25,  21.875,  7.8125)
+		part. InCell   4 (local index     38): ( 356.25,  96.875,  45.312)
+		part. InCell   5 (local index     50): ( 393.75,   3.125,  23.438)
+		part. InCell   6 (local index     52): ( 343.75,  78.125,  35.938)
+		part. InCell   7 (local index     74): ( 384.38,  76.562,  74.219)
+		part. InCell   8 (local index     76): ( 334.38,  1.5625,  86.719)
+		part. InCell   9 (local index     88): ( 321.88,  95.312,  58.594)
+		part. InCell  10 (local index     94): ( 371.88,  20.312,  96.094)
+		part. InCell  11 (local index    104): ( 378.12,  48.438,  41.406)
+		part. InCell  12 (local index    110): ( 328.12,  73.438,  3.9062)
+		part. InCell  13 (local index    122): ( 315.62,  29.688,  25.781)
+		part. InCell  14 (local index    124): ( 365.62,  54.688,  13.281)
+		part. InCell  15 (local index    128): ( 332.81,  57.031,  44.141)
+		part. InCell  16 (local index    134): ( 382.81,  32.031,  6.6406)
+		part. InCell  17 (local index    146): ( 370.31,  63.281,  34.766)
+		part. InCell  18 (local index    148): ( 320.31,  38.281,  22.266)
+	Local Cell   4:
+		part. InCell   0 (local index      1): (    100,     150,      25)
+		part. InCell   1 (local index      9): (     25,   112.5,   93.75)
+		part. InCell   2 (local index     11): (     75,   187.5,   56.25)
+		part. InCell   3 (local index     23): (   62.5,  106.25,  84.375)
+		part. InCell   4 (local index     29): (   12.5,  181.25,  71.875)
+		part. InCell   5 (local index     39): (  31.25,  159.38,  14.062)
+		part. InCell   6 (local index     45): (  81.25,  134.38,  26.562)
+		part. InCell   7 (local index     57): (  68.75,  165.62,  4.6875)
+		part. InCell   8 (local index     59): (  18.75,  140.62,  42.188)
+		part. InCell   9 (local index     65): ( 59.375,  139.06,  55.469)
+		part. InCell  10 (local index     67): (  9.375,  164.06,  92.969)
+		part. InCell  11 (local index     79): ( 46.875,  132.81,  64.844)
+		part. InCell  12 (local index     85): ( 96.875,  157.81,  77.344)
+		part. InCell  13 (local index     95): ( 53.125,  185.94,  35.156)
+		part. InCell  14 (local index    101): (  3.125,  110.94,  22.656)
+		part. InCell  15 (local index    113): ( 40.625,  192.19,  44.531)
+		part. InCell  16 (local index    115): ( 90.625,  117.19,  7.0312)
+		part. InCell  17 (local index    135): ( 7.8125,  119.53,  25.391)
+		part. InCell  18 (local index    141): ( 57.812,  194.53,  12.891)
+		part. InCell  19 (local index    153): ( 95.312,  100.78,  41.016)
+		part. InCell  20 (local index    155): ( 45.312,  175.78,  3.5156)
+	Local Cell   5:
+		part. InCell   0 (local index      3): (    150,     125,    12.5)
+		part. InCell   1 (local index     15): (  187.5,  168.75,  40.625)
+		part. InCell   2 (local index     21): (  137.5,  143.75,   3.125)
+		part. InCell   3 (local index     31): ( 106.25,  121.88,  57.812)
+		part. InCell   4 (local index     37): ( 156.25,  196.88,  95.312)
+		part. InCell   5 (local index     49): ( 193.75,  103.12,  73.438)
+		part. InCell   6 (local index     51): ( 143.75,  178.12,  85.938)
+		part. InCell   7 (local index     73): ( 184.38,  176.56,  24.219)
+		part. InCell   8 (local index     75): ( 134.38,  101.56,  36.719)
+		part. InCell   9 (local index     87): ( 121.88,  195.31,  8.5938)
+		part. InCell  10 (local index     93): ( 171.88,  120.31,  46.094)
+		part. InCell  11 (local index    103): ( 178.12,  148.44,  91.406)
+		part. InCell  12 (local index    109): ( 128.12,  173.44,  53.906)
+		part. InCell  13 (local index    121): ( 115.62,  129.69,  75.781)
+		part. InCell  14 (local index    123): ( 165.62,  154.69,  63.281)
+		part. InCell  15 (local index    127): ( 132.81,  157.03,  94.141)
+		part. InCell  16 (local index    133): ( 182.81,  132.03,  56.641)
+		part. InCell  17 (local index    145): ( 170.31,  163.28,  84.766)
+		part. InCell  18 (local index    147): ( 120.31,  138.28,  72.266)
+	Local Cell   6:
+		part. InCell   0 (local index      6): (    250,     175,    87.5)
+		part. InCell   1 (local index     18): (  287.5,  118.75,  65.625)
+		part. InCell   2 (local index     20): (  237.5,  193.75,  78.125)
+		part. InCell   3 (local index     34): ( 206.25,  171.88,  32.812)
+		part. InCell   4 (local index     36): ( 256.25,  146.88,  20.312)
+		part. InCell   5 (local index     48): ( 293.75,  153.12,  48.438)
+		part. InCell   6 (local index     54): ( 243.75,  128.12,  10.938)
+		part. InCell   7 (local index     72): ( 284.38,  126.56,  99.219)
+		part. InCell   8 (local index     78): ( 234.38,  151.56,  61.719)
+		part. InCell   9 (local index     90): ( 221.88,  145.31,  83.594)
+		part. InCell  10 (local index     92): ( 271.88,  170.31,  71.094)
+		part. InCell  11 (local index    106): ( 278.12,  198.44,  16.406)
+		part. InCell  12 (local index    108): ( 228.12,  123.44,  28.906)
+		part. InCell  13 (local index    120): ( 215.62,  179.69, 0.78125)
+		part. InCell  14 (local index    126): ( 265.62,  104.69,  38.281)
+		part. InCell  15 (local index    130): ( 232.81,  107.03,  19.141)
+		part. InCell  16 (local index    132): ( 282.81,  182.03,  31.641)
+		part. InCell  17 (local index    144): ( 270.31,  113.28,  9.7656)
+		part. InCell  18 (local index    150): ( 220.31,  188.28,  47.266)
+	Local Cell   7:
+		part. InCell   0 (local index      8): (    325,   162.5,   18.75)
+		part. InCell   1 (local index     14): (    375,   137.5,   31.25)
+		part. InCell   2 (local index     26): (  362.5,  156.25,   9.375)
+		part. InCell   3 (local index     28): (  312.5,  131.25,  46.875)
+		part. InCell   4 (local index     42): ( 331.25,  109.38,  89.062)
+		part. InCell   5 (local index     44): ( 381.25,  184.38,  51.562)
+		part. InCell   6 (local index     56): ( 368.75,  115.62,  79.688)
+		part. InCell   7 (local index     62): ( 318.75,  190.62,  67.188)
+		part. InCell   8 (local index     64): ( 359.38,  189.06,  30.469)
+		part. InCell   9 (local index     70): ( 309.38,  114.06,  17.969)
+		part. InCell  10 (local index     82): ( 346.88,  182.81,  39.844)
+		part. InCell  11 (local index     84): ( 396.88,  107.81,  2.3438)
+		part. InCell  12 (local index     98): ( 353.12,  135.94,  60.156)
+		part. InCell  13 (local index    100): ( 303.12,  160.94,  97.656)
+		part. InCell  14 (local index    112): ( 340.62,  142.19,  69.531)
+		part. InCell  15 (local index    118): ( 390.62,  167.19,  82.031)
+		part. InCell  16 (local index    138): ( 307.81,  169.53,  50.391)
+		part. InCell  17 (local index    140): ( 357.81,  144.53,  87.891)
+		part. InCell  18 (local index    152): ( 395.31,  150.78,  66.016)
+		part. InCell  19 (local index    158): ( 345.31,  125.78,  78.516)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,104 @@
+SpaceFillerParticleLayout (ptr): 0x6472a0:
+	GlobalParticleLayout (ptr): 0x6472a0
+	ParticleLayout (ptr): 0x6472a0
+	Stg_Class (ptr): 0x6472a0
+		sizeOfSelf: 272
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0x2aaaaaaca404
+		_print (func ptr): 0x2aaaaaaca455
+		_copy (func ptr): 0x2aaaaaaca508
+		_setInitialCounts (func ptr): 0x2aaaaaac078f
+		_initialiseParticles (func ptr): 0x2aaaaaaca742
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0x2aaaaaaca769
+		totalInitialParticles: 160
+		averageInitialParticlesPerCell: 20
+	self->dim = 3
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      3): (     50,      75,    37.5)
+		part. InCell   1 (local index      9): (   87.5,   18.75,  15.625)
+		part. InCell   2 (local index     10): (   37.5,   93.75,  28.125)
+		part. InCell   3 (local index     17): (   6.25,  71.875,  82.812)
+		part. InCell   4 (local index     18): (  56.25,  46.875,  70.312)
+		part. InCell   5 (local index     24): (  93.75,  53.125,  98.438)
+		part. InCell   6 (local index     27): (  43.75,  28.125,  60.938)
+		part. InCell   7 (local index     36): ( 84.375,  26.562,  49.219)
+		part. InCell   8 (local index     39): ( 34.375,  51.562,  11.719)
+		part. InCell   9 (local index     45): ( 21.875,  45.312,  33.594)
+		part. InCell  10 (local index     46): ( 71.875,  70.312,  21.094)
+		part. InCell  11 (local index     53): ( 78.125,  98.438,  66.406)
+		part. InCell  12 (local index     54): ( 28.125,  23.438,  78.906)
+		part. InCell  13 (local index     60): ( 15.625,  79.688,  50.781)
+		part. InCell  14 (local index     63): ( 65.625,  4.6875,  88.281)
+		part. InCell  15 (local index     65): ( 32.812,  7.0312,  69.141)
+		part. InCell  16 (local index     66): ( 82.812,  82.031,  81.641)
+		part. InCell  17 (local index     72): ( 70.312,  13.281,  59.766)
+		part. InCell  18 (local index     75): ( 20.312,  88.281,  97.266)
+		part. InCell  19 (local index     80): ( 26.562,  66.406,  39.453)
+	Local Cell   1:
+		part. InCell   0 (local index      0): (    200,     100,      50)
+		part. InCell   1 (local index      4): (    125,    62.5,   68.75)
+		part. InCell   2 (local index      7): (    175,    37.5,   81.25)
+		part. InCell   3 (local index     13): (  162.5,   56.25,  59.375)
+		part. InCell   4 (local index     14): (  112.5,   31.25,  96.875)
+		part. InCell   5 (local index     21): ( 131.25,   9.375,  39.062)
+		part. InCell   6 (local index     22): ( 181.25,  84.375,  1.5625)
+		part. InCell   7 (local index     28): ( 168.75,  15.625,  29.688)
+		part. InCell   8 (local index     31): ( 118.75,  90.625,  17.188)
+		part. InCell   9 (local index     32): ( 159.38,  89.062,  80.469)
+		part. InCell  10 (local index     35): ( 109.38,  14.062,  67.969)
+		part. InCell  11 (local index     41): ( 146.88,  82.812,  89.844)
+		part. InCell  12 (local index     42): ( 196.88,  7.8125,  52.344)
+		part. InCell  13 (local index     49): ( 153.12,  35.938,  10.156)
+		part. InCell  14 (local index     50): ( 103.12,  60.938,  47.656)
+		part. InCell  15 (local index     56): ( 140.62,  42.188,  19.531)
+		part. InCell  16 (local index     59): ( 190.62,  67.188,  32.031)
+		part. InCell  17 (local index     69): ( 107.81,  69.531, 0.39062)
+		part. InCell  18 (local index     70): ( 157.81,  44.531,  37.891)
+		part. InCell  19 (local index     76): ( 195.31,  50.781,  16.016)
+		part. InCell  20 (local index     79): ( 145.31,  25.781,  28.516)
+	Local Cell   2:
+		part. InCell   0 (local index      1): (    100,     150,      25)
+		part. InCell   1 (local index      5): (     25,   112.5,   93.75)
+		part. InCell   2 (local index      6): (     75,   187.5,   56.25)
+		part. InCell   3 (local index     12): (   62.5,  106.25,  84.375)
+		part. InCell   4 (local index     15): (   12.5,  181.25,  71.875)
+		part. InCell   5 (local index     20): (  31.25,  159.38,  14.062)
+		part. InCell   6 (local index     23): (  81.25,  134.38,  26.562)
+		part. InCell   7 (local index     29): (  68.75,  165.62,  4.6875)
+		part. InCell   8 (local index     30): (  18.75,  140.62,  42.188)
+		part. InCell   9 (local index     33): ( 59.375,  139.06,  55.469)
+		part. InCell  10 (local index     34): (  9.375,  164.06,  92.969)
+		part. InCell  11 (local index     40): ( 46.875,  132.81,  64.844)
+		part. InCell  12 (local index     43): ( 96.875,  157.81,  77.344)
+		part. InCell  13 (local index     48): ( 53.125,  185.94,  35.156)
+		part. InCell  14 (local index     51): (  3.125,  110.94,  22.656)
+		part. InCell  15 (local index     57): ( 40.625,  192.19,  44.531)
+		part. InCell  16 (local index     58): ( 90.625,  117.19,  7.0312)
+		part. InCell  17 (local index     68): ( 7.8125,  119.53,  25.391)
+		part. InCell  18 (local index     71): ( 57.812,  194.53,  12.891)
+		part. InCell  19 (local index     77): ( 95.312,  100.78,  41.016)
+		part. InCell  20 (local index     78): ( 45.312,  175.78,  3.5156)
+	Local Cell   3:
+		part. InCell   0 (local index      2): (    150,     125,    12.5)
+		part. InCell   1 (local index      8): (  187.5,  168.75,  40.625)
+		part. InCell   2 (local index     11): (  137.5,  143.75,   3.125)
+		part. InCell   3 (local index     16): ( 106.25,  121.88,  57.812)
+		part. InCell   4 (local index     19): ( 156.25,  196.88,  95.312)
+		part. InCell   5 (local index     25): ( 193.75,  103.12,  73.438)
+		part. InCell   6 (local index     26): ( 143.75,  178.12,  85.938)
+		part. InCell   7 (local index     37): ( 184.38,  176.56,  24.219)
+		part. InCell   8 (local index     38): ( 134.38,  101.56,  36.719)
+		part. InCell   9 (local index     44): ( 121.88,  195.31,  8.5938)
+		part. InCell  10 (local index     47): ( 171.88,  120.31,  46.094)
+		part. InCell  11 (local index     52): ( 178.12,  148.44,  91.406)
+		part. InCell  12 (local index     55): ( 128.12,  173.44,  53.906)
+		part. InCell  13 (local index     61): ( 115.62,  129.69,  75.781)
+		part. InCell  14 (local index     62): ( 165.62,  154.69,  63.281)
+		part. InCell  15 (local index     64): ( 132.81,  157.03,  94.141)
+		part. InCell  16 (local index     67): ( 182.81,  132.03,  56.641)
+		part. InCell  17 (local index     73): ( 170.31,  163.28,  84.766)
+		part. InCell  18 (local index     74): ( 120.31,  138.28,  72.266)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,102 @@
+SpaceFillerParticleLayout (ptr): 0x646b60:
+	GlobalParticleLayout (ptr): 0x646b60
+	ParticleLayout (ptr): 0x646b60
+	Stg_Class (ptr): 0x646b60
+		sizeOfSelf: 272
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0x2aaaaaaca404
+		_print (func ptr): 0x2aaaaaaca455
+		_copy (func ptr): 0x2aaaaaaca508
+		_setInitialCounts (func ptr): 0x2aaaaaac078f
+		_initialiseParticles (func ptr): 0x2aaaaaaca742
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0x2aaaaaaca769
+		totalInitialParticles: 160
+		averageInitialParticlesPerCell: 20
+	self->dim = 3
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      0): (    300,      50,      75)
+		part. InCell   1 (local index      4): (    225,    12.5,   43.75)
+		part. InCell   2 (local index      5): (    275,    87.5,    6.25)
+		part. InCell   3 (local index     11): (  262.5,    6.25,  34.375)
+		part. InCell   4 (local index     14): (  212.5,   81.25,  21.875)
+		part. InCell   5 (local index     19): ( 231.25,  59.375,  64.062)
+		part. InCell   6 (local index     22): ( 281.25,  34.375,  76.562)
+		part. InCell   7 (local index     28): ( 268.75,  65.625,  54.688)
+		part. InCell   8 (local index     29): ( 218.75,  40.625,  92.188)
+		part. InCell   9 (local index     32): ( 259.38,  39.062,  5.4688)
+		part. InCell  10 (local index     33): ( 209.38,  64.062,  42.969)
+		part. InCell  11 (local index     39): ( 246.88,  32.812,  14.844)
+		part. InCell  12 (local index     42): ( 296.88,  57.812,  27.344)
+		part. InCell  13 (local index     47): ( 253.12,  85.938,  85.156)
+		part. InCell  14 (local index     50): ( 203.12,  10.938,  72.656)
+		part. InCell  15 (local index     56): ( 240.62,  92.188,  94.531)
+		part. InCell  16 (local index     57): ( 290.62,  17.188,  57.031)
+		part. InCell  17 (local index     67): ( 207.81,  19.531,  75.391)
+		part. InCell  18 (local index     70): ( 257.81,  94.531,  62.891)
+		part. InCell  19 (local index     76): ( 295.31, 0.78125,  91.016)
+		part. InCell  20 (local index     77): ( 245.31,  75.781,  53.516)
+	Local Cell   1:
+		part. InCell   0 (local index      1): (    350,      25,    62.5)
+		part. InCell   1 (local index      7): (  387.5,   68.75,  90.625)
+		part. InCell   2 (local index     10): (  337.5,   43.75,  53.125)
+		part. InCell   3 (local index     15): ( 306.25,  21.875,  7.8125)
+		part. InCell   4 (local index     18): ( 356.25,  96.875,  45.312)
+		part. InCell   5 (local index     24): ( 393.75,   3.125,  23.438)
+		part. InCell   6 (local index     25): ( 343.75,  78.125,  35.938)
+		part. InCell   7 (local index     36): ( 384.38,  76.562,  74.219)
+		part. InCell   8 (local index     37): ( 334.38,  1.5625,  86.719)
+		part. InCell   9 (local index     43): ( 321.88,  95.312,  58.594)
+		part. InCell  10 (local index     46): ( 371.88,  20.312,  96.094)
+		part. InCell  11 (local index     51): ( 378.12,  48.438,  41.406)
+		part. InCell  12 (local index     54): ( 328.12,  73.438,  3.9062)
+		part. InCell  13 (local index     60): ( 315.62,  29.688,  25.781)
+		part. InCell  14 (local index     61): ( 365.62,  54.688,  13.281)
+		part. InCell  15 (local index     63): ( 332.81,  57.031,  44.141)
+		part. InCell  16 (local index     66): ( 382.81,  32.031,  6.6406)
+		part. InCell  17 (local index     72): ( 370.31,  63.281,  34.766)
+		part. InCell  18 (local index     73): ( 320.31,  38.281,  22.266)
+	Local Cell   2:
+		part. InCell   0 (local index      2): (    250,     175,    87.5)
+		part. InCell   1 (local index      8): (  287.5,  118.75,  65.625)
+		part. InCell   2 (local index      9): (  237.5,  193.75,  78.125)
+		part. InCell   3 (local index     16): ( 206.25,  171.88,  32.812)
+		part. InCell   4 (local index     17): ( 256.25,  146.88,  20.312)
+		part. InCell   5 (local index     23): ( 293.75,  153.12,  48.438)
+		part. InCell   6 (local index     26): ( 243.75,  128.12,  10.938)
+		part. InCell   7 (local index     35): ( 284.38,  126.56,  99.219)
+		part. InCell   8 (local index     38): ( 234.38,  151.56,  61.719)
+		part. InCell   9 (local index     44): ( 221.88,  145.31,  83.594)
+		part. InCell  10 (local index     45): ( 271.88,  170.31,  71.094)
+		part. InCell  11 (local index     52): ( 278.12,  198.44,  16.406)
+		part. InCell  12 (local index     53): ( 228.12,  123.44,  28.906)
+		part. InCell  13 (local index     59): ( 215.62,  179.69, 0.78125)
+		part. InCell  14 (local index     62): ( 265.62,  104.69,  38.281)
+		part. InCell  15 (local index     64): ( 232.81,  107.03,  19.141)
+		part. InCell  16 (local index     65): ( 282.81,  182.03,  31.641)
+		part. InCell  17 (local index     71): ( 270.31,  113.28,  9.7656)
+		part. InCell  18 (local index     74): ( 220.31,  188.28,  47.266)
+	Local Cell   3:
+		part. InCell   0 (local index      3): (    325,   162.5,   18.75)
+		part. InCell   1 (local index      6): (    375,   137.5,   31.25)
+		part. InCell   2 (local index     12): (  362.5,  156.25,   9.375)
+		part. InCell   3 (local index     13): (  312.5,  131.25,  46.875)
+		part. InCell   4 (local index     20): ( 331.25,  109.38,  89.062)
+		part. InCell   5 (local index     21): ( 381.25,  184.38,  51.562)
+		part. InCell   6 (local index     27): ( 368.75,  115.62,  79.688)
+		part. InCell   7 (local index     30): ( 318.75,  190.62,  67.188)
+		part. InCell   8 (local index     31): ( 359.38,  189.06,  30.469)
+		part. InCell   9 (local index     34): ( 309.38,  114.06,  17.969)
+		part. InCell  10 (local index     40): ( 346.88,  182.81,  39.844)
+		part. InCell  11 (local index     41): ( 396.88,  107.81,  2.3438)
+		part. InCell  12 (local index     48): ( 353.12,  135.94,  60.156)
+		part. InCell  13 (local index     49): ( 303.12,  160.94,  97.656)
+		part. InCell  14 (local index     55): ( 340.62,  142.19,  69.531)
+		part. InCell  15 (local index     58): ( 390.62,  167.19,  82.031)
+		part. InCell  16 (local index     68): ( 307.81,  169.53,  50.391)
+		part. InCell  17 (local index     69): ( 357.81,  144.53,  87.891)
+		part. InCell  18 (local index     75): ( 395.31,  150.78,  66.016)
+		part. InCell  19 (local index     78): ( 345.31,  125.78,  78.516)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2             0.5             0.5               0
+               1               4             0.5             0.5               0
+               2               6             0.5             0.5               0
+               3               8             0.5             0.5               0
+               4              10             0.5             0.5               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.25            0.75               0
+               1               4            0.25            0.25               0
+               2               6            0.75            0.25               0
+               3               8            0.75            0.75               0
+               4              10            0.25            0.75               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.75            0.25               0
+               1               4            0.75            0.75               0
+               2               6            0.25            0.75               0
+               3               8            0.25            0.25               0
+               4              10            0.75            0.25               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.375           0.625               0
+               1               4           0.375           0.375               0
+               2               6           0.625           0.375               0
+               3               8           0.625           0.625               0
+               4              10           0.375           0.625               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.875           0.125               0
+               1               4           0.875           0.875               0
+               2               6           0.125           0.875               0
+               3               8           0.125           0.125               0
+               4              10           0.875           0.125               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.25            0.75               0
+               1               4            0.25            0.25               0
+               2               6            0.75            0.25               0
+               3               8            0.75            0.75               0
+               4              10            0.25            0.75               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.375           0.625               0
+               1               4           0.375           0.375               0
+               2               6           0.625           0.375               0
+               3               8           0.625           0.625               0
+               4              10           0.375           0.625               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2             0.5             0.5               0
+               1               4             0.5             0.5               0
+               2               6             0.5             0.5               0
+               3               8             0.5             0.5               0
+               4              10             0.5             0.5               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.75            0.25               0
+               1               4            0.75            0.75               0
+               2               6            0.25            0.75               0
+               3               8            0.25            0.25               0
+               4              10            0.75            0.25               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,6 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.875           0.125               0
+               1               4           0.875           0.875               0
+               2               6           0.125           0.875               0
+               3               8           0.125           0.125               0
+               4              10           0.875           0.125               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,107 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+subdirs = SingleAttractor VaryingCornerAttractors Bouncer Spinner
+
+tests = lib${PROJECT}_Swarm
+
+SRCS = \
+	testElementCellLayout0.c \
+	testGaussLayout.c \
+	testGaussLayoutSingleCell.c \
+	testManualParticleLayout.c \
+	testParticleCoords.c \
+	testSingleCellLayout0.c \
+	testSpaceFillerParticleLayout.c \
+	testSwarm.c \
+	testSwarmDumpAndLoad.c \
+	testSwarmOutput.c \
+	testSwarmParticleAdvection.c \
+	testSwarmParticleShadowSync.c \
+	testWithinShapeParticleLayout.c \
+
+checks = \
+	testElementCellLayout0.0of1.sh \
+	testElementCellLayout0.0of2.sh \
+	testElementCellLayout0.1of2.sh \
+	testGaussLayout.0of1.sh \
+	testGaussLayoutSingleCell.0of1.sh \
+	testLineParticleLayout.0of1.sh \
+	testManualParticleLayout.0of1.sh \
+	testManualParticleLayout.0of2.sh \
+	testManualParticleLayout.1of2.sh \
+	testSingleCellLayout0.0of1.sh \
+	testSpaceFillerParticleLayout.0of1.sh \
+	testSpaceFillerParticleLayout.0of2.sh \
+	testSpaceFillerParticleLayout.1of2.sh \
+	testSwarm.0of1.sh \
+	testSwarm.0of2.sh \
+	testSwarm.1of2.sh \
+	testSwarmDumpAndLoad.0of1.sh \
+	testSwarmDumpAndLoad.0of2.sh \
+	testSwarmDumpAndLoad.1of2.sh \
+	testSwarmOutput.0of1.sh \
+	testSwarmOutput.0of2.sh \
+	testSwarmParticleAdvectionSingleAttractor.0of1.sh \
+	testSwarmParticleAdvectionSingleAttractor.0of2.sh \
+	testSwarmParticleAdvectionSingleAttractor.0of3.sh \
+	testSwarmParticleAdvectionSingleAttractor.1of2.sh \
+	testSwarmParticleAdvectionSingleAttractor.1of3.sh \
+	testSwarmParticleAdvectionSingleAttractor.2of3.sh \
+	testSwarmParticleShadowSync.0of2.sh \
+	testSwarmParticleShadowSync.0of3.sh \
+	testWithinShapeParticleLayout.0of1.sh \
+	testWithinShapeParticleLayout.0of2.sh \
+	testWithinShapeParticleLayout.1of2.sh \
+
+PROJ_LIBS = 
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT} -DLIB_DIR=\"${LIB_DIR}\"
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainSwarm -lStgDomainUtils -lStgDomainMesh -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+        ifneq (Darwin,${SYSTEM})
+	       EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.14.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.14.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">LineParticleLayout</param>
+      <param name="totalInitialParticles">20</param>
+      <list name="verticies">
+        <asciidata>
+
+<columnDefinition name="x" type="double"/>
+<columnDefinition name="y" type="double"/>
+<columnDefinition name="z" type="double"/>
+
+           0           1           0
+           0          11           5
+          22          11           0
+
+</asciidata>
+      </list>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="elementResI">10</param>
+  <param name="elementResJ">10</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">100.0</param>
+  <param name="maxY">100.0</param>
+  <param name="maxZ">100.0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.16.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.16.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.17.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.17.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.19.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.19.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">SpaceFillerParticleLayout</param>
+      <param name="totalInitialParticles">5</param>
+    </struct>
+    <struct name="swarmOutput">
+      <param name="Type">SwarmOutput</param>
+      <param name="Swarm">swarm</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">4</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="elementResI">10</param>
+  <param name="elementResJ">10</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.20.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.20.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-16.02.21.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-16.02.21.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.09.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.09.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">LineParticleLayout</param>
+      <param name="totalInitialParticles">20</param>
+      <list name="verticies">
+        <asciidata>
+
+<columnDefinition name="x" type="double"/>
+<columnDefinition name="y" type="double"/>
+<columnDefinition name="z" type="double"/>
+
+           0           1           0
+           0          11           5
+          22          11           0
+
+</asciidata>
+      </list>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="elementResI">10</param>
+  <param name="elementResJ">10</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">100.0</param>
+  <param name="maxY">100.0</param>
+  <param name="maxZ">100.0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.11.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.11.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.13.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.13.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.14.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.14.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.15.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.15.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <list name="plugins">
+    <param>StGermain_SingleAttractor</param>
+  </list>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="movementSpeedDivisor">3</param>
+  <param name="particleCommInfo">False</param>
+  <param name="procToWatch">2</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.13.16.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.13.16.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.10.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.10.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">LineParticleLayout</param>
+      <param name="totalInitialParticles">20</param>
+      <list name="verticies">
+        <asciidata>
+
+<columnDefinition name="x" type="double"/>
+<columnDefinition name="y" type="double"/>
+<columnDefinition name="z" type="double"/>
+
+           0           1           0
+           0          11           5
+          22          11           0
+
+</asciidata>
+      </list>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="elementResI">10</param>
+  <param name="elementResJ">10</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">100.0</param>
+  <param name="maxY">100.0</param>
+  <param name="maxZ">100.0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.13.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.13.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.14.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.14.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="particlesPerCell">1</param>
+  <param name="seed">13</param>
+  <param name="shadowDepth">1</param>
+  <param name="outputPath">./output</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.16.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.16.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pMovementHandler">
+      <param name="Type">ParticleMovementHandler</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <list name="ParticleCommHandlers">
+        <param>pMovementHandler</param>
+        <param>pShadowSync</param>
+      </list>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">SpaceFillerParticleLayout</param>
+      <param name="totalInitialParticles">5</param>
+    </struct>
+    <struct name="swarmOutput">
+      <param name="Type">SwarmOutput</param>
+      <param name="Swarm">swarm</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">4</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="elementResI">10</param>
+  <param name="elementResJ">10</param>
+  <param name="elementResK">1</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.17.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.17.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input-2007.10.10-17.14.18.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input-2007.10.10-17.14.18.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/input.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/input.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-linear">
+      <param name="Type">Mesh</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dims">dim</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <param name="maxDecomposedDims">1</param>
+      <list name="maxDecompositions">
+        <param>0</param>
+        <param>1</param>
+        <param>1</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="pShadowSync">
+      <param name="Type">ParticleShadowSync</param>
+    </struct>
+    <struct name="swarm">
+      <param name="Type">Swarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">RandomParticleLayout</param>
+      <param name="cellParticleCount">1</param>
+      <param name="seed">13</param>
+    </struct>
+  </struct>
+  <param name="journal.info.lucInfo">true</param>
+  <param name="journal-level.info.lucInfo">2</param>
+  <param name="maxTimeSteps">5</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">3</param>
+  <param name="elementResI">12</param>
+  <param name="elementResJ">12</param>
+  <param name="elementResK">12</param>
+  <param name="minX">0.0</param>
+  <param name="minY">0.0</param>
+  <param name="minZ">0.0</param>
+  <param name="maxX">1.0</param>
+  <param name="maxY">1.0</param>
+  <param name="maxZ">1.0</param>
+  <param name="journal.info.Context-verbose">true</param>
+  <param name="journal-level.info.Stg_ComponentFactory">0</param>
+  <param name="journal.info.Stg_ComponentFactory">False</param>
+  <param name="particleCommInfo">true</param>
+  <param name="procToWatch">0</param>
+  <param name="outputEvery">1</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/swarmOutput.00000.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/swarmOutput.00000.dat	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2             0.5             0.5               0
+               1               4             0.5             0.5               0
+               2               6             0.5             0.5               0
+               3               8             0.5             0.5               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/swarmOutput.00001.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/swarmOutput.00001.dat	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.25            0.75               0
+               1               4            0.25            0.25               0
+               2               6            0.75            0.25               0
+               3               8            0.75            0.75               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/swarmOutput.00002.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/swarmOutput.00002.dat	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.375           0.625               0
+               1               4           0.375           0.375               0
+               2               6           0.625           0.375               0
+               3               8           0.625           0.625               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/swarmOutput.00003.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/swarmOutput.00003.dat	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2            0.75            0.25               0
+               1               4            0.75            0.75               0
+               2               6            0.25            0.75               0
+               3               8            0.25            0.25               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/swarmOutput.00004.dat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/output/swarmOutput.00004.dat	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,5 @@
+#       Timestep            Time          CoordX          CoordY          CoordZ
+               0               2           0.875           0.125               0
+               1               4           0.875           0.875               0
+               2               6           0.125           0.875               0
+               3               8           0.125           0.125               0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/output/testSwarm.00000.dat
Binary file Swarm/tests/output/testSwarm.00000.dat has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,188 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+cellPointTbl  [ 0][0-8]:
+	{0 0 0}
+	{150 0 0}
+	{0 4 0}
+	{150 4 0}
+	{0 0 150}
+	{150 0 150}
+	{0 4 150}
+	{150 4 150}
+
+Testing if test particle at (75.000000,2.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,5.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 1][0-8]:
+	{150 0 0}
+	{300 0 0}
+	{150 4 0}
+	{300 4 0}
+	{150 0 150}
+	{300 0 150}
+	{150 4 150}
+	{300 4 150}
+
+Testing if test particle at (225.000000,2.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,5.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 2][0-8]:
+	{0 4 0}
+	{150 4 0}
+	{0 8 0}
+	{150 8 0}
+	{0 4 150}
+	{150 4 150}
+	{0 8 150}
+	{150 8 150}
+
+Testing if test particle at (75.000000,6.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,9.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 3][0-8]:
+	{150 4 0}
+	{300 4 0}
+	{150 8 0}
+	{300 8 0}
+	{150 4 150}
+	{300 4 150}
+	{150 8 150}
+	{300 8 150}
+
+Testing if test particle at (225.000000,6.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,9.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 4][0-8]:
+	{0 8 0}
+	{150 8 0}
+	{0 12 0}
+	{150 12 0}
+	{0 8 150}
+	{150 8 150}
+	{0 12 150}
+	{150 12 150}
+
+Testing if test particle at (75.000000,10.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,13.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 5][0-8]:
+	{150 8 0}
+	{300 8 0}
+	{150 12 0}
+	{300 12 0}
+	{150 8 150}
+	{300 8 150}
+	{150 12 150}
+	{300 12 150}
+
+Testing if test particle at (225.000000,10.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,13.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 6][0-8]:
+	{0 0 150}
+	{150 0 150}
+	{0 4 150}
+	{150 4 150}
+	{0 0 300}
+	{150 0 300}
+	{0 4 300}
+	{150 4 300}
+
+Testing if test particle at (75.000000,2.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,5.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 7][0-8]:
+	{150 0 150}
+	{300 0 150}
+	{150 4 150}
+	{300 4 150}
+	{150 0 300}
+	{300 0 300}
+	{150 4 300}
+	{300 4 300}
+
+Testing if test particle at (225.000000,2.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,5.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 8][0-8]:
+	{0 4 150}
+	{150 4 150}
+	{0 8 150}
+	{150 8 150}
+	{0 4 300}
+	{150 4 300}
+	{0 8 300}
+	{150 8 300}
+
+Testing if test particle at (75.000000,6.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,9.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 9][0-8]:
+	{150 4 150}
+	{300 4 150}
+	{150 8 150}
+	{300 8 150}
+	{150 4 300}
+	{300 4 300}
+	{150 8 300}
+	{300 8 300}
+
+Testing if test particle at (225.000000,6.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,9.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [10][0-8]:
+	{0 8 150}
+	{150 8 150}
+	{0 12 150}
+	{150 12 150}
+	{0 8 300}
+	{150 8 300}
+	{0 12 300}
+	{150 12 300}
+
+Testing if test particle at (75.000000,10.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,13.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [11][0-8]:
+	{150 8 150}
+	{300 8 150}
+	{150 12 150}
+	{300 12 150}
+	{150 8 300}
+	{300 8 300}
+	{150 12 300}
+	{300 12 300}
+
+Testing if test particle at (225.000000,10.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,13.000000,301.000000) is in the cell: 0
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testElementCellLayout0 " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,132 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+cellPointTbl  [ 0][0-8]:
+	{0 0 0}
+	{150 0 0}
+	{0 4 0}
+	{150 4 0}
+	{0 0 150}
+	{150 0 150}
+	{0 4 150}
+	{150 4 150}
+
+Testing if test particle at (75.000000,2.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,5.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 1][0-8]:
+	{150 0 0}
+	{300 0 0}
+	{150 4 0}
+	{300 4 0}
+	{150 0 150}
+	{300 0 150}
+	{150 4 150}
+	{300 4 150}
+
+Testing if test particle at (225.000000,2.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,5.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 2][0-8]:
+	{0 4 0}
+	{150 4 0}
+	{0 8 0}
+	{150 8 0}
+	{0 4 150}
+	{150 4 150}
+	{0 8 150}
+	{150 8 150}
+
+Testing if test particle at (75.000000,6.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,9.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 3][0-8]:
+	{150 4 0}
+	{300 4 0}
+	{150 8 0}
+	{300 8 0}
+	{150 4 150}
+	{300 4 150}
+	{150 8 150}
+	{300 8 150}
+
+Testing if test particle at (225.000000,6.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,9.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 4][0-8]:
+	{0 0 150}
+	{150 0 150}
+	{0 4 150}
+	{150 4 150}
+	{0 0 300}
+	{150 0 300}
+	{0 4 300}
+	{150 4 300}
+
+Testing if test particle at (75.000000,2.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,5.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 5][0-8]:
+	{150 0 150}
+	{300 0 150}
+	{150 4 150}
+	{300 4 150}
+	{150 0 300}
+	{300 0 300}
+	{150 4 300}
+	{300 4 300}
+
+Testing if test particle at (225.000000,2.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,5.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 6][0-8]:
+	{0 4 150}
+	{150 4 150}
+	{0 8 150}
+	{150 8 150}
+	{0 4 300}
+	{150 4 300}
+	{0 8 300}
+	{150 8 300}
+
+Testing if test particle at (75.000000,6.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,9.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 7][0-8]:
+	{150 4 150}
+	{300 4 150}
+	{150 8 150}
+	{300 8 150}
+	{150 4 300}
+	{300 4 300}
+	{150 8 300}
+	{300 8 300}
+
+Testing if test particle at (225.000000,6.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,9.000000,301.000000) is in the cell: 0
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testElementCellLayout0 " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+cellPointTbl  [ 0][0-8]:
+	{0 8 0}
+	{150 8 0}
+	{0 12 0}
+	{150 12 0}
+	{0 8 150}
+	{150 8 150}
+	{0 12 150}
+	{150 12 150}
+
+Testing if test particle at (75.000000,10.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,13.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 1][0-8]:
+	{150 8 0}
+	{300 8 0}
+	{150 12 0}
+	{300 12 0}
+	{150 8 150}
+	{300 8 150}
+	{150 12 150}
+	{300 12 150}
+
+Testing if test particle at (225.000000,10.000000,75.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,13.000000,151.000000) is in the cell: 0
+
+cellPointTbl  [ 2][0-8]:
+	{0 8 150}
+	{150 8 150}
+	{0 12 150}
+	{150 12 150}
+	{0 8 300}
+	{150 8 300}
+	{0 12 300}
+	{150 12 300}
+
+Testing if test particle at (75.000000,10.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (1.000000,13.000000,301.000000) is in the cell: 0
+
+cellPointTbl  [ 3][0-8]:
+	{150 8 150}
+	{300 8 150}
+	{150 12 150}
+	{300 12 150}
+	{150 8 300}
+	{300 8 300}
+	{150 12 300}
+	{300 12 300}
+
+Testing if test particle at (225.000000,10.000000,225.000000) is in the cell: 1
+
+Testing if test particle at (151.000000,13.000000,301.000000) is in the cell: 0
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testElementCellLayout0 " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testElementCellLayout0.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testElementCellLayout0.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,201 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testElementCellLayout0.c 4142 2007-06-13 01:26:58Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define ConvertNode(node) node
+
+
+struct _Node {
+	double temp;
+};
+
+struct _Element {
+	double temp;
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {1, 0, 1};
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {2, 3, 2};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {300.0, 12.0, 300.0};
+	ExtensionManager_Register*		extensionMgr_Register;
+	Mesh*				mesh;
+	ElementCellLayout*		elementCellLayout;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+/*	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	if( rank == procToWatch ) {
+		Cell_Index cell;
+		Element_DomainIndex	element;
+		GlobalParticle          testParticle;
+		
+		for( element = 0; element < Mesh_GetLocalSize( mesh, nDims ); element++ ) {
+			Cell_PointIndex			point;
+			Cell_PointIndex			count;
+			double***			cellPoints;
+			Bool				result;
+
+			cell = CellLayout_MapElementIdToCellId( elementCellLayout, element );
+
+			if ( cell != element ) { 
+				printf( "Wrong result: CellLayout_MapElementIdToCellId returned %d, when %d "
+					"expected.\n", cell, element );
+				exit(0);
+			}
+
+			count = elementCellLayout->_pointCount( elementCellLayout, cell );
+			printf( "cellPointTbl  [%2u][0-%u]:\n", cell, count );
+			cellPoints = Memory_Alloc_Array( double**, count, "cellPoints" );
+			elementCellLayout->_initialisePoints( elementCellLayout, cell, count, cellPoints );
+			for( point = 0; point < count; point++ ) {
+				printf( "\t{%.3g %.3g %.3g}\n", (*cellPoints[ConvertNode(point)])[0], (*cellPoints[ConvertNode(point)])[1], 
+					(*cellPoints[ConvertNode(point)])[2] );
+			}
+			printf( "\n" );
+
+			testParticle.coord[0] = ( (*cellPoints[0])[0] + (*cellPoints[1])[0] ) / 2;
+			testParticle.coord[1] = ( (*cellPoints[0])[1] + (*cellPoints[2])[1] ) / 2;
+			testParticle.coord[2] = ( (*cellPoints[0])[2] + (*cellPoints[4])[2] ) / 2;
+			printf( "Testing if test particle at (%f,%f,%f) is in the cell: ",
+				testParticle.coord[0], testParticle.coord[1], testParticle.coord[2] );
+			result = CellLayout_IsInCell( elementCellLayout, cell, &testParticle );
+			printf( "%d\n\n", result );
+
+			testParticle.coord[0] = (*cellPoints[count-2])[0] + 1;
+			testParticle.coord[1] = (*cellPoints[count-2])[1] + 1;
+			testParticle.coord[2] = (*cellPoints[count-2])[2] + 1;
+			printf( "Testing if test particle at (%f,%f,%f) is in the cell: ",
+				testParticle.coord[0], testParticle.coord[1], testParticle.coord[2] );
+			result = CellLayout_IsInCell( elementCellLayout, cell, &testParticle );
+			printf( "%d\n\n", result );
+
+			Memory_Free( cellPoints );
+		}
+	}
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayout.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayout.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+GaussParticleLayout (ptr): 0x807dc28:
+PerCellParticleLayout (ptr): 0x807dc28
+ParticleLayout (ptr): 0x807dc28
+Stg_Class (ptr): 0x807dc28
+	sizeOfSelf: 144
+	_deleteSelf: Yes
+	type: GaussParticleLayout
+	_delete (func ptr): 0x4002d59d
+	_print (func ptr): 0x4002d5c6
+	_copy (func ptr): 0x4002d6f3
+	_setInitialCounts (func ptr): 0x40035bdd
+	_initialiseParticles (func ptr): 0x40035d92
+	coordSystem: LocalCoordSystem
+	weightsInitialisedAtStartup : True
+	_initialCount (func ptr): 0x4002d962
+	_initialiseParticlesOfCell (func ptr): 0x4002d9b1
+	self->dim = 3
+	self->particlesPerDim = { 2, 2, 2 }
+count = 8 
+pId=0 : coords = { 31.698730, 8.845299, 31.698730 }, xi = { -0.577350, -0.577350, -0.577350 }
+pId=1 : coords = { 118.301270, 8.845299, 31.698730 }, xi = { 0.577350, -0.577350, -0.577350 }
+pId=2 : coords = { 31.698730, 11.154701, 31.698730 }, xi = { -0.577350, 0.577350, -0.577350 }
+pId=3 : coords = { 118.301270, 11.154701, 31.698730 }, xi = { 0.577350, 0.577350, -0.577350 }
+pId=4 : coords = { 31.698730, 8.845299, 118.301270 }, xi = { -0.577350, -0.577350, 0.577350 }
+pId=5 : coords = { 118.301270, 8.845299, 118.301270 }, xi = { 0.577350, -0.577350, 0.577350 }
+pId=6 : coords = { 31.698730, 11.154701, 118.301270 }, xi = { -0.577350, 0.577350, 0.577350 }
+pId=7 : coords = { 118.301270, 11.154701, 118.301270 }, xi = { 0.577350, 0.577350, 0.577350 }
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testGaussLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,219 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testGaussLayout.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {1, 0, 1};
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*	dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {2, 3, 2};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {300.0, 12.0, 300.0};
+	ExtensionManager_Register*		extensionMgr_Register;
+	Mesh*				mesh;
+	GaussParticleLayout*		gaussParticleLayout;
+	ElementCellLayout*		elementCellLayout;
+	Swarm*				swarm;
+	Stream*				stream;
+	Dimension_Index     dim;
+	
+	Cell_PointIndex			count;
+	double x,y,z;
+	int p;
+	LocalParticle* particle;
+	Coord minCell;
+	Coord maxCell;
+	Particle_InCellIndex particlesPerDim[3];
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( numProcessors ) );
+	Dictionary_Add( dictionary, "gaussParticlesX", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "gaussParticlesY", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "gaussParticlesZ", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	/* Configure the gauss-particle-layout */
+	dim = Dictionary_GetUnsignedInt( dictionary, "dim" );
+	particlesPerDim[0] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesX" );
+	particlesPerDim[1] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesY" );
+	particlesPerDim[2] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesZ" );
+	gaussParticleLayout = GaussParticleLayout_New( "gaussParticleLayout", dim, particlesPerDim );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New( "testGaussSwarm", elementCellLayout, gaussParticleLayout, dim, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( gaussParticleLayout, stream );
+	}
+	
+	
+	/* Print out the particles on any cell (they should all be the same), lets try 4 */
+	count = swarm->cellParticleCountTbl[4];
+	printf("count = %d \n",count );
+	
+	Swarm_GetCellMinMaxCoords( swarm, 4, minCell, maxCell );
+	
+	for( p = 0; p < count; p++ ) {
+		particle = (LocalParticle*)Swarm_ParticleInCellAt( swarm, 4, p  );
+
+		/* convert to global coords */
+		x = 0.5 * ( maxCell[0] - minCell[0] ) * ( particle->xi[0] + 1.0 ) + minCell[0];
+		y = 0.5 * ( maxCell[1] - minCell[1] ) * ( particle->xi[1] + 1.0 ) + minCell[1];
+		z = 0.5 * ( maxCell[2] - minCell[2] ) * ( particle->xi[2] + 1.0 ) + minCell[2];
+		
+		printf( "pId=%d : coords = { %f, %f, %f }, xi = { %f, %f, %f }\n", 
+				p, x, y, z, particle->xi[0], particle->xi[1], particle->xi[2] );
+	}	
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( gaussParticleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayoutSingleCell.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayoutSingleCell.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,33 @@
+StGermain Framework revision 3378. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+GaussParticleLayout (ptr): 0x8061c14:
+PerCellParticleLayout (ptr): 0x8061c14
+ParticleLayout (ptr): 0x8061c14
+Stg_Class (ptr): 0x8061c14
+	sizeOfSelf: 116
+	_deleteSelf: Yes
+	type: GaussParticleLayout
+	_delete (func ptr): 0xb7edb77f
+	_print (func ptr): 0xb7edb7a8
+	_copy (func ptr): 0xb7edb8ca
+	_setInitialCounts (func ptr): 0xb7ee2579
+	_initialiseParticles (func ptr): 0xb7ee2710
+	coordSystem: LocalCoordSystem
+	weightsInitialisedAtStartup : True
+	_initialCount (func ptr): 0xb7edbb31
+	_initialiseParticlesOfCell (func ptr): 0xb7edbb7b
+	self->dim = 3
+	self->particlesPerDim = { 2, 1, 3 }
+count = 6 
+pId=0 : xi = { -0.577350, 0.000000, -0.774597 } 
+pId=0 : weight = 1.111111 
+pId=1 : xi = { 0.577350, 0.000000, -0.774597 } 
+pId=1 : weight = 1.111111 
+pId=2 : xi = { -0.577350, 0.000000, 0.000000 } 
+pId=2 : weight = 1.777778 
+pId=3 : xi = { 0.577350, 0.000000, 0.000000 } 
+pId=3 : weight = 1.777778 
+pId=4 : xi = { -0.577350, 0.000000, 0.774597 } 
+pId=4 : weight = 1.111111 
+pId=5 : xi = { 0.577350, 0.000000, 0.774597 } 
+pId=5 : weight = 1.111111 
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayoutSingleCell.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayoutSingleCell.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testGaussLayoutSingleCell " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testGaussLayoutSingleCell.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testGaussLayoutSingleCell.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,182 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testGaussLayoutSingleCell.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*			dictionary;
+	GaussParticleLayout*		gaussParticleLayout;
+	SingleCellLayout*		singleCellLayout;
+	ExtensionManager_Register*		extensionMgr_Register;
+	Swarm*				swarm;
+	Stream*				stream;
+	double 				w;
+	Cell_PointIndex			count;
+	Dimension_Index         dim;
+	Bool			dimExists[] = { True, True, True };
+	Particle_InCellIndex particlesPerDim[3];
+	double x,y,z;
+	int p;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( numProcessors ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "minX", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "minY", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "minZ", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "maxX", Dictionary_Entry_Value_FromDouble( 300.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 12.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 300.0f ) );
+	Dictionary_Add( dictionary, "gaussParticlesX", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "gaussParticlesY", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "gaussParticlesZ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	
+	/* Configure the element-cell-layout */
+	singleCellLayout = SingleCellLayout_New( "singleCellLayout", dimExists, NULL, NULL );
+	
+	/* Configure the gauss-particle-layout */
+	dim = Dictionary_GetUnsignedInt( dictionary, "dim" );
+	particlesPerDim[0] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesX" );
+	particlesPerDim[1] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesY" );
+	particlesPerDim[2] = Dictionary_GetUnsignedInt( dictionary, "gaussParticlesZ" );
+	gaussParticleLayout = GaussParticleLayout_New( "gaussParticleLayout", dim , particlesPerDim );
+	
+	/* Configure the swarm */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	swarm = Swarm_New( "testGaussSwarmSingleCell", singleCellLayout, gaussParticleLayout, dim,
+		sizeof(Particle), extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( gaussParticleLayout, stream );
+	}
+	
+	/* Print out the particles on any cell (they should all be the same) */
+	count = swarm->cellParticleCountTbl[0];
+	printf("count = %d \n",count );
+	
+	for( p = 0; p < count; p++ ) {
+		x = ((IntegrationPoint*)Swarm_ParticleInCellAt( swarm, 0, p ))->xi[0]; 
+		y = ((IntegrationPoint*)Swarm_ParticleInCellAt( swarm, 0, p ))->xi[1]; 
+		z = ((IntegrationPoint*)Swarm_ParticleInCellAt( swarm, 0, p ))->xi[2]; 	
+		w = ((IntegrationPoint*)Swarm_ParticleInCellAt( swarm, 0, p ))->weight;
+		printf("pId=%d : xi = { %f, %f, %f } \n",p,x,y,z );
+		printf("pId=%d : weight = %f \n",p,w );
+	}	
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( gaussParticleLayout );
+	Stg_Class_Delete( singleCellLayout );	
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testLineParticleLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testLineParticleLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testParticleCoords testLineParticleLayout.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testLineParticleLayout.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testLineParticleLayout.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<include>testParticleCoords.xml</include>
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">LineParticleLayout</param>
+			<param name="totalInitialParticles">20</param>
+			<list name="verticies">
+				<asciidata>
+					<columnDefinition name = "x" type="double"/>
+					<columnDefinition name = "y" type="double"/>
+					<columnDefinition name = "z" type="double"/>
+					 0.0        1.0    0.0
+					 0.0       11.0    5.0
+					22.0       11.0    0.0
+				</asciidata>
+			</list>
+		</struct>
+	</struct>
+ 
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 4x2x1
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 4x2x1
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+ManualParticleLayout (ptr): 0x807dc68:
+	GlobalParticleLayout (ptr): 0x807dc68
+	ParticleLayout (ptr): 0x807dc68
+	Stg_Class (ptr): 0x807dc68
+		sizeOfSelf: 140
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0x4002fc4c
+		_print (func ptr): 0x4002fc75
+		_copy (func ptr): 0x4002fcd7
+		_setInitialCounts (func ptr): 0x4002e1fe
+		_initialiseParticles (func ptr): 0x4002e586
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0x4002fe48
+		totalInitialParticles: 4
+		averageInitialParticlesPerCell: 0.5
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+		part. InCell   0 (local index      0): (    0.4,     0.3,     0.2)
+	Local Cell   2:
+	Local Cell   3:
+		part. InCell   0 (local index      2): (    0.8,     0.1,     0.3)
+		part. InCell   1 (local index      3): (    0.9,     0.4,     0.1)
+	Local Cell   4:
+	Local Cell   5:
+	Local Cell   6:
+		part. InCell   0 (local index      1): (    0.7,     0.6,     0.5)
+	Local Cell   7:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testManualParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,43 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 4x2x1
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x1
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+ManualParticleLayout (ptr): 0x807e740:
+	GlobalParticleLayout (ptr): 0x807e740
+	ParticleLayout (ptr): 0x807e740
+	Stg_Class (ptr): 0x807e740
+		sizeOfSelf: 140
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0x4002fc4c
+		_print (func ptr): 0x4002fc75
+		_copy (func ptr): 0x4002fcd7
+		_setInitialCounts (func ptr): 0x4002e1fe
+		_initialiseParticles (func ptr): 0x4002e586
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0x4002fe48
+		totalInitialParticles: 4
+		averageInitialParticlesPerCell: 0.5
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+		part. InCell   0 (local index      0): (    0.4,     0.3,     0.2)
+	Local Cell   2:
+	Local Cell   3:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testManualParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,45 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 4x2x1
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x1
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+ManualParticleLayout (ptr): 0x807d8d0:
+	GlobalParticleLayout (ptr): 0x807d8d0
+	ParticleLayout (ptr): 0x807d8d0
+	Stg_Class (ptr): 0x807d8d0
+		sizeOfSelf: 140
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0xb7f1bc4c
+		_print (func ptr): 0xb7f1bc75
+		_copy (func ptr): 0xb7f1bcd7
+		_setInitialCounts (func ptr): 0xb7f1a1fe
+		_initialiseParticles (func ptr): 0xb7f1a586
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7f1be48
+		totalInitialParticles: 4
+		averageInitialParticlesPerCell: 0.5
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+		part. InCell   0 (local index      1): (    0.8,     0.1,     0.3)
+		part. InCell   1 (local index      2): (    0.9,     0.4,     0.1)
+	Local Cell   2:
+		part. InCell   0 (local index      0): (    0.7,     0.6,     0.5)
+	Local Cell   3:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testManualParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testManualParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testManualParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,207 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ManualParticleLayout initialises particle positions properly.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testManualParticleLayout.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         numProcessors;
+	int                         procToWatch;
+	Dictionary*                 dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {4, 2, 1};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	ExtensionManager_Register*  extensionMgr_Register;
+	Mesh*                       mesh;
+	ManualParticleLayout*       particleLayout;
+	ElementCellLayout*          elementCellLayout;
+	Swarm*                      swarm;
+	Stream*                     stream;
+	Dimension_Index             dim;
+	Dictionary_Entry_Value*     particlePositionsList;
+	Dictionary_Entry_Value*     particlePositionEntry;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+/*	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	particlePositionsList = Dictionary_Entry_Value_NewList();
+	Dictionary_Add( dictionary, "manualParticlePositions", particlePositionsList );
+	particlePositionEntry = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddElement( particlePositionsList, particlePositionEntry );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "x", Dictionary_Entry_Value_FromDouble( 0.4 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "y", Dictionary_Entry_Value_FromDouble( 0.3 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "z", Dictionary_Entry_Value_FromDouble( 0.2 ) );
+	particlePositionEntry = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddElement( particlePositionsList, particlePositionEntry );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "x", Dictionary_Entry_Value_FromDouble( 0.7 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "y", Dictionary_Entry_Value_FromDouble( 0.6 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "z", Dictionary_Entry_Value_FromDouble( 0.5 ) );
+	particlePositionEntry = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddElement( particlePositionsList, particlePositionEntry );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "x", Dictionary_Entry_Value_FromDouble( 0.8 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "y", Dictionary_Entry_Value_FromDouble( 0.1 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "z", Dictionary_Entry_Value_FromDouble( 0.3 ) );
+	particlePositionEntry = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddElement( particlePositionsList, particlePositionEntry );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "x", Dictionary_Entry_Value_FromDouble( 0.9 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "y", Dictionary_Entry_Value_FromDouble( 0.4 ) );
+	Dictionary_Entry_Value_AddMember( particlePositionEntry, "z", Dictionary_Entry_Value_FromDouble( 0.1 ) );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	/* Configure the gauss-particle-layout */
+	particleLayout = ManualParticleLayout_New( "manualParticleLayout", dictionary );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New(  "testSwarm", elementCellLayout, particleLayout, dim, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( particleLayout, stream );
+		/* Print out the particles on all cells */
+		Swarm_PrintParticleCoords_ByCell( swarm, stream );
+	}
+	
+
+	/* Destroy stuff */
+	Stg_Class_Delete( particleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testParticleCoords.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testParticleCoords.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,158 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testParticleCoords.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm            CommWorld;
+	int                 rank;
+	int                 numProcessors;
+	int                 procToWatch;
+	Dictionary*         dictionary;
+	Dictionary*         componentDict;
+	Stg_ComponentFactory*   cf;
+	Swarm*              swarm;
+	Stream*             stream;
+	XML_IO_Handler*     ioHandler;
+	ExtensionManager_Register* extensionMgr_Register;
+	Variable_Register*  variable_Register;
+
+	DomainContext*    context;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	dictionary = Dictionary_New();
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	Journal_ReadFromDictionary( dictionary );
+
+	/* Construction phase -------------------------------------------------------------------------------------------*/
+	
+	/* Create the Context */
+	componentDict = Dictionary_GetDictionary( dictionary, "components" );
+	
+	assert( componentDict );
+
+	context = DomainContext_New( "context", 0, 0, MPI_COMM_WORLD, dictionary );
+
+	context->CF = Stg_ComponentFactory_New( dictionary, componentDict, Stg_ObjectList_New() );
+	cf = context->CF;
+        LiveComponentRegister_Add( context->CF->LCRegister, (Stg_Component*) context );
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	variable_Register = Variable_Register_New( );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)extensionMgr_Register, "ExtensionManager_Register" );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)variable_Register, "Variable_Register" );
+
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+
+	LiveComponentRegister_BuildAll( cf->LCRegister, NULL );
+	LiveComponentRegister_InitialiseAll( cf->LCRegister, NULL );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	procToWatch = Dictionary_GetUnsignedInt( dictionary, "procToWatch" );
+	if( rank == procToWatch )  {
+		printf( "Watching rank: %i\n", rank );
+	
+		Stream_RedirectFile_WithPrependedPath( stream, Dictionary_GetString( dictionary, "outputPath" ), "output.dat" );
+
+		swarm = (Swarm*) LiveComponentRegister_Get( cf->LCRegister, "swarm" );
+		assert(swarm);
+
+		Swarm_PrintParticleCoords( swarm, stream );
+	}
+		
+	/* Destroy stuff */
+	/* TODO LiveComponentRegister_DeleteAll( cf->LCRegister ); */
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( variable_Register );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testParticleCoords.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testParticleCoords.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="mesh-linear">
+			<param name="Type">Mesh</param>
+			<param name="ElementSize">8</param>
+			<param name="NodeSize">0</param>
+		</struct>
+		<struct name="cartesianGenerator">
+			<param name="Type"> CartesianGenerator </param>
+			<param name="mesh"> mesh-linear </param>
+			<param name="dims"> dim </param>
+			<list name="size">
+				<param> elementResI </param>
+				<param> elementResJ </param>
+				<param> elementResK </param>
+			</list>
+			<param name="maxDecomposedDims"> 1 </param>
+			<list name="maxDecompositions">
+				<param> 0 </param>
+				<param> 1 </param>
+				<param> 1 </param>
+			</list>
+			<list name="minCoord">
+				<param> minX </param>
+				<param> minY </param>
+				<param> minZ </param>
+			</list>
+			<list name="maxCoord">
+				<param> maxX </param>
+				<param> maxY </param>
+				<param> maxZ </param>
+			</list>
+		</struct>
+ 
+		<struct name="elementCellLayout"> 
+			<param name="Type">ElementCellLayout</param>
+			<param name="Mesh">mesh-linear</param>
+		</struct>
+
+		<struct name="pMovementHandler"> 
+			<param name="Type">ParticleMovementHandler</param>
+		</struct>
+		
+		<struct name="pShadowSync"> 
+			<param name="Type">ParticleShadowSync</param>
+		</struct>
+		
+		<struct name="swarm">
+			<param name="Type">Swarm</param>
+			<param name="CellLayout">elementCellLayout</param>
+			<param name="ParticleLayout">particleLayout</param>
+			<list name="ParticleCommHandlers">
+				<param>pMovementHandler</param>
+				<param>pShadowSync</param>
+			</list>			
+		</struct>
+	</struct>
+ 
+	<param name="journal.info.lucInfo">true</param>
+	<param name="journal-level.info.lucInfo">2</param>
+	<param name="maxTimeSteps">1</param> 
+	<param name="dumpEvery">1</param>
+
+	<param name="outputPath">./output</param> 
+	<param name="dim">2</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param> 
+	<param name="elementResK">1</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">100.0</param> 
+	<param name="maxY">100.0</param>
+	<param name="maxZ">100.0</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSingleCellLayout0.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSingleCellLayout0.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,23 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+cellPointTbl  [ 0][0-8]:
+	{-1 -1 -1}
+	{1 -1 -1}
+	{1 1 -1}
+	{-1 1 -1}
+	{-1 -1 1}
+	{1 -1 1}
+	{1 1 1}
+	{-1 1 1}
+
+Testing CellLayout_MapElementIdToCellId() always returns 0:
+	CellLayout_MapElementIdToCellId( singleCellLayout, 0 ) = 0
+	CellLayout_MapElementIdToCellId( singleCellLayout, 5 ) = 0
+	CellLayout_MapElementIdToCellId( singleCellLayout, 100 ) = 0
+Testing that particles always belong to first cell:
+CellLayout_CellOf( singleCellLayout, X ) = 0
+
+Testing SingleCellLayout_IsInCell:
+For particle {0,0,0}: 1
+For particle {1,1,1}: 1
+For particle {2,1,1}: 0
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSingleCellLayout0.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSingleCellLayout0.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSingleCellLayout0 " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSingleCellLayout0.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSingleCellLayout0.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,182 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the SingleCellLayout can correctly initialise a cell, and check if a particle is contained by it.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSingleCellLayout0.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*			dictionary;
+	unsigned int			dimExists[] = { True, True, True };
+	SingleCellLayout*		singleCellLayout;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	Stream_SetLevel( stgMemory->infoStream, 3 );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( numProcessors ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "minX", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "minY", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "minZ", Dictionary_Entry_Value_FromDouble( 0.0f ) );
+	Dictionary_Add( dictionary, "maxX", Dictionary_Entry_Value_FromDouble( 300.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 12.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 300.0f ) );
+	
+	/* Configure the single-cell-layout */
+	singleCellLayout = SingleCellLayout_New( "singleCellLayout", dimExists, NULL, NULL );
+	
+	if( rank == procToWatch ) {
+		Cell_Index cell;
+		double***				cellPoints = NULL;
+		double					*testCoord;
+
+		testCoord = Memory_Alloc_Array_Unnamed( double, 3 );
+		testCoord[0] = 0;
+		testCoord[1] = 0;
+		testCoord[2] = 0;
+		
+		for( cell = 0; cell < singleCellLayout->_cellLocalCount( singleCellLayout ); cell++ ) {
+			Cell_PointIndex			point;
+			Cell_PointIndex			count;
+			
+			count = singleCellLayout->_pointCount( singleCellLayout, cell );
+			printf( "cellPointTbl  [%2u][0-%u]:\n", cell, count );
+			cellPoints = Memory_Alloc_Array( double**, count, "cellsPoints" );
+			singleCellLayout->_initialisePoints( singleCellLayout, cell, count, cellPoints );
+			for( point = 0; point < count; point++ ) {
+				printf( "\t{%.3g %.3g %.3g}\n", (*cellPoints[point])[I_AXIS], (*cellPoints[point])[J_AXIS], 
+					(*cellPoints[point])[K_AXIS] );
+			}
+			printf( "\n" );
+		}
+		printf( "Testing CellLayout_MapElementIdToCellId() always returns 0:\n" );
+		printf( "\tCellLayout_MapElementIdToCellId( singleCellLayout, %u ) = %u\n", 
+			0, CellLayout_MapElementIdToCellId( singleCellLayout, 0 ) );
+		printf( "\tCellLayout_MapElementIdToCellId( singleCellLayout, %u ) = %u\n", 
+			5, CellLayout_MapElementIdToCellId( singleCellLayout, 5 ) );
+		printf( "\tCellLayout_MapElementIdToCellId( singleCellLayout, %u ) = %u\n", 
+			100, CellLayout_MapElementIdToCellId( singleCellLayout, 100 ) );
+
+		printf( "Testing that particles always belong to first cell:\n" );
+		printf( "CellLayout_CellOf( singleCellLayout, X ) = %u\n\n", 
+			CellLayout_CellOf( singleCellLayout, cellPoints[0] ) );
+
+		printf( "Testing SingleCellLayout_IsInCell:\n" );
+		printf( "For particle {0,0,0}: %u\n", 
+			CellLayout_IsInCell( singleCellLayout, 0, &testCoord ) );
+		testCoord[I_AXIS] = testCoord[J_AXIS] = testCoord[K_AXIS] = 1;
+		printf( "For particle {1,1,1}: %u\n",
+			CellLayout_IsInCell( singleCellLayout, 0, &testCoord ) );
+		testCoord[I_AXIS] = 2;
+		printf( "For particle {2,1,1}: %u\n",
+			CellLayout_IsInCell( singleCellLayout, 0, &testCoord ) );
+		Memory_Free( cellPoints );
+
+		Memory_Free( testCoord );
+	}
+	
+
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( singleCellLayout );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	/* Memory_Print_Leak(); */
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSpaceFillerParticleLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSpaceFillerParticleLayout  " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSpaceFillerParticleLayout.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSpaceFillerParticleLayout  " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSpaceFillerParticleLayout.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSpaceFillerParticleLayout 1 " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSpaceFillerParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSpaceFillerParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,183 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSpaceFillerParticleLayout.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+	Mesh_SetAlgorithms( mesh, Mesh_RegularAlgorithms_New( "" ) );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         numProcessors;
+	int                         procToWatch;
+	Dictionary*                 dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {4, 2, 1};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {400.0, 200.0, 100.0};
+	ExtensionManager_Register*  extensionMgr_Register;
+	Mesh*                       mesh;
+	SpaceFillerParticleLayout*        particleLayout;
+	ElementCellLayout*          elementCellLayout;
+	Swarm*                      swarm;
+	Stream*                     stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+	Stream_RedirectFile_WithPrependedPath( stream, "output", "spaceFillerParticleLayout.dat" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	particleLayout = SpaceFillerParticleLayout_New( "spaceFillerParticleLayout", nDims, SpaceFillerParticleLayout_Invalid, 20 );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New(  "testSwarm", elementCellLayout, particleLayout, nDims, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( particleLayout, stream );
+		/* Print out the particles on all cells */
+		Swarm_PrintParticleCoords_ByCell( swarm, stream );
+	}
+	
+
+	/* Destroy stuff */
+	Stg_Class_Delete( particleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,323 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Swarm (ptr): 0x807e090
+Stg_Component (ptr): 0x807e090
+Stg_Object (ptr): 0x807e090
+	Stg_Class (ptr): 0x807e090
+		sizeOfSelf: 244
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0x400385a6
+		_print (func ptr): 0x40038783
+		_copy (func ptr): 0x40038d6e
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x400399f1
+	_construct (func ptr): 0x40039ad0
+	_build (func ptr): 0x40039e24
+	_initialise (func ptr): 0x40039f34
+	_execute (func ptr): 0x40039fc3
+	_destroy (func ptr): 0x40039fc8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: testSwarm-Construct
+	build function name: testSwarm-Build
+	initialise function name: testSwarm-Initialise
+	execute function name: testSwarm-Execute
+	destroy function name: testSwarm-Destroy
+ElementCellLayout (ptr): 0x8072b38
+CellLayout (ptr): 0x8072b38
+Stg_Component (ptr): 0x8072b38
+Stg_Object (ptr): 0x8072b38
+	Stg_Class (ptr): 0x8072b38
+		sizeOfSelf: 156
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0x4002c1b3
+		_print (func ptr): 0x4002c1dc
+		_copy (func ptr): 0x4002c250
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x4002bda0
+	_construct (func ptr): 0x4002c328
+	_build (func ptr): 0x4002c3a5
+	_initialise (func ptr): 0x4002c45a
+	_execute (func ptr): 0x4002c498
+	_destroy (func ptr): 0x4002c49d
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: elementCellLayout-Construct
+	build function name: elementCellLayout-Build
+	initialise function name: elementCellLayout-Initialise
+	execute function name: elementCellLayout-Execute
+	destroy function name: elementCellLayout-Destroy
+	_cellLocalCount (func ptr): 0x4002c4a2
+	_cellShadowCount (func ptr): 0x4002c4e8
+	_pointCount (func ptr): 0x4002c52e
+	_initialisePoints (func ptr): 0x4002c594
+	_mapElementIdToCellId (func ptr): 0x4002c63d
+	_isInCell (func ptr): 0x4002c645
+	_cellOf (func ptr): 0x4002c699
+	_getShadowInfo (func ptr): 0x4002c711
+	mesh (ptr): 0x8073538
+RandomParticleLayout (ptr): 0x807dcd8:
+PerCellParticleLayout (ptr): 0x807dcd8
+ParticleLayout (ptr): 0x807dcd8
+Stg_Class (ptr): 0x807dcd8
+	sizeOfSelf: 136
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0x400367e6
+	_print (func ptr): 0x4003680f
+	_copy (func ptr): 0x400368a5
+	_setInitialCounts (func ptr): 0x40035bdd
+	_initialiseParticles (func ptr): 0x40035d92
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0x40036a84
+	_initialiseParticlesOfCell (func ptr): 0x40036a9b
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 12
+	cellDomainCount: 12
+	cellShadowCount: 0
+	cellPointCountTbl (ptr): 0x807e7e0
+	cellPointCountTbl[0-12]: 008 008 008 008 008 008 008 008 008 008 008 008 
+	cellPointTbl (ptr): 0x807efe8
+	cellPointTbl[0-12]: {
+	cellPointTbl[0][0-8]: {0 0 0} {150 0 0} {0 4 0} {150 4 0} {0 0 150} {150 0 150} {0 4 150} {150 4 150} 
+	cellPointTbl[1][0-8]: {150 0 0} {300 0 0} {150 4 0} {300 4 0} {150 0 150} {300 0 150} {150 4 150} {300 4 150} 
+	cellPointTbl[2][0-8]: {0 4 0} {150 4 0} {0 8 0} {150 8 0} {0 4 150} {150 4 150} {0 8 150} {150 8 150} 
+	cellPointTbl[3][0-8]: {150 4 0} {300 4 0} {150 8 0} {300 8 0} {150 4 150} {300 4 150} {150 8 150} {300 8 150} 
+	cellPointTbl[4][0-8]: {0 8 0} {150 8 0} {0 12 0} {150 12 0} {0 8 150} {150 8 150} {0 12 150} {150 12 150} 
+	cellPointTbl[5][0-8]: {150 8 0} {300 8 0} {150 12 0} {300 12 0} {150 8 150} {300 8 150} {150 12 150} {300 12 150} 
+	cellPointTbl[6][0-8]: {0 0 150} {150 0 150} {0 4 150} {150 4 150} {0 0 300} {150 0 300} {0 4 300} {150 4 300} 
+	cellPointTbl[7][0-8]: {150 0 150} {300 0 150} {150 4 150} {300 4 150} {150 0 300} {300 0 300} {150 4 300} {300 4 300} 
+	cellPointTbl[8][0-8]: {0 4 150} {150 4 150} {0 8 150} {150 8 150} {0 4 300} {150 4 300} {0 8 300} {150 8 300} 
+	cellPointTbl[9][0-8]: {150 4 150} {300 4 150} {150 8 150} {300 8 150} {150 4 300} {300 4 300} {150 8 300} {300 8 300} 
+	cellPointTbl[10][0-8]: {0 8 150} {150 8 150} {0 12 150} {150 12 150} {0 8 300} {150 8 300} {0 12 300} {150 12 300} 
+	cellPointTbl[11][0-8]: {150 8 150} {300 8 150} {150 12 150} {300 12 150} {150 8 300} {300 8 300} {150 12 300} {300 12 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x807f1a8
+	cellParticleCountTbl[0-12]: 004 004 004 004 004 004 004 004 004 004 004 004 
+	cellParticleSizeTbl (ptr): 0x807f1e8
+	cellParticleSizeTbl[0-12]: 004 004 004 004 004 004 004 004 004 004 004 004 
+	cellParticleTbl (ptr): 0x807f228
+	cellParticleTbl [0-12]: {
+		cellParticleTbl[0][0-4]:
+			(part. index) 0
+			(part. index) 1
+			(part. index) 2
+			(part. index) 3
+
+		cellParticleTbl[1][0-4]:
+			(part. index) 4
+			(part. index) 5
+			(part. index) 6
+			(part. index) 7
+
+		cellParticleTbl[2][0-4]:
+			(part. index) 8
+			(part. index) 9
+			(part. index) 10
+			(part. index) 11
+
+		cellParticleTbl[3][0-4]:
+			(part. index) 12
+			(part. index) 13
+			(part. index) 14
+			(part. index) 15
+
+		cellParticleTbl[4][0-4]:
+			(part. index) 16
+			(part. index) 17
+			(part. index) 18
+			(part. index) 19
+
+		cellParticleTbl[5][0-4]:
+			(part. index) 20
+			(part. index) 21
+			(part. index) 22
+			(part. index) 23
+
+		cellParticleTbl[6][0-4]:
+			(part. index) 24
+			(part. index) 25
+			(part. index) 26
+			(part. index) 27
+
+		cellParticleTbl[7][0-4]:
+			(part. index) 28
+			(part. index) 29
+			(part. index) 30
+			(part. index) 31
+
+		cellParticleTbl[8][0-4]:
+			(part. index) 32
+			(part. index) 33
+			(part. index) 34
+			(part. index) 35
+
+		cellParticleTbl[9][0-4]:
+			(part. index) 36
+			(part. index) 37
+			(part. index) 38
+			(part. index) 39
+
+		cellParticleTbl[10][0-4]:
+			(part. index) 40
+			(part. index) 41
+			(part. index) 42
+			(part. index) 43
+
+		cellParticleTbl[11][0-4]:
+			(part. index) 44
+			(part. index) 45
+			(part. index) 46
+			(part. index) 47
+
+	}
+	particlesArraySize: 50
+	particlesArrayDelta: 2
+	extraParticlesFactor: 0.05
+
+Printing coords of all local processor particles:
+	local particle      0: ( 36.393,  2.6846,  24.175)
+	local particle      1: ( 106.19,  2.9264,  13.188)
+	local particle      2: ( 107.93, 0.63865,  64.247)
+	local particle      3: ( 105.66,  3.4006,  72.744)
+	local particle      4: ( 261.92,  2.6066,  15.099)
+	local particle      5: ( 275.23,  0.3656,  23.032)
+	local particle      6: ( 242.36,  2.7593,  108.86)
+	local particle      7: ( 201.31, 0.95553,  137.57)
+	local particle      8: ( 91.249,  4.7051,  70.366)
+	local particle      9: ( 40.359,  4.3716,  52.268)
+	local particle     10: ( 60.611,   5.112,  54.881)
+	local particle     11: ( 32.111,  7.5087,  74.722)
+	local particle     12: ( 196.11,  6.3309,  102.69)
+	local particle     13: ( 271.87,  5.6744,  61.877)
+	local particle     14: ( 162.47,  6.9511,  106.25)
+	local particle     15: ( 218.88,   4.529,  122.07)
+	local particle     16: (  6.633,  8.8349,  9.5572)
+	local particle     17: ( 128.61,  9.1473,  118.49)
+	local particle     18: ( 88.893,  8.5958,  31.668)
+	local particle     19: ( 47.516,  8.1327,  100.78)
+	local particle     20: ( 168.92,  10.188,  58.886)
+	local particle     21: ( 292.64,  10.957,  111.71)
+	local particle     22: ( 178.58,  9.6187,  77.415)
+	local particle     23: ( 157.44,  9.3549,  132.28)
+	local particle     24: ( 13.625,  2.5714,  177.84)
+	local particle     25: ( 41.912, 0.49186,  250.38)
+	local particle     26: ( 28.378,  2.7518,  206.87)
+	local particle     27: ( 52.956,  2.0438,  233.85)
+	local particle     28: ( 234.77,  1.8292,  288.89)
+	local particle     29: ( 150.61,  3.2193,  263.64)
+	local particle     30: ( 291.18,  3.2598,  262.71)
+	local particle     31: ( 179.89,  2.2259,  260.91)
+	local particle     32: ( 134.18,   5.628,  207.39)
+	local particle     33: ( 121.05,  7.5377,  244.92)
+	local particle     34: ( 30.961,  4.4256,  161.67)
+	local particle     35: ( 137.84,  6.2785,  237.33)
+	local particle     36: ( 268.23,  4.7118,  260.51)
+	local particle     37: ( 245.18,  7.6362,  217.72)
+	local particle     38: ( 172.83,  5.4331,  198.27)
+	local particle     39: ( 255.76,  6.2508,  184.54)
+	local particle     40: ( 20.322,  8.1917,  206.56)
+	local particle     41: ( 147.93,  10.659,  220.01)
+	local particle     42: ( 145.89,  9.6342,  206.44)
+	local particle     43: ( 59.141,  10.387,  266.19)
+	local particle     44: ( 234.72,  9.8836,   211.3)
+	local particle     45: ( 297.29,  9.6065,  154.82)
+	local particle     46: ( 243.25,  9.1756,  265.76)
+	local particle     47: ( 152.97,   8.364,     185)
+
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      0): ( 36.393,  2.6846,  24.175)
+		part. InCell   1 (local index      1): ( 106.19,  2.9264,  13.188)
+		part. InCell   2 (local index      2): ( 107.93, 0.63865,  64.247)
+		part. InCell   3 (local index      3): ( 105.66,  3.4006,  72.744)
+	Local Cell   1:
+		part. InCell   0 (local index      4): ( 261.92,  2.6066,  15.099)
+		part. InCell   1 (local index      5): ( 275.23,  0.3656,  23.032)
+		part. InCell   2 (local index      6): ( 242.36,  2.7593,  108.86)
+		part. InCell   3 (local index      7): ( 201.31, 0.95553,  137.57)
+	Local Cell   2:
+		part. InCell   0 (local index      8): ( 91.249,  4.7051,  70.366)
+		part. InCell   1 (local index      9): ( 40.359,  4.3716,  52.268)
+		part. InCell   2 (local index     10): ( 60.611,   5.112,  54.881)
+		part. InCell   3 (local index     11): ( 32.111,  7.5087,  74.722)
+	Local Cell   3:
+		part. InCell   0 (local index     12): ( 196.11,  6.3309,  102.69)
+		part. InCell   1 (local index     13): ( 271.87,  5.6744,  61.877)
+		part. InCell   2 (local index     14): ( 162.47,  6.9511,  106.25)
+		part. InCell   3 (local index     15): ( 218.88,   4.529,  122.07)
+	Local Cell   4:
+		part. InCell   0 (local index     16): (  6.633,  8.8349,  9.5572)
+		part. InCell   1 (local index     17): ( 128.61,  9.1473,  118.49)
+		part. InCell   2 (local index     18): ( 88.893,  8.5958,  31.668)
+		part. InCell   3 (local index     19): ( 47.516,  8.1327,  100.78)
+	Local Cell   5:
+		part. InCell   0 (local index     20): ( 168.92,  10.188,  58.886)
+		part. InCell   1 (local index     21): ( 292.64,  10.957,  111.71)
+		part. InCell   2 (local index     22): ( 178.58,  9.6187,  77.415)
+		part. InCell   3 (local index     23): ( 157.44,  9.3549,  132.28)
+	Local Cell   6:
+		part. InCell   0 (local index     24): ( 13.625,  2.5714,  177.84)
+		part. InCell   1 (local index     25): ( 41.912, 0.49186,  250.38)
+		part. InCell   2 (local index     26): ( 28.378,  2.7518,  206.87)
+		part. InCell   3 (local index     27): ( 52.956,  2.0438,  233.85)
+	Local Cell   7:
+		part. InCell   0 (local index     28): ( 234.77,  1.8292,  288.89)
+		part. InCell   1 (local index     29): ( 150.61,  3.2193,  263.64)
+		part. InCell   2 (local index     30): ( 291.18,  3.2598,  262.71)
+		part. InCell   3 (local index     31): ( 179.89,  2.2259,  260.91)
+	Local Cell   8:
+		part. InCell   0 (local index     32): ( 134.18,   5.628,  207.39)
+		part. InCell   1 (local index     33): ( 121.05,  7.5377,  244.92)
+		part. InCell   2 (local index     34): ( 30.961,  4.4256,  161.67)
+		part. InCell   3 (local index     35): ( 137.84,  6.2785,  237.33)
+	Local Cell   9:
+		part. InCell   0 (local index     36): ( 268.23,  4.7118,  260.51)
+		part. InCell   1 (local index     37): ( 245.18,  7.6362,  217.72)
+		part. InCell   2 (local index     38): ( 172.83,  5.4331,  198.27)
+		part. InCell   3 (local index     39): ( 255.76,  6.2508,  184.54)
+	Local Cell  10:
+		part. InCell   0 (local index     40): ( 20.322,  8.1917,  206.56)
+		part. InCell   1 (local index     41): ( 147.93,  10.659,  220.01)
+		part. InCell   2 (local index     42): ( 145.89,  9.6342,  206.44)
+		part. InCell   3 (local index     43): ( 59.141,  10.387,  266.19)
+	Local Cell  11:
+		part. InCell   0 (local index     44): ( 234.72,  9.8836,   211.3)
+		part. InCell   1 (local index     45): ( 297.29,  9.6065,  154.82)
+		part. InCell   2 (local index     46): ( 243.25,  9.1756,  265.76)
+		part. InCell   3 (local index     47): ( 152.97,   8.364,     185)
+Testing coord 180 2.4 246
+Closest Particle is 31 with distance 14.9097
+Testing coord 60 10.8 36
+Closest Particle is 10 with distance 19.7285
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarm " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.0of2.diffs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.0of2.diffs	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2 @@
+136a137
+> 	ics: (null)... not provided (may be Operator type)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,267 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Swarm (ptr): 0x807f0d0
+Stg_Component (ptr): 0x807f0d0
+Stg_Object (ptr): 0x807f0d0
+	Stg_Class (ptr): 0x807f0d0
+		sizeOfSelf: 244
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0x400385a6
+		_print (func ptr): 0x40038783
+		_copy (func ptr): 0x40038d6e
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x400399f1
+	_construct (func ptr): 0x40039ad0
+	_build (func ptr): 0x40039e24
+	_initialise (func ptr): 0x40039f34
+	_execute (func ptr): 0x40039fc3
+	_destroy (func ptr): 0x40039fc8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: testSwarm-Construct
+	build function name: testSwarm-Build
+	initialise function name: testSwarm-Initialise
+	execute function name: testSwarm-Execute
+	destroy function name: testSwarm-Destroy
+ElementCellLayout (ptr): 0x8072e20
+CellLayout (ptr): 0x8072e20
+Stg_Component (ptr): 0x8072e20
+Stg_Object (ptr): 0x8072e20
+	Stg_Class (ptr): 0x8072e20
+		sizeOfSelf: 156
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0x4002c1b3
+		_print (func ptr): 0x4002c1dc
+		_copy (func ptr): 0x4002c250
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x4002bda0
+	_construct (func ptr): 0x4002c328
+	_build (func ptr): 0x4002c3a5
+	_initialise (func ptr): 0x4002c45a
+	_execute (func ptr): 0x4002c498
+	_destroy (func ptr): 0x4002c49d
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: elementCellLayout-Construct
+	build function name: elementCellLayout-Build
+	initialise function name: elementCellLayout-Initialise
+	execute function name: elementCellLayout-Execute
+	destroy function name: elementCellLayout-Destroy
+	_cellLocalCount (func ptr): 0x4002c4a2
+	_cellShadowCount (func ptr): 0x4002c4e8
+	_pointCount (func ptr): 0x4002c52e
+	_initialisePoints (func ptr): 0x4002c594
+	_mapElementIdToCellId (func ptr): 0x4002c63d
+	_isInCell (func ptr): 0x4002c645
+	_cellOf (func ptr): 0x4002c699
+	_getShadowInfo (func ptr): 0x4002c711
+	mesh (ptr): 0x8073a60
+RandomParticleLayout (ptr): 0x807ed18:
+PerCellParticleLayout (ptr): 0x807ed18
+ParticleLayout (ptr): 0x807ed18
+Stg_Class (ptr): 0x807ed18
+	sizeOfSelf: 136
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0x400367e6
+	_print (func ptr): 0x4003680f
+	_copy (func ptr): 0x400368a5
+	_setInitialCounts (func ptr): 0x40035bdd
+	_initialiseParticles (func ptr): 0x40035d92
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0x40036a84
+	_initialiseParticlesOfCell (func ptr): 0x40036a9b
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 8
+	cellDomainCount: 12
+	cellShadowCount: 4
+	cellPointCountTbl (ptr): 0x8080088
+	cellPointCountTbl[0-12]: 008 008 008 008 008 008 008 008 008 008 008 008 
+	cellPointTbl (ptr): 0x80800c8
+	cellPointTbl[0-12]: {
+	cellPointTbl[0][0-8]: {0 0 0} {150 0 0} {0 4 0} {150 4 0} {0 0 150} {150 0 150} {0 4 150} {150 4 150} 
+	cellPointTbl[1][0-8]: {150 0 0} {300 0 0} {150 4 0} {300 4 0} {150 0 150} {300 0 150} {150 4 150} {300 4 150} 
+	cellPointTbl[2][0-8]: {0 4 0} {150 4 0} {0 8 0} {150 8 0} {0 4 150} {150 4 150} {0 8 150} {150 8 150} 
+	cellPointTbl[3][0-8]: {150 4 0} {300 4 0} {150 8 0} {300 8 0} {150 4 150} {300 4 150} {150 8 150} {300 8 150} 
+	cellPointTbl[4][0-8]: {0 0 150} {150 0 150} {0 4 150} {150 4 150} {0 0 300} {150 0 300} {0 4 300} {150 4 300} 
+	cellPointTbl[5][0-8]: {150 0 150} {300 0 150} {150 4 150} {300 4 150} {150 0 300} {300 0 300} {150 4 300} {300 4 300} 
+	cellPointTbl[6][0-8]: {0 4 150} {150 4 150} {0 8 150} {150 8 150} {0 4 300} {150 4 300} {0 8 300} {150 8 300} 
+	cellPointTbl[7][0-8]: {150 4 150} {300 4 150} {150 8 150} {300 8 150} {150 4 300} {300 4 300} {150 8 300} {300 8 300} 
+	cellPointTbl[8][0-8]: {0 8 0} {150 8 0} {0 12 0} {150 12 0} {0 8 150} {150 8 150} {0 12 150} {150 12 150} 
+	cellPointTbl[9][0-8]: {150 8 0} {300 8 0} {150 12 0} {300 12 0} {150 8 150} {300 8 150} {150 12 150} {300 12 150} 
+	cellPointTbl[10][0-8]: {0 8 150} {150 8 150} {0 12 150} {150 12 150} {0 8 300} {150 8 300} {0 12 300} {150 12 300} 
+	cellPointTbl[11][0-8]: {150 8 150} {300 8 150} {150 12 150} {300 12 150} {150 8 300} {300 8 300} {150 12 300} {300 12 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x8080288
+	cellParticleCountTbl[0-12]: 004 004 004 004 004 004 004 004 000 000 000 000 
+	cellParticleSizeTbl (ptr): 0x80802c8
+	cellParticleSizeTbl[0-12]: 004 004 004 004 004 004 004 004 000 000 000 000 
+	cellParticleTbl (ptr): 0x8080308
+	cellParticleTbl [0-12]: {
+		cellParticleTbl[0][0-4]:
+			(part. index) 0
+			(part. index) 1
+			(part. index) 2
+			(part. index) 3
+
+		cellParticleTbl[1][0-4]:
+			(part. index) 4
+			(part. index) 5
+			(part. index) 6
+			(part. index) 7
+
+		cellParticleTbl[2][0-4]:
+			(part. index) 8
+			(part. index) 9
+			(part. index) 10
+			(part. index) 11
+
+		cellParticleTbl[3][0-4]:
+			(part. index) 12
+			(part. index) 13
+			(part. index) 14
+			(part. index) 15
+
+		cellParticleTbl[4][0-4]:
+			(part. index) 16
+			(part. index) 17
+			(part. index) 18
+			(part. index) 19
+
+		cellParticleTbl[5][0-4]:
+			(part. index) 20
+			(part. index) 21
+			(part. index) 22
+			(part. index) 23
+
+		cellParticleTbl[6][0-4]:
+			(part. index) 24
+			(part. index) 25
+			(part. index) 26
+			(part. index) 27
+
+		cellParticleTbl[7][0-4]:
+			(part. index) 28
+			(part. index) 29
+			(part. index) 30
+			(part. index) 31
+
+		cellParticleTbl[8][0-0]:
+
+		cellParticleTbl[9][0-0]:
+
+		cellParticleTbl[10][0-0]:
+
+		cellParticleTbl[11][0-0]:
+
+	}
+	particlesArraySize: 33
+	particlesArrayDelta: 1
+	extraParticlesFactor: 0.05
+
+Printing coords of all local processor particles:
+	local particle      0: ( 36.393,  2.6846,  24.175)
+	local particle      1: ( 106.19,  2.9264,  13.188)
+	local particle      2: ( 107.93, 0.63865,  64.247)
+	local particle      3: ( 105.66,  3.4006,  72.744)
+	local particle      4: ( 261.92,  2.6066,  15.099)
+	local particle      5: ( 275.23,  0.3656,  23.032)
+	local particle      6: ( 242.36,  2.7593,  108.86)
+	local particle      7: ( 201.31, 0.95553,  137.57)
+	local particle      8: ( 91.249,  4.7051,  70.366)
+	local particle      9: ( 40.359,  4.3716,  52.268)
+	local particle     10: ( 60.611,   5.112,  54.881)
+	local particle     11: ( 32.111,  7.5087,  74.722)
+	local particle     12: ( 196.11,  6.3309,  102.69)
+	local particle     13: ( 271.87,  5.6744,  61.877)
+	local particle     14: ( 162.47,  6.9511,  106.25)
+	local particle     15: ( 218.88,   4.529,  122.07)
+	local particle     16: (  6.633, 0.83491,  159.56)
+	local particle     17: ( 128.61,  1.1473,  268.49)
+	local particle     18: ( 88.893, 0.59575,  181.67)
+	local particle     19: ( 47.516, 0.13272,  250.78)
+	local particle     20: ( 168.92,  2.1875,  208.89)
+	local particle     21: ( 292.64,  2.9573,  261.71)
+	local particle     22: ( 178.58,  1.6187,  227.41)
+	local particle     23: ( 157.44,  1.3549,  282.28)
+	local particle     24: ( 13.625,  6.5714,  177.84)
+	local particle     25: ( 41.912,  4.4919,  250.38)
+	local particle     26: ( 28.378,  6.7518,  206.87)
+	local particle     27: ( 52.956,  6.0438,  233.85)
+	local particle     28: ( 234.77,  5.8292,  288.89)
+	local particle     29: ( 150.61,  7.2193,  263.64)
+	local particle     30: ( 291.18,  7.2598,  262.71)
+	local particle     31: ( 179.89,  6.2259,  260.91)
+
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      0): ( 36.393,  2.6846,  24.175)
+		part. InCell   1 (local index      1): ( 106.19,  2.9264,  13.188)
+		part. InCell   2 (local index      2): ( 107.93, 0.63865,  64.247)
+		part. InCell   3 (local index      3): ( 105.66,  3.4006,  72.744)
+	Local Cell   1:
+		part. InCell   0 (local index      4): ( 261.92,  2.6066,  15.099)
+		part. InCell   1 (local index      5): ( 275.23,  0.3656,  23.032)
+		part. InCell   2 (local index      6): ( 242.36,  2.7593,  108.86)
+		part. InCell   3 (local index      7): ( 201.31, 0.95553,  137.57)
+	Local Cell   2:
+		part. InCell   0 (local index      8): ( 91.249,  4.7051,  70.366)
+		part. InCell   1 (local index      9): ( 40.359,  4.3716,  52.268)
+		part. InCell   2 (local index     10): ( 60.611,   5.112,  54.881)
+		part. InCell   3 (local index     11): ( 32.111,  7.5087,  74.722)
+	Local Cell   3:
+		part. InCell   0 (local index     12): ( 196.11,  6.3309,  102.69)
+		part. InCell   1 (local index     13): ( 271.87,  5.6744,  61.877)
+		part. InCell   2 (local index     14): ( 162.47,  6.9511,  106.25)
+		part. InCell   3 (local index     15): ( 218.88,   4.529,  122.07)
+	Local Cell   4:
+		part. InCell   0 (local index     16): (  6.633, 0.83491,  159.56)
+		part. InCell   1 (local index     17): ( 128.61,  1.1473,  268.49)
+		part. InCell   2 (local index     18): ( 88.893, 0.59575,  181.67)
+		part. InCell   3 (local index     19): ( 47.516, 0.13272,  250.78)
+	Local Cell   5:
+		part. InCell   0 (local index     20): ( 168.92,  2.1875,  208.89)
+		part. InCell   1 (local index     21): ( 292.64,  2.9573,  261.71)
+		part. InCell   2 (local index     22): ( 178.58,  1.6187,  227.41)
+		part. InCell   3 (local index     23): ( 157.44,  1.3549,  282.28)
+	Local Cell   6:
+		part. InCell   0 (local index     24): ( 13.625,  6.5714,  177.84)
+		part. InCell   1 (local index     25): ( 41.912,  4.4919,  250.38)
+		part. InCell   2 (local index     26): ( 28.378,  6.7518,  206.87)
+		part. InCell   3 (local index     27): ( 52.956,  6.0438,  233.85)
+	Local Cell   7:
+		part. InCell   0 (local index     28): ( 234.77,  5.8292,  288.89)
+		part. InCell   1 (local index     29): ( 150.61,  7.2193,  263.64)
+		part. InCell   2 (local index     30): ( 291.18,  7.2598,  262.71)
+		part. InCell   3 (local index     31): ( 179.89,  6.2259,  260.91)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarm " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.1of2.diffs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.1of2.diffs	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2 @@
+108a109
+> 	ics: (null)... not provided (may be Operator type)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,203 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 2x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 2x2x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Swarm (ptr): 0x807da10
+Stg_Component (ptr): 0x807da10
+Stg_Object (ptr): 0x807da10
+	Stg_Class (ptr): 0x807da10
+		sizeOfSelf: 244
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0xb7f3f5a6
+		_print (func ptr): 0xb7f3f783
+		_copy (func ptr): 0xb7f3fd6e
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f409f1
+	_construct (func ptr): 0xb7f40ad0
+	_build (func ptr): 0xb7f40e24
+	_initialise (func ptr): 0xb7f40f34
+	_execute (func ptr): 0xb7f40fc3
+	_destroy (func ptr): 0xb7f40fc8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: testSwarm-Construct
+	build function name: testSwarm-Build
+	initialise function name: testSwarm-Initialise
+	execute function name: testSwarm-Execute
+	destroy function name: testSwarm-Destroy
+ElementCellLayout (ptr): 0x8072018
+CellLayout (ptr): 0x8072018
+Stg_Component (ptr): 0x8072018
+Stg_Object (ptr): 0x8072018
+	Stg_Class (ptr): 0x8072018
+		sizeOfSelf: 156
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0xb7f331b3
+		_print (func ptr): 0xb7f331dc
+		_copy (func ptr): 0xb7f33250
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f32da0
+	_construct (func ptr): 0xb7f33328
+	_build (func ptr): 0xb7f333a5
+	_initialise (func ptr): 0xb7f3345a
+	_execute (func ptr): 0xb7f33498
+	_destroy (func ptr): 0xb7f3349d
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: elementCellLayout-Construct
+	build function name: elementCellLayout-Build
+	initialise function name: elementCellLayout-Initialise
+	execute function name: elementCellLayout-Execute
+	destroy function name: elementCellLayout-Destroy
+	_cellLocalCount (func ptr): 0xb7f334a2
+	_cellShadowCount (func ptr): 0xb7f334e8
+	_pointCount (func ptr): 0xb7f3352e
+	_initialisePoints (func ptr): 0xb7f33594
+	_mapElementIdToCellId (func ptr): 0xb7f3363d
+	_isInCell (func ptr): 0xb7f33645
+	_cellOf (func ptr): 0xb7f33699
+	_getShadowInfo (func ptr): 0xb7f33711
+	mesh (ptr): 0x8072c58
+RandomParticleLayout (ptr): 0x807d658:
+PerCellParticleLayout (ptr): 0x807d658
+ParticleLayout (ptr): 0x807d658
+Stg_Class (ptr): 0x807d658
+	sizeOfSelf: 136
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0xb7f3d7e6
+	_print (func ptr): 0xb7f3d80f
+	_copy (func ptr): 0xb7f3d8a5
+	_setInitialCounts (func ptr): 0xb7f3cbdd
+	_initialiseParticles (func ptr): 0xb7f3cd92
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0xb7f3da84
+	_initialiseParticlesOfCell (func ptr): 0xb7f3da9b
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 4
+	cellDomainCount: 8
+	cellShadowCount: 4
+	cellPointCountTbl (ptr): 0x8070f98
+	cellPointCountTbl[0-8]: 008 008 008 008 008 008 008 008 
+	cellPointTbl (ptr): 0x807e9c8
+	cellPointTbl[0-8]: {
+	cellPointTbl[0][0-8]: {0 8 0} {150 8 0} {0 12 0} {150 12 0} {0 8 150} {150 8 150} {0 12 150} {150 12 150} 
+	cellPointTbl[1][0-8]: {150 8 0} {300 8 0} {150 12 0} {300 12 0} {150 8 150} {300 8 150} {150 12 150} {300 12 150} 
+	cellPointTbl[2][0-8]: {0 8 150} {150 8 150} {0 12 150} {150 12 150} {0 8 300} {150 8 300} {0 12 300} {150 12 300} 
+	cellPointTbl[3][0-8]: {150 8 150} {300 8 150} {150 12 150} {300 12 150} {150 8 300} {300 8 300} {150 12 300} {300 12 300} 
+	cellPointTbl[4][0-8]: {0 4 0} {150 4 0} {0 8 0} {150 8 0} {0 4 150} {150 4 150} {0 8 150} {150 8 150} 
+	cellPointTbl[5][0-8]: {150 4 0} {300 4 0} {150 8 0} {300 8 0} {150 4 150} {300 4 150} {150 8 150} {300 8 150} 
+	cellPointTbl[6][0-8]: {0 4 150} {150 4 150} {0 8 150} {150 8 150} {0 4 300} {150 4 300} {0 8 300} {150 8 300} 
+	cellPointTbl[7][0-8]: {150 4 150} {300 4 150} {150 8 150} {300 8 150} {150 4 300} {300 4 300} {150 8 300} {300 8 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x807eaf8
+	cellParticleCountTbl[0-8]: 004 004 004 004 000 000 000 000 
+	cellParticleSizeTbl (ptr): 0x807eb28
+	cellParticleSizeTbl[0-8]: 004 004 004 004 000 000 000 000 
+	cellParticleTbl (ptr): 0x807eb58
+	cellParticleTbl [0-8]: {
+		cellParticleTbl[0][0-4]:
+			(part. index) 0
+			(part. index) 1
+			(part. index) 2
+			(part. index) 3
+
+		cellParticleTbl[1][0-4]:
+			(part. index) 4
+			(part. index) 5
+			(part. index) 6
+			(part. index) 7
+
+		cellParticleTbl[2][0-4]:
+			(part. index) 8
+			(part. index) 9
+			(part. index) 10
+			(part. index) 11
+
+		cellParticleTbl[3][0-4]:
+			(part. index) 12
+			(part. index) 13
+			(part. index) 14
+			(part. index) 15
+
+		cellParticleTbl[4][0-0]:
+
+		cellParticleTbl[5][0-0]:
+
+		cellParticleTbl[6][0-0]:
+
+		cellParticleTbl[7][0-0]:
+
+	}
+	particlesArraySize: 116
+	particlesArrayDelta: 100
+	extraParticlesFactor: 0.05
+
+Printing coords of all local processor particles:
+	local particle      0: ( 36.393,  10.685,  24.175)
+	local particle      1: ( 106.19,  10.926,  13.188)
+	local particle      2: ( 107.93,  8.6386,  64.247)
+	local particle      3: ( 105.66,  11.401,  72.744)
+	local particle      4: ( 261.92,  10.607,  15.099)
+	local particle      5: ( 275.23,  8.3656,  23.032)
+	local particle      6: ( 242.36,  10.759,  108.86)
+	local particle      7: ( 201.31,  8.9555,  137.57)
+	local particle      8: ( 91.249,  8.7051,  220.37)
+	local particle      9: ( 40.359,  8.3716,  202.27)
+	local particle     10: ( 60.611,   9.112,  204.88)
+	local particle     11: ( 32.111,  11.509,  224.72)
+	local particle     12: ( 196.11,  10.331,  252.69)
+	local particle     13: ( 271.87,  9.6744,  211.88)
+	local particle     14: ( 162.47,  10.951,  256.25)
+	local particle     15: ( 218.88,   8.529,  272.07)
+
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      0): ( 36.393,  10.685,  24.175)
+		part. InCell   1 (local index      1): ( 106.19,  10.926,  13.188)
+		part. InCell   2 (local index      2): ( 107.93,  8.6386,  64.247)
+		part. InCell   3 (local index      3): ( 105.66,  11.401,  72.744)
+	Local Cell   1:
+		part. InCell   0 (local index      4): ( 261.92,  10.607,  15.099)
+		part. InCell   1 (local index      5): ( 275.23,  8.3656,  23.032)
+		part. InCell   2 (local index      6): ( 242.36,  10.759,  108.86)
+		part. InCell   3 (local index      7): ( 201.31,  8.9555,  137.57)
+	Local Cell   2:
+		part. InCell   0 (local index      8): ( 91.249,  8.7051,  220.37)
+		part. InCell   1 (local index      9): ( 40.359,  8.3716,  202.27)
+		part. InCell   2 (local index     10): ( 60.611,   9.112,  204.88)
+		part. InCell   3 (local index     11): ( 32.111,  11.509,  224.72)
+	Local Cell   3:
+		part. InCell   0 (local index     12): ( 196.11,  10.331,  252.69)
+		part. InCell   1 (local index     13): ( 271.87,  9.6744,  211.88)
+		part. InCell   2 (local index     14): ( 162.47,  10.951,  256.25)
+		part. InCell   3 (local index     15): ( 218.88,   8.529,  272.07)
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarm " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarm.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarm.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,228 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSwarm.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+	MeshGenerator_SetIncidenceState( gen, nDims, nDims, True );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+void TestParticleSearchFunc( Swarm* swarm, Coord coord, Stream* stream ) {
+	double              distance;
+	Particle_Index      closestParticle_I;
+	Particle_Index      lParticle_I;
+	GlobalParticle*     particle;
+
+	Journal_Printf( stream, "Testing coord %g %g %g\n", coord[ I_AXIS ], coord[ J_AXIS ], coord[ K_AXIS ] );
+
+	closestParticle_I = Swarm_FindClosestParticle( swarm, 3, coord, &distance );
+
+	if ( closestParticle_I < swarm->particleLocalCount ) {
+		Journal_Printf( stream, "Closest Particle is %u with distance %g\n", closestParticle_I, distance );
+
+		for ( lParticle_I = 0 ; lParticle_I < swarm->particleLocalCount ; lParticle_I++ ) {
+			/* don't bother with testing same particle */
+			if (lParticle_I == closestParticle_I)
+				continue;
+
+			particle = (GlobalParticle*)Swarm_ParticleAt( swarm , lParticle_I );
+
+			/* Test if particle is closer */
+			if (distance > StGermain_DistanceBetweenPoints( coord, particle->coord, 3 ) )
+				Journal_Printf( stream, "Particle %u is closer to coord and has distance %g.\n" , 
+						lParticle_I, StGermain_DistanceBetweenPoints( coord, particle->coord, 3 ) );
+		}
+	}
+	else
+		Journal_Printf( stream, "Coord not found on this processor.\n" );
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*			dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {2, 3, 2};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {300.0, 12.0, 300.0};
+	ExtensionManager_Register*		extensionMgr_Register;
+	Mesh*				mesh;
+	ElementCellLayout*		elementCellLayout;
+	RandomParticleLayout*		randomParticleLayout;
+	Swarm*				swarm;
+	Stream*				stream;
+	Coord                coord = { 120, 2, 210 };
+
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+/*	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Configure the random-particle-layout */
+	randomParticleLayout = RandomParticleLayout_New( "randomParticleCellLayout", 4, 13 );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New( "testSwarm", elementCellLayout, randomParticleLayout, 3, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( swarm, stream );
+
+		Journal_Printf( stream, "\n" );
+		Swarm_PrintParticleCoords( swarm, stream );
+		Journal_Printf( stream, "\n" );
+		Swarm_PrintParticleCoords_ByCell( swarm, stream );
+	
+		/* Test Particle Searching Function */
+		if (numProcessors == 1) {
+			coord[ I_AXIS ] = 0.6 * 300; coord[ J_AXIS ] = 0.2*12; coord[ K_AXIS ] = 0.820*300;
+			TestParticleSearchFunc( swarm, coord, stream );
+
+			/* Test New Coord */
+			coord[ I_AXIS ] = 0.2*300; coord[ J_AXIS ] = 0.9*12; coord[ K_AXIS ] = 0.120*300;
+			TestParticleSearchFunc( swarm, coord, stream );
+		}
+	}
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( randomParticleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 32x32x32
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 32x32x32
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating edges...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+
+Starting timestep 1:
+
+Starting timestep 2:
+
+Comparing the 32768 local Particles between old and new swarms:
+	Passed: swarms are identical.
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmDumpAndLoad --journal.info.ParticleCommHandler=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 32x32x32
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 32x32x16
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating edges...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+
+Starting timestep 1:
+
+Starting timestep 2:
+
+Comparing the 23203 local Particles between old and new swarms:
+	Passed: swarms are identical.
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmDumpAndLoad" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 32x32x32
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 32x32x16
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating edges...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+
+Starting timestep 1:
+
+Starting timestep 2:
+
+Comparing the 9565 local Particles between old and new swarms:
+	Passed: swarms are identical.
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmDumpAndLoad" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmDumpAndLoad.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmDumpAndLoad.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,370 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Tests that particles can be saved to file, then re-loaded onto a new context with exactly
+**	the same positions and values.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSwarmDumpAndLoad.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+	Coord               xi;
+	unsigned int        testValue;
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		 double* minCrds, double* maxCrds, 
+		 ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	MeshGenerator_SetDimState( gen, 2, False );
+	MeshGenerator_SetDimState( gen, 1, True );
+	MeshGenerator_ClearIncidenceStates( gen );
+	MeshGenerator_SetIncidenceState( gen, 3, 0, True );
+/*	MeshGenerator_SetIncidenceState( gen, 1, 0, True );*/
+	MeshGenerator_SetIncidenceState( gen, 0, 3, True );
+/*	MeshGenerator_SetIncidenceState( gen, 0, 1, True );*/
+	MeshGenerator_SetIncidenceState( gen, 0, 0, True );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+void UpdateParticlePositionsTowardsAttractor( 
+		Swarm* swarm,
+		Coord attractorPoint,
+		Processor_Index rank,
+		Processor_Index procToWatch );
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*			dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {32, 32, 32};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	ExtensionManager_Register*	extensionMgr_Register;
+	Mesh*				mesh;
+	ElementCellLayout*		elementCellLayout;
+	RandomParticleLayout*		randomParticleLayout;
+	Swarm*				swarm;
+	Stream*				stream;
+	Index				timeStep;
+	Coord				attractorPoint;
+	Index				dim_I;
+	AbstractContext*                context = NULL;
+	SwarmDump*                      swarmDumper = NULL;
+	char                            filename[1000];
+	FileParticleLayout*             fileParticleLayout = NULL;
+	Swarm*                          newSwarm = NULL;
+	Swarm*                          swarmList[1];
+	Particle_Index                  lParticle_I = 0;
+	Index                           errorCount = 0;
+	ParticleMovementHandler			*movementHandler = NULL;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	/* *** Journal stuff *** */
+	Journal_Enable_TypedStream( DebugStream_Type, False );
+	Stream_EnableBranch( Swarm_Debug, False );
+	/*Stream_SetLevelBranch( Swarm_Debug, 3 );*/
+
+	/* Turn off the particle comm info to guarantee stdout order */
+	Stream_Enable( Journal_Register( Info_Type, ParticleCommHandler_Type ), False );
+
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+/*	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+	
+	Stream_Enable( Journal_Register( Info_Type, SwarmDump_Type ), False );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "particlesPerCell", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "seed", Dictionary_Entry_Value_FromUnsignedInt( 13 ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Configure the random-particle-layout */
+	randomParticleLayout = RandomParticleLayout_New( "randomParticleLayout", 1, 13 );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New( "testSwarm", elementCellLayout, randomParticleLayout, 3, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+    
+	movementHandler = ParticleMovementHandler_New( "movementHandler", True );
+	Swarm_AddCommHandler( swarm, movementHandler );
+	Stream_Enable( Journal_Register( Info_Type, ParticleMovementHandler_Type ), False );
+	
+	/* +++ BUILD PHASE +++ */
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+
+	/* +++ INITIALISE PHASE +++ */
+
+	Stg_Component_Initialise( mesh, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		attractorPoint[dim_I] = ( maxCrds[dim_I] - minCrds[dim_I] ) / 3;
+	}
+	if( rank == procToWatch ) {
+		printf("Calculated attractor point is at (%f,%f,%f):\n", attractorPoint[0], attractorPoint[1], attractorPoint[2] );
+	}	
+
+	for ( lParticle_I = 0; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+		swarm->particles[lParticle_I].testValue = rand() % 1000;
+	}
+
+	/* +++ RUN PHASE +++ */
+
+	/* Start a sample app, where each timestep we move the particles towards the attractor point */
+	for ( timeStep=1; timeStep <= 2; timeStep++ ) {
+		if( rank == procToWatch ) {
+			printf("\nStarting timestep %d:\n", timeStep );
+		}	
+
+		UpdateParticlePositionsTowardsAttractor( swarm, attractorPoint, rank, procToWatch );
+	
+		Swarm_UpdateAllParticleOwners( swarm );
+	}
+	
+	Dictionary_Add( dictionary, "outputPath", Dictionary_Entry_Value_FromString( "./output" ) );
+	
+	/* Now we dump the swarm values, then create a new swarm and load the dumped values onto it,
+		and check to see that they're the same */
+	context = _AbstractContext_New( 
+		sizeof(AbstractContext),
+		AbstractContext_Type,
+		_AbstractContext_Delete,
+		_AbstractContext_Print,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		"testContext",
+		True,
+		NULL,
+		0,
+		0,
+		CommWorld,
+		dictionary );
+
+	swarmList[0] = swarm;
+	swarmDumper = SwarmDump_New( "swarmDumper", context, swarmList, 1, True );
+	SwarmDump_Execute( swarmDumper, context );
+
+	sprintf( filename, "%s/%s.%05d.dat", context->outputPath, swarm->name, context->timeStep ); 
+	fileParticleLayout = FileParticleLayout_New( "fileParticleLayout", filename );
+	newSwarm = Swarm_New( "testSwarm2", elementCellLayout, fileParticleLayout, 3, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	Stg_Component_Build( newSwarm, 0, False );
+	Stg_Component_Initialise( newSwarm, 0, False );
+
+	assert( newSwarm->particleLocalCount == swarm->particleLocalCount );
+
+	if( rank == procToWatch ) {
+		printf( "\nComparing the %d local Particles between old and new swarms:\n", swarm->particleLocalCount );
+		for ( lParticle_I = 0; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+			if ( ( swarm->particles[lParticle_I].coord[I_AXIS] != newSwarm->particles[lParticle_I].coord[I_AXIS] ) 
+				|| ( swarm->particles[lParticle_I].coord[J_AXIS] != newSwarm->particles[lParticle_I].coord[J_AXIS] ) 
+				|| ( swarm->particles[lParticle_I].coord[K_AXIS] != newSwarm->particles[lParticle_I].coord[K_AXIS] ) ) {
+				printf( "Error: Co-ords at particle %d don't match between old and new swarms.\n", lParticle_I );
+				errorCount++;
+			}
+
+			if ( swarm->particles[lParticle_I].owningCell != newSwarm->particles[lParticle_I].owningCell ) {
+				printf( "Error: owningCell at particle %d doesn't match between old and new swarms.\n", lParticle_I );
+				errorCount++;
+			}
+			
+			if ( ( swarm->particles[lParticle_I].xi[I_AXIS] != newSwarm->particles[lParticle_I].xi[I_AXIS] ) 
+				|| ( swarm->particles[lParticle_I].xi[J_AXIS] != newSwarm->particles[lParticle_I].xi[J_AXIS] ) 
+				|| ( swarm->particles[lParticle_I].xi[K_AXIS] != newSwarm->particles[lParticle_I].xi[K_AXIS] ) ) {
+				printf( "Error: Xi values at particle %d don't match between old and new swarms.\n", lParticle_I );
+				errorCount++;
+			}
+
+			if ( swarm->particles[lParticle_I].testValue != newSwarm->particles[lParticle_I].testValue ) {
+				printf( "Error: testValue at particle %d doesn't match between old and new swarms.\n", lParticle_I );
+				errorCount++;
+			}
+		}
+
+		if ( 0 == errorCount ) {
+			printf( "\tPassed: swarms are identical.\n" );
+		}
+		else {
+			printf( "\tFailed: %d differences detected.\n", errorCount );
+		}
+	}	
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( randomParticleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+
+void UpdateParticlePositionsTowardsAttractor( 
+		Swarm* swarm,
+		Coord attractorPoint,
+		Processor_Index rank,
+		Processor_Index procToWatch )
+{
+	Cell_LocalIndex			lCell_I;
+	Particle_InCellIndex		cParticle_I;
+	Particle*	 		currParticle;
+	Index				dim_I;
+
+	for ( lCell_I=0; lCell_I < swarm->cellLocalCount; lCell_I++ ) {
+		if( rank == procToWatch ) {
+			/*printf("\tUpdating Particles positions in local cell %d:\n", lCell_I );*/
+		}	
+		for ( cParticle_I=0; cParticle_I < swarm->cellParticleCountTbl[lCell_I]; cParticle_I++ ) {
+			Coord movementVector = {0,0,0};
+			Coord newParticleCoord = {0,0,0};
+			Coord* oldCoord;
+
+			currParticle = (Particle*)Swarm_ParticleInCellAt( swarm, lCell_I, cParticle_I );
+			oldCoord = &currParticle->coord;
+			if( rank == procToWatch ) {
+				/*printf("\t\tUpdating particleInCell %d:\n", cParticle_I );*/
+			}	
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				movementVector[dim_I] = ( attractorPoint[dim_I] - (*oldCoord)[dim_I] ) / 3;
+				newParticleCoord[dim_I] = (*oldCoord)[dim_I] + movementVector[dim_I];
+			}
+
+			if( rank == procToWatch ) {
+				/*printf("\t\tChanging its coords from (%f,%f,%f) to (%f,%f,%f):\n",
+					(*oldCoord)[0], (*oldCoord)[1], (*oldCoord)[2],
+					newParticleCoord[0], newParticleCoord[1], newParticleCoord[2] );*/
+			}		
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				currParticle->coord[dim_I] = newParticleCoord[dim_I];
+			}
+		}
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmOutput.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmOutput.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSwarmOutput testSwarmOutput.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmOutput.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmOutput.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSwarmOutput testSwarmOutput.xml" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmOutput.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmOutput.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,181 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSwarmOutput.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__IntegrationPoint
+};
+
+double Dt( void* context ) {
+	return 2.0;
+}
+
+void _SetDt( void* context, double dt ) {
+}
+
+void MoveParticles( AbstractContext* context ) {
+	Swarm*            swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	Particle_Index    lParticle_I;
+	GlobalParticle* particle;
+	double            x,y;
+
+	for ( lParticle_I = 0 ; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+		particle = (GlobalParticle*)Swarm_ParticleAt( swarm, lParticle_I );
+
+		x = particle->coord[ I_AXIS ];
+		y = particle->coord[ J_AXIS ];
+		particle->coord[ I_AXIS ] = 1.0 - y;
+		particle->coord[ J_AXIS ] = x;
+	}
+
+	Swarm_UpdateAllParticleOwners( swarm );
+}
+	
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm            CommWorld;
+	int                 rank;
+	int                 numProcessors;
+	Dictionary*         dictionary;
+	Dictionary*         componentDict;
+	Stg_ComponentFactory*   cf;
+	XML_IO_Handler*     ioHandler;
+	DomainContext* context;
+	ExtensionManager_Register* extensionMgr_Register;
+	SwarmVariable_Register* swarmVariable_Register;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	dictionary = Dictionary_New();
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	Journal_ReadFromDictionary( dictionary );
+
+	/* Construction phase -------------------------------------------------------------------------------------------*/
+	
+	/* Create the Context */
+	context = DomainContext_New(
+			"context",
+			0,
+			0,
+			MPI_COMM_WORLD,
+			dictionary );
+
+	ContextEP_Append( context, AbstractContext_EP_Dt, Dt );
+	ContextEP_Append( context, AbstractContext_EP_Step, MoveParticles );
+	
+	componentDict = Dictionary_GetDictionary( dictionary, "components" );
+	
+	assert( componentDict );
+
+	cf = context->CF = Stg_ComponentFactory_New( dictionary, componentDict, context->register_Register );
+
+	LiveComponentRegister_Add( cf->LCRegister, (Stg_Component*) context );
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	swarmVariable_Register = SwarmVariable_Register_New( NULL );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)extensionMgr_Register, "ExtensionManager_Register" );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)swarmVariable_Register, "SwarmVariable_Register" );
+
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+
+	LiveComponentRegister_BuildAll( cf->LCRegister, context );
+	LiveComponentRegister_InitialiseAll( cf->LCRegister, context );
+
+	Stg_Component_Build( context, 0 /* dummy */, False );
+	Stg_Component_Initialise( context, 0 /* dummy */, False );
+	AbstractContext_Dump( context );
+	Stg_Component_Execute( context, 0 /* dummy */, False );
+	Stg_Component_Destroy( context, 0 /* dummy */, False );
+	
+	/* Destroy stuff */
+	/* TODO LiveComponentRegister_DeleteAll( cf->LCRegister ); */
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( swarmVariable_Register );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmOutput.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmOutput.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<include>testParticleCoords.xml</include>
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">SpaceFillerParticleLayout</param>
+			<param name="totalInitialParticles">5</param>
+		</struct>
+		<struct name="swarmOutput">
+			<param name="Type">SwarmOutput</param>
+			<param name="Swarm">swarm</param>
+		</struct>
+	</struct>
+	<param name="maxTimeSteps">4</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+ 
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvection.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvection.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,265 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Tests that particles can be successfully moved between cells. The problem is set up with a 
+**	"gravitational attractor" in the exact middle of the domain - all particles are sucked in
+**	towards it each timestep.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSwarmParticleAdvection.c 4165 2007-08-06 00:47:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <unistd.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+double Dt( void* context ) {
+	return 2.0;
+}
+
+/*  TODO: should be removed once we get saving of swarms onto disc context... */
+void SaveSwarms( void* context );
+
+/** Global so other funcs can use */
+Index procToWatch = 0;
+
+int main( int argc, char* argv[] ) {
+	DomainContext*          context;
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	Dictionary*			dictionary;
+	Dictionary*                     componentDict;
+	Stg_ComponentFactory*           cf;
+	XML_IO_Handler*                 ioHandler;
+	ExtensionManager_Register*      extensionMgr_Register;
+	SwarmVariable_Register*         swarmVariable_Register;
+	Stream*                         stream;
+	Swarm*                          swarm = NULL;
+	Particle                        particle;
+	Particle*                       currParticle = NULL;
+	Particle_Index                  lParticle_I = 0;
+	Dimension_Index                 dim_I = 0;
+	char*                           directory;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	/* Add the StGermain path to the global xml path dictionary */
+	directory = Memory_Alloc_Array( char, 200, "xmlDirectory" ) ;
+	sprintf(directory, "%s%s", LIB_DIR, "/StGermain" );
+	XML_IO_Handler_AddDirectory( "StGermain", directory  );
+	Memory_Free(directory);
+	/* Add the plugin path to the global plugin list */
+	ModulesManager_AddDirectory( "StGermain", LIB_DIR );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	dictionary = Dictionary_New();
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	/* TODO: temporary hack until Al gets the journal read from file going again */
+	if ( False == Dictionary_GetBool_WithDefault( dictionary, "particleCommInfo", True ) ) {
+		Stream_Enable( Journal_Register( Info_Type, ParticleCommHandler_Type ), False );
+	}
+
+	Journal_ReadFromDictionary( dictionary );
+
+	/* *** Journal stuff *** */
+	Journal_Enable_TypedStream( DebugStream_Type, False );
+	Stream_EnableBranch( Swarm_Debug, True );
+	Stream_SetLevelBranch( Swarm_Debug, 3 );
+	Stream_Enable( Journal_Register( Info_Type, ParticleMovementHandler_Type ), False );
+	Stream_Enable( Journal_Register( Info_Type, CartesianGenerator_Type ), False );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	/*if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+
+	/* For plugins to read */
+	Dictionary_Add( dictionary, "procToWatch", Dictionary_Entry_Value_FromUnsignedInt( procToWatch ) );
+	
+/* Construction phase -------------------------------------------------------------------------------------------*/
+	
+	/* Create the Context */
+	context = DomainContext_New(
+			"context",
+			0,
+			0,
+			MPI_COMM_WORLD,
+			dictionary );
+
+	componentDict = Dictionary_GetDictionary( dictionary, "components" );
+	
+	assert( componentDict );
+
+	cf = context->CF = Stg_ComponentFactory_New( dictionary, componentDict, context->register_Register );
+
+	LiveComponentRegister_Add( cf->LCRegister, (Stg_Component*) context );
+	ModulesManager_Load( context->plugins, context, dictionary );
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	swarmVariable_Register = SwarmVariable_Register_New( NULL );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)extensionMgr_Register, "ExtensionManager_Register" );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)swarmVariable_Register, "SwarmVariable_Register" );
+
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+	ModulesManager_ConstructModules( context->plugins, context->CF, 0 /* dummy */ );
+
+	KeyCall( context, context->constructExtensionsK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(context,context->constructExtensionsK), context );
+
+	swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	ExtensionManager_Add( swarm->particleExtensionMgr, "ParticleVelocity", sizeof(double[3]) );
+	ExtensionManager_Add( swarm->particleExtensionMgr, "ParticleColour", sizeof(double) );
+
+	Swarm_NewVectorVariable(
+		swarm,
+		"Velocity",
+		(ArithPointer) &particle.velocity - (ArithPointer) &particle,
+		Variable_DataType_Double,
+		swarm->dim,
+		"VelocityX",
+		"VelocityY",
+		"VelocityZ" );
+
+	Swarm_NewScalarVariable(
+		swarm,
+		"RandomColour",
+		(ArithPointer) &particle.randomColour - (ArithPointer) &particle,
+		Variable_DataType_Double );
+
+	LiveComponentRegister_BuildAll( cf->LCRegister, context );
+	LiveComponentRegister_InitialiseAll( cf->LCRegister, context );
+
+	/* for each particle, set a random colour */
+	for ( lParticle_I=0; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+		currParticle = (Particle*)Swarm_ParticleAt( swarm, lParticle_I );
+		for ( dim_I=0; dim_I < 3; dim_I++ ) {
+			currParticle->velocity[dim_I] = 0;
+		}	
+		currParticle->randomColour = ( (double)  rand() ) / RAND_MAX;
+	}
+	
+	if( rank == procToWatch ) {
+          /* Print( swarm, stream ); */
+	}	
+
+	Stg_Component_Build( context, 0 /* dummy */, False );
+	Stg_Component_Initialise( context, 0 /* dummy */, False );
+	
+	/* +++ RUN PHASE +++ */
+	AbstractContext_Dump( context );
+
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Dt, Dt );
+
+	/* TODO: this should actually live on the Disc. context - but we need to rearrange the directories a bit
+	first for this to happen - Main.PatrickSunter - 10 Jun 2006 */
+	ContextEP_Append( context, AbstractContext_EP_Save, SaveSwarms );
+	Stg_Component_Execute( context, 0 /* dummy */, False );
+	Stg_Component_Destroy( context, 0 /* dummy */, False );
+
+	/* Delete stuff */
+	/* Deleting the component factory automatically deletes all components in it */
+	/* TODO: should the component factory be renamed a comp. manager? Since it deletes */
+	/* 	components as well? */
+	Stg_Class_Delete( cf );
+	/* Remaining registers etc that don't live on the context or anything */
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( swarmVariable_Register );
+	/* Input/Output stuff */
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( ioHandler );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+
+void SaveSwarms( void* context ) {
+	
+	Swarm_Register_SaveAllRegisteredSwarms( 
+		Swarm_Register_GetSwarm_Register(), context );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionBouncer.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionBouncer.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+   "Bouncer" test: particles start with a random velocity,
+   and stay constantly moving according to that velocity except when
+   they hit a wall, when they "bounce" back with angle of incidence
+   = angle of reflection. A test we could use for realistic Snark
+   tests where there is a reasonable balance of particles between
+   processors, but a steady movement between them all.
+
+   PatrickSunter - 11 May 2006
+-->   
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins" mergeType="merge">
+		<param>StGermain_Bouncer</param>
+	</list>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+	<include>testParticleCoords.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">RandomParticleLayout</param>
+			<param name="cellParticleCount">20</param>
+			<param name="seed">13</param>
+		</struct>
+	</struct>
+	<param name="dim">3</param>
+	<param name="maxTimeSteps">10</param> 
+	<param name="dumpEvery">1</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param>
+	<param name="elementResK">10</param>
+
+<!--
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">0.5</param>
+			<param name="coordY">0.5</param>
+			<param name="coordZ">1.6</param>
+			<param name="focalPointX">0.5</param>
+			<param name="focalPointY">0.5</param>
+			<param name="focalPointZ">0.5</param>
+		</struct>
+		<struct name="particles">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="pointSize">5.0</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+		</struct>	
+		<struct name="ParticleColourMap">
+			<param name="Type">lucColourMap</param>
+			<param name="colours">Red Orange Yellow Green Blue Indigo Violet</param>
+			<param name="minimum">0.0</param>
+			<param name="maximum">1.0</param>
+			<param name="dynamicRange">t</param>
+		</struct>
+		<struct name="particleDirs">
+			<param name="Type">lucSwarmVectors</param>
+			<param name="Swarm">swarm</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+			<param name="DirectionVariable">swarm-Velocity</param>
+			<param name="arrowHeadSize">0.1</param>
+			<param name="length">1</param>
+		</struct>	
+		<struct name="meshView">
+			<param name="Type">lucMeshViewer</param>
+			<param name="Mesh">mesh-linear</param>
+			<param name="colour">blue</param>	
+		</struct>	
+		<struct name="particlesViewport">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particles</param>
+				<param>particleDirs</param>
+				<param>meshView</param>
+			</list>
+		</struct>
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="imageOutput">
+			<param name="Type">lucOutputPNG</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="Viewport">particlesViewport</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<list name="OutputFormat">
+				<param>imageOutput</param>
+			</list>
+			<param name="height">640</param>
+			<param name="width">640</param>
+			<param name="backgroundColour">white</param>
+		</struct>
+		<struct name="movie">
+			<param name="Type">lucEncoderLibfame</param>
+			<param name="Window">window</param>
+		</struct>	
+	</struct>
+	
+	<param name="interactive">true</param>
+-->	
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2177 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.020218,0.055930,0.161165) to (0.124590,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.142325,0.060967,0.087923) to (0.205995,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.226628,0.013305,0.428316) to (0.262196,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.308700,0.070846,0.484961) to (0.316911,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.395513,0.054303,0.100663) to (0.374786,0.147313,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.486236,0.007617,0.153544) to (0.435269,0.116189,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.551311,0.057485,0.725730) to (0.478652,0.149434,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.611840,0.019907,0.917154) to (0.519004,0.124382,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.717361,0.014689,0.469106) to (0.589352,0.120904,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.772422,0.007742,0.348450) to (0.626059,0.116272,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.867006,0.023167,0.365872) to (0.689115,0.126556,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.934506,0.073097,0.498144) to (0.734115,0.159842,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.025617,0.131893,0.684585) to (0.128189,0.199040,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.151040,0.118217,0.412512) to (0.211805,0.189922,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.173597,0.144814,0.708363) to (0.226842,0.207654,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.288268,0.094355,0.813771) to (0.303290,0.174014,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.337018,0.100727,0.063715) to (0.335790,0.178263,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.488116,0.107236,0.789944) to (0.436522,0.182602,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.549385,0.095745,0.211121) to (0.477368,0.174941,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.609731,0.086098,0.671870) to (0.517599,0.168510,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.677176,0.128907,0.392572) to (0.562562,0.197049,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.829246,0.144943,0.744761) to (0.663942,0.207740,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.849212,0.117057,0.516097) to (0.677252,0.189149,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.920799,0.111560,0.881840) to (0.724977,0.185484,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.007569,0.220237,0.185594) to (0.116157,0.257935,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.106618,0.176914,0.669197) to (0.182190,0.229054,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.182432,0.223996,0.379149) to (0.232733,0.260442,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.279420,0.209246,0.558967) to (0.297391,0.250608,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.380429,0.204775,0.925924) to (0.364730,0.247628,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.417008,0.233736,0.757598) to (0.389116,0.266935,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.578434,0.234579,0.751425) to (0.496734,0.267497,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.599936,0.213040,0.739388) to (0.511069,0.253138,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.741211,0.200583,0.382567) to (0.605252,0.244833,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.817248,0.240369,0.632784) to (0.655943,0.271357,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.850534,0.175532,0.077820) to (0.678134,0.228133,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.993245,0.214135,0.582185) to (0.773274,0.253868,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.065683,0.264829,0.736755) to (0.154900,0.287664,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.136213,0.325754,0.451488) to (0.201920,0.328281,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.179352,0.279855,0.321813) to (0.230679,0.297681,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.308758,0.296891,0.230269) to (0.316950,0.309039,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.344624,0.253993,0.377044) to (0.340860,0.280440,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.498848,0.305396,0.466709) to (0.443676,0.314708,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.581050,0.284045,0.376295) to (0.498478,0.300475,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.616190,0.299720,0.774592) to (0.521904,0.310925,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.713733,0.289242,0.408698) to (0.586933,0.303939,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.831828,0.283468,0.032166) to (0.665663,0.300090,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.885139,0.274493,0.771763) to (0.701204,0.294106,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.918318,0.257582,0.233312) to (0.723323,0.282833,0.266652):
+	Updating Particles positions in local cell 48:
+		Updating particleInCell 0:
+		Changing its coords from (0.022725,0.362652,0.106081) to (0.126261,0.352879,0.181831):
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.157951,0.345596,0.126605) to (0.216412,0.341508,0.195514):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.237365,0.392358,0.316657) to (0.269354,0.372683,0.322216):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.255175,0.395699,0.170111) to (0.281228,0.374910,0.224518):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.337709,0.369255,0.860921) to (0.336250,0.357281,0.685059):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.458807,0.415579,0.711434) to (0.416982,0.388164,0.585400):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.505346,0.344532,0.516861) to (0.448008,0.340799,0.455685):
+	Updating Particles positions in local cell 55:
+		Updating particleInCell 0:
+		Changing its coords from (0.657111,0.405103,0.724586) to (0.549185,0.381180,0.594169):
+	Updating Particles positions in local cell 56:
+		Updating particleInCell 0:
+		Changing its coords from (0.676621,0.378505,0.483519) to (0.562191,0.363448,0.433457):
+	Updating Particles positions in local cell 57:
+		Updating particleInCell 0:
+		Changing its coords from (0.792326,0.365403,0.929035) to (0.639328,0.354713,0.730468):
+	Updating Particles positions in local cell 58:
+		Updating particleInCell 0:
+		Changing its coords from (0.857797,0.335222,0.991404) to (0.682976,0.334593,0.772047):
+	Updating Particles positions in local cell 59:
+		Updating particleInCell 0:
+		Changing its coords from (0.961117,0.334950,0.115447) to (0.751856,0.334411,0.188076):
+	Updating Particles positions in local cell 60:
+		Updating particleInCell 0:
+		Changing its coords from (0.026061,0.422658,0.451692) to (0.128485,0.392883,0.412239):
+	Updating Particles positions in local cell 61:
+		Updating particleInCell 0:
+		Changing its coords from (0.132779,0.451592,0.892297) to (0.199631,0.412172,0.705976):
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.235808,0.482726,0.081151) to (0.268317,0.432928,0.165212):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.325043,0.416841,0.137948) to (0.327807,0.389005,0.203077):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.374786,0.449349,0.534845) to (0.360969,0.410677,0.467674):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.428320,0.434366,0.601838) to (0.396658,0.400688,0.512337):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.507840,0.436869,0.543898) to (0.449671,0.402357,0.473710):
+	Updating Particles positions in local cell 67:
+		Updating particleInCell 0:
+		Changing its coords from (0.607648,0.494438,0.311891) to (0.516210,0.440737,0.319039):
+	Updating Particles positions in local cell 68:
+		Updating particleInCell 0:
+		Changing its coords from (0.746266,0.417322,0.071914) to (0.608622,0.389325,0.159054):
+	Updating Particles positions in local cell 69:
+		Updating particleInCell 0:
+		Changing its coords from (0.805396,0.453880,0.262791) to (0.648042,0.413698,0.286305):
+	Updating Particles positions in local cell 70:
+		Updating particleInCell 0:
+		Changing its coords from (0.893736,0.446017,0.518640) to (0.706935,0.408456,0.456871):
+	Updating Particles positions in local cell 71:
+		Updating particleInCell 0:
+		Changing its coords from (0.981395,0.469559,0.488147) to (0.765374,0.424150,0.436542):
+	Updating Particles positions in local cell 72:
+		Updating particleInCell 0:
+		Changing its coords from (0.023555,0.547874,0.464087) to (0.126814,0.476361,0.420502):
+	Updating Particles positions in local cell 73:
+		Updating particleInCell 0:
+		Changing its coords from (0.158705,0.524700,0.598479) to (0.216915,0.460911,0.510097):
+	Updating Particles positions in local cell 74:
+		Updating particleInCell 0:
+		Changing its coords from (0.219183,0.566147,0.810155) to (0.257233,0.488543,0.651214):
+	Updating Particles positions in local cell 75:
+		Updating particleInCell 0:
+		Changing its coords from (0.272347,0.578168,0.153943) to (0.292675,0.496556,0.213740):
+	Updating Particles positions in local cell 76:
+		Updating particleInCell 0:
+		Changing its coords from (0.360453,0.555529,0.280554) to (0.351413,0.481464,0.298147):
+	Updating Particles positions in local cell 77:
+		Updating particleInCell 0:
+		Changing its coords from (0.439431,0.520572,0.006777) to (0.404065,0.458159,0.115629):
+	Updating Particles positions in local cell 78:
+		Updating particleInCell 0:
+		Changing its coords from (0.574892,0.539611,0.863758) to (0.494372,0.470852,0.686950):
+	Updating Particles positions in local cell 79:
+		Updating particleInCell 0:
+		Changing its coords from (0.598551,0.507831,0.392552) to (0.510145,0.449665,0.372812):
+	Updating Particles positions in local cell 80:
+		Updating particleInCell 0:
+		Changing its coords from (0.717884,0.553317,0.094829) to (0.589700,0.479989,0.174330):
+	Updating Particles positions in local cell 81:
+		Updating particleInCell 0:
+		Changing its coords from (0.815318,0.555593,0.307147) to (0.654657,0.481507,0.315876):
+	Updating Particles positions in local cell 82:
+		Updating particleInCell 0:
+		Changing its coords from (0.851093,0.564149,0.760207) to (0.678506,0.487210,0.617916):
+	Updating Particles positions in local cell 83:
+		Updating particleInCell 0:
+		Changing its coords from (0.982854,0.572838,0.228172) to (0.766347,0.493003,0.263226):
+	Updating Particles positions in local cell 84:
+		Updating particleInCell 0:
+		Changing its coords from (0.073478,0.609781,0.048507) to (0.160096,0.517632,0.143449):
+	Updating Particles positions in local cell 85:
+		Updating particleInCell 0:
+		Changing its coords from (0.105332,0.641739,0.534200) to (0.181332,0.538937,0.467244):
+	Updating Particles positions in local cell 86:
+		Updating particleInCell 0:
+		Changing its coords from (0.191551,0.652676,0.264243) to (0.238812,0.546228,0.287273):
+	Updating Particles positions in local cell 87:
+		Updating particleInCell 0:
+		Changing its coords from (0.261191,0.584010,0.556690) to (0.285238,0.500451,0.482238):
+	Updating Particles positions in local cell 88:
+		Updating particleInCell 0:
+		Changing its coords from (0.357470,0.665563,0.382487) to (0.349424,0.554820,0.366103):
+	Updating Particles positions in local cell 89:
+		Updating particleInCell 0:
+		Changing its coords from (0.455497,0.617549,0.683248) to (0.414776,0.522810,0.566609):
+	Updating Particles positions in local cell 90:
+		Updating particleInCell 0:
+		Changing its coords from (0.528409,0.630944,0.297079) to (0.463384,0.531740,0.309164):
+	Updating Particles positions in local cell 91:
+		Updating particleInCell 0:
+		Changing its coords from (0.584344,0.651320,0.860231) to (0.500674,0.545325,0.684598):
+	Updating Particles positions in local cell 92:
+		Updating particleInCell 0:
+		Changing its coords from (0.741604,0.635915,0.819066) to (0.605514,0.535054,0.657155):
+	Updating Particles positions in local cell 93:
+		Updating particleInCell 0:
+		Changing its coords from (0.753863,0.593017,0.014169) to (0.613686,0.506456,0.120557):
+	Updating Particles positions in local cell 94:
+		Updating particleInCell 0:
+		Changing its coords from (0.845241,0.632992,0.268398) to (0.674605,0.533105,0.290043):
+	Updating Particles positions in local cell 95:
+		Updating particleInCell 0:
+		Changing its coords from (0.997250,0.617722,0.678490) to (0.775945,0.522926,0.563438):
+	Updating Particles positions in local cell 96:
+		Updating particleInCell 0:
+		Changing its coords from (0.031526,0.688006,0.805419) to (0.132128,0.569782,0.648057):
+	Updating Particles positions in local cell 97:
+		Updating particleInCell 0:
+		Changing its coords from (0.139513,0.710536,0.650537) to (0.204120,0.584801,0.544802):
+	Updating Particles positions in local cell 98:
+		Updating particleInCell 0:
+		Changing its coords from (0.214507,0.715229,0.172700) to (0.254116,0.587930,0.226244):
+	Updating Particles positions in local cell 99:
+		Updating particleInCell 0:
+		Changing its coords from (0.296771,0.667611,0.503939) to (0.308959,0.556185,0.447071):
+	Updating Particles positions in local cell 100:
+		Updating particleInCell 0:
+		Changing its coords from (0.392519,0.732025,0.786987) to (0.372790,0.599128,0.635769):
+	Updating Particles positions in local cell 101:
+		Updating particleInCell 0:
+		Changing its coords from (0.491157,0.707541,0.740305) to (0.438549,0.582805,0.604648):
+	Updating Particles positions in local cell 102:
+		Updating particleInCell 0:
+		Changing its coords from (0.525149,0.680752,0.710421) to (0.461211,0.564946,0.584725):
+	Updating Particles positions in local cell 103:
+		Updating particleInCell 0:
+		Changing its coords from (0.587566,0.715174,0.131602) to (0.502822,0.587894,0.198846):
+	Updating Particles positions in local cell 104:
+		Updating particleInCell 0:
+		Changing its coords from (0.736450,0.689118,0.078428) to (0.602078,0.570523,0.163396):
+	Updating Particles positions in local cell 105:
+		Updating particleInCell 0:
+		Changing its coords from (0.761120,0.733203,0.312395) to (0.618525,0.599913,0.319374):
+	Updating Particles positions in local cell 106:
+		Updating particleInCell 0:
+		Changing its coords from (0.868448,0.667515,0.129199) to (0.690076,0.556121,0.197244):
+	Updating Particles positions in local cell 107:
+		Updating particleInCell 0:
+		Changing its coords from (0.953746,0.700469,0.362601) to (0.746942,0.578090,0.352845):
+	Updating Particles positions in local cell 108:
+		Updating particleInCell 0:
+		Changing its coords from (0.019869,0.771640,0.405653) to (0.124357,0.625538,0.381547):
+	Updating Particles positions in local cell 109:
+		Updating particleInCell 0:
+		Changing its coords from (0.151410,0.750586,0.148631) to (0.212051,0.611502,0.210199):
+	Updating Particles positions in local cell 110:
+		Updating particleInCell 0:
+		Changing its coords from (0.170484,0.829588,0.587796) to (0.224767,0.664170,0.502975):
+	Updating Particles positions in local cell 111:
+		Updating particleInCell 0:
+		Changing its coords from (0.257384,0.761885,0.111413) to (0.282700,0.619035,0.185386):
+	Updating Particles positions in local cell 112:
+		Updating particleInCell 0:
+		Changing its coords from (0.375867,0.782017,0.263024) to (0.361689,0.632456,0.286461):
+	Updating Particles positions in local cell 113:
+		Updating particleInCell 0:
+		Changing its coords from (0.470813,0.785118,0.832115) to (0.424986,0.634523,0.665855):
+	Updating Particles positions in local cell 114:
+		Updating particleInCell 0:
+		Changing its coords from (0.529937,0.822625,0.301131) to (0.464403,0.659528,0.311865):
+	Updating Particles positions in local cell 115:
+		Updating particleInCell 0:
+		Changing its coords from (0.592553,0.795928,0.932317) to (0.506147,0.641730,0.732656):
+	Updating Particles positions in local cell 116:
+		Updating particleInCell 0:
+		Changing its coords from (0.704757,0.767063,0.389654) to (0.580949,0.622487,0.370881):
+	Updating Particles positions in local cell 117:
+		Updating particleInCell 0:
+		Changing its coords from (0.826693,0.806052,0.766668) to (0.662240,0.648479,0.622223):
+	Updating Particles positions in local cell 118:
+		Updating particleInCell 0:
+		Changing its coords from (0.865451,0.806915,0.786630) to (0.688079,0.649054,0.635531):
+	Updating Particles positions in local cell 119:
+		Updating particleInCell 0:
+		Changing its coords from (0.990906,0.831802,0.079259) to (0.771715,0.665646,0.163950):
+	Updating Particles positions in local cell 120:
+		Updating particleInCell 0:
+		Changing its coords from (0.008471,0.870356,0.978446) to (0.116758,0.691349,0.763409):
+	Updating Particles positions in local cell 121:
+		Updating particleInCell 0:
+		Changing its coords from (0.145677,0.894197,0.164508) to (0.208229,0.707242,0.220783):
+	Updating Particles positions in local cell 122:
+		Updating particleInCell 0:
+		Changing its coords from (0.240690,0.862953,0.774475) to (0.271571,0.686413,0.627428):
+	Updating Particles positions in local cell 123:
+		Updating particleInCell 0:
+		Changing its coords from (0.300064,0.849542,0.008698) to (0.311154,0.677472,0.116910):
+	Updating Particles positions in local cell 124:
+		Updating particleInCell 0:
+		Changing its coords from (0.349165,0.916347,0.443317) to (0.343888,0.722009,0.406656):
+	Updating Particles positions in local cell 125:
+		Updating particleInCell 0:
+		Changing its coords from (0.485189,0.906007,0.018015) to (0.434570,0.715115,0.123121):
+	Updating Particles positions in local cell 126:
+		Updating particleInCell 0:
+		Changing its coords from (0.564356,0.885679,0.214158) to (0.487349,0.701564,0.253883):
+	Updating Particles positions in local cell 127:
+		Updating particleInCell 0:
+		Changing its coords from (0.612505,0.876272,0.962228) to (0.519448,0.695292,0.752596):
+	Updating Particles positions in local cell 128:
+		Updating particleInCell 0:
+		Changing its coords from (0.680133,0.906697,0.274473) to (0.564533,0.715576,0.294093):
+	Updating Particles positions in local cell 129:
+		Updating particleInCell 0:
+		Changing its coords from (0.756186,0.892969,0.628853) to (0.615235,0.706424,0.530347):
+	Updating Particles positions in local cell 130:
+		Updating particleInCell 0:
+		Changing its coords from (0.844726,0.887403,0.062195) to (0.674262,0.702713,0.152575):
+	Updating Particles positions in local cell 131:
+		Updating particleInCell 0:
+		Changing its coords from (0.943125,0.848438,0.363551) to (0.739861,0.676736,0.353478):
+	Updating Particles positions in local cell 132:
+		Updating particleInCell 0:
+		Changing its coords from (0.016334,0.947029,0.632948) to (0.122001,0.742464,0.533077):
+	Updating Particles positions in local cell 133:
+		Updating particleInCell 0:
+		Changing its coords from (0.163505,0.941543,0.200554) to (0.220114,0.738807,0.244814):
+	Updating Particles positions in local cell 134:
+		Updating particleInCell 0:
+		Changing its coords from (0.226091,0.987365,0.673773) to (0.261838,0.769354,0.560293):
+	Updating Particles positions in local cell 135:
+		Updating particleInCell 0:
+		Changing its coords from (0.258623,0.923919,0.642657) to (0.283526,0.727057,0.539549):
+	Updating Particles positions in local cell 136:
+		Updating particleInCell 0:
+		Changing its coords from (0.344486,0.935294,0.917260) to (0.340768,0.734641,0.722618):
+	Updating Particles positions in local cell 137:
+		Updating particleInCell 0:
+		Changing its coords from (0.449055,0.927436,0.056589) to (0.410481,0.729402,0.148837):
+	Updating Particles positions in local cell 138:
+		Updating particleInCell 0:
+		Changing its coords from (0.506981,0.993211,0.746238) to (0.449098,0.773252,0.608603):
+	Updating Particles positions in local cell 139:
+		Updating particleInCell 0:
+		Changing its coords from (0.584940,0.922172,0.353679) to (0.501071,0.725892,0.346897):
+	Updating Particles positions in local cell 140:
+		Updating particleInCell 0:
+		Changing its coords from (0.690388,0.930229,0.295629) to (0.571370,0.731264,0.308197):
+	Updating Particles positions in local cell 141:
+		Updating particleInCell 0:
+		Changing its coords from (0.803534,0.998106,0.030401) to (0.646801,0.776515,0.131379):
+	Updating Particles positions in local cell 142:
+		Updating particleInCell 0:
+		Changing its coords from (0.912755,0.928183,0.580515) to (0.719615,0.729900,0.498121):
+	Updating Particles positions in local cell 143:
+		Updating particleInCell 0:
+		Changing its coords from (0.975714,0.989690,0.582861) to (0.761587,0.770904,0.499685):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.124590,0.148398,0.218555) to (0.194171,0.210043,0.256814):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.205995,0.151756,0.169726) to (0.248441,0.212282,0.224262):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.316911,0.158342,0.434419) to (0.322385,0.216672,0.400724):
+		Updating particleInCell 1:
+		Changing its coords from (0.262196,0.119981,0.396655) to (0.285909,0.191099,0.375548):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.374786,0.147313,0.178219) to (0.360969,0.209320,0.229924):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.478652,0.149434,0.594931) to (0.430212,0.210734,0.507732):
+		Updating particleInCell 1:
+		Changing its coords from (0.435269,0.116189,0.213474) to (0.401290,0.188570,0.253427):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.519004,0.124382,0.722547) to (0.457114,0.194033,0.592809):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.626059,0.116272,0.343411) to (0.528484,0.188626,0.340052):
+		Updating particleInCell 1:
+		Changing its coords from (0.589352,0.120904,0.423849) to (0.504012,0.191713,0.393677):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.734115,0.159842,0.443207) to (0.600521,0.217673,0.406583):
+		Updating particleInCell 1:
+		Changing its coords from (0.689115,0.126556,0.355026) to (0.570521,0.195482,0.347795):
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.128189,0.199040,0.567501) to (0.196571,0.243804,0.489445):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.182190,0.229054,0.557242) to (0.232571,0.263814,0.482606):
+		Updating particleInCell 1:
+		Changing its coords from (0.211805,0.189922,0.386119) to (0.252314,0.237726,0.368524):
+		Updating particleInCell 2:
+		Changing its coords from (0.226842,0.207654,0.583353) to (0.262339,0.249547,0.500013):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.303290,0.174014,0.653625) to (0.313304,0.227121,0.546861):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.364730,0.247628,0.728394) to (0.354265,0.276196,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.335790,0.178263,0.153588) to (0.334971,0.229953,0.213503):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.477368,0.174941,0.251859) to (0.429356,0.227738,0.279017):
+		Updating particleInCell 1:
+		Changing its coords from (0.436522,0.182602,0.637741) to (0.402126,0.232846,0.536272):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.562562,0.197049,0.372826) to (0.486152,0.242477,0.359661):
+		Updating particleInCell 1:
+		Changing its coords from (0.517599,0.168510,0.559025) to (0.456177,0.223451,0.483794):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.663942,0.207740,0.607618) to (0.553739,0.249604,0.516190):
+		Updating particleInCell 1:
+		Changing its coords from (0.605252,0.244833,0.366156) to (0.514612,0.274333,0.355215):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.724977,0.185484,0.699005) to (0.594429,0.234767,0.577114):
+		Updating particleInCell 1:
+		Changing its coords from (0.677252,0.189149,0.455176) to (0.562613,0.237211,0.414562):
+		Updating particleInCell 2:
+		Changing its coords from (0.678134,0.228133,0.162991) to (0.563200,0.263200,0.219772):
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.154900,0.287664,0.602281) to (0.214378,0.302887,0.512632):
+		Updating particleInCell 1:
+		Changing its coords from (0.116157,0.257935,0.234840) to (0.188549,0.283068,0.267671):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.230679,0.297681,0.325653) to (0.264897,0.309565,0.328213):
+		Updating particleInCell 1:
+		Changing its coords from (0.232733,0.260442,0.363877) to (0.266266,0.284739,0.353696):
+		Updating particleInCell 2:
+		Changing its coords from (0.201920,0.328281,0.412103) to (0.245724,0.329965,0.385846):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.316950,0.309039,0.264624) to (0.322411,0.317137,0.287527):
+		Updating particleInCell 1:
+		Changing its coords from (0.297391,0.250608,0.483756) to (0.309372,0.278183,0.433615):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.340860,0.280440,0.362474) to (0.338351,0.298071,0.352760):
+		Updating particleInCell 1:
+		Changing its coords from (0.389116,0.266935,0.616176) to (0.370522,0.289068,0.521895):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.443676,0.314708,0.422250) to (0.406895,0.320917,0.392611):
+		Updating particleInCell 1:
+		Changing its coords from (0.496734,0.267497,0.612061) to (0.442267,0.289442,0.519152):
+		Updating particleInCell 2:
+		Changing its coords from (0.498478,0.300475,0.361975) to (0.443429,0.311428,0.352428):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.511069,0.253138,0.604036) to (0.451824,0.279870,0.513802):
+		Updating particleInCell 1:
+		Changing its coords from (0.521904,0.310925,0.627506) to (0.459047,0.318394,0.529448):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.655943,0.271357,0.532967) to (0.548407,0.292016,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.586933,0.303939,0.383576) to (0.502400,0.313737,0.366829):
+		Updating particleInCell 2:
+		Changing its coords from (0.665663,0.300090,0.132555) to (0.554887,0.311171,0.199481):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.701204,0.294106,0.625620) to (0.578580,0.307182,0.528191):
+		Updating particleInCell 1:
+		Changing its coords from (0.723323,0.282833,0.266652) to (0.593327,0.299666,0.288879):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.773274,0.253868,0.499235) to (0.626627,0.280356,0.443934):
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.126261,0.352879,0.181831) to (0.195285,0.346364,0.232332):
+		Updating particleInCell 1:
+		Changing its coords from (0.128485,0.392883,0.412239) to (0.196768,0.373033,0.385937):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.216412,0.341508,0.195514) to (0.255386,0.338783,0.241454):
+		Updating particleInCell 1:
+		Changing its coords from (0.199631,0.412172,0.705976) to (0.244198,0.385893,0.581761):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.281228,0.374910,0.224518) to (0.298596,0.361051,0.260790):
+		Updating particleInCell 1:
+		Changing its coords from (0.269354,0.372683,0.322216) to (0.290681,0.359566,0.325922):
+		Updating particleInCell 2:
+		Changing its coords from (0.327807,0.389005,0.203077) to (0.329649,0.370448,0.246496):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.336250,0.357281,0.685059) to (0.335278,0.349299,0.567817):
+		Updating particleInCell 1:
+		Changing its coords from (0.360969,0.410677,0.467674) to (0.351757,0.384896,0.422894):
+		Updating particleInCell 2:
+		Changing its coords from (0.396658,0.400688,0.512337) to (0.375549,0.378237,0.452669):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.416982,0.388164,0.585400) to (0.389099,0.369887,0.501378):
+		Updating particleInCell 1:
+		Changing its coords from (0.448008,0.340799,0.455685) to (0.409783,0.338310,0.414901):
+		Updating particleInCell 2:
+		Changing its coords from (0.449671,0.402357,0.473710) to (0.410892,0.379349,0.426918):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.549185,0.381180,0.594169) to (0.477235,0.365231,0.507223):
+		Updating particleInCell 1:
+		Changing its coords from (0.562191,0.363448,0.433457) to (0.485905,0.353410,0.400083):
+	Updating Particles positions in local cell 55:
+		Updating particleInCell 0:
+		Changing its coords from (0.639328,0.354713,0.730468) to (0.537330,0.347586,0.598090):
+		Updating particleInCell 1:
+		Changing its coords from (0.608622,0.389325,0.159054) to (0.516859,0.370661,0.217147):
+		Updating particleInCell 2:
+		Changing its coords from (0.648042,0.413698,0.286305) to (0.543139,0.386909,0.301981):
+	Updating Particles positions in local cell 56:
+		Updating particleInCell 0:
+		Changing its coords from (0.682976,0.334593,0.772047) to (0.566429,0.334173,0.625809):
+		Updating particleInCell 1:
+		Changing its coords from (0.706935,0.408456,0.456871) to (0.582401,0.383415,0.415692):
+	Updating Particles positions in local cell 57:
+		Updating particleInCell 0:
+		Changing its coords from (0.751856,0.334411,0.188076) to (0.612349,0.334052,0.236495):
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+		Updating particleInCell 0:
+		Changing its coords from (0.126814,0.476361,0.420502) to (0.195654,0.428685,0.391446):
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.216915,0.460911,0.510097) to (0.255721,0.418385,0.451176):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.268317,0.432928,0.165212) to (0.289989,0.399730,0.221252):
+		Updating particleInCell 1:
+		Changing its coords from (0.257233,0.488543,0.651214) to (0.282600,0.436806,0.545254):
+		Updating particleInCell 2:
+		Changing its coords from (0.292675,0.496556,0.213740) to (0.306228,0.442149,0.253604):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.351413,0.481464,0.298147) to (0.345387,0.432087,0.309876):
+		Updating particleInCell 1:
+		Changing its coords from (0.404065,0.458159,0.115629) to (0.380488,0.416550,0.188197):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.494372,0.470852,0.686950) to (0.440693,0.425012,0.569078):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.516210,0.440737,0.319039) to (0.455251,0.404936,0.323803):
+		Updating particleInCell 1:
+		Changing its coords from (0.510145,0.449665,0.372812) to (0.451208,0.410888,0.359653):
+	Updating Particles positions in local cell 67:
+		Updating particleInCell 0:
+		Changing its coords from (0.589700,0.479989,0.174330) to (0.504245,0.431104,0.227331):
+		Updating particleInCell 1:
+		Changing its coords from (0.654657,0.481507,0.315876) to (0.547549,0.432116,0.321695):
+	Updating Particles positions in local cell 68:
+		Updating particleInCell 0:
+		Changing its coords from (0.678506,0.487210,0.617916) to (0.563449,0.435918,0.523055):
+	Updating Particles positions in local cell 69:
+		Updating particleInCell 0:
+		Changing its coords from (0.765374,0.424150,0.436542) to (0.621361,0.393878,0.402139):
+		Updating particleInCell 1:
+		Changing its coords from (0.766347,0.493003,0.263226) to (0.622009,0.439780,0.286595):
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+	Updating Particles positions in local cell 72:
+	Updating Particles positions in local cell 73:
+		Updating particleInCell 0:
+		Changing its coords from (0.160096,0.517632,0.143449) to (0.217842,0.456199,0.206744):
+		Updating particleInCell 1:
+		Changing its coords from (0.132128,0.569782,0.648057) to (0.199197,0.490966,0.543149):
+	Updating Particles positions in local cell 74:
+		Updating particleInCell 0:
+		Changing its coords from (0.181332,0.538937,0.467244) to (0.231999,0.470403,0.422607):
+		Updating particleInCell 1:
+		Changing its coords from (0.238812,0.546228,0.287273) to (0.270319,0.475263,0.302627):
+	Updating Particles positions in local cell 75:
+		Updating particleInCell 0:
+		Changing its coords from (0.285238,0.500451,0.482238) to (0.301270,0.444745,0.432603):
+		Updating particleInCell 1:
+		Changing its coords from (0.308959,0.556185,0.447071) to (0.317084,0.481901,0.409158):
+	Updating Particles positions in local cell 76:
+		Updating particleInCell 0:
+		Changing its coords from (0.349424,0.554820,0.366103) to (0.344061,0.480991,0.355180):
+		Updating particleInCell 1:
+		Changing its coords from (0.414776,0.522810,0.566609) to (0.387628,0.459651,0.488851):
+	Updating Particles positions in local cell 77:
+		Updating particleInCell 0:
+		Changing its coords from (0.463384,0.531740,0.309164) to (0.420033,0.465605,0.317220):
+		Updating particleInCell 1:
+		Changing its coords from (0.438549,0.582805,0.604648) to (0.403477,0.499648,0.514210):
+		Updating particleInCell 2:
+		Changing its coords from (0.461211,0.564946,0.584725) to (0.418585,0.487741,0.500928):
+	Updating Particles positions in local cell 78:
+		Updating particleInCell 0:
+		Changing its coords from (0.500674,0.545325,0.684598) to (0.444894,0.474661,0.567510):
+	Updating Particles positions in local cell 79:
+		Updating particleInCell 0:
+		Changing its coords from (0.605514,0.535054,0.657155) to (0.514787,0.467814,0.549215):
+		Updating particleInCell 1:
+		Changing its coords from (0.613686,0.506456,0.120557) to (0.520235,0.448748,0.191483):
+		Updating particleInCell 2:
+		Changing its coords from (0.602078,0.570523,0.163396) to (0.512496,0.491460,0.220042):
+	Updating Particles positions in local cell 80:
+		Updating particleInCell 0:
+		Changing its coords from (0.674605,0.533105,0.290043) to (0.560848,0.466515,0.304473):
+		Updating particleInCell 1:
+		Changing its coords from (0.690076,0.556121,0.197244) to (0.571162,0.481859,0.242607):
+		Updating particleInCell 2:
+		Changing its coords from (0.746942,0.578090,0.352845) to (0.609073,0.496505,0.346341):
+	Updating Particles positions in local cell 81:
+		Updating particleInCell 0:
+		Changing its coords from (0.775945,0.522926,0.563438) to (0.628408,0.459728,0.486736):
+	Updating Particles positions in local cell 82:
+	Updating Particles positions in local cell 83:
+	Updating Particles positions in local cell 84:
+	Updating Particles positions in local cell 85:
+		Updating particleInCell 0:
+		Changing its coords from (0.124357,0.625538,0.381547) to (0.194016,0.528136,0.365476):
+	Updating Particles positions in local cell 86:
+		Updating particleInCell 0:
+		Changing its coords from (0.204120,0.584801,0.544802) to (0.247191,0.500979,0.474313):
+		Updating particleInCell 1:
+		Changing its coords from (0.212051,0.611502,0.210199) to (0.252479,0.518779,0.251244):
+		Updating particleInCell 2:
+		Changing its coords from (0.224767,0.664170,0.502975) to (0.260956,0.553891,0.446428):
+	Updating Particles positions in local cell 87:
+		Updating particleInCell 0:
+		Changing its coords from (0.254116,0.587930,0.226244) to (0.280522,0.503065,0.261941):
+		Updating particleInCell 1:
+		Changing its coords from (0.282700,0.619035,0.185386) to (0.299578,0.523801,0.234702):
+	Updating Particles positions in local cell 88:
+		Updating particleInCell 0:
+		Changing its coords from (0.372790,0.599128,0.635769) to (0.359638,0.510530,0.534957):
+		Updating particleInCell 1:
+		Changing its coords from (0.361689,0.632456,0.286461) to (0.352237,0.532748,0.302085):
+	Updating Particles positions in local cell 89:
+		Updating particleInCell 0:
+		Changing its coords from (0.424986,0.634523,0.665855) to (0.394435,0.534127,0.555014):
+		Updating particleInCell 1:
+		Changing its coords from (0.464403,0.659528,0.311865) to (0.420713,0.550796,0.319021):
+	Updating Particles positions in local cell 90:
+		Updating particleInCell 0:
+		Changing its coords from (0.502822,0.587894,0.198846) to (0.446325,0.503040,0.243675):
+		Updating particleInCell 1:
+		Changing its coords from (0.506147,0.641730,0.732656) to (0.448542,0.538931,0.599548):
+		Updating particleInCell 2:
+		Changing its coords from (0.580949,0.622487,0.370881) to (0.498411,0.526102,0.358365):
+	Updating Particles positions in local cell 91:
+		Updating particleInCell 0:
+		Changing its coords from (0.618525,0.599913,0.319374) to (0.523461,0.511053,0.324027):
+		Updating particleInCell 1:
+		Changing its coords from (0.662240,0.648479,0.622223) to (0.552604,0.543430,0.525926):
+	Updating Particles positions in local cell 92:
+		Updating particleInCell 0:
+		Changing its coords from (0.688079,0.649054,0.635531) to (0.569830,0.543814,0.534799):
+	Updating Particles positions in local cell 93:
+		Updating particleInCell 0:
+		Changing its coords from (0.771715,0.665646,0.163950) to (0.625588,0.554875,0.220411):
+	Updating Particles positions in local cell 94:
+	Updating Particles positions in local cell 95:
+	Updating Particles positions in local cell 96:
+	Updating Particles positions in local cell 97:
+		Updating particleInCell 0:
+		Changing its coords from (0.116758,0.691349,0.763409) to (0.188950,0.572010,0.620050):
+		Updating particleInCell 1:
+		Changing its coords from (0.122001,0.742464,0.533077) to (0.192445,0.606087,0.466496):
+	Updating Particles positions in local cell 98:
+		Updating particleInCell 0:
+		Changing its coords from (0.208229,0.707242,0.220783) to (0.249931,0.582606,0.258300):
+		Updating particleInCell 1:
+		Changing its coords from (0.220114,0.738807,0.244814) to (0.257854,0.603649,0.274320):
+	Updating Particles positions in local cell 99:
+		Updating particleInCell 0:
+		Changing its coords from (0.271571,0.686413,0.627428) to (0.292159,0.568720,0.529396):
+		Updating particleInCell 1:
+		Changing its coords from (0.311154,0.677472,0.116910) to (0.318547,0.562759,0.189051):
+		Updating particleInCell 2:
+		Changing its coords from (0.283526,0.727057,0.539549) to (0.300129,0.595816,0.470810):
+	Updating Particles positions in local cell 100:
+		Updating particleInCell 0:
+		Changing its coords from (0.343888,0.722009,0.406656) to (0.340370,0.592450,0.382215):
+		Updating particleInCell 1:
+		Changing its coords from (0.340768,0.734641,0.722618) to (0.338290,0.600872,0.592856):
+		Updating particleInCell 2:
+		Changing its coords from (0.410481,0.729402,0.148837) to (0.384765,0.597379,0.210336):
+	Updating Particles positions in local cell 101:
+		Updating particleInCell 0:
+		Changing its coords from (0.434570,0.715115,0.123121) to (0.400825,0.587855,0.193192):
+		Updating particleInCell 1:
+		Changing its coords from (0.487349,0.701564,0.253883) to (0.436010,0.578820,0.280366):
+	Updating Particles positions in local cell 102:
+		Updating particleInCell 0:
+		Changing its coords from (0.519448,0.695292,0.752596) to (0.457410,0.574639,0.612842):
+		Updating particleInCell 1:
+		Changing its coords from (0.564533,0.715576,0.294093) to (0.487466,0.588162,0.307173):
+		Updating particleInCell 2:
+		Changing its coords from (0.501071,0.725892,0.346897) to (0.445159,0.595039,0.342376):
+		Updating particleInCell 3:
+		Changing its coords from (0.571370,0.731264,0.308197) to (0.492024,0.598620,0.316576):
+	Updating Particles positions in local cell 103:
+		Updating particleInCell 0:
+		Changing its coords from (0.615235,0.706424,0.530347) to (0.521268,0.582060,0.464676):
+	Updating Particles positions in local cell 104:
+		Updating particleInCell 0:
+		Changing its coords from (0.674262,0.702713,0.152575) to (0.560619,0.579587,0.212828):
+		Updating particleInCell 1:
+		Changing its coords from (0.739861,0.676736,0.353478) to (0.604352,0.562269,0.346763):
+		Updating particleInCell 2:
+		Changing its coords from (0.719615,0.729900,0.498121) to (0.590854,0.597711,0.443192):
+	Updating Particles positions in local cell 105:
+	Updating Particles positions in local cell 106:
+	Updating Particles positions in local cell 107:
+	Updating Particles positions in local cell 108:
+	Updating Particles positions in local cell 109:
+	Updating Particles positions in local cell 110:
+	Updating Particles positions in local cell 111:
+		Updating particleInCell 0:
+		Changing its coords from (0.261838,0.769354,0.560293) to (0.285670,0.624014,0.484640):
+	Updating Particles positions in local cell 112:
+	Updating Particles positions in local cell 113:
+		Updating particleInCell 0:
+		Changing its coords from (0.449098,0.773252,0.608603) to (0.410510,0.626612,0.516846):
+	Updating Particles positions in local cell 114:
+	Updating Particles positions in local cell 115:
+		Updating particleInCell 0:
+		Changing its coords from (0.646801,0.776515,0.131379) to (0.542311,0.628788,0.198697):
+	Updating Particles positions in local cell 116:
+	Updating Particles positions in local cell 117:
+		Updating particleInCell 0:
+		Changing its coords from (0.761587,0.770904,0.499685) to (0.618836,0.625047,0.444234):
+	Updating Particles positions in local cell 118:
+	Updating Particles positions in local cell 119:
+	Updating Particles positions in local cell 120:
+	Updating Particles positions in local cell 121:
+	Updating Particles positions in local cell 122:
+	Updating Particles positions in local cell 123:
+	Updating Particles positions in local cell 124:
+	Updating Particles positions in local cell 125:
+	Updating Particles positions in local cell 126:
+	Updating Particles positions in local cell 127:
+	Updating Particles positions in local cell 128:
+	Updating Particles positions in local cell 129:
+	Updating Particles positions in local cell 130:
+	Updating Particles positions in local cell 131:
+	Updating Particles positions in local cell 132:
+	Updating Particles positions in local cell 133:
+	Updating Particles positions in local cell 134:
+	Updating Particles positions in local cell 135:
+	Updating Particles positions in local cell 136:
+	Updating Particles positions in local cell 137:
+	Updating Particles positions in local cell 138:
+	Updating Particles positions in local cell 139:
+	Updating Particles positions in local cell 140:
+	Updating Particles positions in local cell 141:
+	Updating Particles positions in local cell 142:
+	Updating Particles positions in local cell 143:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.194171,0.210043,0.256814) to (0.240558,0.251140,0.282321):
+		Updating particleInCell 1:
+		Changing its coords from (0.196571,0.243804,0.489445) to (0.242158,0.273647,0.437408):
+		Updating particleInCell 2:
+		Changing its coords from (0.248441,0.212282,0.224262) to (0.276738,0.252632,0.260619):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.313304,0.227121,0.546861) to (0.319981,0.262525,0.475685):
+		Updating particleInCell 1:
+		Changing its coords from (0.285909,0.191099,0.375548) to (0.301717,0.238510,0.361476):
+		Updating particleInCell 2:
+		Changing its coords from (0.322385,0.216672,0.400724) to (0.326035,0.255559,0.378260):
+		Updating particleInCell 3:
+		Changing its coords from (0.252314,0.237726,0.368524) to (0.279321,0.269595,0.356794):
+		Updating particleInCell 4:
+		Changing its coords from (0.262339,0.249547,0.500013) to (0.286004,0.277476,0.444453):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.402126,0.232846,0.536272) to (0.379195,0.266342,0.468625):
+		Updating particleInCell 1:
+		Changing its coords from (0.334971,0.229953,0.213503) to (0.334425,0.264413,0.253446):
+		Updating particleInCell 2:
+		Changing its coords from (0.360969,0.209320,0.229924) to (0.351757,0.250658,0.264394):
+		Updating particleInCell 3:
+		Changing its coords from (0.401290,0.188570,0.253427) to (0.378638,0.236825,0.280062):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.429356,0.227738,0.279017) to (0.397349,0.262937,0.297122):
+		Updating particleInCell 1:
+		Changing its coords from (0.457114,0.194033,0.592809) to (0.415854,0.240466,0.506317):
+		Updating particleInCell 2:
+		Changing its coords from (0.430212,0.210734,0.507732) to (0.397919,0.251600,0.449599):
+		Updating particleInCell 3:
+		Changing its coords from (0.456177,0.223451,0.483794) to (0.415229,0.260079,0.433641):
+		Updating particleInCell 4:
+		Changing its coords from (0.486152,0.242477,0.359661) to (0.435213,0.272762,0.350885):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.528484,0.188626,0.340052) to (0.463434,0.236862,0.337812):
+		Updating particleInCell 1:
+		Changing its coords from (0.570521,0.195482,0.347795) to (0.491459,0.241432,0.342974):
+		Updating particleInCell 2:
+		Changing its coords from (0.504012,0.191713,0.393677) to (0.447119,0.238920,0.373562):
+		Updating particleInCell 3:
+		Changing its coords from (0.553739,0.249604,0.516190) to (0.480271,0.277514,0.455238):
+		Updating particleInCell 4:
+		Changing its coords from (0.562613,0.237211,0.414562) to (0.486186,0.269251,0.387486):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.600521,0.217673,0.406583) to (0.511459,0.256226,0.382166):
+		Updating particleInCell 1:
+		Changing its coords from (0.594429,0.234767,0.577114) to (0.507397,0.267623,0.495854):
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.214378,0.302887,0.512632) to (0.254029,0.313036,0.452866):
+		Updating particleInCell 1:
+		Changing its coords from (0.232571,0.263814,0.482606) to (0.266158,0.286987,0.432848):
+		Updating particleInCell 2:
+		Changing its coords from (0.245724,0.329965,0.385846) to (0.274927,0.331088,0.368342):
+		Updating particleInCell 3:
+		Changing its coords from (0.188549,0.283068,0.267671) to (0.236811,0.299823,0.289559):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.322411,0.317137,0.287527) to (0.326052,0.322536,0.302796):
+		Updating particleInCell 1:
+		Changing its coords from (0.309372,0.278183,0.433615) to (0.317359,0.296567,0.400188):
+		Updating particleInCell 2:
+		Changing its coords from (0.266266,0.284739,0.353696) to (0.288622,0.300937,0.346908):
+		Updating particleInCell 3:
+		Changing its coords from (0.264897,0.309565,0.328213) to (0.287709,0.317488,0.329920):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.338351,0.298071,0.352760) to (0.336679,0.309825,0.346285):
+		Updating particleInCell 1:
+		Changing its coords from (0.370522,0.289068,0.521895) to (0.358126,0.303823,0.459041):
+		Updating particleInCell 2:
+		Changing its coords from (0.354265,0.276196,0.596707) to (0.347288,0.295242,0.508916):
+		Updating particleInCell 3:
+		Changing its coords from (0.406895,0.320917,0.392611) to (0.382375,0.325056,0.372852):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.451824,0.279870,0.513802) to (0.412327,0.297691,0.453646):
+		Updating particleInCell 1:
+		Changing its coords from (0.442267,0.289442,0.519152) to (0.405956,0.304073,0.457212):
+		Updating particleInCell 2:
+		Changing its coords from (0.443429,0.311428,0.352428) to (0.406731,0.318729,0.346063):
+		Updating particleInCell 3:
+		Changing its coords from (0.459047,0.318394,0.529448) to (0.417143,0.323374,0.464077):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.563200,0.263200,0.219772) to (0.486578,0.286578,0.257626):
+		Updating particleInCell 1:
+		Changing its coords from (0.514612,0.274333,0.355215) to (0.454186,0.294000,0.347921):
+		Updating particleInCell 2:
+		Changing its coords from (0.548407,0.292016,0.466423) to (0.476716,0.305788,0.422060):
+		Updating particleInCell 3:
+		Changing its coords from (0.502400,0.313737,0.366829) to (0.446044,0.320269,0.355664):
+		Updating particleInCell 4:
+		Changing its coords from (0.554887,0.311171,0.199481) to (0.481035,0.318559,0.244099):
+		Updating particleInCell 5:
+		Changing its coords from (0.578580,0.307182,0.528191) to (0.496831,0.315899,0.463238):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.626627,0.280356,0.443934) to (0.528863,0.298015,0.407067):
+		Updating particleInCell 1:
+		Changing its coords from (0.593327,0.299666,0.288879) to (0.506662,0.310889,0.303697):
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.195285,0.346364,0.232332) to (0.241301,0.342020,0.265999):
+		Updating particleInCell 1:
+		Changing its coords from (0.244198,0.385893,0.581761) to (0.273910,0.368373,0.498952):
+		Updating particleInCell 2:
+		Changing its coords from (0.196768,0.373033,0.385937) to (0.242290,0.359800,0.368403):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.298596,0.361051,0.260790) to (0.310175,0.351812,0.284971):
+		Updating particleInCell 1:
+		Changing its coords from (0.290681,0.359566,0.325922) to (0.304898,0.350822,0.328392):
+		Updating particleInCell 2:
+		Changing its coords from (0.329649,0.370448,0.246496) to (0.330877,0.358076,0.275441):
+		Updating particleInCell 3:
+		Changing its coords from (0.255386,0.338783,0.241454) to (0.281368,0.336967,0.272080):
+		Updating particleInCell 4:
+		Changing its coords from (0.289989,0.399730,0.221252) to (0.304437,0.377598,0.258613):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.335278,0.349299,0.567817) to (0.334630,0.343977,0.489656):
+		Updating particleInCell 1:
+		Changing its coords from (0.351757,0.384896,0.422894) to (0.345616,0.367708,0.393040):
+		Updating particleInCell 2:
+		Changing its coords from (0.375549,0.378237,0.452669) to (0.361477,0.363269,0.412890):
+		Updating particleInCell 3:
+		Changing its coords from (0.389099,0.369887,0.501378) to (0.370511,0.357703,0.445363):
+		Updating particleInCell 4:
+		Changing its coords from (0.409783,0.338310,0.414901) to (0.384300,0.336651,0.387712):
+		Updating particleInCell 5:
+		Changing its coords from (0.410892,0.379349,0.426918) to (0.385039,0.364011,0.395723):
+		Updating particleInCell 6:
+		Changing its coords from (0.380488,0.416550,0.188197) to (0.364770,0.388811,0.236576):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.485905,0.353410,0.400083) to (0.435048,0.346718,0.377833):
+		Updating particleInCell 1:
+		Changing its coords from (0.477235,0.365231,0.507223) to (0.429268,0.354598,0.449260):
+		Updating particleInCell 2:
+		Changing its coords from (0.455251,0.404936,0.323803) to (0.414612,0.381068,0.326980):
+		Updating particleInCell 3:
+		Changing its coords from (0.451208,0.410888,0.359653) to (0.411916,0.385036,0.350879):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.537330,0.347586,0.598090) to (0.469331,0.342835,0.509838):
+		Updating particleInCell 1:
+		Changing its coords from (0.566429,0.334173,0.625809) to (0.488730,0.333893,0.528317):
+		Updating particleInCell 2:
+		Changing its coords from (0.516859,0.370661,0.217147) to (0.455684,0.358219,0.255876):
+		Updating particleInCell 3:
+		Changing its coords from (0.543139,0.386909,0.301981) to (0.473204,0.369051,0.312432):
+		Updating particleInCell 4:
+		Changing its coords from (0.582401,0.383415,0.415692) to (0.499379,0.366721,0.388239):
+	Updating Particles positions in local cell 55:
+		Updating particleInCell 0:
+		Changing its coords from (0.612349,0.334052,0.236495) to (0.519343,0.333812,0.268774):
+		Updating particleInCell 1:
+		Changing its coords from (0.621361,0.393878,0.402139) to (0.525352,0.373696,0.379204):
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.195654,0.428685,0.391446) to (0.241547,0.396901,0.372075):
+		Updating particleInCell 1:
+		Changing its coords from (0.217842,0.456199,0.206744) to (0.256339,0.415244,0.248940):
+		Updating particleInCell 2:
+		Changing its coords from (0.231999,0.470403,0.422607) to (0.265777,0.424713,0.392849):
+		Updating particleInCell 3:
+		Changing its coords from (0.199197,0.490966,0.543149) to (0.243909,0.438422,0.473211):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.306228,0.442149,0.253604) to (0.315263,0.405877,0.280181):
+		Updating particleInCell 1:
+		Changing its coords from (0.282600,0.436806,0.545254) to (0.299511,0.402315,0.474614):
+		Updating particleInCell 2:
+		Changing its coords from (0.255721,0.418385,0.451176) to (0.281592,0.390035,0.411895):
+		Updating particleInCell 3:
+		Changing its coords from (0.270319,0.475263,0.302627) to (0.291324,0.427953,0.312862):
+		Updating particleInCell 4:
+		Changing its coords from (0.301270,0.444745,0.432603) to (0.311958,0.407608,0.399513):
+		Updating particleInCell 5:
+		Changing its coords from (0.317084,0.481901,0.409158) to (0.322500,0.432379,0.383883):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.345387,0.432087,0.309876) to (0.341369,0.399169,0.317695):
+		Updating particleInCell 1:
+		Changing its coords from (0.344061,0.480991,0.355180) to (0.340485,0.431772,0.347898):
+		Updating particleInCell 2:
+		Changing its coords from (0.387628,0.459651,0.488851) to (0.369530,0.417545,0.437012):
+		Updating particleInCell 3:
+		Changing its coords from (0.403477,0.499648,0.514210) to (0.380096,0.444210,0.453917):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.440693,0.425012,0.569078) to (0.404906,0.394453,0.490496):
+		Updating particleInCell 1:
+		Changing its coords from (0.420033,0.465605,0.317220) to (0.391133,0.421514,0.322591):
+		Updating particleInCell 2:
+		Changing its coords from (0.444894,0.474661,0.567510) to (0.407707,0.427552,0.489451):
+		Updating particleInCell 3:
+		Changing its coords from (0.418585,0.487741,0.500928) to (0.390168,0.436272,0.445063):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.504245,0.431104,0.227331) to (0.447274,0.398514,0.262665):
+		Updating particleInCell 1:
+		Changing its coords from (0.547549,0.432116,0.321695) to (0.476144,0.399188,0.325574):
+		Updating particleInCell 2:
+		Changing its coords from (0.563449,0.435918,0.523055) to (0.486744,0.401723,0.459814):
+		Updating particleInCell 3:
+		Changing its coords from (0.514787,0.467814,0.549215) to (0.454302,0.422987,0.477254):
+		Updating particleInCell 4:
+		Changing its coords from (0.520235,0.448748,0.191483) to (0.457935,0.410277,0.238766):
+		Updating particleInCell 5:
+		Changing its coords from (0.560848,0.466515,0.304473) to (0.485010,0.422121,0.314093):
+		Updating particleInCell 6:
+		Changing its coords from (0.512496,0.491460,0.220042) to (0.452775,0.438751,0.257806):
+		Updating particleInCell 7:
+		Changing its coords from (0.571162,0.481859,0.242607) to (0.491886,0.432350,0.272849):
+	Updating Particles positions in local cell 67:
+		Updating particleInCell 0:
+		Changing its coords from (0.622009,0.439780,0.286595) to (0.525784,0.404298,0.302174):
+		Updating particleInCell 1:
+		Changing its coords from (0.628408,0.459728,0.486736) to (0.530049,0.417597,0.435602):
+		Updating particleInCell 2:
+		Changing its coords from (0.609073,0.496505,0.346341) to (0.517159,0.442114,0.342005):
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+	Updating Particles positions in local cell 72:
+	Updating Particles positions in local cell 73:
+	Updating Particles positions in local cell 74:
+		Updating particleInCell 0:
+		Changing its coords from (0.247191,0.500979,0.474313) to (0.275905,0.445097,0.427320):
+		Updating particleInCell 1:
+		Changing its coords from (0.194016,0.528136,0.365476) to (0.240455,0.463202,0.354762):
+		Updating particleInCell 2:
+		Changing its coords from (0.188950,0.572010,0.620050) to (0.237078,0.492451,0.524478):
+		Updating particleInCell 3:
+		Changing its coords from (0.249931,0.582606,0.258300) to (0.277731,0.499515,0.283311):
+	Updating Particles positions in local cell 75:
+		Updating particleInCell 0:
+		Changing its coords from (0.280522,0.503065,0.261941) to (0.298125,0.446487,0.285738):
+		Updating particleInCell 1:
+		Changing its coords from (0.252479,0.518779,0.251244) to (0.279430,0.456964,0.278607):
+		Updating particleInCell 2:
+		Changing its coords from (0.260956,0.553891,0.446428) to (0.285082,0.480372,0.408730):
+		Updating particleInCell 3:
+		Changing its coords from (0.299578,0.523801,0.234702) to (0.310830,0.460312,0.267579):
+		Updating particleInCell 4:
+		Changing its coords from (0.292159,0.568720,0.529396) to (0.305884,0.490258,0.464042):
+		Updating particleInCell 5:
+		Changing its coords from (0.318547,0.562759,0.189051) to (0.323476,0.486284,0.237145):
+	Updating Particles positions in local cell 76:
+		Updating particleInCell 0:
+		Changing its coords from (0.359638,0.510530,0.534957) to (0.350870,0.451464,0.467749):
+		Updating particleInCell 1:
+		Changing its coords from (0.352237,0.532748,0.302085) to (0.345936,0.466277,0.312501):
+		Updating particleInCell 2:
+		Changing its coords from (0.394435,0.534127,0.555014) to (0.374068,0.467196,0.481121):
+	Updating Particles positions in local cell 77:
+		Updating particleInCell 0:
+		Changing its coords from (0.446325,0.503040,0.243675) to (0.408661,0.446471,0.273561):
+		Updating particleInCell 1:
+		Changing its coords from (0.420713,0.550796,0.319021) to (0.391586,0.478309,0.323792):
+		Updating particleInCell 2:
+		Changing its coords from (0.448542,0.538931,0.599548) to (0.410139,0.470398,0.510810):
+		Updating particleInCell 3:
+		Changing its coords from (0.498411,0.526102,0.358365) to (0.443385,0.461846,0.350021):
+		Updating particleInCell 4:
+		Changing its coords from (0.436010,0.578820,0.280366) to (0.401785,0.496991,0.298022):
+		Updating particleInCell 5:
+		Changing its coords from (0.457410,0.574639,0.612842) to (0.416051,0.494204,0.519672):
+	Updating Particles positions in local cell 78:
+		Updating particleInCell 0:
+		Changing its coords from (0.523461,0.511053,0.324027) to (0.460085,0.451813,0.327129):
+		Updating particleInCell 1:
+		Changing its coords from (0.552604,0.543430,0.525926) to (0.479514,0.473398,0.461729):
+		Updating particleInCell 2:
+		Changing its coords from (0.569830,0.543814,0.534799) to (0.490998,0.473654,0.467643):
+		Updating particleInCell 3:
+		Changing its coords from (0.521268,0.582060,0.464676) to (0.458623,0.499151,0.420895):
+		Updating particleInCell 4:
+		Changing its coords from (0.560619,0.579587,0.212828) to (0.484857,0.497502,0.252996):
+	Updating Particles positions in local cell 79:
+		Updating particleInCell 0:
+		Changing its coords from (0.625588,0.554875,0.220411) to (0.528170,0.481028,0.258052):
+		Updating particleInCell 1:
+		Changing its coords from (0.604352,0.562269,0.346763) to (0.514012,0.485957,0.342287):
+	Updating Particles positions in local cell 80:
+	Updating Particles positions in local cell 81:
+	Updating Particles positions in local cell 82:
+	Updating Particles positions in local cell 83:
+	Updating Particles positions in local cell 84:
+	Updating Particles positions in local cell 85:
+	Updating Particles positions in local cell 86:
+		Updating particleInCell 0:
+		Changing its coords from (0.192445,0.606087,0.466496) to (0.239408,0.515169,0.422108):
+	Updating Particles positions in local cell 87:
+		Updating particleInCell 0:
+		Changing its coords from (0.257854,0.603649,0.274320) to (0.283014,0.513544,0.293991):
+		Updating particleInCell 1:
+		Changing its coords from (0.285670,0.624014,0.484640) to (0.301558,0.527120,0.434204):
+		Updating particleInCell 2:
+		Changing its coords from (0.300129,0.595816,0.470810) to (0.311197,0.508322,0.424985):
+	Updating Particles positions in local cell 88:
+		Updating particleInCell 0:
+		Changing its coords from (0.340370,0.592450,0.382215) to (0.338024,0.506078,0.365921):
+		Updating particleInCell 1:
+		Changing its coords from (0.400825,0.587855,0.193192) to (0.378328,0.503014,0.239906):
+		Updating particleInCell 2:
+		Changing its coords from (0.338290,0.600872,0.592856) to (0.336638,0.511692,0.506349):
+		Updating particleInCell 3:
+		Changing its coords from (0.384765,0.597379,0.210336) to (0.367621,0.509364,0.251335):
+		Updating particleInCell 4:
+		Changing its coords from (0.410510,0.626612,0.516846) to (0.384784,0.528853,0.455675):
+	Updating Particles positions in local cell 89:
+		Updating particleInCell 0:
+		Changing its coords from (0.487466,0.588162,0.307173) to (0.436089,0.503219,0.315893):
+		Updating particleInCell 1:
+		Changing its coords from (0.445159,0.595039,0.342376) to (0.407883,0.507804,0.339362):
+		Updating particleInCell 2:
+		Changing its coords from (0.492024,0.598620,0.316576) to (0.439127,0.510191,0.322162):
+	Updating Particles positions in local cell 90:
+		Updating particleInCell 0:
+		Changing its coords from (0.542311,0.628788,0.198697) to (0.472652,0.530303,0.243576):
+	Updating Particles positions in local cell 91:
+		Updating particleInCell 0:
+		Changing its coords from (0.590854,0.597711,0.443192) to (0.505014,0.509585,0.406572):
+		Updating particleInCell 1:
+		Changing its coords from (0.618836,0.625047,0.444234) to (0.523668,0.527809,0.407267):
+	Updating Particles positions in local cell 92:
+	Updating Particles positions in local cell 93:
+	Updating Particles positions in local cell 94:
+	Updating Particles positions in local cell 95:
+	Updating Particles positions in local cell 96:
+	Updating Particles positions in local cell 97:
+	Updating Particles positions in local cell 98:
+	Updating Particles positions in local cell 99:
+	Updating Particles positions in local cell 100:
+	Updating Particles positions in local cell 101:
+	Updating Particles positions in local cell 102:
+	Updating Particles positions in local cell 103:
+	Updating Particles positions in local cell 104:
+	Updating Particles positions in local cell 105:
+	Updating Particles positions in local cell 106:
+	Updating Particles positions in local cell 107:
+	Updating Particles positions in local cell 108:
+	Updating Particles positions in local cell 109:
+	Updating Particles positions in local cell 110:
+	Updating Particles positions in local cell 111:
+	Updating Particles positions in local cell 112:
+	Updating Particles positions in local cell 113:
+	Updating Particles positions in local cell 114:
+	Updating Particles positions in local cell 115:
+	Updating Particles positions in local cell 116:
+	Updating Particles positions in local cell 117:
+	Updating Particles positions in local cell 118:
+	Updating Particles positions in local cell 119:
+	Updating Particles positions in local cell 120:
+	Updating Particles positions in local cell 121:
+	Updating Particles positions in local cell 122:
+	Updating Particles positions in local cell 123:
+	Updating Particles positions in local cell 124:
+	Updating Particles positions in local cell 125:
+	Updating Particles positions in local cell 126:
+	Updating Particles positions in local cell 127:
+	Updating Particles positions in local cell 128:
+	Updating Particles positions in local cell 129:
+	Updating Particles positions in local cell 130:
+	Updating Particles positions in local cell 131:
+	Updating Particles positions in local cell 132:
+	Updating Particles positions in local cell 133:
+	Updating Particles positions in local cell 134:
+	Updating Particles positions in local cell 135:
+	Updating Particles positions in local cell 136:
+	Updating Particles positions in local cell 137:
+	Updating Particles positions in local cell 138:
+	Updating Particles positions in local cell 139:
+	Updating Particles positions in local cell 140:
+	Updating Particles positions in local cell 141:
+	Updating Particles positions in local cell 142:
+	Updating Particles positions in local cell 143:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.301717,0.238510,0.361476) to (0.312256,0.270118,0.352095):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.378638,0.236825,0.280062) to (0.363536,0.268994,0.297819):
+		Updating particleInCell 1:
+		Changing its coords from (0.415854,0.240466,0.506317) to (0.388347,0.271422,0.448656):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.491459,0.241432,0.342974) to (0.438750,0.272066,0.339761):
+		Updating particleInCell 1:
+		Changing its coords from (0.463434,0.236862,0.337812) to (0.420067,0.269019,0.336319):
+		Updating particleInCell 2:
+		Changing its coords from (0.447119,0.238920,0.373562) to (0.409191,0.270391,0.360153):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.240558,0.251140,0.282321) to (0.271483,0.278538,0.299325):
+		Updating particleInCell 1:
+		Changing its coords from (0.242158,0.273647,0.437408) to (0.272550,0.293543,0.402716):
+		Updating particleInCell 2:
+		Changing its coords from (0.236811,0.299823,0.289559) to (0.268985,0.310993,0.304150):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.326052,0.322536,0.302796) to (0.328479,0.326135,0.312975):
+		Updating particleInCell 1:
+		Changing its coords from (0.317359,0.296567,0.400188) to (0.322684,0.308822,0.377903):
+		Updating particleInCell 2:
+		Changing its coords from (0.288622,0.300937,0.346908) to (0.303526,0.311736,0.342383):
+		Updating particleInCell 3:
+		Changing its coords from (0.287709,0.317488,0.329920) to (0.302917,0.322770,0.331058):
+		Updating particleInCell 4:
+		Changing its coords from (0.276738,0.252632,0.260619) to (0.295603,0.279533,0.284857):
+		Updating particleInCell 5:
+		Changing its coords from (0.326035,0.255559,0.378260) to (0.328467,0.281484,0.363285):
+		Updating particleInCell 6:
+		Changing its coords from (0.279321,0.269595,0.356794) to (0.297325,0.290841,0.348973):
+		Updating particleInCell 7:
+		Changing its coords from (0.286004,0.277476,0.444453) to (0.301780,0.296095,0.407413):
+		Updating particleInCell 8:
+		Changing its coords from (0.319981,0.262525,0.475685) to (0.324432,0.286128,0.428235):
+		Updating particleInCell 9:
+		Changing its coords from (0.266158,0.286987,0.432848) to (0.288550,0.302436,0.399677):
+		Updating particleInCell 10:
+		Changing its coords from (0.254029,0.313036,0.452866) to (0.280464,0.319802,0.413021):
+		Updating particleInCell 11:
+		Changing its coords from (0.274927,0.331088,0.368342) to (0.294396,0.331836,0.356672):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.336679,0.309825,0.346285) to (0.335563,0.317661,0.341968):
+		Updating particleInCell 1:
+		Changing its coords from (0.358126,0.303823,0.459041) to (0.349862,0.313660,0.417139):
+		Updating particleInCell 2:
+		Changing its coords from (0.347288,0.295242,0.508916) to (0.342636,0.307939,0.450388):
+		Updating particleInCell 3:
+		Changing its coords from (0.382375,0.325056,0.372852) to (0.366028,0.327815,0.359679):
+		Updating particleInCell 4:
+		Changing its coords from (0.351757,0.250658,0.264394) to (0.345616,0.278216,0.287374):
+		Updating particleInCell 5:
+		Changing its coords from (0.397919,0.251600,0.449599) to (0.376391,0.278845,0.410844):
+		Updating particleInCell 6:
+		Changing its coords from (0.334425,0.264413,0.253446) to (0.334061,0.287386,0.280075):
+		Updating particleInCell 7:
+		Changing its coords from (0.379195,0.266342,0.468625) to (0.363908,0.288672,0.423528):
+		Updating particleInCell 8:
+		Changing its coords from (0.397349,0.262937,0.297122) to (0.376010,0.286402,0.309193):
+		Updating particleInCell 9:
+		Changing its coords from (0.415229,0.260079,0.433641) to (0.387930,0.284497,0.400205):
+		Updating particleInCell 10:
+		Changing its coords from (0.405956,0.304073,0.457212) to (0.381748,0.313826,0.415919):
+		Updating particleInCell 11:
+		Changing its coords from (0.412327,0.297691,0.453646) to (0.385996,0.309572,0.413542):
+		Updating particleInCell 12:
+		Changing its coords from (0.406731,0.318729,0.346063) to (0.382265,0.323597,0.341820):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.480271,0.277514,0.455238) to (0.431291,0.296120,0.414603):
+		Updating particleInCell 1:
+		Changing its coords from (0.486186,0.269251,0.387486) to (0.435235,0.290612,0.369435):
+		Updating particleInCell 2:
+		Changing its coords from (0.486578,0.286578,0.257626) to (0.435496,0.302163,0.282862):
+		Updating particleInCell 3:
+		Changing its coords from (0.417143,0.323374,0.464077) to (0.389206,0.326694,0.420496):
+		Updating particleInCell 4:
+		Changing its coords from (0.435213,0.272762,0.350885) to (0.401253,0.292953,0.345035):
+		Updating particleInCell 5:
+		Changing its coords from (0.454186,0.294000,0.347921) to (0.413902,0.307111,0.343059):
+		Updating particleInCell 6:
+		Changing its coords from (0.476716,0.305788,0.422060) to (0.428921,0.314970,0.392484):
+		Updating particleInCell 7:
+		Changing its coords from (0.446044,0.320269,0.355664) to (0.408474,0.324624,0.348220):
+		Updating particleInCell 8:
+		Changing its coords from (0.481035,0.318559,0.244099) to (0.431801,0.323483,0.273844):
+		Updating particleInCell 9:
+		Changing its coords from (0.496831,0.315899,0.463238) to (0.442332,0.321710,0.419937):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.528863,0.298015,0.407067) to (0.463686,0.309788,0.382489):
+		Updating particleInCell 1:
+		Changing its coords from (0.507397,0.267623,0.495854) to (0.449376,0.289526,0.441680):
+		Updating particleInCell 2:
+		Changing its coords from (0.511459,0.256226,0.382166) to (0.452083,0.281929,0.365889):
+		Updating particleInCell 3:
+		Changing its coords from (0.506662,0.310889,0.303697) to (0.448886,0.318370,0.313576):
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.241301,0.342020,0.265999) to (0.271979,0.339125,0.288444):
+		Updating particleInCell 1:
+		Changing its coords from (0.242290,0.359800,0.368403) to (0.272638,0.350978,0.356713):
+		Updating particleInCell 2:
+		Changing its coords from (0.241547,0.396901,0.372075) to (0.272142,0.375712,0.359161):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.310175,0.351812,0.284971) to (0.317895,0.345652,0.301092):
+		Updating particleInCell 1:
+		Changing its coords from (0.304898,0.350822,0.328392) to (0.314377,0.344993,0.330039):
+		Updating particleInCell 2:
+		Changing its coords from (0.330877,0.358076,0.275441) to (0.331696,0.349829,0.294739):
+		Updating particleInCell 3:
+		Changing its coords from (0.281368,0.336967,0.272080) to (0.298690,0.335756,0.292498):
+		Updating particleInCell 4:
+		Changing its coords from (0.304437,0.377598,0.258613) to (0.314069,0.362843,0.283519):
+		Updating particleInCell 5:
+		Changing its coords from (0.273910,0.368373,0.498952) to (0.293718,0.356693,0.443746):
+		Updating particleInCell 6:
+		Changing its coords from (0.281592,0.390035,0.411895) to (0.298839,0.371134,0.385708):
+		Updating particleInCell 7:
+		Changing its coords from (0.299511,0.402315,0.474614) to (0.310785,0.379321,0.427520):
+		Updating particleInCell 8:
+		Changing its coords from (0.315263,0.405877,0.280181) to (0.321287,0.381696,0.297898):
+		Updating particleInCell 9:
+		Changing its coords from (0.256339,0.415244,0.248940) to (0.282004,0.387940,0.277071):
+		Updating particleInCell 10:
+		Changing its coords from (0.311958,0.407608,0.399513) to (0.319083,0.382850,0.377453):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.334630,0.343977,0.489656) to (0.334198,0.340429,0.437548):
+		Updating particleInCell 1:
+		Changing its coords from (0.345616,0.367708,0.393040) to (0.341522,0.356250,0.373138):
+		Updating particleInCell 2:
+		Changing its coords from (0.361477,0.363269,0.412890) to (0.352096,0.353290,0.386371):
+		Updating particleInCell 3:
+		Changing its coords from (0.370511,0.357703,0.445363) to (0.358118,0.349579,0.408020):
+		Updating particleInCell 4:
+		Changing its coords from (0.384300,0.336651,0.387712) to (0.367311,0.335545,0.369586):
+		Updating particleInCell 5:
+		Changing its coords from (0.385039,0.364011,0.395723) to (0.367804,0.353785,0.374926):
+		Updating particleInCell 6:
+		Changing its coords from (0.364770,0.388811,0.236576) to (0.354291,0.370319,0.268828):
+		Updating particleInCell 7:
+		Changing its coords from (0.414612,0.381068,0.326980) to (0.387519,0.365157,0.329098):
+		Updating particleInCell 8:
+		Changing its coords from (0.341369,0.399169,0.317695) to (0.338690,0.377224,0.322908):
+		Updating particleInCell 9:
+		Changing its coords from (0.404906,0.394453,0.490496) to (0.381049,0.374079,0.438109):
+		Updating particleInCell 10:
+		Changing its coords from (0.411916,0.385036,0.350879) to (0.385722,0.367802,0.345031):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.435048,0.346718,0.377833) to (0.401143,0.342256,0.363000):
+		Updating particleInCell 1:
+		Changing its coords from (0.429268,0.354598,0.449260) to (0.397290,0.347510,0.410618):
+		Updating particleInCell 2:
+		Changing its coords from (0.488730,0.333893,0.528317) to (0.436931,0.333706,0.463323):
+		Updating particleInCell 3:
+		Changing its coords from (0.499379,0.366721,0.388239) to (0.444030,0.355592,0.369937):
+		Updating particleInCell 4:
+		Changing its coords from (0.469331,0.342835,0.509838) to (0.423998,0.339668,0.451003):
+		Updating particleInCell 5:
+		Changing its coords from (0.455684,0.358219,0.255876) to (0.414900,0.349924,0.281695):
+		Updating particleInCell 6:
+		Changing its coords from (0.473204,0.369051,0.312432) to (0.426580,0.357145,0.319399):
+		Updating particleInCell 7:
+		Changing its coords from (0.447274,0.398514,0.262665) to (0.409294,0.376787,0.286221):
+		Updating particleInCell 8:
+		Changing its coords from (0.476144,0.399188,0.325574) to (0.428540,0.377237,0.328161):
+		Updating particleInCell 9:
+		Changing its coords from (0.486744,0.401723,0.459814) to (0.435607,0.378926,0.417654):
+		Updating particleInCell 10:
+		Changing its coords from (0.457935,0.410277,0.238766) to (0.416401,0.384629,0.270289):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.519343,0.333812,0.268774) to (0.457340,0.333653,0.290294):
+		Updating particleInCell 1:
+		Changing its coords from (0.525352,0.373696,0.379204) to (0.461345,0.360242,0.363914):
+		Updating particleInCell 2:
+		Changing its coords from (0.525784,0.404298,0.302174) to (0.461634,0.380643,0.312561):
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.243909,0.438422,0.473211) to (0.273717,0.403392,0.426585):
+		Updating particleInCell 1:
+		Changing its coords from (0.240455,0.463202,0.354762) to (0.271414,0.419912,0.347619):
+		Updating particleInCell 2:
+		Changing its coords from (0.237078,0.492451,0.524478) to (0.269163,0.439412,0.460763):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.291324,0.427953,0.312862) to (0.305327,0.396413,0.319686):
+		Updating particleInCell 1:
+		Changing its coords from (0.265777,0.424713,0.392849) to (0.288296,0.394253,0.373011):
+		Updating particleInCell 2:
+		Changing its coords from (0.322500,0.432379,0.383883) to (0.326111,0.399364,0.367033):
+		Updating particleInCell 3:
+		Changing its coords from (0.275905,0.445097,0.427320) to (0.295048,0.407842,0.395991):
+		Updating particleInCell 4:
+		Changing its coords from (0.298125,0.446487,0.285738) to (0.309861,0.408769,0.301603):
+		Updating particleInCell 5:
+		Changing its coords from (0.279430,0.456964,0.278607) to (0.297398,0.415754,0.296849):
+		Updating particleInCell 6:
+		Changing its coords from (0.285082,0.480372,0.408730) to (0.301166,0.431359,0.383598):
+		Updating particleInCell 7:
+		Changing its coords from (0.310830,0.460312,0.267579) to (0.318331,0.417986,0.289497):
+		Updating particleInCell 8:
+		Changing its coords from (0.277731,0.499515,0.283311) to (0.296265,0.444121,0.299985):
+		Updating particleInCell 9:
+		Changing its coords from (0.305884,0.490258,0.464042) to (0.315033,0.437950,0.420472):
+		Updating particleInCell 10:
+		Changing its coords from (0.323476,0.486284,0.237145) to (0.326762,0.435300,0.269208):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.380096,0.444210,0.453917) to (0.364508,0.407251,0.413723):
+		Updating particleInCell 1:
+		Changing its coords from (0.340485,0.431772,0.347898) to (0.338101,0.398959,0.343043):
+		Updating particleInCell 2:
+		Changing its coords from (0.369530,0.417545,0.437012) to (0.357464,0.389475,0.402452):
+		Updating particleInCell 3:
+		Changing its coords from (0.391133,0.421514,0.322591) to (0.371867,0.392121,0.326172):
+		Updating particleInCell 4:
+		Changing its coords from (0.407707,0.427552,0.489451) to (0.382916,0.396146,0.437412):
+		Updating particleInCell 5:
+		Changing its coords from (0.350870,0.451464,0.467749) to (0.345024,0.412087,0.422944):
+		Updating particleInCell 6:
+		Changing its coords from (0.390168,0.436272,0.445063) to (0.371223,0.401959,0.407820):
+		Updating particleInCell 7:
+		Changing its coords from (0.408661,0.446471,0.273561) to (0.383552,0.408759,0.293485):
+		Updating particleInCell 8:
+		Changing its coords from (0.345936,0.466277,0.312501) to (0.341735,0.421962,0.319445):
+		Updating particleInCell 9:
+		Changing its coords from (0.374068,0.467196,0.481121) to (0.360490,0.422575,0.431858):
+		Updating particleInCell 10:
+		Changing its coords from (0.391586,0.478309,0.323792) to (0.372169,0.429984,0.326972):
+		Updating particleInCell 11:
+		Changing its coords from (0.410139,0.470398,0.510810) to (0.384537,0.424710,0.451651):
+		Updating particleInCell 12:
+		Changing its coords from (0.401785,0.496991,0.298022) to (0.378967,0.442439,0.309792):
+		Updating particleInCell 13:
+		Changing its coords from (0.416051,0.494204,0.519672) to (0.388478,0.440580,0.457559):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.485010,0.422121,0.314093) to (0.434451,0.392525,0.320507):
+		Updating particleInCell 1:
+		Changing its coords from (0.454302,0.422987,0.477254) to (0.413979,0.393102,0.429281):
+		Updating particleInCell 2:
+		Changing its coords from (0.452775,0.438751,0.257806) to (0.412961,0.403612,0.282982):
+		Updating particleInCell 3:
+		Changing its coords from (0.460085,0.451813,0.327129) to (0.417834,0.412320,0.329197):
+		Updating particleInCell 4:
+		Changing its coords from (0.491886,0.432350,0.272849) to (0.439035,0.399345,0.293010):
+		Updating particleInCell 5:
+		Changing its coords from (0.443385,0.461846,0.350021) to (0.406701,0.419008,0.344458):
+		Updating particleInCell 6:
+		Changing its coords from (0.479514,0.473398,0.461729) to (0.430787,0.426710,0.418930):
+		Updating particleInCell 7:
+		Changing its coords from (0.490998,0.473654,0.467643) to (0.438443,0.426880,0.422873):
+		Updating particleInCell 8:
+		Changing its coords from (0.458623,0.499151,0.420895) to (0.416860,0.443879,0.391708):
+		Updating particleInCell 9:
+		Changing its coords from (0.484857,0.497502,0.252996) to (0.434349,0.442779,0.279775):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.530049,0.417597,0.435602) to (0.464477,0.389509,0.401512):
+		Updating particleInCell 1:
+		Changing its coords from (0.517159,0.442114,0.342005) to (0.455884,0.405854,0.339115):
+		Updating particleInCell 2:
+		Changing its coords from (0.528170,0.481028,0.258052) to (0.463224,0.431796,0.283146):
+		Updating particleInCell 3:
+		Changing its coords from (0.514012,0.485957,0.342287) to (0.453786,0.435082,0.339302):
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+	Updating Particles positions in local cell 72:
+	Updating Particles positions in local cell 73:
+	Updating Particles positions in local cell 74:
+		Updating particleInCell 0:
+		Changing its coords from (0.239408,0.515169,0.422108) to (0.270716,0.454557,0.392517):
+	Updating Particles positions in local cell 75:
+		Updating particleInCell 0:
+		Changing its coords from (0.283014,0.513544,0.293991) to (0.299787,0.453474,0.307105):
+		Updating particleInCell 1:
+		Changing its coords from (0.301558,0.527120,0.434204) to (0.312150,0.462525,0.400581):
+		Updating particleInCell 2:
+		Changing its coords from (0.311197,0.508322,0.424985) to (0.318576,0.449992,0.394434):
+	Updating Particles positions in local cell 76:
+		Updating particleInCell 0:
+		Changing its coords from (0.338024,0.506078,0.365921) to (0.336461,0.448496,0.355058):
+		Updating particleInCell 1:
+		Changing its coords from (0.378328,0.503014,0.239906) to (0.363330,0.446454,0.271048):
+		Updating particleInCell 2:
+		Changing its coords from (0.336638,0.511692,0.506349) to (0.335536,0.452239,0.448677):
+		Updating particleInCell 3:
+		Changing its coords from (0.367621,0.509364,0.251335) to (0.356192,0.450687,0.278668):
+		Updating particleInCell 4:
+		Changing its coords from (0.384784,0.528853,0.455675) to (0.367634,0.463680,0.414895):
+		Updating particleInCell 5:
+		Changing its coords from (0.407883,0.507804,0.339362) to (0.383033,0.449647,0.337352):
+	Updating Particles positions in local cell 77:
+		Updating particleInCell 0:
+		Changing its coords from (0.436089,0.503219,0.315893) to (0.401837,0.446590,0.321707):
+		Updating particleInCell 1:
+		Changing its coords from (0.439127,0.510191,0.322162) to (0.403863,0.451239,0.325886):
+		Updating particleInCell 2:
+		Changing its coords from (0.472652,0.530303,0.243576) to (0.426213,0.464646,0.273495):
+	Updating Particles positions in local cell 78:
+		Updating particleInCell 0:
+		Changing its coords from (0.505014,0.509585,0.406572) to (0.447787,0.450834,0.382159):
+		Updating particleInCell 1:
+		Changing its coords from (0.523668,0.527809,0.407267) to (0.460223,0.462984,0.382623):
+	Updating Particles positions in local cell 79:
+	Updating Particles positions in local cell 80:
+	Updating Particles positions in local cell 81:
+	Updating Particles positions in local cell 82:
+	Updating Particles positions in local cell 83:
+	Updating Particles positions in local cell 84:
+	Updating Particles positions in local cell 85:
+	Updating Particles positions in local cell 86:
+	Updating Particles positions in local cell 87:
+	Updating Particles positions in local cell 88:
+	Updating Particles positions in local cell 89:
+	Updating Particles positions in local cell 90:
+	Updating Particles positions in local cell 91:
+	Updating Particles positions in local cell 92:
+	Updating Particles positions in local cell 93:
+	Updating Particles positions in local cell 94:
+	Updating Particles positions in local cell 95:
+	Updating Particles positions in local cell 96:
+	Updating Particles positions in local cell 97:
+	Updating Particles positions in local cell 98:
+	Updating Particles positions in local cell 99:
+	Updating Particles positions in local cell 100:
+	Updating Particles positions in local cell 101:
+	Updating Particles positions in local cell 102:
+	Updating Particles positions in local cell 103:
+	Updating Particles positions in local cell 104:
+	Updating Particles positions in local cell 105:
+	Updating Particles positions in local cell 106:
+	Updating Particles positions in local cell 107:
+	Updating Particles positions in local cell 108:
+	Updating Particles positions in local cell 109:
+	Updating Particles positions in local cell 110:
+	Updating Particles positions in local cell 111:
+	Updating Particles positions in local cell 112:
+	Updating Particles positions in local cell 113:
+	Updating Particles positions in local cell 114:
+	Updating Particles positions in local cell 115:
+	Updating Particles positions in local cell 116:
+	Updating Particles positions in local cell 117:
+	Updating Particles positions in local cell 118:
+	Updating Particles positions in local cell 119:
+	Updating Particles positions in local cell 120:
+	Updating Particles positions in local cell 121:
+	Updating Particles positions in local cell 122:
+	Updating Particles positions in local cell 123:
+	Updating Particles positions in local cell 124:
+	Updating Particles positions in local cell 125:
+	Updating Particles positions in local cell 126:
+	Updating Particles positions in local cell 127:
+	Updating Particles positions in local cell 128:
+	Updating Particles positions in local cell 129:
+	Updating Particles positions in local cell 130:
+	Updating Particles positions in local cell 131:
+	Updating Particles positions in local cell 132:
+	Updating Particles positions in local cell 133:
+	Updating Particles positions in local cell 134:
+	Updating Particles positions in local cell 135:
+	Updating Particles positions in local cell 136:
+	Updating Particles positions in local cell 137:
+	Updating Particles positions in local cell 138:
+	Updating Particles positions in local cell 139:
+	Updating Particles positions in local cell 140:
+	Updating Particles positions in local cell 141:
+	Updating Particles positions in local cell 142:
+	Updating Particles positions in local cell 143:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.328479,0.326135,0.312975) to (0.330097,0.328534,0.319761):
+		Updating particleInCell 1:
+		Changing its coords from (0.322684,0.308822,0.377903) to (0.326234,0.316993,0.363046):
+		Updating particleInCell 2:
+		Changing its coords from (0.303526,0.311736,0.342383) to (0.313462,0.318935,0.339367):
+		Updating particleInCell 3:
+		Changing its coords from (0.302917,0.322770,0.331058) to (0.313056,0.326291,0.331816):
+		Updating particleInCell 4:
+		Changing its coords from (0.295603,0.279533,0.284857) to (0.308180,0.297466,0.301016):
+		Updating particleInCell 5:
+		Changing its coords from (0.328467,0.281484,0.363285) to (0.330089,0.298767,0.353301):
+		Updating particleInCell 6:
+		Changing its coords from (0.297325,0.290841,0.348973) to (0.309328,0.305005,0.343760):
+		Updating particleInCell 7:
+		Changing its coords from (0.301780,0.296095,0.407413) to (0.312298,0.308508,0.382720):
+		Updating particleInCell 8:
+		Changing its coords from (0.324432,0.286128,0.428235) to (0.327399,0.301863,0.396601):
+		Updating particleInCell 9:
+		Changing its coords from (0.288550,0.302436,0.399677) to (0.303478,0.312735,0.377562):
+		Updating particleInCell 10:
+		Changing its coords from (0.280464,0.319802,0.413021) to (0.298087,0.324312,0.386459):
+		Updating particleInCell 11:
+		Changing its coords from (0.294396,0.331836,0.356672) to (0.307375,0.332335,0.348893):
+		Updating particleInCell 12:
+		Changing its coords from (0.271483,0.278538,0.299325) to (0.292100,0.296803,0.310661):
+		Updating particleInCell 13:
+		Changing its coords from (0.312256,0.270118,0.352095) to (0.319282,0.291190,0.345841):
+		Updating particleInCell 14:
+		Changing its coords from (0.272550,0.293543,0.402716) to (0.292811,0.306806,0.379589):
+		Updating particleInCell 15:
+		Changing its coords from (0.268985,0.310993,0.304150) to (0.290434,0.318440,0.313878):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.335563,0.317661,0.341968) to (0.334820,0.322885,0.339090):
+		Updating particleInCell 1:
+		Changing its coords from (0.349862,0.313660,0.417139) to (0.344352,0.320218,0.389204):
+		Updating particleInCell 2:
+		Changing its coords from (0.342636,0.307939,0.450388) to (0.339535,0.316404,0.411370):
+		Updating particleInCell 3:
+		Changing its coords from (0.366028,0.327815,0.359679) to (0.355130,0.329654,0.350897):
+		Updating particleInCell 4:
+		Changing its coords from (0.345616,0.278216,0.287374) to (0.341522,0.296589,0.302694):
+		Updating particleInCell 5:
+		Changing its coords from (0.376391,0.278845,0.410844) to (0.362038,0.297008,0.385007):
+		Updating particleInCell 6:
+		Changing its coords from (0.334061,0.287386,0.280075) to (0.333819,0.302702,0.297828):
+		Updating particleInCell 7:
+		Changing its coords from (0.363908,0.288672,0.423528) to (0.353716,0.303559,0.393463):
+		Updating particleInCell 8:
+		Changing its coords from (0.376010,0.286402,0.309193) to (0.361785,0.302046,0.317240):
+		Updating particleInCell 9:
+		Changing its coords from (0.387930,0.284497,0.400205) to (0.369731,0.300776,0.377914):
+		Updating particleInCell 10:
+		Changing its coords from (0.381748,0.313826,0.415919) to (0.365610,0.320329,0.388391):
+		Updating particleInCell 11:
+		Changing its coords from (0.385996,0.309572,0.413542) to (0.368442,0.317492,0.386806):
+		Updating particleInCell 12:
+		Changing its coords from (0.382265,0.323597,0.341820) to (0.365954,0.326843,0.338991):
+		Updating particleInCell 13:
+		Changing its coords from (0.363536,0.268994,0.297819) to (0.353469,0.290441,0.309657):
+		Updating particleInCell 14:
+		Changing its coords from (0.388347,0.271422,0.448656) to (0.370009,0.292059,0.410215):
+		Updating particleInCell 15:
+		Changing its coords from (0.409191,0.270391,0.360153) to (0.383905,0.291372,0.351213):
+		Updating particleInCell 16:
+		Changing its coords from (0.401253,0.292953,0.345035) to (0.378613,0.306413,0.341134):
+		Updating particleInCell 17:
+		Changing its coords from (0.413902,0.307111,0.343059) to (0.387046,0.315852,0.339817):
+		Updating particleInCell 18:
+		Changing its coords from (0.389206,0.326694,0.420496) to (0.370582,0.328907,0.391441):
+		Updating particleInCell 19:
+		Changing its coords from (0.408474,0.324624,0.348220) to (0.383427,0.327527,0.343258):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.431291,0.296120,0.414603) to (0.398639,0.308525,0.387513):
+		Updating particleInCell 1:
+		Changing its coords from (0.435235,0.290612,0.369435) to (0.401268,0.304852,0.357401):
+		Updating particleInCell 2:
+		Changing its coords from (0.435496,0.302163,0.282862) to (0.401442,0.312553,0.299685):
+		Updating particleInCell 3:
+		Changing its coords from (0.463686,0.309788,0.382489) to (0.420235,0.317636,0.366104):
+		Updating particleInCell 4:
+		Changing its coords from (0.452083,0.281929,0.365889) to (0.412500,0.299064,0.355037):
+		Updating particleInCell 5:
+		Changing its coords from (0.449376,0.289526,0.441680) to (0.410695,0.304129,0.405565):
+		Updating particleInCell 6:
+		Changing its coords from (0.428921,0.314970,0.392484) to (0.397059,0.321091,0.372767):
+		Updating particleInCell 7:
+		Changing its coords from (0.438750,0.272066,0.339761) to (0.403611,0.292488,0.337618):
+		Updating particleInCell 8:
+		Changing its coords from (0.431801,0.323483,0.273844) to (0.398979,0.326767,0.293673):
+		Updating particleInCell 9:
+		Changing its coords from (0.442332,0.321710,0.419937) to (0.405999,0.325585,0.391069):
+		Updating particleInCell 10:
+		Changing its coords from (0.420067,0.269019,0.336319) to (0.391156,0.290457,0.335324):
+		Updating particleInCell 11:
+		Changing its coords from (0.448886,0.318370,0.313576) to (0.410368,0.323358,0.320162):
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.317895,0.345652,0.301092) to (0.323041,0.341546,0.311839):
+		Updating particleInCell 1:
+		Changing its coords from (0.314377,0.344993,0.330039) to (0.320696,0.341106,0.331137):
+		Updating particleInCell 2:
+		Changing its coords from (0.331696,0.349829,0.294739) to (0.332242,0.344330,0.307604):
+		Updating particleInCell 3:
+		Changing its coords from (0.298690,0.335756,0.292498) to (0.310238,0.334948,0.306110):
+		Updating particleInCell 4:
+		Changing its coords from (0.314069,0.362843,0.283519) to (0.320491,0.353006,0.300124):
+		Updating particleInCell 5:
+		Changing its coords from (0.293718,0.356693,0.443746) to (0.306923,0.348906,0.406942):
+		Updating particleInCell 6:
+		Changing its coords from (0.298839,0.371134,0.385708) to (0.310337,0.358534,0.368250):
+		Updating particleInCell 7:
+		Changing its coords from (0.310785,0.379321,0.427520) to (0.318301,0.363992,0.396125):
+		Updating particleInCell 8:
+		Changing its coords from (0.321287,0.381696,0.297898) to (0.325302,0.365575,0.309710):
+		Updating particleInCell 9:
+		Changing its coords from (0.282004,0.387940,0.277071) to (0.299114,0.369738,0.295825):
+		Updating particleInCell 10:
+		Changing its coords from (0.319083,0.382850,0.377453) to (0.323833,0.366344,0.362747):
+		Updating particleInCell 11:
+		Changing its coords from (0.271979,0.339125,0.288444) to (0.292430,0.337194,0.303407):
+		Updating particleInCell 12:
+		Changing its coords from (0.272638,0.350978,0.356713) to (0.292869,0.345096,0.348920):
+		Updating particleInCell 13:
+		Changing its coords from (0.272142,0.375712,0.359161) to (0.292539,0.361586,0.350552):
+		Updating particleInCell 14:
+		Changing its coords from (0.288296,0.394253,0.373011) to (0.303308,0.373946,0.359785):
+		Updating particleInCell 15:
+		Changing its coords from (0.305327,0.396413,0.319686) to (0.314662,0.375387,0.324235):
+		Updating particleInCell 16:
+		Changing its coords from (0.273717,0.403392,0.426585) to (0.293589,0.380039,0.395501):
+		Updating particleInCell 17:
+		Changing its coords from (0.295048,0.407842,0.395991) to (0.307810,0.383006,0.375105):
+		Updating particleInCell 18:
+		Changing its coords from (0.309861,0.408769,0.301603) to (0.317685,0.383624,0.312180):
+		Updating particleInCell 19:
+		Changing its coords from (0.326111,0.399364,0.367033) to (0.328519,0.377353,0.355800):
+		Updating particleInCell 20:
+		Changing its coords from (0.297398,0.415754,0.296849) to (0.309376,0.388280,0.309010):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.334198,0.340429,0.437548) to (0.333910,0.338064,0.402810):
+		Updating particleInCell 1:
+		Changing its coords from (0.341522,0.356250,0.373138) to (0.338792,0.348611,0.359870):
+		Updating particleInCell 2:
+		Changing its coords from (0.352096,0.353290,0.386371) to (0.345842,0.346638,0.368692):
+		Updating particleInCell 3:
+		Changing its coords from (0.358118,0.349579,0.408020) to (0.349857,0.344164,0.383124):
+		Updating particleInCell 4:
+		Changing its coords from (0.367311,0.335545,0.369586) to (0.355985,0.334808,0.357502):
+		Updating particleInCell 5:
+		Changing its coords from (0.367804,0.353785,0.374926) to (0.356314,0.346968,0.361062):
+		Updating particleInCell 6:
+		Changing its coords from (0.354291,0.370319,0.268828) to (0.347305,0.357990,0.290330):
+		Updating particleInCell 7:
+		Changing its coords from (0.387519,0.365157,0.329098) to (0.369457,0.354549,0.330510):
+		Updating particleInCell 8:
+		Changing its coords from (0.338690,0.377224,0.322908) to (0.336905,0.362594,0.326383):
+		Updating particleInCell 9:
+		Changing its coords from (0.381049,0.374079,0.438109) to (0.365144,0.360497,0.403184):
+		Updating particleInCell 10:
+		Changing its coords from (0.385722,0.367802,0.345031) to (0.368259,0.356312,0.341132):
+		Updating particleInCell 11:
+		Changing its coords from (0.397290,0.347510,0.410618) to (0.375971,0.342784,0.384856):
+		Updating particleInCell 12:
+		Changing its coords from (0.401143,0.342256,0.363000) to (0.378540,0.339282,0.353111):
+		Updating particleInCell 13:
+		Changing its coords from (0.414900,0.349924,0.281695) to (0.387711,0.344394,0.298908):
+		Updating particleInCell 14:
+		Changing its coords from (0.409294,0.376787,0.286221) to (0.383974,0.362302,0.301925):
+		Updating particleInCell 15:
+		Changing its coords from (0.338101,0.398959,0.343043) to (0.336512,0.377084,0.339806):
+		Updating particleInCell 16:
+		Changing its coords from (0.357464,0.389475,0.402452) to (0.349421,0.370761,0.379413):
+		Updating particleInCell 17:
+		Changing its coords from (0.371867,0.392121,0.326172) to (0.359022,0.372525,0.328559):
+		Updating particleInCell 18:
+		Changing its coords from (0.382916,0.396146,0.437412) to (0.366388,0.375208,0.402719):
+		Updating particleInCell 19:
+		Changing its coords from (0.413979,0.393102,0.429281) to (0.387097,0.373179,0.397298):
+		Updating particleInCell 20:
+		Changing its coords from (0.416401,0.384629,0.270289) to (0.388712,0.367530,0.291303):
+		Updating particleInCell 21:
+		Changing its coords from (0.345024,0.412087,0.422944) to (0.341127,0.385836,0.393074):
+		Updating particleInCell 22:
+		Changing its coords from (0.364508,0.407251,0.413723) to (0.354117,0.382612,0.386926):
+		Updating particleInCell 23:
+		Changing its coords from (0.371223,0.401959,0.407820) to (0.358593,0.379084,0.382991):
+		Updating particleInCell 24:
+		Changing its coords from (0.383552,0.408759,0.293485) to (0.366812,0.383617,0.306768):
+		Updating particleInCell 25:
+		Changing its coords from (0.412961,0.403612,0.282982) to (0.386419,0.380186,0.299766):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.435607,0.378926,0.417654) to (0.401516,0.363729,0.389547):
+		Updating particleInCell 1:
+		Changing its coords from (0.461634,0.380643,0.312561) to (0.418867,0.364873,0.319485):
+		Updating particleInCell 2:
+		Changing its coords from (0.436931,0.333706,0.463323) to (0.402399,0.333582,0.419993):
+		Updating particleInCell 3:
+		Changing its coords from (0.444030,0.355592,0.369937) to (0.407131,0.348172,0.357736):
+		Updating particleInCell 4:
+		Changing its coords from (0.423998,0.339668,0.451003) to (0.393777,0.337556,0.411780):
+		Updating particleInCell 5:
+		Changing its coords from (0.457340,0.333653,0.290294) to (0.416004,0.333546,0.304640):
+		Updating particleInCell 6:
+		Changing its coords from (0.426580,0.357145,0.319399) to (0.395498,0.349208,0.324044):
+		Updating particleInCell 7:
+		Changing its coords from (0.461345,0.360242,0.363914) to (0.418675,0.351272,0.353720):
+		Updating particleInCell 8:
+		Changing its coords from (0.428540,0.377237,0.328161) to (0.396805,0.362602,0.329885):
+		Updating particleInCell 9:
+		Changing its coords from (0.434451,0.392525,0.320507) to (0.400745,0.372794,0.324782):
+		Updating particleInCell 10:
+		Changing its coords from (0.464477,0.389509,0.401512) to (0.420763,0.370784,0.378786):
+		Updating particleInCell 11:
+		Changing its coords from (0.417834,0.412320,0.329197) to (0.389667,0.385991,0.330576):
+		Updating particleInCell 12:
+		Changing its coords from (0.439035,0.399345,0.293010) to (0.403801,0.377341,0.306451):
+		Updating particleInCell 13:
+		Changing its coords from (0.455884,0.405854,0.339115) to (0.415034,0.381680,0.337188):
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.315033,0.437950,0.420472) to (0.321133,0.403077,0.391426):
+		Updating particleInCell 1:
+		Changing its coords from (0.326762,0.435300,0.269208) to (0.328952,0.401311,0.290583):
+		Updating particleInCell 2:
+		Changing its coords from (0.301166,0.431359,0.383598) to (0.311888,0.398684,0.366843):
+		Updating particleInCell 3:
+		Changing its coords from (0.296265,0.444121,0.299985) to (0.308621,0.407192,0.311101):
+		Updating particleInCell 4:
+		Changing its coords from (0.318331,0.417986,0.289497) to (0.323332,0.389768,0.304109):
+		Updating particleInCell 5:
+		Changing its coords from (0.271414,0.419912,0.347619) to (0.292054,0.391053,0.342857):
+		Updating particleInCell 6:
+		Changing its coords from (0.269163,0.439412,0.460763) to (0.290553,0.404052,0.418286):
+		Updating particleInCell 7:
+		Changing its coords from (0.270716,0.454557,0.392517) to (0.291589,0.414149,0.372789):
+		Updating particleInCell 8:
+		Changing its coords from (0.299787,0.453474,0.307105) to (0.310969,0.413427,0.315848):
+		Updating particleInCell 9:
+		Changing its coords from (0.312150,0.462525,0.400581) to (0.319211,0.419461,0.378165):
+		Updating particleInCell 10:
+		Changing its coords from (0.318576,0.449992,0.394434) to (0.323495,0.411106,0.374067):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.341735,0.421962,0.319445) to (0.338934,0.392419,0.324075):
+		Updating particleInCell 1:
+		Changing its coords from (0.388478,0.440580,0.457559) to (0.370097,0.404831,0.416151):
+		Updating particleInCell 2:
+		Changing its coords from (0.378967,0.442439,0.309792) to (0.363756,0.406070,0.317639):
+		Updating particleInCell 3:
+		Changing its coords from (0.384537,0.424710,0.451651) to (0.367469,0.394251,0.412212):
+		Updating particleInCell 4:
+		Changing its coords from (0.372169,0.429984,0.326972) to (0.359224,0.397767,0.329093):
+		Updating particleInCell 5:
+		Changing its coords from (0.360490,0.422575,0.431858) to (0.351438,0.392828,0.399017):
+		Updating particleInCell 6:
+		Changing its coords from (0.406701,0.419008,0.344458) to (0.382245,0.390450,0.340750):
+		Updating particleInCell 7:
+		Changing its coords from (0.336461,0.448496,0.355058) to (0.335418,0.410109,0.347817):
+		Updating particleInCell 8:
+		Changing its coords from (0.363330,0.446454,0.271048) to (0.353331,0.408747,0.291810):
+		Updating particleInCell 9:
+		Changing its coords from (0.401837,0.446590,0.321707) to (0.379002,0.408838,0.325582):
+		Updating particleInCell 10:
+		Changing its coords from (0.335536,0.452239,0.448677) to (0.334802,0.412604,0.410229):
+		Updating particleInCell 11:
+		Changing its coords from (0.356192,0.450687,0.278668) to (0.348572,0.411569,0.296890):
+		Updating particleInCell 12:
+		Changing its coords from (0.367634,0.463680,0.414895) to (0.356200,0.420231,0.387708):
+		Updating particleInCell 13:
+		Changing its coords from (0.383033,0.449647,0.337352) to (0.366467,0.410876,0.336013):
+		Updating particleInCell 14:
+		Changing its coords from (0.403863,0.451239,0.325886) to (0.380353,0.411937,0.328368):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.416860,0.443879,0.391708) to (0.389018,0.407030,0.372250):
+		Updating particleInCell 1:
+		Changing its coords from (0.434349,0.442779,0.279775) to (0.400677,0.406297,0.297628):
+		Updating particleInCell 2:
+		Changing its coords from (0.438443,0.426880,0.422873) to (0.403406,0.395698,0.393027):
+		Updating particleInCell 3:
+		Changing its coords from (0.430787,0.426710,0.418930) to (0.398302,0.395584,0.390398):
+		Updating particleInCell 4:
+		Changing its coords from (0.463224,0.431796,0.283146) to (0.419927,0.398975,0.299875):
+		Updating particleInCell 5:
+		Changing its coords from (0.453786,0.435082,0.339302) to (0.413635,0.401166,0.337313):
+		Updating particleInCell 6:
+		Changing its coords from (0.426213,0.464646,0.273495) to (0.395253,0.420875,0.293441):
+		Updating particleInCell 7:
+		Changing its coords from (0.447787,0.450834,0.382159) to (0.409636,0.411667,0.365884):
+		Updating particleInCell 8:
+		Changing its coords from (0.460223,0.462984,0.382623) to (0.417927,0.419767,0.366193):
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+	Updating Particles positions in local cell 72:
+	Updating Particles positions in local cell 73:
+	Updating Particles positions in local cell 74:
+	Updating Particles positions in local cell 75:
+	Updating Particles positions in local cell 76:
+	Updating Particles positions in local cell 77:
+	Updating Particles positions in local cell 78:
+	Updating Particles positions in local cell 79:
+	Updating Particles positions in local cell 80:
+	Updating Particles positions in local cell 81:
+	Updating Particles positions in local cell 82:
+	Updating Particles positions in local cell 83:
+	Updating Particles positions in local cell 84:
+	Updating Particles positions in local cell 85:
+	Updating Particles positions in local cell 86:
+	Updating Particles positions in local cell 87:
+	Updating Particles positions in local cell 88:
+	Updating Particles positions in local cell 89:
+	Updating Particles positions in local cell 90:
+	Updating Particles positions in local cell 91:
+	Updating Particles positions in local cell 92:
+	Updating Particles positions in local cell 93:
+	Updating Particles positions in local cell 94:
+	Updating Particles positions in local cell 95:
+	Updating Particles positions in local cell 96:
+	Updating Particles positions in local cell 97:
+	Updating Particles positions in local cell 98:
+	Updating Particles positions in local cell 99:
+	Updating Particles positions in local cell 100:
+	Updating Particles positions in local cell 101:
+	Updating Particles positions in local cell 102:
+	Updating Particles positions in local cell 103:
+	Updating Particles positions in local cell 104:
+	Updating Particles positions in local cell 105:
+	Updating Particles positions in local cell 106:
+	Updating Particles positions in local cell 107:
+	Updating Particles positions in local cell 108:
+	Updating Particles positions in local cell 109:
+	Updating Particles positions in local cell 110:
+	Updating Particles positions in local cell 111:
+	Updating Particles positions in local cell 112:
+	Updating Particles positions in local cell 113:
+	Updating Particles positions in local cell 114:
+	Updating Particles positions in local cell 115:
+	Updating Particles positions in local cell 116:
+	Updating Particles positions in local cell 117:
+	Updating Particles positions in local cell 118:
+	Updating Particles positions in local cell 119:
+	Updating Particles positions in local cell 120:
+	Updating Particles positions in local cell 121:
+	Updating Particles positions in local cell 122:
+	Updating Particles positions in local cell 123:
+	Updating Particles positions in local cell 124:
+	Updating Particles positions in local cell 125:
+	Updating Particles positions in local cell 126:
+	Updating Particles positions in local cell 127:
+	Updating Particles positions in local cell 128:
+	Updating Particles positions in local cell 129:
+	Updating Particles positions in local cell 130:
+	Updating Particles positions in local cell 131:
+	Updating Particles positions in local cell 132:
+	Updating Particles positions in local cell 133:
+	Updating Particles positions in local cell 134:
+	Updating Particles positions in local cell 135:
+	Updating Particles positions in local cell 136:
+	Updating Particles positions in local cell 137:
+	Updating Particles positions in local cell 138:
+	Updating Particles positions in local cell 139:
+	Updating Particles positions in local cell 140:
+	Updating Particles positions in local cell 141:
+	Updating Particles positions in local cell 142:
+	Updating Particles positions in local cell 143:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1443 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.020218,0.055930,0.161165) to (0.124590,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.142325,0.060967,0.087923) to (0.205995,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.226628,0.013305,0.428316) to (0.262196,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.308700,0.070846,0.484961) to (0.316911,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.395513,0.054303,0.100663) to (0.374786,0.147313,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.486236,0.007617,0.153544) to (0.435269,0.116189,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.051311,0.140818,0.725730) to (0.145319,0.204990,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.111840,0.103240,0.917154) to (0.185671,0.179938,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.217361,0.098022,0.469106) to (0.256018,0.176459,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.272422,0.091075,0.348450) to (0.292726,0.171828,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.367006,0.106500,0.365872) to (0.355782,0.182111,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.434506,0.156430,0.498144) to (0.400782,0.215398,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.025617,0.215226,0.684585) to (0.128189,0.254595,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.151040,0.201550,0.412512) to (0.211805,0.245478,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.173597,0.228148,0.708363) to (0.226842,0.263209,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.288268,0.177688,0.813771) to (0.303290,0.229570,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.337018,0.184061,0.063715) to (0.335790,0.233818,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.488116,0.190569,0.789944) to (0.436522,0.238157,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.049385,0.262412,0.211121) to (0.144034,0.286052,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.109731,0.252765,0.671870) to (0.184265,0.279621,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.177176,0.295573,0.392572) to (0.229228,0.308160,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.329246,0.311610,0.744761) to (0.330609,0.318851,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.349212,0.283724,0.516097) to (0.343919,0.300260,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.420799,0.278227,0.881840) to (0.391643,0.296596,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.007569,0.386903,0.185594) to (0.116157,0.369047,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.106618,0.343580,0.669197) to (0.182190,0.340165,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.182432,0.390663,0.379149) to (0.232733,0.371553,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.279420,0.375913,0.558967) to (0.297391,0.361720,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.380429,0.371442,0.925924) to (0.364730,0.358739,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.417008,0.400402,0.757598) to (0.389116,0.378046,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.078434,0.484579,0.751425) to (0.163400,0.434164,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.099936,0.463040,0.739388) to (0.177735,0.419804,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.241211,0.450583,0.382567) to (0.271918,0.411500,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.317248,0.490369,0.632784) to (0.322610,0.438024,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.350534,0.425532,0.077820) to (0.344800,0.394799,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.493245,0.464135,0.582185) to (0.439941,0.420534,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.065683,0.514829,0.736755) to (0.154900,0.454330,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.136213,0.575754,0.451488) to (0.201920,0.494947,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.179352,0.529855,0.321813) to (0.230679,0.464348,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.308758,0.546891,0.230269) to (0.316950,0.475705,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.344624,0.503993,0.377044) to (0.340860,0.447107,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.498848,0.555396,0.466709) to (0.443676,0.481375,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.081050,0.617379,0.376295) to (0.165144,0.522697,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.116190,0.633054,0.774592) to (0.188571,0.533147,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.213733,0.622575,0.408698) to (0.253600,0.526161,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.331828,0.616802,0.032166) to (0.332330,0.522312,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.385139,0.607826,0.771763) to (0.367870,0.516328,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.418318,0.590916,0.233312) to (0.389990,0.505055,0.266652):
+	Updating Particles positions in local cell 48:
+		Updating particleInCell 0:
+		Changing its coords from (0.022725,0.695985,0.106081) to (0.126261,0.575101,0.181831):
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.157951,0.678929,0.126605) to (0.216412,0.563730,0.195514):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.237365,0.725691,0.316657) to (0.269354,0.594905,0.322216):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.255175,0.729032,0.170111) to (0.281228,0.597133,0.224518):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.337709,0.702589,0.860921) to (0.336250,0.579503,0.685059):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.458807,0.748913,0.711434) to (0.416982,0.610386,0.585400):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.005346,0.761198,0.516861) to (0.114675,0.618577,0.455685):
+	Updating Particles positions in local cell 55:
+		Updating particleInCell 0:
+		Changing its coords from (0.157111,0.821769,0.724586) to (0.215852,0.658957,0.594169):
+	Updating Particles positions in local cell 56:
+		Updating particleInCell 0:
+		Changing its coords from (0.176621,0.795172,0.483519) to (0.228858,0.641226,0.433457):
+	Updating Particles positions in local cell 57:
+		Updating particleInCell 0:
+		Changing its coords from (0.292326,0.782070,0.929035) to (0.305995,0.632491,0.730468):
+	Updating Particles positions in local cell 58:
+		Updating particleInCell 0:
+		Changing its coords from (0.357797,0.751889,0.991404) to (0.349643,0.612370,0.772047):
+	Updating Particles positions in local cell 59:
+		Updating particleInCell 0:
+		Changing its coords from (0.461117,0.751617,0.115447) to (0.418523,0.612189,0.188076):
+	Updating Particles positions in local cell 60:
+		Updating particleInCell 0:
+		Changing its coords from (0.026061,0.839325,0.451692) to (0.128485,0.670661,0.412239):
+	Updating Particles positions in local cell 61:
+		Updating particleInCell 0:
+		Changing its coords from (0.132779,0.868259,0.892297) to (0.199631,0.689950,0.705976):
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.235808,0.899393,0.081151) to (0.268317,0.710706,0.165212):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.325043,0.833508,0.137948) to (0.327807,0.666783,0.203077):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.374786,0.866016,0.534845) to (0.360969,0.688455,0.467674):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.428320,0.851032,0.601838) to (0.396658,0.678466,0.512337):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.007840,0.936869,0.543898) to (0.116338,0.735691,0.473710):
+	Updating Particles positions in local cell 67:
+		Updating particleInCell 0:
+		Changing its coords from (0.107648,0.994438,0.311891) to (0.182877,0.774070,0.319039):
+	Updating Particles positions in local cell 68:
+		Updating particleInCell 0:
+		Changing its coords from (0.246266,0.917322,0.071914) to (0.275289,0.722659,0.159054):
+	Updating Particles positions in local cell 69:
+		Updating particleInCell 0:
+		Changing its coords from (0.305396,0.953880,0.262791) to (0.314708,0.747031,0.286305):
+	Updating Particles positions in local cell 70:
+		Updating particleInCell 0:
+		Changing its coords from (0.393736,0.946017,0.518640) to (0.373602,0.741789,0.456871):
+	Updating Particles positions in local cell 71:
+		Updating particleInCell 0:
+		Changing its coords from (0.481395,0.969559,0.488147) to (0.432041,0.757484,0.436542):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.124590,0.148398,0.218555) to (0.194171,0.210043,0.256814):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.205995,0.151756,0.169726) to (0.248441,0.212282,0.224262):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.316911,0.158342,0.434419) to (0.322385,0.216672,0.400724):
+		Updating particleInCell 1:
+		Changing its coords from (0.262196,0.119981,0.396655) to (0.285909,0.191099,0.375548):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.374786,0.147313,0.178219) to (0.360969,0.209320,0.229924):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.435269,0.116189,0.213474) to (0.401290,0.188570,0.253427):
+		Updating particleInCell 1:
+		Changing its coords from (0.457923,0.148398,0.218555) to (0.416393,0.210043,0.256814):
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.145319,0.204990,0.594931) to (0.207990,0.247771,0.507732):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.211805,0.245478,0.386119) to (0.252314,0.274763,0.368524):
+		Updating particleInCell 1:
+		Changing its coords from (0.185671,0.179938,0.722547) to (0.234892,0.231070,0.592809):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.303290,0.229570,0.653625) to (0.313304,0.264158,0.546861):
+		Updating particleInCell 1:
+		Changing its coords from (0.256018,0.176459,0.423849) to (0.281790,0.228751,0.393677):
+		Updating particleInCell 2:
+		Changing its coords from (0.292726,0.171828,0.343411) to (0.306261,0.225663,0.340052):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.335790,0.233818,0.153588) to (0.334971,0.266990,0.213503):
+		Updating particleInCell 1:
+		Changing its coords from (0.355782,0.182111,0.355026) to (0.348299,0.232519,0.347795):
+		Updating particleInCell 2:
+		Changing its coords from (0.400782,0.215398,0.443207) to (0.378299,0.254710,0.406583):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.436522,0.238157,0.637741) to (0.402126,0.269883,0.536272):
+		Updating particleInCell 1:
+		Changing its coords from (0.478652,0.204990,0.594931) to (0.430212,0.247771,0.507732):
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.144034,0.286052,0.251859) to (0.207134,0.301813,0.279017):
+		Updating particleInCell 1:
+		Changing its coords from (0.128189,0.254595,0.567501) to (0.196571,0.280841,0.489445):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.229228,0.308160,0.372826) to (0.263930,0.316551,0.359661):
+		Updating particleInCell 1:
+		Changing its coords from (0.226842,0.263209,0.583353) to (0.262339,0.286584,0.500013):
+		Updating particleInCell 2:
+		Changing its coords from (0.184265,0.279621,0.559025) to (0.233955,0.297525,0.483794):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.330609,0.318851,0.607618) to (0.331517,0.323679,0.516190):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.343919,0.300260,0.455176) to (0.340390,0.311285,0.414562):
+		Updating particleInCell 1:
+		Changing its coords from (0.391643,0.296596,0.699005) to (0.372207,0.308842,0.577114):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.461523,0.254595,0.567501) to (0.418793,0.280841,0.489445):
+		Updating particleInCell 1:
+		Changing its coords from (0.477368,0.286052,0.251859) to (0.429356,0.301813,0.279017):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.116157,0.369047,0.234840) to (0.188549,0.357142,0.267671):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.232733,0.371553,0.363877) to (0.266266,0.358813,0.353696):
+		Updating particleInCell 1:
+		Changing its coords from (0.182190,0.340165,0.557242) to (0.232571,0.337888,0.482606):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.297391,0.361720,0.483756) to (0.309372,0.352257,0.433615):
+		Updating particleInCell 1:
+		Changing its coords from (0.271918,0.411500,0.366156) to (0.292390,0.385444,0.355215):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.364730,0.358739,0.728394) to (0.354265,0.350271,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.389116,0.378046,0.616176) to (0.370522,0.363142,0.521895):
+		Updating particleInCell 2:
+		Changing its coords from (0.344800,0.394799,0.162991) to (0.340978,0.374311,0.219772):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.449491,0.369047,0.234840) to (0.410772,0.357142,0.267671):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.163400,0.434164,0.612061) to (0.220045,0.400553,0.519152):
+		Updating particleInCell 1:
+		Changing its coords from (0.154900,0.454330,0.602281) to (0.214378,0.413998,0.512632):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.177735,0.419804,0.604036) to (0.229601,0.390981,0.513802):
+		Updating particleInCell 1:
+		Changing its coords from (0.201920,0.494947,0.412103) to (0.245724,0.441076,0.385846):
+		Updating particleInCell 2:
+		Changing its coords from (0.230679,0.464348,0.325653) to (0.264897,0.420676,0.328213):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.322610,0.438024,0.532967) to (0.326184,0.403127,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.316950,0.475705,0.264624) to (0.322411,0.428248,0.287527):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.340860,0.447107,0.362474) to (0.338351,0.409182,0.352760):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.439941,0.420534,0.499235) to (0.404405,0.391467,0.443934):
+		Updating particleInCell 1:
+		Changing its coords from (0.443676,0.481375,0.422250) to (0.406895,0.432028,0.392611):
+		Updating particleInCell 2:
+		Changing its coords from (0.496734,0.434164,0.612061) to (0.442267,0.400553,0.519152):
+		Updating particleInCell 3:
+		Changing its coords from (0.488233,0.454330,0.602281) to (0.436600,0.413998,0.512632):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.165144,0.522697,0.361975) to (0.221207,0.459576,0.352428):
+		Updating particleInCell 1:
+		Changing its coords from (0.126261,0.575101,0.181831) to (0.195285,0.494512,0.232332):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.188571,0.533147,0.627506) to (0.236825,0.466542,0.529448):
+		Updating particleInCell 1:
+		Changing its coords from (0.216412,0.563730,0.195514) to (0.255386,0.486931,0.241454):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.253600,0.526161,0.383576) to (0.280178,0.461885,0.366829):
+		Updating particleInCell 1:
+		Changing its coords from (0.332330,0.522312,0.132555) to (0.332664,0.459319,0.199481):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.367870,0.516328,0.625620) to (0.356358,0.455330,0.528191):
+		Updating particleInCell 1:
+		Changing its coords from (0.389990,0.505055,0.266652) to (0.371104,0.447814,0.288879):
+		Updating particleInCell 2:
+		Changing its coords from (0.336250,0.579503,0.685059) to (0.335278,0.497447,0.567817):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.498478,0.522697,0.361975) to (0.443429,0.459576,0.352428):
+		Updating particleInCell 1:
+		Changing its coords from (0.459595,0.575101,0.181831) to (0.417508,0.494512,0.232332):
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.114675,0.618577,0.455685) to (0.187561,0.523496,0.414901):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.215852,0.658957,0.594169) to (0.255012,0.550416,0.507223):
+		Updating particleInCell 1:
+		Changing its coords from (0.228858,0.641226,0.433457) to (0.263683,0.538595,0.400083):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.269354,0.594905,0.322216) to (0.290681,0.507715,0.325922):
+		Updating particleInCell 1:
+		Changing its coords from (0.281228,0.597133,0.224518) to (0.298596,0.509200,0.260790):
+		Updating particleInCell 2:
+		Changing its coords from (0.305995,0.632491,0.730468) to (0.315108,0.532772,0.598090):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.349643,0.612370,0.772047) to (0.344206,0.519358,0.625809):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.416982,0.610386,0.585400) to (0.389099,0.518035,0.501378):
+		Updating particleInCell 1:
+		Changing its coords from (0.418523,0.612189,0.188076) to (0.390126,0.519237,0.236495):
+		Updating particleInCell 2:
+		Changing its coords from (0.448008,0.618577,0.455685) to (0.409783,0.523496,0.414901):
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.128485,0.670661,0.412239) to (0.196768,0.558219,0.385937):
+		Updating particleInCell 1:
+		Changing its coords from (0.116338,0.735691,0.473710) to (0.188670,0.601572,0.426918):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.199631,0.689950,0.705976) to (0.244198,0.571078,0.581761):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.268317,0.710706,0.165212) to (0.289989,0.584915,0.221252):
+		Updating particleInCell 1:
+		Changing its coords from (0.327807,0.666783,0.203077) to (0.329649,0.555633,0.246496):
+		Updating particleInCell 2:
+		Changing its coords from (0.275289,0.722659,0.159054) to (0.294637,0.592884,0.217147):
+		Updating particleInCell 3:
+		Changing its coords from (0.314708,0.747031,0.286305) to (0.320917,0.609132,0.301981):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.360969,0.688455,0.467674) to (0.351757,0.570081,0.422894):
+		Updating particleInCell 1:
+		Changing its coords from (0.396658,0.678466,0.512337) to (0.375549,0.563422,0.452669):
+		Updating particleInCell 2:
+		Changing its coords from (0.373602,0.741789,0.456871) to (0.360179,0.605637,0.415692):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.461818,0.670661,0.412239) to (0.418990,0.558219,0.385937):
+		Updating particleInCell 1:
+		Changing its coords from (0.449671,0.735691,0.473710) to (0.410892,0.601572,0.426918):
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+		Updating particleInCell 0:
+		Changing its coords from (0.182877,0.774070,0.319039) to (0.233029,0.627158,0.323803):
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+		Updating particleInCell 0:
+		Changing its coords from (0.432041,0.757484,0.436542) to (0.399138,0.616100,0.402139):
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.207990,0.247771,0.507732) to (0.249771,0.276292,0.449599):
+		Updating particleInCell 1:
+		Changing its coords from (0.234892,0.231070,0.592809) to (0.267706,0.265158,0.506317):
+		Updating particleInCell 2:
+		Changing its coords from (0.194171,0.210043,0.256814) to (0.240558,0.251140,0.282321):
+		Updating particleInCell 3:
+		Changing its coords from (0.248441,0.212282,0.224262) to (0.276738,0.252632,0.260619):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.322385,0.216672,0.400724) to (0.326035,0.255559,0.378260):
+		Updating particleInCell 1:
+		Changing its coords from (0.281790,0.228751,0.393677) to (0.298971,0.263611,0.373562):
+		Updating particleInCell 2:
+		Changing its coords from (0.306261,0.225663,0.340052) to (0.315285,0.261553,0.337812):
+		Updating particleInCell 3:
+		Changing its coords from (0.285909,0.191099,0.375548) to (0.301717,0.238510,0.361476):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.360969,0.209320,0.229924) to (0.351757,0.250658,0.264394):
+		Updating particleInCell 1:
+		Changing its coords from (0.348299,0.232519,0.347795) to (0.343310,0.266123,0.342974):
+		Updating particleInCell 2:
+		Changing its coords from (0.401290,0.188570,0.253427) to (0.378638,0.236825,0.280062):
+		Updating particleInCell 3:
+		Changing its coords from (0.416393,0.210043,0.256814) to (0.388707,0.251140,0.282321):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.430212,0.247771,0.507732) to (0.397919,0.276292,0.449599):
+		Updating particleInCell 1:
+		Changing its coords from (0.470663,0.212282,0.224262) to (0.424887,0.252632,0.260619):
+		Updating particleInCell 2:
+		Changing its coords from (0.457114,0.231070,0.592809) to (0.415854,0.265158,0.506317):
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.207134,0.301813,0.279017) to (0.249200,0.312319,0.297122):
+		Updating particleInCell 1:
+		Changing its coords from (0.196571,0.280841,0.489445) to (0.242158,0.298339,0.437408):
+		Updating particleInCell 2:
+		Changing its coords from (0.233955,0.297525,0.483794) to (0.267081,0.309461,0.433641):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.331517,0.323679,0.516190) to (0.332122,0.326897,0.455238):
+		Updating particleInCell 1:
+		Changing its coords from (0.252314,0.274763,0.368524) to (0.279321,0.294286,0.356794):
+		Updating particleInCell 2:
+		Changing its coords from (0.262339,0.286584,0.500013) to (0.286004,0.302167,0.444453):
+		Updating particleInCell 3:
+		Changing its coords from (0.313304,0.264158,0.546861) to (0.319981,0.287216,0.475685):
+		Updating particleInCell 4:
+		Changing its coords from (0.263930,0.316551,0.359661) to (0.287064,0.322145,0.350885):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.340390,0.311285,0.414562) to (0.338038,0.318634,0.387486):
+		Updating particleInCell 1:
+		Changing its coords from (0.372207,0.308842,0.577114) to (0.359249,0.317005,0.495854):
+		Updating particleInCell 2:
+		Changing its coords from (0.378299,0.254710,0.406583) to (0.363310,0.280918,0.382166):
+		Updating particleInCell 3:
+		Changing its coords from (0.334971,0.266990,0.213503) to (0.334425,0.289104,0.253446):
+		Updating particleInCell 4:
+		Changing its coords from (0.402126,0.269883,0.536272) to (0.379195,0.291033,0.468625):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.418793,0.280841,0.489445) to (0.390306,0.298339,0.437408):
+		Updating particleInCell 1:
+		Changing its coords from (0.429356,0.301813,0.279017) to (0.397349,0.312319,0.297122):
+		Updating particleInCell 2:
+		Changing its coords from (0.474536,0.274763,0.368524) to (0.427469,0.294286,0.356794):
+		Updating particleInCell 3:
+		Changing its coords from (0.484562,0.286584,0.500013) to (0.434152,0.302167,0.444453):
+		Updating particleInCell 4:
+		Changing its coords from (0.456177,0.297525,0.483794) to (0.415229,0.309461,0.433641):
+		Updating particleInCell 5:
+		Changing its coords from (0.486152,0.316551,0.359661) to (0.435213,0.322145,0.350885):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.188549,0.357142,0.267671) to (0.236811,0.349206,0.289559):
+		Updating particleInCell 1:
+		Changing its coords from (0.232571,0.337888,0.482606) to (0.266158,0.336370,0.432848):
+		Updating particleInCell 2:
+		Changing its coords from (0.220045,0.400553,0.519152) to (0.257808,0.378147,0.457212):
+		Updating particleInCell 3:
+		Changing its coords from (0.229601,0.390981,0.513802) to (0.264179,0.371765,0.453646):
+		Updating particleInCell 4:
+		Changing its coords from (0.214378,0.413998,0.512632) to (0.254029,0.387110,0.452866):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.309372,0.352257,0.433615) to (0.317359,0.345949,0.400188):
+		Updating particleInCell 1:
+		Changing its coords from (0.292390,0.385444,0.355215) to (0.306038,0.368074,0.347921):
+		Updating particleInCell 2:
+		Changing its coords from (0.266266,0.358813,0.353696) to (0.288622,0.350320,0.346908):
+		Updating particleInCell 3:
+		Changing its coords from (0.326184,0.403127,0.466423) to (0.328567,0.379862,0.422060):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.354265,0.350271,0.596707) to (0.347288,0.344625,0.508916):
+		Updating particleInCell 1:
+		Changing its coords from (0.370522,0.363142,0.521895) to (0.358126,0.353206,0.459041):
+		Updating particleInCell 2:
+		Changing its coords from (0.340978,0.374311,0.219772) to (0.338430,0.360652,0.257626):
+		Updating particleInCell 3:
+		Changing its coords from (0.404405,0.391467,0.443934) to (0.380714,0.372089,0.407067):
+		Updating particleInCell 4:
+		Changing its coords from (0.338351,0.409182,0.352760) to (0.336679,0.383899,0.346285):
+		Updating particleInCell 5:
+		Changing its coords from (0.410772,0.357142,0.267671) to (0.384959,0.349206,0.289559):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.442267,0.400553,0.519152) to (0.405956,0.378147,0.457212):
+		Updating particleInCell 1:
+		Changing its coords from (0.436600,0.413998,0.512632) to (0.402178,0.387110,0.452866):
+		Updating particleInCell 2:
+		Changing its coords from (0.454793,0.337888,0.482606) to (0.414307,0.336370,0.432848):
+		Updating particleInCell 3:
+		Changing its coords from (0.488488,0.358813,0.353696) to (0.436770,0.350320,0.346908):
+		Updating particleInCell 4:
+		Changing its coords from (0.451824,0.390981,0.513802) to (0.412327,0.371765,0.453646):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.245724,0.441076,0.385846) to (0.274927,0.405162,0.368342):
+		Updating particleInCell 1:
+		Changing its coords from (0.221207,0.459576,0.352428) to (0.258583,0.417495,0.346063):
+		Updating particleInCell 2:
+		Changing its coords from (0.236825,0.466542,0.529448) to (0.268994,0.422139,0.464077):
+		Updating particleInCell 3:
+		Changing its coords from (0.195285,0.494512,0.232332) to (0.241301,0.440786,0.265999):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.322411,0.428248,0.287527) to (0.326052,0.396610,0.302796):
+		Updating particleInCell 1:
+		Changing its coords from (0.264897,0.420676,0.328213) to (0.287709,0.391562,0.329920):
+		Updating particleInCell 2:
+		Changing its coords from (0.280178,0.461885,0.366829) to (0.297896,0.419035,0.355664):
+		Updating particleInCell 3:
+		Changing its coords from (0.332664,0.459319,0.199481) to (0.332887,0.417324,0.244099):
+		Updating particleInCell 4:
+		Changing its coords from (0.255386,0.486931,0.241454) to (0.281368,0.435732,0.272080):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.406895,0.432028,0.392611) to (0.382375,0.399130,0.372852):
+		Updating particleInCell 1:
+		Changing its coords from (0.356358,0.455330,0.528191) to (0.348683,0.414664,0.463238):
+		Updating particleInCell 2:
+		Changing its coords from (0.371104,0.447814,0.288879) to (0.358514,0.409654,0.303697):
+		Updating particleInCell 3:
+		Changing its coords from (0.335278,0.497447,0.567817) to (0.334630,0.442742,0.489656):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.443429,0.459576,0.352428) to (0.406731,0.417495,0.346063):
+		Updating particleInCell 1:
+		Changing its coords from (0.417508,0.494512,0.232332) to (0.389450,0.440786,0.265999):
+		Updating particleInCell 2:
+		Changing its coords from (0.467946,0.441076,0.385846) to (0.423075,0.405162,0.368342):
+		Updating particleInCell 3:
+		Changing its coords from (0.487119,0.420676,0.328213) to (0.435857,0.391562,0.329920):
+		Updating particleInCell 4:
+		Changing its coords from (0.459047,0.466542,0.529448) to (0.417143,0.422139,0.464077):
+		Updating particleInCell 5:
+		Changing its coords from (0.477608,0.486931,0.241454) to (0.429516,0.435732,0.272080):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.187561,0.523496,0.414901) to (0.236152,0.460108,0.387712):
+		Updating particleInCell 1:
+		Changing its coords from (0.196768,0.558219,0.385937) to (0.242290,0.483257,0.368403):
+		Updating particleInCell 2:
+		Changing its coords from (0.244198,0.571078,0.581761) to (0.273910,0.491830,0.498952):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.290681,0.507715,0.325922) to (0.304898,0.449588,0.328392):
+		Updating particleInCell 1:
+		Changing its coords from (0.298596,0.509200,0.260790) to (0.310175,0.450578,0.284971):
+		Updating particleInCell 2:
+		Changing its coords from (0.255012,0.550416,0.507223) to (0.281119,0.478055,0.449260):
+		Updating particleInCell 3:
+		Changing its coords from (0.263683,0.538595,0.400083) to (0.286900,0.470174,0.377833):
+		Updating particleInCell 4:
+		Changing its coords from (0.315108,0.532772,0.598090) to (0.321183,0.466292,0.509838):
+		Updating particleInCell 5:
+		Changing its coords from (0.329649,0.555633,0.246496) to (0.330877,0.481533,0.275441):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.389099,0.518035,0.501378) to (0.370511,0.456468,0.445363):
+		Updating particleInCell 1:
+		Changing its coords from (0.344206,0.519358,0.625809) to (0.340582,0.457350,0.528317):
+		Updating particleInCell 2:
+		Changing its coords from (0.390126,0.519237,0.236495) to (0.371195,0.457269,0.268774):
+		Updating particleInCell 3:
+		Changing its coords from (0.351757,0.570081,0.422894) to (0.345616,0.491165,0.393040):
+		Updating particleInCell 4:
+		Changing its coords from (0.375549,0.563422,0.452669) to (0.361477,0.486726,0.412890):
+		Updating particleInCell 5:
+		Changing its coords from (0.409783,0.523496,0.414901) to (0.384300,0.460108,0.387712):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.418990,0.558219,0.385937) to (0.390438,0.483257,0.368403):
+		Updating particleInCell 1:
+		Changing its coords from (0.466420,0.571078,0.581761) to (0.422058,0.491830,0.498952):
+		Updating particleInCell 2:
+		Changing its coords from (0.477235,0.550416,0.507223) to (0.429268,0.478055,0.449260):
+		Updating particleInCell 3:
+		Changing its coords from (0.485905,0.538595,0.400083) to (0.435048,0.470174,0.377833):
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.188670,0.601572,0.426918) to (0.236891,0.512159,0.395723):
+		Updating particleInCell 1:
+		Changing its coords from (0.233029,0.627158,0.323803) to (0.266464,0.529216,0.326980):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.289989,0.584915,0.221252) to (0.304437,0.501055,0.258613):
+		Updating particleInCell 1:
+		Changing its coords from (0.294637,0.592884,0.217147) to (0.307536,0.506367,0.255876):
+		Updating particleInCell 2:
+		Changing its coords from (0.320917,0.609132,0.301981) to (0.325056,0.517199,0.312432):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.360179,0.605637,0.415692) to (0.351231,0.514869,0.388239):
+		Updating particleInCell 1:
+		Changing its coords from (0.399138,0.616100,0.402139) to (0.377203,0.521845,0.379204):
+		Updating particleInCell 2:
+		Changing its coords from (0.410892,0.601572,0.426918) to (0.385039,0.512159,0.395723):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.455251,0.627158,0.323803) to (0.414612,0.529216,0.326980):
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.301717,0.238510,0.361476) to (0.312256,0.270118,0.352095):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.378638,0.236825,0.280062) to (0.363536,0.268994,0.297819):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.449865,0.238510,0.361476) to (0.411021,0.270118,0.352095):
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.249200,0.312319,0.297122) to (0.277245,0.319324,0.309193):
+		Updating particleInCell 1:
+		Changing its coords from (0.242158,0.298339,0.437408) to (0.272550,0.310004,0.402716):
+		Updating particleInCell 2:
+		Changing its coords from (0.249771,0.276292,0.449599) to (0.277625,0.295306,0.410844):
+		Updating particleInCell 3:
+		Changing its coords from (0.240558,0.251140,0.282321) to (0.271483,0.278538,0.299325):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.332122,0.326897,0.455238) to (0.332526,0.329042,0.414603):
+		Updating particleInCell 1:
+		Changing its coords from (0.279321,0.294286,0.356794) to (0.297325,0.307302,0.348973):
+		Updating particleInCell 2:
+		Changing its coords from (0.286004,0.302167,0.444453) to (0.301780,0.312556,0.407413):
+		Updating particleInCell 3:
+		Changing its coords from (0.319981,0.287216,0.475685) to (0.324432,0.302589,0.428235):
+		Updating particleInCell 4:
+		Changing its coords from (0.287064,0.322145,0.350885) to (0.302487,0.325875,0.345035):
+		Updating particleInCell 5:
+		Changing its coords from (0.276738,0.252632,0.260619) to (0.295603,0.279533,0.284857):
+		Updating particleInCell 6:
+		Changing its coords from (0.326035,0.255559,0.378260) to (0.328467,0.281484,0.363285):
+		Updating particleInCell 7:
+		Changing its coords from (0.267706,0.265158,0.506317) to (0.289581,0.287883,0.448656):
+		Updating particleInCell 8:
+		Changing its coords from (0.298971,0.263611,0.373562) to (0.310425,0.286852,0.360153):
+		Updating particleInCell 9:
+		Changing its coords from (0.315285,0.261553,0.337812) to (0.321301,0.285480,0.336319):
+		Updating particleInCell 10:
+		Changing its coords from (0.267081,0.309461,0.433641) to (0.289165,0.317419,0.400205):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.338038,0.318634,0.387486) to (0.336470,0.323534,0.369435):
+		Updating particleInCell 1:
+		Changing its coords from (0.359249,0.317005,0.495854) to (0.350610,0.322448,0.441680):
+		Updating particleInCell 2:
+		Changing its coords from (0.363310,0.280918,0.382166) to (0.353318,0.298390,0.365889):
+		Updating particleInCell 3:
+		Changing its coords from (0.334425,0.289104,0.253446) to (0.334061,0.303847,0.280075):
+		Updating particleInCell 4:
+		Changing its coords from (0.379195,0.291033,0.468625) to (0.363908,0.305133,0.423528):
+		Updating particleInCell 5:
+		Changing its coords from (0.351757,0.250658,0.264394) to (0.345616,0.278216,0.287374):
+		Updating particleInCell 6:
+		Changing its coords from (0.343310,0.266123,0.342974) to (0.339985,0.288527,0.339761):
+		Updating particleInCell 7:
+		Changing its coords from (0.388707,0.251140,0.282321) to (0.370249,0.278538,0.299325):
+		Updating particleInCell 8:
+		Changing its coords from (0.397919,0.276292,0.449599) to (0.376391,0.295306,0.410844):
+		Updating particleInCell 9:
+		Changing its coords from (0.390306,0.298339,0.437408) to (0.371315,0.310004,0.402716):
+		Updating particleInCell 10:
+		Changing its coords from (0.397349,0.312319,0.297122) to (0.376010,0.319324,0.309193):
+		Updating particleInCell 11:
+		Changing its coords from (0.415854,0.265158,0.506317) to (0.388347,0.287883,0.448656):
+		Updating particleInCell 12:
+		Changing its coords from (0.415229,0.309461,0.433641) to (0.387930,0.317419,0.400205):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.435213,0.322145,0.350885) to (0.401253,0.325875,0.345035):
+		Updating particleInCell 1:
+		Changing its coords from (0.424887,0.252632,0.260619) to (0.394369,0.279533,0.284857):
+		Updating particleInCell 2:
+		Changing its coords from (0.427469,0.294286,0.356794) to (0.396090,0.307302,0.348973):
+		Updating particleInCell 3:
+		Changing its coords from (0.434152,0.302167,0.444453) to (0.400546,0.312556,0.407413):
+		Updating particleInCell 4:
+		Changing its coords from (0.474183,0.255559,0.378260) to (0.427233,0.281484,0.363285):
+		Updating particleInCell 5:
+		Changing its coords from (0.499905,0.250658,0.264394) to (0.444381,0.278216,0.287374):
+		Updating particleInCell 6:
+		Changing its coords from (0.447119,0.263611,0.373562) to (0.409191,0.286852,0.360153):
+		Updating particleInCell 7:
+		Changing its coords from (0.463434,0.261553,0.337812) to (0.420067,0.285480,0.336319):
+		Updating particleInCell 8:
+		Changing its coords from (0.491459,0.266123,0.342974) to (0.438750,0.288527,0.339761):
+		Updating particleInCell 9:
+		Changing its coords from (0.468129,0.287216,0.475685) to (0.423197,0.302589,0.428235):
+		Updating particleInCell 10:
+		Changing its coords from (0.482573,0.289104,0.253446) to (0.432827,0.303847,0.280075):
+		Updating particleInCell 11:
+		Changing its coords from (0.480271,0.326897,0.455238) to (0.431291,0.329042,0.414603):
+		Updating particleInCell 12:
+		Changing its coords from (0.486186,0.318634,0.387486) to (0.435235,0.323534,0.369435):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.236811,0.349206,0.289559) to (0.268985,0.343915,0.304150):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.317359,0.345949,0.400188) to (0.322684,0.341744,0.377903):
+		Updating particleInCell 1:
+		Changing its coords from (0.306038,0.368074,0.347921) to (0.315136,0.356494,0.343059):
+		Updating particleInCell 2:
+		Changing its coords from (0.288622,0.350320,0.346908) to (0.303526,0.344658,0.342383):
+		Updating particleInCell 3:
+		Changing its coords from (0.328567,0.379862,0.422060) to (0.330156,0.364353,0.392484):
+		Updating particleInCell 4:
+		Changing its coords from (0.266158,0.336370,0.432848) to (0.288550,0.335357,0.399677):
+		Updating particleInCell 5:
+		Changing its coords from (0.257808,0.378147,0.457212) to (0.282983,0.363209,0.415919):
+		Updating particleInCell 6:
+		Changing its coords from (0.264179,0.371765,0.453646) to (0.287230,0.358954,0.413542):
+		Updating particleInCell 7:
+		Changing its coords from (0.254029,0.387110,0.452866) to (0.280464,0.369184,0.413021):
+		Updating particleInCell 8:
+		Changing its coords from (0.274927,0.405162,0.368342) to (0.294396,0.381219,0.356672):
+		Updating particleInCell 9:
+		Changing its coords from (0.287709,0.391562,0.329920) to (0.302917,0.372152,0.331058):
+		Updating particleInCell 10:
+		Changing its coords from (0.326052,0.396610,0.302796) to (0.328479,0.375518,0.312975):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.347288,0.344625,0.508916) to (0.342636,0.340861,0.450388):
+		Updating particleInCell 1:
+		Changing its coords from (0.358126,0.353206,0.459041) to (0.349862,0.346582,0.417139):
+		Updating particleInCell 2:
+		Changing its coords from (0.338430,0.360652,0.257626) to (0.336731,0.351545,0.282862):
+		Updating particleInCell 3:
+		Changing its coords from (0.380714,0.372089,0.407067) to (0.364921,0.359171,0.382489):
+		Updating particleInCell 4:
+		Changing its coords from (0.336679,0.383899,0.346285) to (0.335563,0.367044,0.341968):
+		Updating particleInCell 5:
+		Changing its coords from (0.384959,0.349206,0.289559) to (0.367750,0.343915,0.304150):
+		Updating particleInCell 6:
+		Changing its coords from (0.382375,0.399130,0.372852) to (0.366028,0.377198,0.359679):
+		Updating particleInCell 7:
+		Changing its coords from (0.348683,0.414664,0.463238) to (0.343566,0.387554,0.419937):
+		Updating particleInCell 8:
+		Changing its coords from (0.358514,0.409654,0.303697) to (0.350120,0.384214,0.313576):
+		Updating particleInCell 9:
+		Changing its coords from (0.405956,0.378147,0.457212) to (0.381748,0.363209,0.415919):
+		Updating particleInCell 10:
+		Changing its coords from (0.402178,0.387110,0.452866) to (0.379230,0.369184,0.413021):
+		Updating particleInCell 11:
+		Changing its coords from (0.414307,0.336370,0.432848) to (0.387315,0.335357,0.399677):
+		Updating particleInCell 12:
+		Changing its coords from (0.412327,0.371765,0.453646) to (0.385996,0.358954,0.413542):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.436770,0.350320,0.346908) to (0.402291,0.344658,0.342383):
+		Updating particleInCell 1:
+		Changing its coords from (0.423075,0.405162,0.368342) to (0.393161,0.381219,0.356672):
+		Updating particleInCell 2:
+		Changing its coords from (0.435857,0.391562,0.329920) to (0.401683,0.372152,0.331058):
+		Updating particleInCell 3:
+		Changing its coords from (0.465507,0.345949,0.400188) to (0.421449,0.341744,0.377903):
+		Updating particleInCell 4:
+		Changing its coords from (0.495436,0.344625,0.508916) to (0.441402,0.340861,0.450388):
+		Updating particleInCell 5:
+		Changing its coords from (0.496831,0.414664,0.463238) to (0.442332,0.387554,0.419937):
+		Updating particleInCell 6:
+		Changing its coords from (0.454186,0.368074,0.347921) to (0.413902,0.356494,0.343059):
+		Updating particleInCell 7:
+		Changing its coords from (0.476716,0.379862,0.422060) to (0.428921,0.364353,0.392484):
+		Updating particleInCell 8:
+		Changing its coords from (0.486578,0.360652,0.257626) to (0.435496,0.351545,0.282862):
+		Updating particleInCell 9:
+		Changing its coords from (0.474200,0.396610,0.302796) to (0.427244,0.375518,0.312975):
+		Updating particleInCell 10:
+		Changing its coords from (0.484827,0.383899,0.346285) to (0.434329,0.367044,0.341968):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.241301,0.440786,0.265999) to (0.271979,0.404968,0.288444):
+		Updating particleInCell 1:
+		Changing its coords from (0.236152,0.460108,0.387712) to (0.268546,0.417850,0.369586):
+		Updating particleInCell 2:
+		Changing its coords from (0.242290,0.483257,0.368403) to (0.272638,0.433282,0.356713):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.332887,0.417324,0.244099) to (0.333036,0.389327,0.273844):
+		Updating particleInCell 1:
+		Changing its coords from (0.281368,0.435732,0.272080) to (0.298690,0.401599,0.292498):
+		Updating particleInCell 2:
+		Changing its coords from (0.297896,0.419035,0.355664) to (0.309709,0.390467,0.348220):
+		Updating particleInCell 3:
+		Changing its coords from (0.258583,0.417495,0.346063) to (0.283500,0.389441,0.341820):
+		Updating particleInCell 4:
+		Changing its coords from (0.268994,0.422139,0.464077) to (0.290441,0.392537,0.420496):
+		Updating particleInCell 5:
+		Changing its coords from (0.304898,0.449588,0.328392) to (0.314377,0.410836,0.330039):
+		Updating particleInCell 6:
+		Changing its coords from (0.310175,0.450578,0.284971) to (0.317895,0.411496,0.301092):
+		Updating particleInCell 7:
+		Changing its coords from (0.281119,0.478055,0.449260) to (0.298524,0.429815,0.410618):
+		Updating particleInCell 8:
+		Changing its coords from (0.286900,0.470174,0.377833) to (0.302378,0.424561,0.363000):
+		Updating particleInCell 9:
+		Changing its coords from (0.321183,0.466292,0.509838) to (0.325233,0.421973,0.451003):
+		Updating particleInCell 10:
+		Changing its coords from (0.273910,0.491830,0.498952) to (0.293718,0.438998,0.443746):
+		Updating particleInCell 11:
+		Changing its coords from (0.330877,0.481533,0.275441) to (0.331696,0.432133,0.294739):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.334630,0.442742,0.489656) to (0.334198,0.406273,0.437548):
+		Updating particleInCell 1:
+		Changing its coords from (0.370511,0.456468,0.445363) to (0.358118,0.415423,0.408020):
+		Updating particleInCell 2:
+		Changing its coords from (0.340582,0.457350,0.528317) to (0.338166,0.416011,0.463323):
+		Updating particleInCell 3:
+		Changing its coords from (0.371195,0.457269,0.268774) to (0.358575,0.415957,0.290294):
+		Updating particleInCell 4:
+		Changing its coords from (0.345616,0.491165,0.393040) to (0.341522,0.438555,0.373138):
+		Updating particleInCell 5:
+		Changing its coords from (0.361477,0.486726,0.412890) to (0.352096,0.435595,0.386371):
+		Updating particleInCell 6:
+		Changing its coords from (0.406731,0.417495,0.346063) to (0.382265,0.389441,0.341820):
+		Updating particleInCell 7:
+		Changing its coords from (0.389450,0.440786,0.265999) to (0.370744,0.404968,0.288444):
+		Updating particleInCell 8:
+		Changing its coords from (0.384300,0.460108,0.387712) to (0.367311,0.417850,0.369586):
+		Updating particleInCell 9:
+		Changing its coords from (0.390438,0.483257,0.368403) to (0.371403,0.433282,0.356713):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.429516,0.435732,0.272080) to (0.397455,0.401599,0.292498):
+		Updating particleInCell 1:
+		Changing its coords from (0.417143,0.422139,0.464077) to (0.389206,0.392537,0.420496):
+		Updating particleInCell 2:
+		Changing its coords from (0.422058,0.491830,0.498952) to (0.392483,0.438998,0.443746):
+		Updating particleInCell 3:
+		Changing its coords from (0.429268,0.478055,0.449260) to (0.397290,0.429815,0.410618):
+		Updating particleInCell 4:
+		Changing its coords from (0.435048,0.470174,0.377833) to (0.401143,0.424561,0.363000):
+		Updating particleInCell 5:
+		Changing its coords from (0.488730,0.457350,0.528317) to (0.436931,0.416011,0.463323):
+		Updating particleInCell 6:
+		Changing its coords from (0.469331,0.466292,0.509838) to (0.423998,0.421973,0.451003):
+		Updating particleInCell 7:
+		Changing its coords from (0.482778,0.442742,0.489656) to (0.432963,0.406273,0.437548):
+		Updating particleInCell 8:
+		Changing its coords from (0.458324,0.450578,0.284971) to (0.416660,0.411496,0.301092):
+		Updating particleInCell 9:
+		Changing its coords from (0.453046,0.449588,0.328392) to (0.413142,0.410836,0.330039):
+		Updating particleInCell 10:
+		Changing its coords from (0.493764,0.491165,0.393040) to (0.440287,0.438555,0.373138):
+		Updating particleInCell 11:
+		Changing its coords from (0.481035,0.417324,0.244099) to (0.431801,0.389327,0.273844):
+		Updating particleInCell 12:
+		Changing its coords from (0.446044,0.419035,0.355664) to (0.408474,0.390467,0.348220):
+		Updating particleInCell 13:
+		Changing its coords from (0.479025,0.481533,0.275441) to (0.430461,0.432133,0.294739):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.236891,0.512159,0.395723) to (0.269038,0.452550,0.374926):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.304437,0.501055,0.258613) to (0.314069,0.445147,0.283519):
+		Updating particleInCell 1:
+		Changing its coords from (0.266464,0.529216,0.326980) to (0.288754,0.463922,0.329098):
+		Updating particleInCell 2:
+		Changing its coords from (0.307536,0.506367,0.255876) to (0.316135,0.448689,0.281695):
+		Updating particleInCell 3:
+		Changing its coords from (0.325056,0.517199,0.312432) to (0.327815,0.455910,0.319399):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.377203,0.521845,0.379204) to (0.362580,0.459007,0.363914):
+		Updating particleInCell 1:
+		Changing its coords from (0.351231,0.514869,0.388239) to (0.345265,0.454357,0.369937):
+		Updating particleInCell 2:
+		Changing its coords from (0.385039,0.512159,0.395723) to (0.367804,0.452550,0.374926):
+		Updating particleInCell 3:
+		Changing its coords from (0.414612,0.529216,0.326980) to (0.387519,0.463922,0.329098):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.499379,0.514869,0.388239) to (0.444030,0.454357,0.369937):
+		Updating particleInCell 1:
+		Changing its coords from (0.473204,0.517199,0.312432) to (0.426580,0.455910,0.319399):
+		Updating particleInCell 2:
+		Changing its coords from (0.455684,0.506367,0.255876) to (0.414900,0.448689,0.281695):
+		Updating particleInCell 3:
+		Changing its coords from (0.452585,0.501055,0.258613) to (0.412835,0.445147,0.283519):
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.332526,0.329042,0.414603) to (0.332795,0.330473,0.387513):
+		Updating particleInCell 1:
+		Changing its coords from (0.297325,0.307302,0.348973) to (0.309328,0.315979,0.343760):
+		Updating particleInCell 2:
+		Changing its coords from (0.301780,0.312556,0.407413) to (0.312298,0.319482,0.382720):
+		Updating particleInCell 3:
+		Changing its coords from (0.324432,0.302589,0.428235) to (0.327399,0.312837,0.396601):
+		Updating particleInCell 4:
+		Changing its coords from (0.302487,0.325875,0.345035) to (0.312769,0.328361,0.341134):
+		Updating particleInCell 5:
+		Changing its coords from (0.295603,0.279533,0.284857) to (0.308180,0.297466,0.301016):
+		Updating particleInCell 6:
+		Changing its coords from (0.328467,0.281484,0.363285) to (0.330089,0.298767,0.353301):
+		Updating particleInCell 7:
+		Changing its coords from (0.289581,0.287883,0.448656) to (0.304165,0.303033,0.410215):
+		Updating particleInCell 8:
+		Changing its coords from (0.310425,0.286852,0.360153) to (0.318061,0.302346,0.351213):
+		Updating particleInCell 9:
+		Changing its coords from (0.321301,0.285480,0.336319) to (0.325312,0.301431,0.335324):
+		Updating particleInCell 10:
+		Changing its coords from (0.289165,0.317419,0.400205) to (0.303888,0.322724,0.377914):
+		Updating particleInCell 11:
+		Changing its coords from (0.271483,0.278538,0.299325) to (0.292100,0.296803,0.310661):
+		Updating particleInCell 12:
+		Changing its coords from (0.312256,0.270118,0.352095) to (0.319282,0.291190,0.345841):
+		Updating particleInCell 13:
+		Changing its coords from (0.277625,0.295306,0.410844) to (0.296195,0.307982,0.385007):
+		Updating particleInCell 14:
+		Changing its coords from (0.272550,0.310004,0.402716) to (0.292811,0.317780,0.379589):
+		Updating particleInCell 15:
+		Changing its coords from (0.277245,0.319324,0.309193) to (0.295941,0.323994,0.317240):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.336470,0.323534,0.369435) to (0.335424,0.326800,0.357401):
+		Updating particleInCell 1:
+		Changing its coords from (0.350610,0.322448,0.441680) to (0.344851,0.326076,0.405565):
+		Updating particleInCell 2:
+		Changing its coords from (0.353318,0.298390,0.365889) to (0.346656,0.310037,0.355037):
+		Updating particleInCell 3:
+		Changing its coords from (0.334061,0.303847,0.280075) to (0.333819,0.313676,0.297828):
+		Updating particleInCell 4:
+		Changing its coords from (0.363908,0.305133,0.423528) to (0.353716,0.314533,0.393463):
+		Updating particleInCell 5:
+		Changing its coords from (0.345616,0.278216,0.287374) to (0.341522,0.296589,0.302694):
+		Updating particleInCell 6:
+		Changing its coords from (0.339985,0.288527,0.339761) to (0.337768,0.303462,0.337618):
+		Updating particleInCell 7:
+		Changing its coords from (0.370249,0.278538,0.299325) to (0.357944,0.296803,0.310661):
+		Updating particleInCell 8:
+		Changing its coords from (0.376391,0.295306,0.410844) to (0.362038,0.307982,0.385007):
+		Updating particleInCell 9:
+		Changing its coords from (0.371315,0.310004,0.402716) to (0.358655,0.317780,0.379589):
+		Updating particleInCell 10:
+		Changing its coords from (0.376010,0.319324,0.309193) to (0.361785,0.323994,0.317240):
+		Updating particleInCell 11:
+		Changing its coords from (0.388347,0.287883,0.448656) to (0.370009,0.303033,0.410215):
+		Updating particleInCell 12:
+		Changing its coords from (0.387930,0.317419,0.400205) to (0.369731,0.322724,0.377914):
+		Updating particleInCell 13:
+		Changing its coords from (0.363536,0.268994,0.297819) to (0.353469,0.290441,0.309657):
+		Updating particleInCell 14:
+		Changing its coords from (0.394369,0.279533,0.284857) to (0.374024,0.297466,0.301016):
+		Updating particleInCell 15:
+		Changing its coords from (0.396090,0.307302,0.348973) to (0.375171,0.315979,0.343760):
+		Updating particleInCell 16:
+		Changing its coords from (0.400546,0.312556,0.407413) to (0.378142,0.319482,0.382720):
+		Updating particleInCell 17:
+		Changing its coords from (0.401253,0.325875,0.345035) to (0.378613,0.328361,0.341134):
+		Updating particleInCell 18:
+		Changing its coords from (0.411021,0.270118,0.352095) to (0.385125,0.291190,0.345841):
+		Updating particleInCell 19:
+		Changing its coords from (0.409191,0.286852,0.360153) to (0.383905,0.302346,0.351213):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.423197,0.302589,0.428235) to (0.393242,0.312837,0.396601):
+		Updating particleInCell 1:
+		Changing its coords from (0.435235,0.323534,0.369435) to (0.401268,0.326800,0.357401):
+		Updating particleInCell 2:
+		Changing its coords from (0.431291,0.329042,0.414603) to (0.398639,0.330473,0.387513):
+		Updating particleInCell 3:
+		Changing its coords from (0.432827,0.303847,0.280075) to (0.399662,0.313676,0.297828):
+		Updating particleInCell 4:
+		Changing its coords from (0.427233,0.281484,0.363285) to (0.395933,0.298767,0.353301):
+		Updating particleInCell 5:
+		Changing its coords from (0.444381,0.278216,0.287374) to (0.407365,0.296589,0.302694):
+		Updating particleInCell 6:
+		Changing its coords from (0.438750,0.288527,0.339761) to (0.403611,0.303462,0.337618):
+		Updating particleInCell 7:
+		Changing its coords from (0.420067,0.285480,0.336319) to (0.391156,0.301431,0.335324):
+		Updating particleInCell 8:
+		Changing its coords from (0.462302,0.268994,0.297819) to (0.419312,0.290441,0.309657):
+		Updating particleInCell 9:
+		Changing its coords from (0.449376,0.322448,0.441680) to (0.410695,0.326076,0.405565):
+		Updating particleInCell 10:
+		Changing its coords from (0.462673,0.305133,0.423528) to (0.419560,0.314533,0.393463):
+		Updating particleInCell 11:
+		Changing its coords from (0.452083,0.298390,0.365889) to (0.412500,0.310037,0.355037):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.322684,0.341744,0.377903) to (0.326234,0.338940,0.363046):
+		Updating particleInCell 1:
+		Changing its coords from (0.315136,0.356494,0.343059) to (0.321202,0.348774,0.339817):
+		Updating particleInCell 2:
+		Changing its coords from (0.303526,0.344658,0.342383) to (0.313462,0.340883,0.339367):
+		Updating particleInCell 3:
+		Changing its coords from (0.330156,0.364353,0.392484) to (0.331215,0.354013,0.372767):
+		Updating particleInCell 4:
+		Changing its coords from (0.288550,0.335357,0.399677) to (0.303478,0.334683,0.377562):
+		Updating particleInCell 5:
+		Changing its coords from (0.282983,0.363209,0.415919) to (0.299766,0.353250,0.388391):
+		Updating particleInCell 6:
+		Changing its coords from (0.287230,0.358954,0.413542) to (0.302598,0.350414,0.386806):
+		Updating particleInCell 7:
+		Changing its coords from (0.280464,0.369184,0.413021) to (0.298087,0.357234,0.386459):
+		Updating particleInCell 8:
+		Changing its coords from (0.294396,0.381219,0.356672) to (0.307375,0.365257,0.348893):
+		Updating particleInCell 9:
+		Changing its coords from (0.302917,0.372152,0.331058) to (0.313056,0.359213,0.331816):
+		Updating particleInCell 10:
+		Changing its coords from (0.328479,0.375518,0.312975) to (0.330097,0.361456,0.319761):
+		Updating particleInCell 11:
+		Changing its coords from (0.268985,0.343915,0.304150) to (0.290434,0.340388,0.313878):
+		Updating particleInCell 12:
+		Changing its coords from (0.283500,0.389441,0.341820) to (0.300111,0.370738,0.338991):
+		Updating particleInCell 13:
+		Changing its coords from (0.290441,0.392537,0.420496) to (0.304738,0.372803,0.391441):
+		Updating particleInCell 14:
+		Changing its coords from (0.309709,0.390467,0.348220) to (0.317583,0.371423,0.343258):
+		Updating particleInCell 15:
+		Changing its coords from (0.333036,0.389327,0.273844) to (0.333135,0.370662,0.293673):
+		Updating particleInCell 16:
+		Changing its coords from (0.271979,0.404968,0.288444) to (0.292430,0.381090,0.303407):
+		Updating particleInCell 17:
+		Changing its coords from (0.298690,0.401599,0.292498) to (0.310238,0.378844,0.306110):
+		Updating particleInCell 18:
+		Changing its coords from (0.314377,0.410836,0.330039) to (0.320696,0.385002,0.331137):
+		Updating particleInCell 19:
+		Changing its coords from (0.317895,0.411496,0.301092) to (0.323041,0.385442,0.311839):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.342636,0.340861,0.450388) to (0.339535,0.338352,0.411370):
+		Updating particleInCell 1:
+		Changing its coords from (0.349862,0.346582,0.417139) to (0.344352,0.342165,0.389204):
+		Updating particleInCell 2:
+		Changing its coords from (0.336731,0.351545,0.282862) to (0.335598,0.345475,0.299685):
+		Updating particleInCell 3:
+		Changing its coords from (0.364921,0.359171,0.382489) to (0.354392,0.350558,0.366104):
+		Updating particleInCell 4:
+		Changing its coords from (0.335563,0.367044,0.341968) to (0.334820,0.355807,0.339090):
+		Updating particleInCell 5:
+		Changing its coords from (0.367750,0.343915,0.304150) to (0.356278,0.340388,0.313878):
+		Updating particleInCell 6:
+		Changing its coords from (0.366028,0.377198,0.359679) to (0.355130,0.362576,0.350897):
+		Updating particleInCell 7:
+		Changing its coords from (0.343566,0.387554,0.419937) to (0.340155,0.369481,0.391069):
+		Updating particleInCell 8:
+		Changing its coords from (0.350120,0.384214,0.313576) to (0.344525,0.367254,0.320162):
+		Updating particleInCell 9:
+		Changing its coords from (0.381748,0.363209,0.415919) to (0.365610,0.353250,0.388391):
+		Updating particleInCell 10:
+		Changing its coords from (0.379230,0.369184,0.413021) to (0.363931,0.357234,0.386459):
+		Updating particleInCell 11:
+		Changing its coords from (0.387315,0.335357,0.399677) to (0.369321,0.334683,0.377562):
+		Updating particleInCell 12:
+		Changing its coords from (0.385996,0.358954,0.413542) to (0.368442,0.350414,0.386806):
+		Updating particleInCell 13:
+		Changing its coords from (0.334198,0.406273,0.437548) to (0.333910,0.381960,0.402810):
+		Updating particleInCell 14:
+		Changing its coords from (0.358118,0.415423,0.408020) to (0.349857,0.388060,0.383124):
+		Updating particleInCell 15:
+		Changing its coords from (0.338166,0.416011,0.463323) to (0.336555,0.388452,0.419993):
+		Updating particleInCell 16:
+		Changing its coords from (0.358575,0.415957,0.290294) to (0.350161,0.388416,0.304640):
+		Updating particleInCell 17:
+		Changing its coords from (0.382265,0.389441,0.341820) to (0.365954,0.370738,0.338991):
+		Updating particleInCell 18:
+		Changing its coords from (0.370744,0.404968,0.288444) to (0.358274,0.381090,0.303407):
+		Updating particleInCell 19:
+		Changing its coords from (0.402291,0.344658,0.342383) to (0.379305,0.340883,0.339367):
+		Updating particleInCell 20:
+		Changing its coords from (0.393161,0.381219,0.356672) to (0.373219,0.365257,0.348893):
+		Updating particleInCell 21:
+		Changing its coords from (0.401683,0.372152,0.331058) to (0.378900,0.359213,0.331816):
+		Updating particleInCell 22:
+		Changing its coords from (0.389206,0.392537,0.420496) to (0.370582,0.372803,0.391441):
+		Updating particleInCell 23:
+		Changing its coords from (0.397455,0.401599,0.292498) to (0.376081,0.378844,0.306110):
+		Updating particleInCell 24:
+		Changing its coords from (0.413902,0.356494,0.343059) to (0.387046,0.348774,0.339817):
+		Updating particleInCell 25:
+		Changing its coords from (0.416660,0.411496,0.301092) to (0.388885,0.385442,0.311839):
+		Updating particleInCell 26:
+		Changing its coords from (0.413142,0.410836,0.330039) to (0.386539,0.385002,0.331137):
+		Updating particleInCell 27:
+		Changing its coords from (0.408474,0.390467,0.348220) to (0.383427,0.371423,0.343258):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.434329,0.367044,0.341968) to (0.400664,0.355807,0.339090):
+		Updating particleInCell 1:
+		Changing its coords from (0.427244,0.375518,0.312975) to (0.395941,0.361456,0.319761):
+		Updating particleInCell 2:
+		Changing its coords from (0.435496,0.351545,0.282862) to (0.401442,0.345475,0.299685):
+		Updating particleInCell 3:
+		Changing its coords from (0.421449,0.341744,0.377903) to (0.392077,0.338940,0.363046):
+		Updating particleInCell 4:
+		Changing its coords from (0.441402,0.340861,0.450388) to (0.405379,0.338352,0.411370):
+		Updating particleInCell 5:
+		Changing its coords from (0.442332,0.387554,0.419937) to (0.405999,0.369481,0.391069):
+		Updating particleInCell 6:
+		Changing its coords from (0.428921,0.364353,0.392484) to (0.397059,0.354013,0.372767):
+		Updating particleInCell 7:
+		Changing its coords from (0.436931,0.416011,0.463323) to (0.402399,0.388452,0.419993):
+		Updating particleInCell 8:
+		Changing its coords from (0.432963,0.406273,0.437548) to (0.399753,0.381960,0.402810):
+		Updating particleInCell 9:
+		Changing its coords from (0.431801,0.389327,0.273844) to (0.398979,0.370662,0.293673):
+		Updating particleInCell 10:
+		Changing its coords from (0.457340,0.415957,0.290294) to (0.416004,0.388416,0.304640):
+		Updating particleInCell 11:
+		Changing its coords from (0.464793,0.377198,0.359679) to (0.420973,0.362576,0.350897):
+		Updating particleInCell 12:
+		Changing its coords from (0.463686,0.359171,0.382489) to (0.420235,0.350558,0.366104):
+		Updating particleInCell 13:
+		Changing its coords from (0.448627,0.346582,0.417139) to (0.410196,0.342165,0.389204):
+		Updating particleInCell 14:
+		Changing its coords from (0.448886,0.384214,0.313576) to (0.410368,0.367254,0.320162):
+		Updating particleInCell 15:
+		Changing its coords from (0.456884,0.415423,0.408020) to (0.415700,0.388060,0.383124):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.302378,0.424561,0.363000) to (0.312696,0.394152,0.353111):
+		Updating particleInCell 1:
+		Changing its coords from (0.298524,0.429815,0.410618) to (0.310127,0.397654,0.384856):
+		Updating particleInCell 2:
+		Changing its coords from (0.325233,0.421973,0.451003) to (0.327933,0.392426,0.411780):
+		Updating particleInCell 3:
+		Changing its coords from (0.331696,0.432133,0.294739) to (0.332242,0.399200,0.307604):
+		Updating particleInCell 4:
+		Changing its coords from (0.293718,0.438998,0.443746) to (0.306923,0.403776,0.406942):
+		Updating particleInCell 5:
+		Changing its coords from (0.268546,0.417850,0.369586) to (0.290142,0.389678,0.357502):
+		Updating particleInCell 6:
+		Changing its coords from (0.272638,0.433282,0.356713) to (0.292869,0.399966,0.348920):
+		Updating particleInCell 7:
+		Changing its coords from (0.314069,0.445147,0.283519) to (0.320491,0.407876,0.300124):
+		Updating particleInCell 8:
+		Changing its coords from (0.269038,0.452550,0.374926) to (0.290470,0.412811,0.361062):
+		Updating particleInCell 9:
+		Changing its coords from (0.288754,0.463922,0.329098) to (0.303613,0.420392,0.330510):
+		Updating particleInCell 10:
+		Changing its coords from (0.316135,0.448689,0.281695) to (0.321868,0.410237,0.298908):
+		Updating particleInCell 11:
+		Changing its coords from (0.327815,0.455910,0.319399) to (0.329654,0.415051,0.324044):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.371403,0.433282,0.356713) to (0.358713,0.399966,0.348920):
+		Updating particleInCell 1:
+		Changing its coords from (0.367311,0.417850,0.369586) to (0.355985,0.389678,0.357502):
+		Updating particleInCell 2:
+		Changing its coords from (0.345265,0.454357,0.369937) to (0.341288,0.414016,0.357736):
+		Updating particleInCell 3:
+		Changing its coords from (0.362580,0.459007,0.363914) to (0.352831,0.417116,0.353720):
+		Updating particleInCell 4:
+		Changing its coords from (0.341522,0.438555,0.373138) to (0.338792,0.403481,0.359870):
+		Updating particleInCell 5:
+		Changing its coords from (0.352096,0.435595,0.386371) to (0.345842,0.401508,0.368692):
+		Updating particleInCell 6:
+		Changing its coords from (0.367804,0.452550,0.374926) to (0.356314,0.412811,0.361062):
+		Updating particleInCell 7:
+		Changing its coords from (0.392483,0.438998,0.443746) to (0.372767,0.403776,0.406942):
+		Updating particleInCell 8:
+		Changing its coords from (0.397290,0.429815,0.410618) to (0.375971,0.397654,0.384856):
+		Updating particleInCell 9:
+		Changing its coords from (0.401143,0.424561,0.363000) to (0.378540,0.394152,0.353111):
+		Updating particleInCell 10:
+		Changing its coords from (0.387519,0.463922,0.329098) to (0.369457,0.420392,0.330510):
+		Updating particleInCell 11:
+		Changing its coords from (0.414900,0.448689,0.281695) to (0.387711,0.410237,0.298908):
+		Updating particleInCell 12:
+		Changing its coords from (0.412835,0.445147,0.283519) to (0.386334,0.407876,0.300124):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.440287,0.438555,0.373138) to (0.404636,0.403481,0.359870):
+		Updating particleInCell 1:
+		Changing its coords from (0.430461,0.432133,0.294739) to (0.398085,0.399200,0.307604):
+		Updating particleInCell 2:
+		Changing its coords from (0.423998,0.421973,0.451003) to (0.393777,0.392426,0.411780):
+		Updating particleInCell 3:
+		Changing its coords from (0.444030,0.454357,0.369937) to (0.407131,0.414016,0.357736):
+		Updating particleInCell 4:
+		Changing its coords from (0.426580,0.455910,0.319399) to (0.395498,0.415051,0.324044):
+		Updating particleInCell 5:
+		Changing its coords from (0.461345,0.459007,0.363914) to (0.418675,0.417116,0.353720):
+		Updating particleInCell 6:
+		Changing its coords from (0.450861,0.435595,0.386371) to (0.411685,0.401508,0.368692):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,737 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.020218,0.055930,0.161165) to (0.124590,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.142325,0.060967,0.087923) to (0.205995,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.226628,0.013305,0.428316) to (0.262196,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.308700,0.070846,0.484961) to (0.316911,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.062180,0.137637,0.100663) to (0.152564,0.202869,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.152903,0.090950,0.153544) to (0.213046,0.171744,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.217978,0.140818,0.725730) to (0.256430,0.204990,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.278506,0.103240,0.917154) to (0.296782,0.179938,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.050694,0.181355,0.469106) to (0.144907,0.232015,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.105755,0.174408,0.348450) to (0.181614,0.227383,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.200340,0.189833,0.365872) to (0.244671,0.237667,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.267839,0.239764,0.498144) to (0.289671,0.270954,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.025617,0.298560,0.684585) to (0.128189,0.310151,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.151040,0.284883,0.412512) to (0.211805,0.301033,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.173597,0.311481,0.708363) to (0.226842,0.318765,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.288268,0.261021,0.813771) to (0.303290,0.285125,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.003685,0.350727,0.063715) to (0.113568,0.344929,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.154783,0.357236,0.789944) to (0.214300,0.349268,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.216052,0.345745,0.211121) to (0.255146,0.341608,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.276398,0.336098,0.671870) to (0.295376,0.335177,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.010509,0.462240,0.392572) to (0.118117,0.419271,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.162580,0.478277,0.744761) to (0.219498,0.429962,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.182545,0.450390,0.516097) to (0.232808,0.411371,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.254132,0.444893,0.881840) to (0.280532,0.407707,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.007569,0.553570,0.185594) to (0.116157,0.480158,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.106618,0.510247,0.669197) to (0.182190,0.451276,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.182432,0.557329,0.379149) to (0.232733,0.482664,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.279420,0.542579,0.558967) to (0.297391,0.472831,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.047096,0.621442,0.925924) to (0.142508,0.525406,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.083674,0.650402,0.757598) to (0.166894,0.544713,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.245100,0.651245,0.751425) to (0.274511,0.545275,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.266603,0.629707,0.739388) to (0.288846,0.530915,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.074544,0.700583,0.382567) to (0.160807,0.578166,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.150582,0.740369,0.632784) to (0.211499,0.604691,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.183867,0.675532,0.077820) to (0.233689,0.561466,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.326578,0.714135,0.582185) to (0.328830,0.587201,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.065683,0.764829,0.736755) to (0.154900,0.620997,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.136213,0.825754,0.451488) to (0.201920,0.661614,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.179352,0.779855,0.321813) to (0.230679,0.631015,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.308758,0.796891,0.230269) to (0.316950,0.642372,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.011290,0.837327,0.377044) to (0.118638,0.669329,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.165515,0.888729,0.466709) to (0.221454,0.703597,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.247716,0.867379,0.376295) to (0.276255,0.689363,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.282856,0.883054,0.774592) to (0.299682,0.699813,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.047066,0.955908,0.408698) to (0.142488,0.748383,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.165161,0.950135,0.032166) to (0.221219,0.744534,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.218472,0.941159,0.771763) to (0.256759,0.738551,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.251652,0.924249,0.233312) to (0.278879,0.727277,0.266652):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.124590,0.148398,0.218555) to (0.194171,0.210043,0.256814):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.205995,0.151756,0.169726) to (0.248441,0.212282,0.224262):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.316911,0.158342,0.434419) to (0.322385,0.216672,0.400724):
+		Updating particleInCell 1:
+		Changing its coords from (0.262196,0.119981,0.396655) to (0.285909,0.191099,0.375548):
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.144907,0.232015,0.423849) to (0.207716,0.265788,0.393677):
+		Updating particleInCell 1:
+		Changing its coords from (0.152564,0.202869,0.178219) to (0.212821,0.246357,0.229924):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.244671,0.237667,0.355026) to (0.274225,0.269556,0.347795):
+		Updating particleInCell 1:
+		Changing its coords from (0.213046,0.171744,0.213474) to (0.253142,0.225607,0.253427):
+		Updating particleInCell 2:
+		Changing its coords from (0.181614,0.227383,0.343411) to (0.232187,0.262700,0.340052):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.296782,0.179938,0.722547) to (0.308966,0.231070,0.592809):
+		Updating particleInCell 1:
+		Changing its coords from (0.256430,0.204990,0.594931) to (0.282064,0.247771,0.507732):
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.128189,0.310151,0.567501) to (0.196571,0.317878,0.489445):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.226842,0.318765,0.583353) to (0.262339,0.323621,0.500013):
+		Updating particleInCell 1:
+		Changing its coords from (0.211805,0.301033,0.386119) to (0.252314,0.311800,0.368524):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.303290,0.285125,0.653625) to (0.313304,0.301195,0.546861):
+		Updating particleInCell 1:
+		Changing its coords from (0.289671,0.270954,0.443207) to (0.304225,0.291747,0.406583):
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.113568,0.344929,0.153588) to (0.186823,0.341064,0.213503):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.214300,0.349268,0.637741) to (0.253978,0.343957,0.536272):
+		Updating particleInCell 1:
+		Changing its coords from (0.232808,0.411371,0.455176) to (0.266316,0.385359,0.414562):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.295376,0.335177,0.559025) to (0.308029,0.334562,0.483794):
+		Updating particleInCell 1:
+		Changing its coords from (0.255146,0.341608,0.251859) to (0.281208,0.338850,0.279017):
+		Updating particleInCell 2:
+		Changing its coords from (0.280532,0.407707,0.699005) to (0.298133,0.382916,0.577114):
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.118117,0.419271,0.372826) to (0.189856,0.390625,0.359661):
+		Updating particleInCell 1:
+		Changing its coords from (0.116157,0.480158,0.234840) to (0.188549,0.431216,0.267671):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.219498,0.429962,0.607618) to (0.257443,0.397753,0.516190):
+		Updating particleInCell 1:
+		Changing its coords from (0.182190,0.451276,0.557242) to (0.232571,0.411962,0.482606):
+		Updating particleInCell 2:
+		Changing its coords from (0.232733,0.482664,0.363877) to (0.266266,0.432887,0.353696):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.297391,0.472831,0.483756) to (0.309372,0.426332,0.433615):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.142508,0.525406,0.728394) to (0.206117,0.461382,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.160807,0.578166,0.366156) to (0.218316,0.496555,0.355215):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.166894,0.544713,0.616176) to (0.222374,0.474253,0.521895):
+		Updating particleInCell 1:
+		Changing its coords from (0.233689,0.561466,0.162991) to (0.266904,0.485422,0.219772):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.274511,0.545275,0.612061) to (0.294119,0.474628,0.519152):
+		Updating particleInCell 1:
+		Changing its coords from (0.288846,0.530915,0.604036) to (0.303675,0.465055,0.513802):
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.154900,0.620997,0.602281) to (0.214378,0.525109,0.512632):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.211499,0.604691,0.532967) to (0.252110,0.514238,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.201920,0.661614,0.412103) to (0.245724,0.552187,0.385846):
+		Updating particleInCell 2:
+		Changing its coords from (0.230679,0.631015,0.325653) to (0.264897,0.531788,0.328213):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.328830,0.587201,0.499235) to (0.330331,0.502578,0.443934):
+		Updating particleInCell 1:
+		Changing its coords from (0.316950,0.642372,0.264624) to (0.322411,0.539359,0.287527):
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.118638,0.669329,0.362474) to (0.190203,0.557330,0.352760):
+		Updating particleInCell 1:
+		Changing its coords from (0.142488,0.748383,0.383576) to (0.206103,0.610033,0.366829):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.221454,0.703597,0.422250) to (0.258747,0.580176,0.392611):
+		Updating particleInCell 1:
+		Changing its coords from (0.221219,0.744534,0.132555) to (0.258590,0.607467,0.199481):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.276255,0.689363,0.361975) to (0.295281,0.570687,0.352428):
+		Updating particleInCell 1:
+		Changing its coords from (0.299682,0.699813,0.627506) to (0.310899,0.577653,0.529448):
+		Updating particleInCell 2:
+		Changing its coords from (0.256759,0.738551,0.625620) to (0.282284,0.603478,0.528191):
+		Updating particleInCell 3:
+		Changing its coords from (0.278879,0.727277,0.266652) to (0.297030,0.595963,0.288879):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.194171,0.210043,0.256814) to (0.240558,0.251140,0.282321):
+		Updating particleInCell 1:
+		Changing its coords from (0.212821,0.246357,0.229924) to (0.252992,0.275349,0.264394):
+		Updating particleInCell 2:
+		Changing its coords from (0.248441,0.212282,0.224262) to (0.276738,0.252632,0.260619):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.308966,0.231070,0.592809) to (0.317088,0.265158,0.506317):
+		Updating particleInCell 1:
+		Changing its coords from (0.282064,0.247771,0.507732) to (0.299154,0.276292,0.449599):
+		Updating particleInCell 2:
+		Changing its coords from (0.285909,0.191099,0.375548) to (0.301717,0.238510,0.361476):
+		Updating particleInCell 3:
+		Changing its coords from (0.322385,0.216672,0.400724) to (0.326035,0.255559,0.378260):
+		Updating particleInCell 4:
+		Changing its coords from (0.253142,0.225607,0.253427) to (0.279872,0.261516,0.280062):
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.232187,0.262700,0.340052) to (0.265903,0.286244,0.337812):
+		Updating particleInCell 1:
+		Changing its coords from (0.196571,0.317878,0.489445) to (0.242158,0.323030,0.437408):
+		Updating particleInCell 2:
+		Changing its coords from (0.207716,0.265788,0.393677) to (0.249588,0.288303,0.373562):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.313304,0.301195,0.546861) to (0.319981,0.311908,0.475685):
+		Updating particleInCell 1:
+		Changing its coords from (0.304225,0.291747,0.406583) to (0.313928,0.305609,0.382166):
+		Updating particleInCell 2:
+		Changing its coords from (0.274225,0.269556,0.347795) to (0.293928,0.290815,0.342974):
+		Updating particleInCell 3:
+		Changing its coords from (0.252314,0.311800,0.368524) to (0.279321,0.318978,0.356794):
+		Updating particleInCell 4:
+		Changing its coords from (0.262339,0.323621,0.500013) to (0.286004,0.326859,0.444453):
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.186823,0.341064,0.213503) to (0.235660,0.338487,0.253446):
+		Updating particleInCell 1:
+		Changing its coords from (0.189856,0.390625,0.359661) to (0.237682,0.371528,0.350885):
+		Updating particleInCell 2:
+		Changing its coords from (0.232571,0.411962,0.482606) to (0.266158,0.385752,0.432848):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.308029,0.334562,0.483794) to (0.316464,0.334153,0.433641):
+		Updating particleInCell 1:
+		Changing its coords from (0.281208,0.338850,0.279017) to (0.298583,0.337011,0.297122):
+		Updating particleInCell 2:
+		Changing its coords from (0.298133,0.382916,0.577114) to (0.309866,0.366388,0.495854):
+		Updating particleInCell 3:
+		Changing its coords from (0.253978,0.343957,0.536272) to (0.280430,0.340416,0.468625):
+		Updating particleInCell 4:
+		Changing its coords from (0.257443,0.397753,0.516190) to (0.282740,0.376279,0.455238):
+		Updating particleInCell 5:
+		Changing its coords from (0.266316,0.385359,0.414562) to (0.288655,0.368017,0.387486):
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.188549,0.431216,0.267671) to (0.236811,0.398589,0.289559):
+		Updating particleInCell 1:
+		Changing its coords from (0.206117,0.461382,0.596707) to (0.248522,0.418699,0.508916):
+		Updating particleInCell 2:
+		Changing its coords from (0.222374,0.474253,0.521895) to (0.259360,0.427280,0.459041):
+		Updating particleInCell 3:
+		Changing its coords from (0.218316,0.496555,0.355215) to (0.256655,0.442148,0.347921):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.309372,0.426332,0.433615) to (0.317359,0.395332,0.400188):
+		Updating particleInCell 1:
+		Changing its coords from (0.266266,0.432887,0.353696) to (0.288622,0.399702,0.346908):
+		Updating particleInCell 2:
+		Changing its coords from (0.294119,0.474628,0.519152) to (0.307190,0.427529,0.457212):
+		Updating particleInCell 3:
+		Changing its coords from (0.303675,0.465055,0.513802) to (0.313561,0.421148,0.453646):
+		Updating particleInCell 4:
+		Changing its coords from (0.266904,0.485422,0.219772) to (0.289047,0.434726,0.257626):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.214378,0.525109,0.512632) to (0.254029,0.461184,0.452866):
+		Updating particleInCell 1:
+		Changing its coords from (0.245724,0.552187,0.385846) to (0.274927,0.479236,0.368342):
+		Updating particleInCell 2:
+		Changing its coords from (0.190203,0.557330,0.352760) to (0.237913,0.482665,0.346285):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.252110,0.514238,0.466423) to (0.279185,0.453937,0.422060):
+		Updating particleInCell 1:
+		Changing its coords from (0.330331,0.502578,0.443934) to (0.331332,0.446163,0.407067):
+		Updating particleInCell 2:
+		Changing its coords from (0.264897,0.531788,0.328213) to (0.287709,0.465636,0.329920):
+		Updating particleInCell 3:
+		Changing its coords from (0.322411,0.539359,0.287527) to (0.326052,0.470684,0.302796):
+		Updating particleInCell 4:
+		Changing its coords from (0.258747,0.580176,0.392611) to (0.283609,0.497895,0.372852):
+		Updating particleInCell 5:
+		Changing its coords from (0.295281,0.570687,0.352428) to (0.307965,0.491569,0.346063):
+		Updating particleInCell 6:
+		Changing its coords from (0.310899,0.577653,0.529448) to (0.318377,0.496213,0.464077):
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.206103,0.610033,0.366829) to (0.248513,0.517800,0.355664):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.258590,0.607467,0.199481) to (0.283505,0.516089,0.244099):
+		Updating particleInCell 1:
+		Changing its coords from (0.282284,0.603478,0.528191) to (0.299300,0.513430,0.463238):
+		Updating particleInCell 2:
+		Changing its coords from (0.297030,0.595963,0.288879) to (0.309131,0.508419,0.303697):
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.301717,0.238510,0.361476) to (0.312256,0.270118,0.352095):
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.240558,0.251140,0.282321) to (0.271483,0.278538,0.299325):
+		Updating particleInCell 1:
+		Changing its coords from (0.242158,0.323030,0.437408) to (0.272550,0.326464,0.402716):
+		Updating particleInCell 2:
+		Changing its coords from (0.249588,0.288303,0.373562) to (0.277503,0.303313,0.360153):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.319981,0.311908,0.475685) to (0.324432,0.319049,0.428235):
+		Updating particleInCell 1:
+		Changing its coords from (0.313928,0.305609,0.382166) to (0.320396,0.314850,0.365889):
+		Updating particleInCell 2:
+		Changing its coords from (0.293928,0.290815,0.342974) to (0.307063,0.304988,0.339761):
+		Updating particleInCell 3:
+		Changing its coords from (0.279321,0.318978,0.356794) to (0.297325,0.323763,0.348973):
+		Updating particleInCell 4:
+		Changing its coords from (0.286004,0.326859,0.444453) to (0.301780,0.329017,0.407413):
+		Updating particleInCell 5:
+		Changing its coords from (0.276738,0.252632,0.260619) to (0.295603,0.279533,0.284857):
+		Updating particleInCell 6:
+		Changing its coords from (0.326035,0.255559,0.378260) to (0.328467,0.281484,0.363285):
+		Updating particleInCell 7:
+		Changing its coords from (0.252992,0.275349,0.264394) to (0.279772,0.294677,0.287374):
+		Updating particleInCell 8:
+		Changing its coords from (0.279872,0.261516,0.280062) to (0.297693,0.285455,0.297819):
+		Updating particleInCell 9:
+		Changing its coords from (0.299154,0.276292,0.449599) to (0.310547,0.295306,0.410844):
+		Updating particleInCell 10:
+		Changing its coords from (0.317088,0.265158,0.506317) to (0.322503,0.287883,0.448656):
+		Updating particleInCell 11:
+		Changing its coords from (0.265903,0.286244,0.337812) to (0.288380,0.301941,0.336319):
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.235660,0.338487,0.253446) to (0.268218,0.336769,0.280075):
+		Updating particleInCell 1:
+		Changing its coords from (0.237682,0.371528,0.350885) to (0.269566,0.358796,0.345035):
+		Updating particleInCell 2:
+		Changing its coords from (0.236811,0.398589,0.289559) to (0.268985,0.376837,0.304150):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.316464,0.334153,0.433641) to (0.322087,0.333880,0.400205):
+		Updating particleInCell 1:
+		Changing its coords from (0.298583,0.337011,0.297122) to (0.310167,0.335785,0.309193):
+		Updating particleInCell 2:
+		Changing its coords from (0.309866,0.366388,0.495854) to (0.317689,0.355370,0.441680):
+		Updating particleInCell 3:
+		Changing its coords from (0.280430,0.340416,0.468625) to (0.298064,0.338055,0.423528):
+		Updating particleInCell 4:
+		Changing its coords from (0.282740,0.376279,0.455238) to (0.299604,0.361964,0.414603):
+		Updating particleInCell 5:
+		Changing its coords from (0.288655,0.368017,0.387486) to (0.303548,0.356456,0.369435):
+		Updating particleInCell 6:
+		Changing its coords from (0.266158,0.385752,0.432848) to (0.288550,0.368279,0.399677):
+		Updating particleInCell 7:
+		Changing its coords from (0.288622,0.399702,0.346908) to (0.303526,0.377579,0.342383):
+		Updating particleInCell 8:
+		Changing its coords from (0.317359,0.395332,0.400188) to (0.322684,0.374666,0.377903):
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.248522,0.418699,0.508916) to (0.276793,0.390244,0.450388):
+		Updating particleInCell 1:
+		Changing its coords from (0.237913,0.482665,0.346285) to (0.269720,0.432888,0.341968):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.313561,0.421148,0.453646) to (0.320152,0.391876,0.413542):
+		Updating particleInCell 1:
+		Changing its coords from (0.289047,0.434726,0.257626) to (0.303809,0.400928,0.282862):
+		Updating particleInCell 2:
+		Changing its coords from (0.307190,0.427529,0.457212) to (0.315905,0.396131,0.415919):
+		Updating particleInCell 3:
+		Changing its coords from (0.259360,0.427280,0.459041) to (0.284018,0.395964,0.417139):
+		Updating particleInCell 4:
+		Changing its coords from (0.256655,0.442148,0.347921) to (0.282215,0.405876,0.343059):
+		Updating particleInCell 5:
+		Changing its coords from (0.279185,0.453937,0.422060) to (0.297234,0.413735,0.392484):
+		Updating particleInCell 6:
+		Changing its coords from (0.331332,0.446163,0.407067) to (0.331999,0.408553,0.382489):
+		Updating particleInCell 7:
+		Changing its coords from (0.254029,0.461184,0.452866) to (0.280464,0.418567,0.413021):
+		Updating particleInCell 8:
+		Changing its coords from (0.274927,0.479236,0.368342) to (0.294396,0.430602,0.356672):
+		Updating particleInCell 9:
+		Changing its coords from (0.287709,0.465636,0.329920) to (0.302917,0.421535,0.331058):
+		Updating particleInCell 10:
+		Changing its coords from (0.326052,0.470684,0.302796) to (0.328479,0.424900,0.312975):
+		Updating particleInCell 11:
+		Changing its coords from (0.283609,0.497895,0.372852) to (0.300184,0.443041,0.359679):
+		Updating particleInCell 12:
+		Changing its coords from (0.307965,0.491569,0.346063) to (0.316421,0.438824,0.341820):
+		Updating particleInCell 13:
+		Changing its coords from (0.318377,0.496213,0.464077) to (0.323363,0.441920,0.420496):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.248513,0.517800,0.355664) to (0.276787,0.456311,0.348220):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.283505,0.516089,0.244099) to (0.300114,0.455171,0.273844):
+		Updating particleInCell 1:
+		Changing its coords from (0.299300,0.513430,0.463238) to (0.310645,0.453398,0.419937):
+		Updating particleInCell 2:
+		Changing its coords from (0.309131,0.508419,0.303697) to (0.317199,0.450057,0.313576):
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.324432,0.319049,0.428235) to (0.327399,0.323811,0.396601):
+		Updating particleInCell 1:
+		Changing its coords from (0.320396,0.314850,0.365889) to (0.324709,0.321011,0.355037):
+		Updating particleInCell 2:
+		Changing its coords from (0.307063,0.304988,0.339761) to (0.315820,0.314436,0.337618):
+		Updating particleInCell 3:
+		Changing its coords from (0.297325,0.323763,0.348973) to (0.309328,0.326953,0.343760):
+		Updating particleInCell 4:
+		Changing its coords from (0.301780,0.329017,0.407413) to (0.312298,0.330456,0.382720):
+		Updating particleInCell 5:
+		Changing its coords from (0.295603,0.279533,0.284857) to (0.308180,0.297466,0.301016):
+		Updating particleInCell 6:
+		Changing its coords from (0.328467,0.281484,0.363285) to (0.330089,0.298767,0.353301):
+		Updating particleInCell 7:
+		Changing its coords from (0.279772,0.294677,0.287374) to (0.297626,0.307563,0.302694):
+		Updating particleInCell 8:
+		Changing its coords from (0.297693,0.285455,0.297819) to (0.309573,0.301415,0.309657):
+		Updating particleInCell 9:
+		Changing its coords from (0.310547,0.295306,0.410844) to (0.318143,0.307982,0.385007):
+		Updating particleInCell 10:
+		Changing its coords from (0.322503,0.287883,0.448656) to (0.326113,0.303033,0.410215):
+		Updating particleInCell 11:
+		Changing its coords from (0.288380,0.301941,0.336319) to (0.303364,0.312405,0.335324):
+		Updating particleInCell 12:
+		Changing its coords from (0.271483,0.278538,0.299325) to (0.292100,0.296803,0.310661):
+		Updating particleInCell 13:
+		Changing its coords from (0.312256,0.270118,0.352095) to (0.319282,0.291190,0.345841):
+		Updating particleInCell 14:
+		Changing its coords from (0.277503,0.303313,0.360153) to (0.296113,0.313320,0.351213):
+		Updating particleInCell 15:
+		Changing its coords from (0.272550,0.326464,0.402716) to (0.292811,0.328754,0.379589):
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.322087,0.333880,0.400205) to (0.325836,0.333697,0.377914):
+		Updating particleInCell 1:
+		Changing its coords from (0.310167,0.335785,0.309193) to (0.317889,0.334968,0.317240):
+		Updating particleInCell 2:
+		Changing its coords from (0.317689,0.355370,0.441680) to (0.322904,0.348024,0.405565):
+		Updating particleInCell 3:
+		Changing its coords from (0.298064,0.338055,0.423528) to (0.309821,0.336481,0.393463):
+		Updating particleInCell 4:
+		Changing its coords from (0.299604,0.361964,0.414603) to (0.310847,0.352421,0.387513):
+		Updating particleInCell 5:
+		Changing its coords from (0.303548,0.356456,0.369435) to (0.313476,0.348748,0.357401):
+		Updating particleInCell 6:
+		Changing its coords from (0.288550,0.368279,0.399677) to (0.303478,0.356631,0.377562):
+		Updating particleInCell 7:
+		Changing its coords from (0.303526,0.377579,0.342383) to (0.313462,0.362831,0.339367):
+		Updating particleInCell 8:
+		Changing its coords from (0.322684,0.374666,0.377903) to (0.326234,0.360888,0.363046):
+		Updating particleInCell 9:
+		Changing its coords from (0.268218,0.336769,0.280075) to (0.289923,0.335624,0.297828):
+		Updating particleInCell 10:
+		Changing its coords from (0.269566,0.358796,0.345035) to (0.290822,0.350309,0.341134):
+		Updating particleInCell 11:
+		Changing its coords from (0.268985,0.376837,0.304150) to (0.290434,0.362336,0.313878):
+		Updating particleInCell 12:
+		Changing its coords from (0.276793,0.390244,0.450388) to (0.295639,0.371274,0.411370):
+		Updating particleInCell 13:
+		Changing its coords from (0.284018,0.395964,0.417139) to (0.300456,0.375087,0.389204):
+		Updating particleInCell 14:
+		Changing its coords from (0.315905,0.396131,0.415919) to (0.321714,0.375198,0.388391):
+		Updating particleInCell 15:
+		Changing its coords from (0.320152,0.391876,0.413542) to (0.324546,0.372362,0.386806):
+		Updating particleInCell 16:
+		Changing its coords from (0.282215,0.405876,0.343059) to (0.299254,0.381695,0.339817):
+		Updating particleInCell 17:
+		Changing its coords from (0.297234,0.413735,0.392484) to (0.309267,0.386935,0.372767):
+		Updating particleInCell 18:
+		Changing its coords from (0.303809,0.400928,0.282862) to (0.313651,0.378397,0.299685):
+		Updating particleInCell 19:
+		Changing its coords from (0.331999,0.408553,0.382489) to (0.332444,0.383480,0.366104):
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.300184,0.443041,0.359679) to (0.311234,0.406472,0.350897):
+		Updating particleInCell 1:
+		Changing its coords from (0.294396,0.430602,0.356672) to (0.307375,0.398179,0.348893):
+		Updating particleInCell 2:
+		Changing its coords from (0.316421,0.438824,0.341820) to (0.322059,0.403660,0.338991):
+		Updating particleInCell 3:
+		Changing its coords from (0.323363,0.441920,0.420496) to (0.326686,0.405724,0.391441):
+		Updating particleInCell 4:
+		Changing its coords from (0.328479,0.424900,0.312975) to (0.330097,0.394378,0.319761):
+		Updating particleInCell 5:
+		Changing its coords from (0.302917,0.421535,0.331058) to (0.313056,0.392135,0.331816):
+		Updating particleInCell 6:
+		Changing its coords from (0.280464,0.418567,0.413021) to (0.298087,0.390156,0.386459):
+		Updating particleInCell 7:
+		Changing its coords from (0.269720,0.432888,0.341968) to (0.290924,0.399703,0.339090):
+		Updating particleInCell 8:
+		Changing its coords from (0.276787,0.456311,0.348220) to (0.295636,0.415319,0.343258):
+		Updating particleInCell 9:
+		Changing its coords from (0.300114,0.455171,0.273844) to (0.311187,0.414558,0.293673):
+		Updating particleInCell 10:
+		Changing its coords from (0.310645,0.453398,0.419937) to (0.318208,0.413376,0.391069):
+		Updating particleInCell 11:
+		Changing its coords from (0.317199,0.450057,0.313576) to (0.322577,0.411149,0.320162):
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,751 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.520218,0.055930,0.161165) to (0.457923,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.642325,0.060967,0.087923) to (0.539328,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.726628,0.013305,0.428316) to (0.595530,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.808700,0.070846,0.484961) to (0.650244,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.895513,0.054303,0.100663) to (0.708120,0.147313,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.986236,0.007617,0.153544) to (0.768602,0.116189,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.551311,0.140818,0.725730) to (0.478652,0.204990,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.611840,0.103240,0.917154) to (0.519004,0.179938,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.717361,0.098022,0.469106) to (0.589352,0.176459,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.772422,0.091075,0.348450) to (0.626059,0.171828,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.867006,0.106500,0.365872) to (0.689115,0.182111,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.934506,0.156430,0.498144) to (0.734115,0.215398,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.525617,0.215226,0.684585) to (0.461523,0.254595,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.651040,0.201550,0.412512) to (0.545138,0.245478,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.673597,0.228148,0.708363) to (0.560176,0.263209,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.788268,0.177688,0.813771) to (0.636623,0.229570,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.837018,0.184061,0.063715) to (0.669123,0.233818,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.988116,0.190569,0.789944) to (0.769855,0.238157,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.549385,0.262412,0.211121) to (0.477368,0.286052,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.609731,0.252765,0.671870) to (0.517599,0.279621,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.677176,0.295573,0.392572) to (0.562562,0.308160,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.829246,0.311610,0.744761) to (0.663942,0.318851,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.849212,0.283724,0.516097) to (0.677252,0.300260,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.920799,0.278227,0.881840) to (0.724977,0.296596,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.507569,0.386903,0.185594) to (0.449491,0.369047,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.606618,0.343580,0.669197) to (0.515523,0.340165,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.682432,0.390663,0.379149) to (0.566066,0.371553,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.779420,0.375913,0.558967) to (0.630724,0.361720,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.880429,0.371442,0.925924) to (0.698064,0.358739,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.917008,0.400402,0.757598) to (0.722450,0.378046,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.578434,0.484579,0.751425) to (0.496734,0.434164,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.599936,0.463040,0.739388) to (0.511069,0.419804,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.741211,0.450583,0.382567) to (0.605252,0.411500,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.817248,0.490369,0.632784) to (0.655943,0.438024,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.850534,0.425532,0.077820) to (0.678134,0.394799,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.993245,0.464135,0.582185) to (0.773274,0.420534,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.565683,0.514829,0.736755) to (0.488233,0.454330,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.636213,0.575754,0.451488) to (0.535253,0.494947,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.679352,0.529855,0.321813) to (0.564012,0.464348,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.808758,0.546891,0.230269) to (0.650283,0.475705,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.844624,0.503993,0.377044) to (0.674193,0.447107,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.998848,0.555396,0.466709) to (0.777010,0.481375,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.581050,0.617379,0.376295) to (0.498478,0.522697,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.616190,0.633054,0.774592) to (0.521904,0.533147,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.713733,0.622575,0.408698) to (0.586933,0.526161,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.831828,0.616802,0.032166) to (0.665663,0.522312,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.885139,0.607826,0.771763) to (0.701204,0.516328,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.918318,0.590916,0.233312) to (0.723323,0.505055,0.266652):
+	Updating Particles positions in local cell 48:
+		Updating particleInCell 0:
+		Changing its coords from (0.522725,0.695985,0.106081) to (0.459595,0.575101,0.181831):
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.657951,0.678929,0.126605) to (0.549745,0.563730,0.195514):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.737365,0.725691,0.316657) to (0.602688,0.594905,0.322216):
+	Updating Particles positions in local cell 51:
+		Updating particleInCell 0:
+		Changing its coords from (0.755175,0.729032,0.170111) to (0.614561,0.597133,0.224518):
+	Updating Particles positions in local cell 52:
+		Updating particleInCell 0:
+		Changing its coords from (0.837709,0.702589,0.860921) to (0.669584,0.579503,0.685059):
+	Updating Particles positions in local cell 53:
+		Updating particleInCell 0:
+		Changing its coords from (0.958807,0.748913,0.711434) to (0.750316,0.610386,0.585400):
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.505346,0.761198,0.516861) to (0.448008,0.618577,0.455685):
+	Updating Particles positions in local cell 55:
+		Updating particleInCell 0:
+		Changing its coords from (0.657111,0.821769,0.724586) to (0.549185,0.658957,0.594169):
+	Updating Particles positions in local cell 56:
+		Updating particleInCell 0:
+		Changing its coords from (0.676621,0.795172,0.483519) to (0.562191,0.641226,0.433457):
+	Updating Particles positions in local cell 57:
+		Updating particleInCell 0:
+		Changing its coords from (0.792326,0.782070,0.929035) to (0.639328,0.632491,0.730468):
+	Updating Particles positions in local cell 58:
+		Updating particleInCell 0:
+		Changing its coords from (0.857797,0.751889,0.991404) to (0.682976,0.612370,0.772047):
+	Updating Particles positions in local cell 59:
+		Updating particleInCell 0:
+		Changing its coords from (0.961117,0.751617,0.115447) to (0.751856,0.612189,0.188076):
+	Updating Particles positions in local cell 60:
+		Updating particleInCell 0:
+		Changing its coords from (0.526061,0.839325,0.451692) to (0.461818,0.670661,0.412239):
+	Updating Particles positions in local cell 61:
+		Updating particleInCell 0:
+		Changing its coords from (0.632779,0.868259,0.892297) to (0.532964,0.689950,0.705976):
+	Updating Particles positions in local cell 62:
+		Updating particleInCell 0:
+		Changing its coords from (0.735808,0.899393,0.081151) to (0.601650,0.710706,0.165212):
+	Updating Particles positions in local cell 63:
+		Updating particleInCell 0:
+		Changing its coords from (0.825043,0.833508,0.137948) to (0.661140,0.666783,0.203077):
+	Updating Particles positions in local cell 64:
+		Updating particleInCell 0:
+		Changing its coords from (0.874786,0.866016,0.534845) to (0.694302,0.688455,0.467674):
+	Updating Particles positions in local cell 65:
+		Updating particleInCell 0:
+		Changing its coords from (0.928320,0.851032,0.601838) to (0.729991,0.678466,0.512337):
+	Updating Particles positions in local cell 66:
+		Updating particleInCell 0:
+		Changing its coords from (0.507840,0.936869,0.543898) to (0.449671,0.735691,0.473710):
+	Updating Particles positions in local cell 67:
+		Updating particleInCell 0:
+		Changing its coords from (0.607648,0.994438,0.311891) to (0.516210,0.774070,0.319039):
+	Updating Particles positions in local cell 68:
+		Updating particleInCell 0:
+		Changing its coords from (0.746266,0.917322,0.071914) to (0.608622,0.722659,0.159054):
+	Updating Particles positions in local cell 69:
+		Updating particleInCell 0:
+		Changing its coords from (0.805396,0.953880,0.262791) to (0.648042,0.747031,0.286305):
+	Updating Particles positions in local cell 70:
+		Updating particleInCell 0:
+		Changing its coords from (0.893736,0.946017,0.518640) to (0.706935,0.741789,0.456871):
+	Updating Particles positions in local cell 71:
+		Updating particleInCell 0:
+		Changing its coords from (0.981395,0.969559,0.488147) to (0.765374,0.757484,0.436542):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.539328,0.151756,0.169726) to (0.470663,0.212282,0.224262):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.650244,0.158342,0.434419) to (0.544607,0.216672,0.400724):
+		Updating particleInCell 1:
+		Changing its coords from (0.595530,0.119981,0.396655) to (0.508131,0.191099,0.375548):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.708120,0.147313,0.178219) to (0.583191,0.209320,0.229924):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.768602,0.116189,0.213474) to (0.623512,0.188570,0.253427):
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.519004,0.179938,0.722547) to (0.457114,0.231070,0.592809):
+		Updating particleInCell 1:
+		Changing its coords from (0.545138,0.245478,0.386119) to (0.474536,0.274763,0.368524):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.626059,0.171828,0.343411) to (0.528484,0.225663,0.340052):
+		Updating particleInCell 1:
+		Changing its coords from (0.589352,0.176459,0.423849) to (0.504012,0.228751,0.393677):
+		Updating particleInCell 2:
+		Changing its coords from (0.636623,0.229570,0.653625) to (0.535527,0.264158,0.546861):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.734115,0.215398,0.443207) to (0.600521,0.254710,0.406583):
+		Updating particleInCell 1:
+		Changing its coords from (0.689115,0.182111,0.355026) to (0.570521,0.232519,0.347795):
+		Updating particleInCell 2:
+		Changing its coords from (0.669123,0.233818,0.153588) to (0.557193,0.266990,0.213503):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.769855,0.238157,0.637741) to (0.624348,0.269883,0.536272):
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.560176,0.263209,0.583353) to (0.484562,0.286584,0.500013):
+		Updating particleInCell 1:
+		Changing its coords from (0.517599,0.279621,0.559025) to (0.456177,0.297525,0.483794):
+		Updating particleInCell 2:
+		Changing its coords from (0.562562,0.308160,0.372826) to (0.486152,0.316551,0.359661):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.663942,0.318851,0.607618) to (0.553739,0.323679,0.516190):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.677252,0.300260,0.455176) to (0.562613,0.311285,0.414562):
+		Updating particleInCell 1:
+		Changing its coords from (0.724977,0.296596,0.699005) to (0.594429,0.308842,0.577114):
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.515523,0.340165,0.557242) to (0.454793,0.337888,0.482606):
+		Updating particleInCell 1:
+		Changing its coords from (0.566066,0.371553,0.363877) to (0.488488,0.358813,0.353696):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.630724,0.361720,0.483756) to (0.531594,0.352257,0.433615):
+		Updating particleInCell 1:
+		Changing its coords from (0.605252,0.411500,0.366156) to (0.514612,0.385444,0.355215):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.698064,0.358739,0.728394) to (0.576487,0.350271,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.722450,0.378046,0.616176) to (0.592744,0.363142,0.521895):
+		Updating particleInCell 2:
+		Changing its coords from (0.678134,0.394799,0.162991) to (0.563200,0.374311,0.219772):
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.511069,0.419804,0.604036) to (0.451824,0.390981,0.513802):
+		Updating particleInCell 1:
+		Changing its coords from (0.535253,0.494947,0.412103) to (0.467946,0.441076,0.385846):
+		Updating particleInCell 2:
+		Changing its coords from (0.564012,0.464348,0.325653) to (0.487119,0.420676,0.328213):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.655943,0.438024,0.532967) to (0.548407,0.403127,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.650283,0.475705,0.264624) to (0.544633,0.428248,0.287527):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.674193,0.447107,0.362474) to (0.560573,0.409182,0.352760):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.773274,0.420534,0.499235) to (0.626627,0.391467,0.443934):
+		Updating particleInCell 1:
+		Changing its coords from (0.777010,0.481375,0.422250) to (0.629118,0.432028,0.392611):
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.521904,0.533147,0.627506) to (0.459047,0.466542,0.529448):
+		Updating particleInCell 1:
+		Changing its coords from (0.549745,0.563730,0.195514) to (0.477608,0.486931,0.241454):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.586933,0.526161,0.383576) to (0.502400,0.461885,0.366829):
+		Updating particleInCell 1:
+		Changing its coords from (0.665663,0.522312,0.132555) to (0.554887,0.459319,0.199481):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.701204,0.516328,0.625620) to (0.578580,0.455330,0.528191):
+		Updating particleInCell 1:
+		Changing its coords from (0.723323,0.505055,0.266652) to (0.593327,0.447814,0.288879):
+		Updating particleInCell 2:
+		Changing its coords from (0.669584,0.579503,0.685059) to (0.557500,0.497447,0.567817):
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.549185,0.658957,0.594169) to (0.477235,0.550416,0.507223):
+		Updating particleInCell 1:
+		Changing its coords from (0.562191,0.641226,0.433457) to (0.485905,0.538595,0.400083):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.602688,0.594905,0.322216) to (0.512903,0.507715,0.325922):
+		Updating particleInCell 1:
+		Changing its coords from (0.614561,0.597133,0.224518) to (0.520819,0.509200,0.260790):
+		Updating particleInCell 2:
+		Changing its coords from (0.639328,0.632491,0.730468) to (0.537330,0.532772,0.598090):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.682976,0.612370,0.772047) to (0.566429,0.519358,0.625809):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.750316,0.610386,0.585400) to (0.611322,0.518035,0.501378):
+		Updating particleInCell 1:
+		Changing its coords from (0.751856,0.612189,0.188076) to (0.612349,0.519237,0.236495):
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+		Updating particleInCell 0:
+		Changing its coords from (0.532964,0.689950,0.705976) to (0.466420,0.571078,0.581761):
+	Updating Particles positions in local cell 49:
+		Updating particleInCell 0:
+		Changing its coords from (0.601650,0.710706,0.165212) to (0.512211,0.584915,0.221252):
+		Updating particleInCell 1:
+		Changing its coords from (0.661140,0.666783,0.203077) to (0.551871,0.555633,0.246496):
+		Updating particleInCell 2:
+		Changing its coords from (0.608622,0.722659,0.159054) to (0.516859,0.592884,0.217147):
+		Updating particleInCell 3:
+		Changing its coords from (0.648042,0.747031,0.286305) to (0.543139,0.609132,0.301981):
+	Updating Particles positions in local cell 50:
+		Updating particleInCell 0:
+		Changing its coords from (0.694302,0.688455,0.467674) to (0.573979,0.570081,0.422894):
+		Updating particleInCell 1:
+		Changing its coords from (0.729991,0.678466,0.512337) to (0.597772,0.563422,0.452669):
+		Updating particleInCell 2:
+		Changing its coords from (0.706935,0.741789,0.456871) to (0.582401,0.605637,0.415692):
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+		Updating particleInCell 0:
+		Changing its coords from (0.516210,0.774070,0.319039) to (0.455251,0.627158,0.323803):
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+		Updating particleInCell 0:
+		Changing its coords from (0.765374,0.757484,0.436542) to (0.621361,0.616100,0.402139):
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.583191,0.209320,0.229924) to (0.499905,0.250658,0.264394):
+		Updating particleInCell 1:
+		Changing its coords from (0.570521,0.232519,0.347795) to (0.491459,0.266123,0.342974):
+		Updating particleInCell 2:
+		Changing its coords from (0.508131,0.191099,0.375548) to (0.449865,0.238510,0.361476):
+		Updating particleInCell 3:
+		Changing its coords from (0.544607,0.216672,0.400724) to (0.474183,0.255559,0.378260):
+		Updating particleInCell 4:
+		Changing its coords from (0.504012,0.228751,0.393677) to (0.447119,0.263611,0.373562):
+		Updating particleInCell 5:
+		Changing its coords from (0.528484,0.225663,0.340052) to (0.463434,0.261553,0.337812):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.623512,0.188570,0.253427) to (0.526786,0.236825,0.280062):
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.535527,0.264158,0.546861) to (0.468129,0.287216,0.475685):
+		Updating particleInCell 1:
+		Changing its coords from (0.557193,0.266990,0.213503) to (0.482573,0.289104,0.253446):
+		Updating particleInCell 2:
+		Changing its coords from (0.553739,0.323679,0.516190) to (0.480271,0.326897,0.455238):
+		Updating particleInCell 3:
+		Changing its coords from (0.562613,0.311285,0.414562) to (0.486186,0.318634,0.387486):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.624348,0.269883,0.536272) to (0.527343,0.291033,0.468625):
+		Updating particleInCell 1:
+		Changing its coords from (0.600521,0.254710,0.406583) to (0.511459,0.280918,0.382166):
+		Updating particleInCell 2:
+		Changing its coords from (0.594429,0.308842,0.577114) to (0.507397,0.317005,0.495854):
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.531594,0.352257,0.433615) to (0.465507,0.345949,0.400188):
+		Updating particleInCell 1:
+		Changing its coords from (0.576487,0.350271,0.596707) to (0.495436,0.344625,0.508916):
+		Updating particleInCell 2:
+		Changing its coords from (0.514612,0.385444,0.355215) to (0.454186,0.368074,0.347921):
+		Updating particleInCell 3:
+		Changing its coords from (0.548407,0.403127,0.466423) to (0.476716,0.379862,0.422060):
+		Updating particleInCell 4:
+		Changing its coords from (0.563200,0.374311,0.219772) to (0.486578,0.360652,0.257626):
+		Updating particleInCell 5:
+		Changing its coords from (0.560573,0.409182,0.352760) to (0.484827,0.383899,0.346285):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.592744,0.363142,0.521895) to (0.506274,0.353206,0.459041):
+		Updating particleInCell 1:
+		Changing its coords from (0.626627,0.391467,0.443934) to (0.528863,0.372089,0.407067):
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.544633,0.428248,0.287527) to (0.474200,0.396610,0.302796):
+		Updating particleInCell 1:
+		Changing its coords from (0.502400,0.461885,0.366829) to (0.446044,0.419035,0.355664):
+		Updating particleInCell 2:
+		Changing its coords from (0.554887,0.459319,0.199481) to (0.481035,0.417324,0.244099):
+		Updating particleInCell 3:
+		Changing its coords from (0.578580,0.455330,0.528191) to (0.496831,0.414664,0.463238):
+		Updating particleInCell 4:
+		Changing its coords from (0.557500,0.497447,0.567817) to (0.482778,0.442742,0.489656):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.629118,0.432028,0.392611) to (0.530523,0.399130,0.372852):
+		Updating particleInCell 1:
+		Changing its coords from (0.593327,0.447814,0.288879) to (0.506662,0.409654,0.303697):
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.551871,0.555633,0.246496) to (0.479025,0.481533,0.275441):
+		Updating particleInCell 1:
+		Changing its coords from (0.573979,0.570081,0.422894) to (0.493764,0.491165,0.393040):
+		Updating particleInCell 2:
+		Changing its coords from (0.512903,0.507715,0.325922) to (0.453046,0.449588,0.328392):
+		Updating particleInCell 3:
+		Changing its coords from (0.520819,0.509200,0.260790) to (0.458324,0.450578,0.284971):
+		Updating particleInCell 4:
+		Changing its coords from (0.537330,0.532772,0.598090) to (0.469331,0.466292,0.509838):
+		Updating particleInCell 5:
+		Changing its coords from (0.566429,0.519358,0.625809) to (0.488730,0.457350,0.528317):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.597772,0.563422,0.452669) to (0.509626,0.486726,0.412890):
+		Updating particleInCell 1:
+		Changing its coords from (0.611322,0.518035,0.501378) to (0.518659,0.456468,0.445363):
+		Updating particleInCell 2:
+		Changing its coords from (0.612349,0.519237,0.236495) to (0.519343,0.457269,0.268774):
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.512211,0.584915,0.221252) to (0.452585,0.501055,0.258613):
+		Updating particleInCell 1:
+		Changing its coords from (0.516859,0.592884,0.217147) to (0.455684,0.506367,0.255876):
+		Updating particleInCell 2:
+		Changing its coords from (0.582401,0.605637,0.415692) to (0.499379,0.514869,0.388239):
+		Updating particleInCell 3:
+		Changing its coords from (0.543139,0.609132,0.301981) to (0.473204,0.517199,0.312432):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.621361,0.616100,0.402139) to (0.525352,0.521845,0.379204):
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.526786,0.236825,0.280062) to (0.462302,0.268994,0.297819):
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.511459,0.280918,0.382166) to (0.452083,0.298390,0.365889):
+		Updating particleInCell 1:
+		Changing its coords from (0.527343,0.291033,0.468625) to (0.462673,0.305133,0.423528):
+		Updating particleInCell 2:
+		Changing its coords from (0.507397,0.317005,0.495854) to (0.449376,0.322448,0.441680):
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.506662,0.409654,0.303697) to (0.448886,0.384214,0.313576):
+		Updating particleInCell 1:
+		Changing its coords from (0.528863,0.372089,0.407067) to (0.463686,0.359171,0.382489):
+		Updating particleInCell 2:
+		Changing its coords from (0.506274,0.353206,0.459041) to (0.448627,0.346582,0.417139):
+		Updating particleInCell 3:
+		Changing its coords from (0.530523,0.399130,0.372852) to (0.464793,0.377198,0.359679):
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.509626,0.486726,0.412890) to (0.450861,0.435595,0.386371):
+		Updating particleInCell 1:
+		Changing its coords from (0.518659,0.456468,0.445363) to (0.456884,0.415423,0.408020):
+		Updating particleInCell 2:
+		Changing its coords from (0.519343,0.457269,0.268774) to (0.457340,0.415957,0.290294):
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.525352,0.521845,0.379204) to (0.461345,0.459007,0.363914):
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+	Updating Particles positions in local cell 48:
+	Updating Particles positions in local cell 49:
+	Updating Particles positions in local cell 50:
+	Updating Particles positions in local cell 51:
+	Updating Particles positions in local cell 52:
+	Updating Particles positions in local cell 53:
+	Updating Particles positions in local cell 54:
+	Updating Particles positions in local cell 55:
+	Updating Particles positions in local cell 56:
+	Updating Particles positions in local cell 57:
+	Updating Particles positions in local cell 58:
+	Updating Particles positions in local cell 59:
+	Updating Particles positions in local cell 60:
+	Updating Particles positions in local cell 61:
+	Updating Particles positions in local cell 62:
+	Updating Particles positions in local cell 63:
+	Updating Particles positions in local cell 64:
+	Updating Particles positions in local cell 65:
+	Updating Particles positions in local cell 66:
+	Updating Particles positions in local cell 67:
+	Updating Particles positions in local cell 68:
+	Updating Particles positions in local cell 69:
+	Updating Particles positions in local cell 70:
+	Updating Particles positions in local cell 71:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1073 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.353551,0.055930,0.161165) to (0.346812,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.475659,0.060967,0.087923) to (0.428217,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.559961,0.013305,0.428316) to (0.484418,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.642033,0.070846,0.484961) to (0.539133,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.395513,0.137637,0.100663) to (0.374786,0.202869,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.486236,0.090950,0.153544) to (0.435269,0.171744,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.551311,0.140818,0.725730) to (0.478652,0.204990,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.611840,0.103240,0.917154) to (0.519004,0.179938,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.384027,0.181355,0.469106) to (0.367129,0.232015,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.439088,0.174408,0.348450) to (0.403837,0.227383,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.533673,0.189833,0.365872) to (0.466893,0.237667,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.601173,0.239764,0.498144) to (0.511893,0.270954,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.358951,0.298560,0.684585) to (0.350411,0.310151,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.484374,0.284883,0.412512) to (0.434027,0.301033,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.506930,0.311481,0.708363) to (0.449065,0.318765,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.621602,0.261021,0.813771) to (0.525512,0.285125,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.337018,0.350727,0.063715) to (0.335790,0.344929,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.488116,0.357236,0.789944) to (0.436522,0.349268,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.549385,0.345745,0.211121) to (0.477368,0.341608,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.609731,0.336098,0.671870) to (0.517599,0.335177,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.343843,0.462240,0.392572) to (0.340339,0.419271,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.495913,0.478277,0.744761) to (0.441720,0.429962,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.515878,0.450390,0.516097) to (0.455030,0.411371,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.587465,0.444893,0.881840) to (0.502755,0.407707,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.340903,0.553570,0.185594) to (0.338380,0.480158,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.439951,0.510247,0.669197) to (0.404412,0.451276,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.515766,0.557329,0.379149) to (0.454955,0.482664,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.612753,0.542579,0.558967) to (0.519613,0.472831,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.380429,0.621442,0.925924) to (0.364730,0.525406,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.417008,0.650402,0.757598) to (0.389116,0.544713,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.578434,0.651245,0.751425) to (0.496734,0.545275,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.599936,0.629707,0.739388) to (0.511069,0.530915,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.407878,0.700583,0.382567) to (0.383030,0.578166,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.483915,0.740369,0.632784) to (0.433721,0.604691,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.517201,0.675532,0.077820) to (0.455912,0.561466,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.659911,0.714135,0.582185) to (0.551052,0.587201,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.399016,0.764829,0.736755) to (0.377122,0.620997,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.469546,0.825754,0.451488) to (0.424142,0.661614,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.512685,0.779855,0.321813) to (0.452901,0.631015,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.642091,0.796891,0.230269) to (0.539172,0.642372,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.344624,0.837327,0.377044) to (0.340860,0.669329,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.498848,0.888729,0.466709) to (0.443676,0.703597,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.581050,0.867379,0.376295) to (0.498478,0.689363,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.616190,0.883054,0.774592) to (0.521904,0.699813,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.380399,0.955908,0.408698) to (0.364711,0.748383,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.498495,0.950135,0.032166) to (0.443441,0.744534,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.551805,0.941159,0.771763) to (0.478981,0.738551,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.584985,0.924249,0.233312) to (0.501101,0.727277,0.266652):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.346812,0.148398,0.218555) to (0.342319,0.210043,0.256814):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.484418,0.119981,0.396655) to (0.434057,0.191099,0.375548):
+		Updating particleInCell 1:
+		Changing its coords from (0.428217,0.151756,0.169726) to (0.396589,0.212282,0.224262):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.539133,0.158342,0.434419) to (0.470533,0.216672,0.400724):
+		Updating particleInCell 1:
+		Changing its coords from (0.569034,0.148398,0.218555) to (0.490467,0.210043,0.256814):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.650439,0.151756,0.169726) to (0.544737,0.212282,0.224262):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.367129,0.232015,0.423849) to (0.355864,0.265788,0.393677):
+		Updating particleInCell 1:
+		Changing its coords from (0.374786,0.202869,0.178219) to (0.360969,0.246357,0.229924):
+		Updating particleInCell 2:
+		Changing its coords from (0.403837,0.227383,0.343411) to (0.380336,0.262700,0.340052):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.478652,0.204990,0.594931) to (0.430212,0.247771,0.507732):
+		Updating particleInCell 1:
+		Changing its coords from (0.435269,0.171744,0.213474) to (0.401290,0.225607,0.253427):
+		Updating particleInCell 2:
+		Changing its coords from (0.466893,0.237667,0.355026) to (0.422373,0.269556,0.347795):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.519004,0.179938,0.722547) to (0.457114,0.231070,0.592809):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.597009,0.202869,0.178219) to (0.509117,0.246357,0.229924):
+		Updating particleInCell 1:
+		Changing its coords from (0.657491,0.171744,0.213474) to (0.549438,0.225607,0.253427):
+		Updating particleInCell 2:
+		Changing its coords from (0.589352,0.232015,0.423849) to (0.504012,0.265788,0.393677):
+		Updating particleInCell 3:
+		Changing its coords from (0.626059,0.227383,0.343411) to (0.528484,0.262700,0.340052):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.350411,0.310151,0.567501) to (0.344719,0.317878,0.489445):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.434027,0.301033,0.386119) to (0.400462,0.311800,0.368524):
+		Updating particleInCell 1:
+		Changing its coords from (0.449065,0.318765,0.583353) to (0.410488,0.323621,0.500013):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.511893,0.270954,0.443207) to (0.452373,0.291747,0.406583):
+		Updating particleInCell 1:
+		Changing its coords from (0.525512,0.285125,0.653625) to (0.461453,0.301195,0.546861):
+		Updating particleInCell 2:
+		Changing its coords from (0.572634,0.310151,0.567501) to (0.492867,0.317878,0.489445):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.656249,0.301033,0.386119) to (0.548611,0.311800,0.368524):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.335790,0.344929,0.153588) to (0.334971,0.341064,0.213503):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.436522,0.349268,0.637741) to (0.402126,0.343957,0.536272):
+		Updating particleInCell 1:
+		Changing its coords from (0.477368,0.341608,0.251859) to (0.429356,0.338850,0.279017):
+		Updating particleInCell 2:
+		Changing its coords from (0.455030,0.411371,0.455176) to (0.414464,0.385359,0.414562):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.517599,0.335177,0.559025) to (0.456177,0.334562,0.483794):
+		Updating particleInCell 1:
+		Changing its coords from (0.502755,0.407707,0.699005) to (0.446281,0.382916,0.577114):
+		Updating particleInCell 2:
+		Changing its coords from (0.558012,0.344929,0.153588) to (0.483119,0.341064,0.213503):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.658744,0.349268,0.637741) to (0.550274,0.343957,0.536272):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.340339,0.419271,0.372826) to (0.338004,0.390625,0.359661):
+		Updating particleInCell 1:
+		Changing its coords from (0.338380,0.480158,0.234840) to (0.336698,0.431216,0.267671):
+		Updating particleInCell 2:
+		Changing its coords from (0.404412,0.451276,0.557242) to (0.380719,0.411962,0.482606):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.441720,0.429962,0.607618) to (0.405591,0.397753,0.516190):
+		Updating particleInCell 1:
+		Changing its coords from (0.454955,0.482664,0.363877) to (0.414414,0.432887,0.353696):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.519613,0.472831,0.483756) to (0.457520,0.426332,0.433615):
+		Updating particleInCell 1:
+		Changing its coords from (0.562562,0.419271,0.372826) to (0.486152,0.390625,0.359661):
+		Updating particleInCell 2:
+		Changing its coords from (0.560602,0.480158,0.234840) to (0.484846,0.431216,0.267671):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.663942,0.429962,0.607618) to (0.553739,0.397753,0.516190):
+		Updating particleInCell 1:
+		Changing its coords from (0.626634,0.451276,0.557242) to (0.528867,0.411962,0.482606):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.364730,0.525406,0.728394) to (0.354265,0.461382,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.389116,0.544713,0.616176) to (0.370522,0.474253,0.521895):
+		Updating particleInCell 2:
+		Changing its coords from (0.383030,0.578166,0.366156) to (0.366464,0.496555,0.355215):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.496734,0.545275,0.612061) to (0.442267,0.474628,0.519152):
+		Updating particleInCell 1:
+		Changing its coords from (0.455912,0.561466,0.162991) to (0.415052,0.485422,0.219772):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.511069,0.530915,0.604036) to (0.451824,0.465055,0.513802):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.586953,0.525406,0.728394) to (0.502413,0.461382,0.596707):
+		Updating particleInCell 1:
+		Changing its coords from (0.611339,0.544713,0.616176) to (0.518670,0.474253,0.521895):
+		Updating particleInCell 2:
+		Changing its coords from (0.605252,0.578166,0.366156) to (0.514612,0.496555,0.355215):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.377122,0.620997,0.602281) to (0.362526,0.525109,0.512632):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.433721,0.604691,0.532967) to (0.400258,0.514238,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.424142,0.661614,0.412103) to (0.393872,0.552187,0.385846):
+		Updating particleInCell 2:
+		Changing its coords from (0.452901,0.631015,0.325653) to (0.413045,0.531788,0.328213):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.551052,0.587201,0.499235) to (0.478479,0.502578,0.443934):
+		Updating particleInCell 1:
+		Changing its coords from (0.539172,0.642372,0.264624) to (0.470559,0.539359,0.287527):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.655943,0.604691,0.532967) to (0.548407,0.514238,0.466423):
+		Updating particleInCell 1:
+		Changing its coords from (0.599344,0.620997,0.602281) to (0.510674,0.525109,0.512632):
+		Updating particleInCell 2:
+		Changing its coords from (0.646364,0.661614,0.412103) to (0.542020,0.552187,0.385846):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.340860,0.669329,0.362474) to (0.338351,0.557330,0.352760):
+		Updating particleInCell 1:
+		Changing its coords from (0.364711,0.748383,0.383576) to (0.354252,0.610033,0.366829):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.443676,0.703597,0.422250) to (0.406895,0.580176,0.392611):
+		Updating particleInCell 1:
+		Changing its coords from (0.498478,0.689363,0.361975) to (0.443429,0.570687,0.352428):
+		Updating particleInCell 2:
+		Changing its coords from (0.443441,0.744534,0.132555) to (0.406738,0.607467,0.199481):
+		Updating particleInCell 3:
+		Changing its coords from (0.478981,0.738551,0.625620) to (0.430432,0.603478,0.528191):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.521904,0.699813,0.627506) to (0.459047,0.577653,0.529448):
+		Updating particleInCell 1:
+		Changing its coords from (0.501101,0.727277,0.266652) to (0.445178,0.595963,0.288879):
+		Updating particleInCell 2:
+		Changing its coords from (0.563082,0.669329,0.362474) to (0.486499,0.557330,0.352760):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.665899,0.703597,0.422250) to (0.555044,0.580176,0.392611):
+		Updating particleInCell 1:
+		Changing its coords from (0.586933,0.748383,0.383576) to (0.502400,0.610033,0.366829):
+		Updating particleInCell 2:
+		Changing its coords from (0.665663,0.744534,0.132555) to (0.554887,0.607467,0.199481):
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.401290,0.225607,0.253427) to (0.378638,0.261516,0.280062):
+		Updating particleInCell 1:
+		Changing its coords from (0.360969,0.246357,0.229924) to (0.351757,0.275349,0.264394):
+		Updating particleInCell 2:
+		Changing its coords from (0.396589,0.212282,0.224262) to (0.375504,0.252632,0.260619):
+		Updating particleInCell 3:
+		Changing its coords from (0.342319,0.210043,0.256814) to (0.339324,0.251140,0.282321):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.430212,0.247771,0.507732) to (0.397919,0.276292,0.449599):
+		Updating particleInCell 1:
+		Changing its coords from (0.470533,0.216672,0.400724) to (0.424800,0.255559,0.378260):
+		Updating particleInCell 2:
+		Changing its coords from (0.457114,0.231070,0.592809) to (0.415854,0.265158,0.506317):
+		Updating particleInCell 3:
+		Changing its coords from (0.434057,0.191099,0.375548) to (0.400482,0.238510,0.361476):
+		Updating particleInCell 4:
+		Changing its coords from (0.490467,0.210043,0.256814) to (0.438089,0.251140,0.282321):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.544737,0.212282,0.224262) to (0.474269,0.252632,0.260619):
+		Updating particleInCell 1:
+		Changing its coords from (0.509117,0.246357,0.229924) to (0.450522,0.275349,0.264394):
+		Updating particleInCell 2:
+		Changing its coords from (0.549438,0.225607,0.253427) to (0.477403,0.261516,0.280062):
+		Updating particleInCell 3:
+		Changing its coords from (0.582205,0.191099,0.375548) to (0.499248,0.238510,0.361476):
+		Updating particleInCell 4:
+		Changing its coords from (0.578361,0.247771,0.507732) to (0.496685,0.276292,0.449599):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.618681,0.216672,0.400724) to (0.523565,0.255559,0.378260):
+		Updating particleInCell 1:
+		Changing its coords from (0.605262,0.231070,0.592809) to (0.514619,0.265158,0.506317):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.344719,0.317878,0.489445) to (0.340924,0.323030,0.437408):
+		Updating particleInCell 1:
+		Changing its coords from (0.355864,0.265788,0.393677) to (0.348354,0.288303,0.373562):
+		Updating particleInCell 2:
+		Changing its coords from (0.380336,0.262700,0.340052) to (0.364668,0.286244,0.337812):
+		Updating particleInCell 3:
+		Changing its coords from (0.400462,0.311800,0.368524) to (0.378086,0.318978,0.356794):
+		Updating particleInCell 4:
+		Changing its coords from (0.410488,0.323621,0.500013) to (0.384769,0.326859,0.444453):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.452373,0.291747,0.406583) to (0.412693,0.305609,0.382166):
+		Updating particleInCell 1:
+		Changing its coords from (0.422373,0.269556,0.347795) to (0.392693,0.290815,0.342974):
+		Updating particleInCell 2:
+		Changing its coords from (0.461453,0.301195,0.546861) to (0.418746,0.311908,0.475685):
+		Updating particleInCell 3:
+		Changing its coords from (0.492867,0.317878,0.489445) to (0.439689,0.323030,0.437408):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.504012,0.265788,0.393677) to (0.447119,0.288303,0.373562):
+		Updating particleInCell 1:
+		Changing its coords from (0.528484,0.262700,0.340052) to (0.463434,0.286244,0.337812):
+		Updating particleInCell 2:
+		Changing its coords from (0.548611,0.311800,0.368524) to (0.476851,0.318978,0.356794):
+		Updating particleInCell 3:
+		Changing its coords from (0.570521,0.269556,0.347795) to (0.491459,0.290815,0.342974):
+		Updating particleInCell 4:
+		Changing its coords from (0.558636,0.323621,0.500013) to (0.483535,0.326859,0.444453):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.600521,0.291747,0.406583) to (0.511459,0.305609,0.382166):
+		Updating particleInCell 1:
+		Changing its coords from (0.609601,0.301195,0.546861) to (0.517512,0.311908,0.475685):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.334971,0.341064,0.213503) to (0.334425,0.338487,0.253446):
+		Updating particleInCell 1:
+		Changing its coords from (0.402126,0.343957,0.536272) to (0.379195,0.340416,0.468625):
+		Updating particleInCell 2:
+		Changing its coords from (0.338004,0.390625,0.359661) to (0.336447,0.371528,0.350885):
+		Updating particleInCell 3:
+		Changing its coords from (0.405591,0.397753,0.516190) to (0.381505,0.376279,0.455238):
+		Updating particleInCell 4:
+		Changing its coords from (0.414464,0.385359,0.414562) to (0.387421,0.368017,0.387486):
+		Updating particleInCell 5:
+		Changing its coords from (0.380719,0.411962,0.482606) to (0.364924,0.385752,0.432848):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.456177,0.334562,0.483794) to (0.415229,0.334153,0.433641):
+		Updating particleInCell 1:
+		Changing its coords from (0.429356,0.338850,0.279017) to (0.397349,0.337011,0.297122):
+		Updating particleInCell 2:
+		Changing its coords from (0.446281,0.382916,0.577114) to (0.408632,0.366388,0.495854):
+		Updating particleInCell 3:
+		Changing its coords from (0.483119,0.341064,0.213503) to (0.433191,0.338487,0.253446):
+		Updating particleInCell 4:
+		Changing its coords from (0.486152,0.390625,0.359661) to (0.435213,0.371528,0.350885):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.550274,0.343957,0.536272) to (0.477960,0.340416,0.468625):
+		Updating particleInCell 1:
+		Changing its coords from (0.553739,0.397753,0.516190) to (0.480271,0.376279,0.455238):
+		Updating particleInCell 2:
+		Changing its coords from (0.528867,0.411962,0.482606) to (0.463689,0.385752,0.432848):
+		Updating particleInCell 3:
+		Changing its coords from (0.577504,0.338850,0.279017) to (0.496114,0.337011,0.297122):
+		Updating particleInCell 4:
+		Changing its coords from (0.562613,0.385359,0.414562) to (0.486186,0.368017,0.387486):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.604325,0.334562,0.483794) to (0.513994,0.334153,0.433641):
+		Updating particleInCell 1:
+		Changing its coords from (0.594429,0.382916,0.577114) to (0.507397,0.366388,0.495854):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.336698,0.431216,0.267671) to (0.335576,0.398589,0.289559):
+		Updating particleInCell 1:
+		Changing its coords from (0.414414,0.432887,0.353696) to (0.387387,0.399702,0.346908):
+		Updating particleInCell 2:
+		Changing its coords from (0.354265,0.461382,0.596707) to (0.347288,0.418699,0.508916):
+		Updating particleInCell 3:
+		Changing its coords from (0.370522,0.474253,0.521895) to (0.358126,0.427280,0.459041):
+		Updating particleInCell 4:
+		Changing its coords from (0.366464,0.496555,0.355215) to (0.355421,0.442148,0.347921):
+		Updating particleInCell 5:
+		Changing its coords from (0.415052,0.485422,0.219772) to (0.387813,0.434726,0.257626):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.457520,0.426332,0.433615) to (0.416124,0.395332,0.400188):
+		Updating particleInCell 1:
+		Changing its coords from (0.442267,0.474628,0.519152) to (0.405956,0.427529,0.457212):
+		Updating particleInCell 2:
+		Changing its coords from (0.451824,0.465055,0.513802) to (0.412327,0.421148,0.453646):
+		Updating particleInCell 3:
+		Changing its coords from (0.484846,0.431216,0.267671) to (0.434342,0.398589,0.289559):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.502413,0.461382,0.596707) to (0.446053,0.418699,0.508916):
+		Updating particleInCell 1:
+		Changing its coords from (0.518670,0.474253,0.521895) to (0.456891,0.427280,0.459041):
+		Updating particleInCell 2:
+		Changing its coords from (0.514612,0.496555,0.355215) to (0.454186,0.442148,0.347921):
+		Updating particleInCell 3:
+		Changing its coords from (0.563200,0.485422,0.219772) to (0.486578,0.434726,0.257626):
+		Updating particleInCell 4:
+		Changing its coords from (0.562563,0.432887,0.353696) to (0.486153,0.399702,0.346908):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.599972,0.465055,0.513802) to (0.511092,0.421148,0.453646):
+		Updating particleInCell 1:
+		Changing its coords from (0.590415,0.474628,0.519152) to (0.504721,0.427529,0.457212):
+		Updating particleInCell 2:
+		Changing its coords from (0.605668,0.426332,0.433615) to (0.514890,0.395332,0.400188):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.400258,0.514238,0.466423) to (0.377950,0.453937,0.422060):
+		Updating particleInCell 1:
+		Changing its coords from (0.362526,0.525109,0.512632) to (0.352795,0.461184,0.452866):
+		Updating particleInCell 2:
+		Changing its coords from (0.393872,0.552187,0.385846) to (0.373693,0.479236,0.368342):
+		Updating particleInCell 3:
+		Changing its coords from (0.413045,0.531788,0.328213) to (0.386475,0.465636,0.329920):
+		Updating particleInCell 4:
+		Changing its coords from (0.338351,0.557330,0.352760) to (0.336679,0.482665,0.346285):
+		Updating particleInCell 5:
+		Changing its coords from (0.406895,0.580176,0.392611) to (0.382375,0.497895,0.372852):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.478479,0.502578,0.443934) to (0.430097,0.446163,0.407067):
+		Updating particleInCell 1:
+		Changing its coords from (0.470559,0.539359,0.287527) to (0.424817,0.470684,0.302796):
+		Updating particleInCell 2:
+		Changing its coords from (0.443429,0.570687,0.352428) to (0.406731,0.491569,0.346063):
+		Updating particleInCell 3:
+		Changing its coords from (0.459047,0.577653,0.529448) to (0.417143,0.496213,0.464077):
+		Updating particleInCell 4:
+		Changing its coords from (0.486499,0.557330,0.352760) to (0.435444,0.482665,0.346285):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.548407,0.514238,0.466423) to (0.476716,0.453937,0.422060):
+		Updating particleInCell 1:
+		Changing its coords from (0.510674,0.525109,0.512632) to (0.451560,0.461184,0.452866):
+		Updating particleInCell 2:
+		Changing its coords from (0.542020,0.552187,0.385846) to (0.472458,0.479236,0.368342):
+		Updating particleInCell 3:
+		Changing its coords from (0.555044,0.580176,0.392611) to (0.481140,0.497895,0.372852):
+		Updating particleInCell 4:
+		Changing its coords from (0.561193,0.531788,0.328213) to (0.485240,0.465636,0.329920):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.607195,0.577653,0.529448) to (0.515908,0.496213,0.464077):
+		Updating particleInCell 1:
+		Changing its coords from (0.591578,0.570687,0.352428) to (0.505496,0.491569,0.346063):
+		Updating particleInCell 2:
+		Changing its coords from (0.618707,0.539359,0.287527) to (0.523583,0.470684,0.302796):
+		Updating particleInCell 3:
+		Changing its coords from (0.626627,0.502578,0.443934) to (0.528863,0.446163,0.407067):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.354252,0.610033,0.366829) to (0.347279,0.517800,0.355664):
+		Updating particleInCell 1:
+		Changing its coords from (0.406738,0.607467,0.199481) to (0.382270,0.516089,0.244099):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.430432,0.603478,0.528191) to (0.398066,0.513430,0.463238):
+		Updating particleInCell 1:
+		Changing its coords from (0.445178,0.595963,0.288879) to (0.407897,0.508419,0.303697):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.502400,0.610033,0.366829) to (0.446044,0.517800,0.355664):
+		Updating particleInCell 1:
+		Changing its coords from (0.554887,0.607467,0.199481) to (0.481035,0.516089,0.244099):
+		Updating particleInCell 2:
+		Changing its coords from (0.578580,0.603478,0.528191) to (0.496831,0.513430,0.463238):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.593327,0.595963,0.288879) to (0.506662,0.508419,0.303697):
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.400482,0.238510,0.361476) to (0.378099,0.270118,0.352095):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.499248,0.238510,0.361476) to (0.443943,0.270118,0.352095):
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.340924,0.323030,0.437408) to (0.338394,0.326464,0.402716):
+		Updating particleInCell 1:
+		Changing its coords from (0.348354,0.288303,0.373562) to (0.343347,0.303313,0.360153):
+		Updating particleInCell 2:
+		Changing its coords from (0.364668,0.286244,0.337812) to (0.354223,0.301941,0.336319):
+		Updating particleInCell 3:
+		Changing its coords from (0.378086,0.318978,0.356794) to (0.363168,0.323763,0.348973):
+		Updating particleInCell 4:
+		Changing its coords from (0.384769,0.326859,0.444453) to (0.367624,0.329017,0.407413):
+		Updating particleInCell 5:
+		Changing its coords from (0.339324,0.251140,0.282321) to (0.337327,0.278538,0.299325):
+		Updating particleInCell 6:
+		Changing its coords from (0.375504,0.252632,0.260619) to (0.361447,0.279533,0.284857):
+		Updating particleInCell 7:
+		Changing its coords from (0.351757,0.275349,0.264394) to (0.345616,0.294677,0.287374):
+		Updating particleInCell 8:
+		Changing its coords from (0.378638,0.261516,0.280062) to (0.363536,0.285455,0.297819):
+		Updating particleInCell 9:
+		Changing its coords from (0.397919,0.276292,0.449599) to (0.376391,0.295306,0.410844):
+		Updating particleInCell 10:
+		Changing its coords from (0.415854,0.265158,0.506317) to (0.388347,0.287883,0.448656):
+		Updating particleInCell 11:
+		Changing its coords from (0.392693,0.290815,0.342974) to (0.372907,0.304988,0.339761):
+		Updating particleInCell 12:
+		Changing its coords from (0.412693,0.305609,0.382166) to (0.386240,0.314850,0.365889):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.439689,0.323030,0.437408) to (0.404237,0.326464,0.402716):
+		Updating particleInCell 1:
+		Changing its coords from (0.424800,0.255559,0.378260) to (0.394311,0.281484,0.363285):
+		Updating particleInCell 2:
+		Changing its coords from (0.418746,0.311908,0.475685) to (0.390275,0.319049,0.428235):
+		Updating particleInCell 3:
+		Changing its coords from (0.438089,0.251140,0.282321) to (0.403171,0.278538,0.299325):
+		Updating particleInCell 4:
+		Changing its coords from (0.474269,0.252632,0.260619) to (0.427291,0.279533,0.284857):
+		Updating particleInCell 5:
+		Changing its coords from (0.450522,0.275349,0.264394) to (0.411459,0.294677,0.287374):
+		Updating particleInCell 6:
+		Changing its coords from (0.477403,0.261516,0.280062) to (0.429380,0.285455,0.297819):
+		Updating particleInCell 7:
+		Changing its coords from (0.447119,0.288303,0.373562) to (0.409191,0.303313,0.360153):
+		Updating particleInCell 8:
+		Changing its coords from (0.463434,0.286244,0.337812) to (0.420067,0.301941,0.336319):
+		Updating particleInCell 9:
+		Changing its coords from (0.476851,0.318978,0.356794) to (0.429012,0.323763,0.348973):
+		Updating particleInCell 10:
+		Changing its coords from (0.496685,0.276292,0.449599) to (0.442234,0.295306,0.410844):
+		Updating particleInCell 11:
+		Changing its coords from (0.491459,0.290815,0.342974) to (0.438750,0.304988,0.339761):
+		Updating particleInCell 12:
+		Changing its coords from (0.483535,0.326859,0.444453) to (0.433468,0.329017,0.407413):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.523565,0.255559,0.378260) to (0.460155,0.281484,0.363285):
+		Updating particleInCell 1:
+		Changing its coords from (0.514619,0.265158,0.506317) to (0.454191,0.287883,0.448656):
+		Updating particleInCell 2:
+		Changing its coords from (0.511459,0.305609,0.382166) to (0.452083,0.314850,0.365889):
+		Updating particleInCell 3:
+		Changing its coords from (0.517512,0.311908,0.475685) to (0.456119,0.319049,0.428235):
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.334425,0.338487,0.253446) to (0.334061,0.336769,0.280075):
+		Updating particleInCell 1:
+		Changing its coords from (0.379195,0.340416,0.468625) to (0.363908,0.338055,0.423528):
+		Updating particleInCell 2:
+		Changing its coords from (0.336447,0.371528,0.350885) to (0.335409,0.358796,0.345035):
+		Updating particleInCell 3:
+		Changing its coords from (0.381505,0.376279,0.455238) to (0.365448,0.361964,0.414603):
+		Updating particleInCell 4:
+		Changing its coords from (0.387421,0.368017,0.387486) to (0.369392,0.356456,0.369435):
+		Updating particleInCell 5:
+		Changing its coords from (0.364924,0.385752,0.432848) to (0.354394,0.368279,0.399677):
+		Updating particleInCell 6:
+		Changing its coords from (0.397349,0.337011,0.297122) to (0.376010,0.335785,0.309193):
+		Updating particleInCell 7:
+		Changing its coords from (0.415229,0.334153,0.433641) to (0.387930,0.333880,0.400205):
+		Updating particleInCell 8:
+		Changing its coords from (0.408632,0.366388,0.495854) to (0.383532,0.355370,0.441680):
+		Updating particleInCell 9:
+		Changing its coords from (0.335576,0.398589,0.289559) to (0.334829,0.376837,0.304150):
+		Updating particleInCell 10:
+		Changing its coords from (0.387387,0.399702,0.346908) to (0.369369,0.377579,0.342383):
+		Updating particleInCell 11:
+		Changing its coords from (0.416124,0.395332,0.400188) to (0.388527,0.374666,0.377903):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.433191,0.338487,0.253446) to (0.399905,0.336769,0.280075):
+		Updating particleInCell 1:
+		Changing its coords from (0.435213,0.371528,0.350885) to (0.401253,0.358796,0.345035):
+		Updating particleInCell 2:
+		Changing its coords from (0.434342,0.398589,0.289559) to (0.400672,0.376837,0.304150):
+		Updating particleInCell 3:
+		Changing its coords from (0.477960,0.340416,0.468625) to (0.429751,0.338055,0.423528):
+		Updating particleInCell 4:
+		Changing its coords from (0.480271,0.376279,0.455238) to (0.431291,0.361964,0.414603):
+		Updating particleInCell 5:
+		Changing its coords from (0.463689,0.385752,0.432848) to (0.420237,0.368279,0.399677):
+		Updating particleInCell 6:
+		Changing its coords from (0.496114,0.337011,0.297122) to (0.441854,0.335785,0.309193):
+		Updating particleInCell 7:
+		Changing its coords from (0.486153,0.399702,0.346908) to (0.435213,0.377579,0.342383):
+		Updating particleInCell 8:
+		Changing its coords from (0.486186,0.368017,0.387486) to (0.435235,0.356456,0.369435):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.513994,0.334153,0.433641) to (0.453774,0.333880,0.400205):
+		Updating particleInCell 1:
+		Changing its coords from (0.507397,0.366388,0.495854) to (0.449376,0.355370,0.441680):
+		Updating particleInCell 2:
+		Changing its coords from (0.514890,0.395332,0.400188) to (0.454371,0.374666,0.377903):
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.387813,0.434726,0.257626) to (0.369653,0.400928,0.282862):
+		Updating particleInCell 1:
+		Changing its coords from (0.355421,0.442148,0.347921) to (0.348058,0.405876,0.343059):
+		Updating particleInCell 2:
+		Changing its coords from (0.347288,0.418699,0.508916) to (0.342636,0.390244,0.450388):
+		Updating particleInCell 3:
+		Changing its coords from (0.358126,0.427280,0.459041) to (0.349862,0.395964,0.417139):
+		Updating particleInCell 4:
+		Changing its coords from (0.405956,0.427529,0.457212) to (0.381748,0.396131,0.415919):
+		Updating particleInCell 5:
+		Changing its coords from (0.412327,0.421148,0.453646) to (0.385996,0.391876,0.413542):
+		Updating particleInCell 6:
+		Changing its coords from (0.377950,0.453937,0.422060) to (0.363078,0.413735,0.392484):
+		Updating particleInCell 7:
+		Changing its coords from (0.352795,0.461184,0.452866) to (0.346308,0.418567,0.413021):
+		Updating particleInCell 8:
+		Changing its coords from (0.373693,0.479236,0.368342) to (0.360240,0.430602,0.356672):
+		Updating particleInCell 9:
+		Changing its coords from (0.386475,0.465636,0.329920) to (0.368761,0.421535,0.331058):
+		Updating particleInCell 10:
+		Changing its coords from (0.336679,0.482665,0.346285) to (0.335563,0.432888,0.341968):
+		Updating particleInCell 11:
+		Changing its coords from (0.382375,0.497895,0.372852) to (0.366028,0.443041,0.359679):
+		Updating particleInCell 12:
+		Changing its coords from (0.406731,0.491569,0.346063) to (0.382265,0.438824,0.341820):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.417143,0.496213,0.464077) to (0.389206,0.441920,0.420496):
+		Updating particleInCell 1:
+		Changing its coords from (0.430097,0.446163,0.407067) to (0.397843,0.408553,0.382489):
+		Updating particleInCell 2:
+		Changing its coords from (0.424817,0.470684,0.302796) to (0.394323,0.424900,0.312975):
+		Updating particleInCell 3:
+		Changing its coords from (0.435444,0.482665,0.346285) to (0.401407,0.432888,0.341968):
+		Updating particleInCell 4:
+		Changing its coords from (0.446053,0.418699,0.508916) to (0.408480,0.390244,0.450388):
+		Updating particleInCell 5:
+		Changing its coords from (0.456891,0.427280,0.459041) to (0.415705,0.395964,0.417139):
+		Updating particleInCell 6:
+		Changing its coords from (0.454186,0.442148,0.347921) to (0.413902,0.405876,0.343059):
+		Updating particleInCell 7:
+		Changing its coords from (0.476716,0.453937,0.422060) to (0.428921,0.413735,0.392484):
+		Updating particleInCell 8:
+		Changing its coords from (0.451560,0.461184,0.452866) to (0.412151,0.418567,0.413021):
+		Updating particleInCell 9:
+		Changing its coords from (0.472458,0.479236,0.368342) to (0.426083,0.430602,0.356672):
+		Updating particleInCell 10:
+		Changing its coords from (0.481140,0.497895,0.372852) to (0.431871,0.443041,0.359679):
+		Updating particleInCell 11:
+		Changing its coords from (0.485240,0.465636,0.329920) to (0.434604,0.421535,0.331058):
+		Updating particleInCell 12:
+		Changing its coords from (0.486578,0.434726,0.257626) to (0.435496,0.400928,0.282862):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.511092,0.421148,0.453646) to (0.451839,0.391876,0.413542):
+		Updating particleInCell 1:
+		Changing its coords from (0.504721,0.427529,0.457212) to (0.447592,0.396131,0.415919):
+		Updating particleInCell 2:
+		Changing its coords from (0.515908,0.496213,0.464077) to (0.455050,0.441920,0.420496):
+		Updating particleInCell 3:
+		Changing its coords from (0.505496,0.491569,0.346063) to (0.448109,0.438824,0.341820):
+		Updating particleInCell 4:
+		Changing its coords from (0.523583,0.470684,0.302796) to (0.460166,0.424900,0.312975):
+		Updating particleInCell 5:
+		Changing its coords from (0.528863,0.446163,0.407067) to (0.463686,0.408553,0.382489):
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.347279,0.517800,0.355664) to (0.342630,0.456311,0.348220):
+		Updating particleInCell 1:
+		Changing its coords from (0.382270,0.516089,0.244099) to (0.365958,0.455171,0.273844):
+		Updating particleInCell 2:
+		Changing its coords from (0.398066,0.513430,0.463238) to (0.376488,0.453398,0.419937):
+		Updating particleInCell 3:
+		Changing its coords from (0.407897,0.508419,0.303697) to (0.383042,0.450057,0.313576):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.446044,0.517800,0.355664) to (0.408474,0.456311,0.348220):
+		Updating particleInCell 1:
+		Changing its coords from (0.481035,0.516089,0.244099) to (0.431801,0.455171,0.273844):
+		Updating particleInCell 2:
+		Changing its coords from (0.496831,0.513430,0.463238) to (0.442332,0.453398,0.419937):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.506662,0.508419,0.303697) to (0.448886,0.450057,0.313576):
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.338394,0.326464,0.402716) to (0.336707,0.328754,0.379589):
+		Updating particleInCell 1:
+		Changing its coords from (0.343347,0.303313,0.360153) to (0.340009,0.313320,0.351213):
+		Updating particleInCell 2:
+		Changing its coords from (0.354223,0.301941,0.336319) to (0.347260,0.312405,0.335324):
+		Updating particleInCell 3:
+		Changing its coords from (0.363168,0.323763,0.348973) to (0.353223,0.326953,0.343760):
+		Updating particleInCell 4:
+		Changing its coords from (0.367624,0.329017,0.407413) to (0.356194,0.330456,0.382720):
+		Updating particleInCell 5:
+		Changing its coords from (0.337327,0.278538,0.299325) to (0.335996,0.296803,0.310661):
+		Updating particleInCell 6:
+		Changing its coords from (0.361447,0.279533,0.284857) to (0.352076,0.297466,0.301016):
+		Updating particleInCell 7:
+		Changing its coords from (0.345616,0.294677,0.287374) to (0.341522,0.307563,0.302694):
+		Updating particleInCell 8:
+		Changing its coords from (0.363536,0.285455,0.297819) to (0.353469,0.301415,0.309657):
+		Updating particleInCell 9:
+		Changing its coords from (0.376391,0.295306,0.410844) to (0.362038,0.307982,0.385007):
+		Updating particleInCell 10:
+		Changing its coords from (0.388347,0.287883,0.448656) to (0.370009,0.303033,0.410215):
+		Updating particleInCell 11:
+		Changing its coords from (0.372907,0.304988,0.339761) to (0.359715,0.314436,0.337618):
+		Updating particleInCell 12:
+		Changing its coords from (0.386240,0.314850,0.365889) to (0.368604,0.321011,0.355037):
+		Updating particleInCell 13:
+		Changing its coords from (0.378099,0.270118,0.352095) to (0.363177,0.291190,0.345841):
+		Updating particleInCell 14:
+		Changing its coords from (0.394311,0.281484,0.363285) to (0.373985,0.298767,0.353301):
+		Updating particleInCell 15:
+		Changing its coords from (0.390275,0.319049,0.428235) to (0.371295,0.323811,0.396601):
+		Updating particleInCell 16:
+		Changing its coords from (0.403171,0.278538,0.299325) to (0.379892,0.296803,0.310661):
+		Updating particleInCell 17:
+		Changing its coords from (0.404237,0.326464,0.402716) to (0.380603,0.328754,0.379589):
+		Updating particleInCell 18:
+		Changing its coords from (0.411459,0.294677,0.287374) to (0.385417,0.307563,0.302694):
+		Updating particleInCell 19:
+		Changing its coords from (0.409191,0.303313,0.360153) to (0.383905,0.313320,0.351213):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.429012,0.323763,0.348973) to (0.397119,0.326953,0.343760):
+		Updating particleInCell 1:
+		Changing its coords from (0.433468,0.329017,0.407413) to (0.400090,0.330456,0.382720):
+		Updating particleInCell 2:
+		Changing its coords from (0.438750,0.304988,0.339761) to (0.403611,0.314436,0.337618):
+		Updating particleInCell 3:
+		Changing its coords from (0.442234,0.295306,0.410844) to (0.405934,0.307982,0.385007):
+		Updating particleInCell 4:
+		Changing its coords from (0.427291,0.279533,0.284857) to (0.395972,0.297466,0.301016):
+		Updating particleInCell 5:
+		Changing its coords from (0.420067,0.301941,0.336319) to (0.391156,0.312405,0.335324):
+		Updating particleInCell 6:
+		Changing its coords from (0.429380,0.285455,0.297819) to (0.397364,0.301415,0.309657):
+		Updating particleInCell 7:
+		Changing its coords from (0.443943,0.270118,0.352095) to (0.407073,0.291190,0.345841):
+		Updating particleInCell 8:
+		Changing its coords from (0.460155,0.281484,0.363285) to (0.417881,0.298767,0.353301):
+		Updating particleInCell 9:
+		Changing its coords from (0.454191,0.287883,0.448656) to (0.413905,0.303033,0.410215):
+		Updating particleInCell 10:
+		Changing its coords from (0.452083,0.314850,0.365889) to (0.412500,0.321011,0.355037):
+		Updating particleInCell 11:
+		Changing its coords from (0.456119,0.319049,0.428235) to (0.415190,0.323811,0.396601):
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.334061,0.336769,0.280075) to (0.333819,0.335624,0.297828):
+		Updating particleInCell 1:
+		Changing its coords from (0.363908,0.338055,0.423528) to (0.353716,0.336481,0.393463):
+		Updating particleInCell 2:
+		Changing its coords from (0.335409,0.358796,0.345035) to (0.334717,0.350309,0.341134):
+		Updating particleInCell 3:
+		Changing its coords from (0.365448,0.361964,0.414603) to (0.354743,0.352421,0.387513):
+		Updating particleInCell 4:
+		Changing its coords from (0.369392,0.356456,0.369435) to (0.357372,0.348748,0.357401):
+		Updating particleInCell 5:
+		Changing its coords from (0.354394,0.368279,0.399677) to (0.347374,0.356631,0.377562):
+		Updating particleInCell 6:
+		Changing its coords from (0.376010,0.335785,0.309193) to (0.361785,0.334968,0.317240):
+		Updating particleInCell 7:
+		Changing its coords from (0.387930,0.333880,0.400205) to (0.369731,0.333697,0.377914):
+		Updating particleInCell 8:
+		Changing its coords from (0.383532,0.355370,0.441680) to (0.366799,0.348024,0.405565):
+		Updating particleInCell 9:
+		Changing its coords from (0.334829,0.376837,0.304150) to (0.334330,0.362336,0.313878):
+		Updating particleInCell 10:
+		Changing its coords from (0.369369,0.377579,0.342383) to (0.357357,0.362831,0.339367):
+		Updating particleInCell 11:
+		Changing its coords from (0.388527,0.374666,0.377903) to (0.370129,0.360888,0.363046):
+		Updating particleInCell 12:
+		Changing its coords from (0.342636,0.390244,0.450388) to (0.339535,0.371274,0.411370):
+		Updating particleInCell 13:
+		Changing its coords from (0.349862,0.395964,0.417139) to (0.344352,0.375087,0.389204):
+		Updating particleInCell 14:
+		Changing its coords from (0.381748,0.396131,0.415919) to (0.365610,0.375198,0.388391):
+		Updating particleInCell 15:
+		Changing its coords from (0.385996,0.391876,0.413542) to (0.368442,0.372362,0.386806):
+		Updating particleInCell 16:
+		Changing its coords from (0.348058,0.405876,0.343059) to (0.343150,0.381695,0.339817):
+		Updating particleInCell 17:
+		Changing its coords from (0.363078,0.413735,0.392484) to (0.353163,0.386935,0.372767):
+		Updating particleInCell 18:
+		Changing its coords from (0.369653,0.400928,0.282862) to (0.357546,0.378397,0.299685):
+		Updating particleInCell 19:
+		Changing its coords from (0.397843,0.408553,0.382489) to (0.376339,0.383480,0.366104):
+		Updating particleInCell 20:
+		Changing its coords from (0.399905,0.336769,0.280075) to (0.377714,0.335624,0.297828):
+		Updating particleInCell 21:
+		Changing its coords from (0.401253,0.358796,0.345035) to (0.378613,0.350309,0.341134):
+		Updating particleInCell 22:
+		Changing its coords from (0.400672,0.376837,0.304150) to (0.378226,0.362336,0.313878):
+		Updating particleInCell 23:
+		Changing its coords from (0.408480,0.390244,0.450388) to (0.383431,0.371274,0.411370):
+		Updating particleInCell 24:
+		Changing its coords from (0.415705,0.395964,0.417139) to (0.388248,0.375087,0.389204):
+		Updating particleInCell 25:
+		Changing its coords from (0.413902,0.405876,0.343059) to (0.387046,0.381695,0.339817):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.435235,0.356456,0.369435) to (0.401268,0.348748,0.357401):
+		Updating particleInCell 1:
+		Changing its coords from (0.435213,0.377579,0.342383) to (0.401253,0.362831,0.339367):
+		Updating particleInCell 2:
+		Changing its coords from (0.441854,0.335785,0.309193) to (0.405680,0.334968,0.317240):
+		Updating particleInCell 3:
+		Changing its coords from (0.429751,0.338055,0.423528) to (0.397612,0.336481,0.393463):
+		Updating particleInCell 4:
+		Changing its coords from (0.431291,0.361964,0.414603) to (0.398639,0.352421,0.387513):
+		Updating particleInCell 5:
+		Changing its coords from (0.420237,0.368279,0.399677) to (0.391269,0.356631,0.377562):
+		Updating particleInCell 6:
+		Changing its coords from (0.428921,0.413735,0.392484) to (0.397059,0.386935,0.372767):
+		Updating particleInCell 7:
+		Changing its coords from (0.435496,0.400928,0.282862) to (0.401442,0.378397,0.299685):
+		Updating particleInCell 8:
+		Changing its coords from (0.453774,0.333880,0.400205) to (0.413627,0.333697,0.377914):
+		Updating particleInCell 9:
+		Changing its coords from (0.449376,0.355370,0.441680) to (0.410695,0.348024,0.405565):
+		Updating particleInCell 10:
+		Changing its coords from (0.451839,0.391876,0.413542) to (0.412337,0.372362,0.386806):
+		Updating particleInCell 11:
+		Changing its coords from (0.447592,0.396131,0.415919) to (0.409506,0.375198,0.388391):
+		Updating particleInCell 12:
+		Changing its coords from (0.454371,0.374666,0.377903) to (0.414025,0.360888,0.363046):
+		Updating particleInCell 13:
+		Changing its coords from (0.463686,0.408553,0.382489) to (0.420235,0.383480,0.366104):
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.346308,0.418567,0.413021) to (0.341983,0.390156,0.386459):
+		Updating particleInCell 1:
+		Changing its coords from (0.360240,0.430602,0.356672) to (0.351271,0.398179,0.348893):
+		Updating particleInCell 2:
+		Changing its coords from (0.382265,0.438824,0.341820) to (0.365954,0.403660,0.338991):
+		Updating particleInCell 3:
+		Changing its coords from (0.366028,0.443041,0.359679) to (0.355130,0.406472,0.350897):
+		Updating particleInCell 4:
+		Changing its coords from (0.335563,0.432888,0.341968) to (0.334820,0.399703,0.339090):
+		Updating particleInCell 5:
+		Changing its coords from (0.368761,0.421535,0.331058) to (0.356952,0.392135,0.331816):
+		Updating particleInCell 6:
+		Changing its coords from (0.394323,0.424900,0.312975) to (0.373993,0.394378,0.319761):
+		Updating particleInCell 7:
+		Changing its coords from (0.389206,0.441920,0.420496) to (0.370582,0.405724,0.391441):
+		Updating particleInCell 8:
+		Changing its coords from (0.342630,0.456311,0.348220) to (0.339531,0.415319,0.343258):
+		Updating particleInCell 9:
+		Changing its coords from (0.365958,0.455171,0.273844) to (0.355083,0.414558,0.293673):
+		Updating particleInCell 10:
+		Changing its coords from (0.376488,0.453398,0.419937) to (0.362103,0.413376,0.391069):
+		Updating particleInCell 11:
+		Changing its coords from (0.383042,0.450057,0.313576) to (0.366473,0.411149,0.320162):
+		Updating particleInCell 12:
+		Changing its coords from (0.401407,0.432888,0.341968) to (0.378716,0.399703,0.339090):
+		Updating particleInCell 13:
+		Changing its coords from (0.412151,0.418567,0.413021) to (0.385879,0.390156,0.386459):
+		Updating particleInCell 14:
+		Changing its coords from (0.408474,0.456311,0.348220) to (0.383427,0.415319,0.343258):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.431871,0.443041,0.359679) to (0.399025,0.406472,0.350897):
+		Updating particleInCell 1:
+		Changing its coords from (0.442332,0.453398,0.419937) to (0.405999,0.413376,0.391069):
+		Updating particleInCell 2:
+		Changing its coords from (0.434604,0.421535,0.331058) to (0.400847,0.392135,0.331816):
+		Updating particleInCell 3:
+		Changing its coords from (0.426083,0.430602,0.356672) to (0.395167,0.398179,0.348893):
+		Updating particleInCell 4:
+		Changing its coords from (0.431801,0.455171,0.273844) to (0.398979,0.414558,0.293673):
+		Updating particleInCell 5:
+		Changing its coords from (0.455050,0.441920,0.420496) to (0.414478,0.405724,0.391441):
+		Updating particleInCell 6:
+		Changing its coords from (0.448109,0.438824,0.341820) to (0.409850,0.403660,0.338991):
+		Updating particleInCell 7:
+		Changing its coords from (0.460166,0.424900,0.312975) to (0.417889,0.394378,0.319761):
+		Updating particleInCell 8:
+		Changing its coords from (0.448886,0.450057,0.313576) to (0.410368,0.411149,0.320162):
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,401 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 1 - Implosive mode
+	Updating Particles positions in local cell 0:
+		Updating particleInCell 0:
+		Changing its coords from (0.686885,0.055930,0.161165) to (0.569034,0.148398,0.218555):
+	Updating Particles positions in local cell 1:
+		Updating particleInCell 0:
+		Changing its coords from (0.808992,0.060967,0.087923) to (0.650439,0.151756,0.169726):
+	Updating Particles positions in local cell 2:
+		Updating particleInCell 0:
+		Changing its coords from (0.893294,0.013305,0.428316) to (0.706641,0.119981,0.396655):
+	Updating Particles positions in local cell 3:
+		Updating particleInCell 0:
+		Changing its coords from (0.975367,0.070846,0.484961) to (0.761356,0.158342,0.434419):
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.728846,0.137637,0.100663) to (0.597009,0.202869,0.178219):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.819570,0.090950,0.153544) to (0.657491,0.171744,0.213474):
+	Updating Particles positions in local cell 6:
+		Updating particleInCell 0:
+		Changing its coords from (0.884645,0.140818,0.725730) to (0.700874,0.204990,0.594931):
+	Updating Particles positions in local cell 7:
+		Updating particleInCell 0:
+		Changing its coords from (0.945173,0.103240,0.917154) to (0.741226,0.179938,0.722547):
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.717361,0.181355,0.469106) to (0.589352,0.232015,0.423849):
+	Updating Particles positions in local cell 9:
+		Updating particleInCell 0:
+		Changing its coords from (0.772422,0.174408,0.348450) to (0.626059,0.227383,0.343411):
+	Updating Particles positions in local cell 10:
+		Updating particleInCell 0:
+		Changing its coords from (0.867006,0.189833,0.365872) to (0.689115,0.237667,0.355026):
+	Updating Particles positions in local cell 11:
+		Updating particleInCell 0:
+		Changing its coords from (0.934506,0.239764,0.498144) to (0.734115,0.270954,0.443207):
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.692284,0.298560,0.684585) to (0.572634,0.310151,0.567501):
+	Updating Particles positions in local cell 13:
+		Updating particleInCell 0:
+		Changing its coords from (0.817707,0.284883,0.412512) to (0.656249,0.301033,0.386119):
+	Updating Particles positions in local cell 14:
+		Updating particleInCell 0:
+		Changing its coords from (0.840264,0.311481,0.708363) to (0.671287,0.318765,0.583353):
+	Updating Particles positions in local cell 15:
+		Updating particleInCell 0:
+		Changing its coords from (0.954935,0.261021,0.813771) to (0.747735,0.285125,0.653625):
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.670352,0.350727,0.063715) to (0.558012,0.344929,0.153588):
+	Updating Particles positions in local cell 17:
+		Updating particleInCell 0:
+		Changing its coords from (0.821450,0.357236,0.789944) to (0.658744,0.349268,0.637741):
+	Updating Particles positions in local cell 18:
+		Updating particleInCell 0:
+		Changing its coords from (0.882718,0.345745,0.211121) to (0.699590,0.341608,0.251859):
+	Updating Particles positions in local cell 19:
+		Updating particleInCell 0:
+		Changing its coords from (0.943065,0.336098,0.671870) to (0.739821,0.335177,0.559025):
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.677176,0.462240,0.392572) to (0.562562,0.419271,0.372826):
+	Updating Particles positions in local cell 21:
+		Updating particleInCell 0:
+		Changing its coords from (0.829246,0.478277,0.744761) to (0.663942,0.429962,0.607618):
+	Updating Particles positions in local cell 22:
+		Updating particleInCell 0:
+		Changing its coords from (0.849212,0.450390,0.516097) to (0.677252,0.411371,0.455176):
+	Updating Particles positions in local cell 23:
+		Updating particleInCell 0:
+		Changing its coords from (0.920799,0.444893,0.881840) to (0.724977,0.407707,0.699005):
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.674236,0.553570,0.185594) to (0.560602,0.480158,0.234840):
+	Updating Particles positions in local cell 25:
+		Updating particleInCell 0:
+		Changing its coords from (0.773285,0.510247,0.669197) to (0.626634,0.451276,0.557242):
+	Updating Particles positions in local cell 26:
+		Updating particleInCell 0:
+		Changing its coords from (0.849099,0.557329,0.379149) to (0.677177,0.482664,0.363877):
+	Updating Particles positions in local cell 27:
+		Updating particleInCell 0:
+		Changing its coords from (0.946087,0.542579,0.558967) to (0.741835,0.472831,0.483756):
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.713762,0.621442,0.925924) to (0.586953,0.525406,0.728394):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.750341,0.650402,0.757598) to (0.611339,0.544713,0.616176):
+	Updating Particles positions in local cell 30:
+		Updating particleInCell 0:
+		Changing its coords from (0.911767,0.651245,0.751425) to (0.718956,0.545275,0.612061):
+	Updating Particles positions in local cell 31:
+		Updating particleInCell 0:
+		Changing its coords from (0.933270,0.629707,0.739388) to (0.733291,0.530915,0.604036):
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.741211,0.700583,0.382567) to (0.605252,0.578166,0.366156):
+	Updating Particles positions in local cell 33:
+		Updating particleInCell 0:
+		Changing its coords from (0.817248,0.740369,0.632784) to (0.655943,0.604691,0.532967):
+	Updating Particles positions in local cell 34:
+		Updating particleInCell 0:
+		Changing its coords from (0.850534,0.675532,0.077820) to (0.678134,0.561466,0.162991):
+	Updating Particles positions in local cell 35:
+		Updating particleInCell 0:
+		Changing its coords from (0.993245,0.714135,0.582185) to (0.773274,0.587201,0.499235):
+	Updating Particles positions in local cell 36:
+		Updating particleInCell 0:
+		Changing its coords from (0.732350,0.764829,0.736755) to (0.599344,0.620997,0.602281):
+	Updating Particles positions in local cell 37:
+		Updating particleInCell 0:
+		Changing its coords from (0.802879,0.825754,0.451488) to (0.646364,0.661614,0.412103):
+	Updating Particles positions in local cell 38:
+		Updating particleInCell 0:
+		Changing its coords from (0.846018,0.779855,0.321813) to (0.675123,0.631015,0.325653):
+	Updating Particles positions in local cell 39:
+		Updating particleInCell 0:
+		Changing its coords from (0.975425,0.796891,0.230269) to (0.761394,0.642372,0.264624):
+	Updating Particles positions in local cell 40:
+		Updating particleInCell 0:
+		Changing its coords from (0.677957,0.837327,0.377044) to (0.563082,0.669329,0.362474):
+	Updating Particles positions in local cell 41:
+		Updating particleInCell 0:
+		Changing its coords from (0.832181,0.888729,0.466709) to (0.665899,0.703597,0.422250):
+	Updating Particles positions in local cell 42:
+		Updating particleInCell 0:
+		Changing its coords from (0.914383,0.867379,0.376295) to (0.720700,0.689363,0.361975):
+	Updating Particles positions in local cell 43:
+		Updating particleInCell 0:
+		Changing its coords from (0.949523,0.883054,0.774592) to (0.744126,0.699813,0.627506):
+	Updating Particles positions in local cell 44:
+		Updating particleInCell 0:
+		Changing its coords from (0.713733,0.955908,0.408698) to (0.586933,0.748383,0.383576):
+	Updating Particles positions in local cell 45:
+		Updating particleInCell 0:
+		Changing its coords from (0.831828,0.950135,0.032166) to (0.665663,0.744534,0.132555):
+	Updating Particles positions in local cell 46:
+		Updating particleInCell 0:
+		Changing its coords from (0.885139,0.941159,0.771763) to (0.701204,0.738551,0.625620):
+	Updating Particles positions in local cell 47:
+		Updating particleInCell 0:
+		Changing its coords from (0.918318,0.924249,0.233312) to (0.723323,0.727277,0.266652):
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 2 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+		Updating particleInCell 0:
+		Changing its coords from (0.706641,0.119981,0.396655) to (0.582205,0.191099,0.375548):
+	Updating Particles positions in local cell 5:
+		Updating particleInCell 0:
+		Changing its coords from (0.761356,0.158342,0.434419) to (0.618681,0.216672,0.400724):
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+		Updating particleInCell 0:
+		Changing its coords from (0.741226,0.179938,0.722547) to (0.605262,0.231070,0.592809):
+		Updating particleInCell 1:
+		Changing its coords from (0.700874,0.204990,0.594931) to (0.578361,0.247771,0.507732):
+		Updating particleInCell 2:
+		Changing its coords from (0.689115,0.237667,0.355026) to (0.570521,0.269556,0.347795):
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+		Updating particleInCell 0:
+		Changing its coords from (0.734115,0.270954,0.443207) to (0.600521,0.291747,0.406583):
+		Updating particleInCell 1:
+		Changing its coords from (0.671287,0.318765,0.583353) to (0.558636,0.323621,0.500013):
+		Updating particleInCell 2:
+		Changing its coords from (0.747735,0.285125,0.653625) to (0.609601,0.301195,0.546861):
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+		Updating particleInCell 0:
+		Changing its coords from (0.699590,0.341608,0.251859) to (0.577504,0.338850,0.279017):
+		Updating particleInCell 1:
+		Changing its coords from (0.739821,0.335177,0.559025) to (0.604325,0.334562,0.483794):
+		Updating particleInCell 2:
+		Changing its coords from (0.677252,0.411371,0.455176) to (0.562613,0.385359,0.414562):
+		Updating particleInCell 3:
+		Changing its coords from (0.724977,0.407707,0.699005) to (0.594429,0.382916,0.577114):
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+		Updating particleInCell 0:
+		Changing its coords from (0.677177,0.482664,0.363877) to (0.562563,0.432887,0.353696):
+		Updating particleInCell 1:
+		Changing its coords from (0.741835,0.472831,0.483756) to (0.605668,0.426332,0.433615):
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+		Updating particleInCell 0:
+		Changing its coords from (0.718956,0.545275,0.612061) to (0.590415,0.474628,0.519152):
+		Updating particleInCell 1:
+		Changing its coords from (0.733291,0.530915,0.604036) to (0.599972,0.465055,0.513802):
+		Updating particleInCell 2:
+		Changing its coords from (0.678134,0.561466,0.162991) to (0.563200,0.485422,0.219772):
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+		Updating particleInCell 0:
+		Changing its coords from (0.675123,0.631015,0.325653) to (0.561193,0.531788,0.328213):
+	Updating Particles positions in local cell 29:
+		Updating particleInCell 0:
+		Changing its coords from (0.773274,0.587201,0.499235) to (0.626627,0.502578,0.443934):
+		Updating particleInCell 1:
+		Changing its coords from (0.761394,0.642372,0.264624) to (0.618707,0.539359,0.287527):
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+		Updating particleInCell 0:
+		Changing its coords from (0.720700,0.689363,0.361975) to (0.591578,0.570687,0.352428):
+		Updating particleInCell 1:
+		Changing its coords from (0.744126,0.699813,0.627506) to (0.607195,0.577653,0.529448):
+		Updating particleInCell 2:
+		Changing its coords from (0.701204,0.738551,0.625620) to (0.578580,0.603478,0.528191):
+		Updating particleInCell 3:
+		Changing its coords from (0.723323,0.727277,0.266652) to (0.593327,0.595963,0.288879):
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 3 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 4 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+Timestep 5 - Implosive mode
+	Updating Particles positions in local cell 0:
+	Updating Particles positions in local cell 1:
+	Updating Particles positions in local cell 2:
+	Updating Particles positions in local cell 3:
+	Updating Particles positions in local cell 4:
+	Updating Particles positions in local cell 5:
+	Updating Particles positions in local cell 6:
+	Updating Particles positions in local cell 7:
+	Updating Particles positions in local cell 8:
+	Updating Particles positions in local cell 9:
+	Updating Particles positions in local cell 10:
+	Updating Particles positions in local cell 11:
+	Updating Particles positions in local cell 12:
+	Updating Particles positions in local cell 13:
+	Updating Particles positions in local cell 14:
+	Updating Particles positions in local cell 15:
+	Updating Particles positions in local cell 16:
+	Updating Particles positions in local cell 17:
+	Updating Particles positions in local cell 18:
+	Updating Particles positions in local cell 19:
+	Updating Particles positions in local cell 20:
+	Updating Particles positions in local cell 21:
+	Updating Particles positions in local cell 22:
+	Updating Particles positions in local cell 23:
+	Updating Particles positions in local cell 24:
+	Updating Particles positions in local cell 25:
+	Updating Particles positions in local cell 26:
+	Updating Particles positions in local cell 27:
+	Updating Particles positions in local cell 28:
+	Updating Particles positions in local cell 29:
+	Updating Particles positions in local cell 30:
+	Updating Particles positions in local cell 31:
+	Updating Particles positions in local cell 32:
+	Updating Particles positions in local cell 33:
+	Updating Particles positions in local cell 34:
+	Updating Particles positions in local cell 35:
+	Updating Particles positions in local cell 36:
+	Updating Particles positions in local cell 37:
+	Updating Particles positions in local cell 38:
+	Updating Particles positions in local cell 39:
+	Updating Particles positions in local cell 40:
+	Updating Particles positions in local cell 41:
+	Updating Particles positions in local cell 42:
+	Updating Particles positions in local cell 43:
+	Updating Particles positions in local cell 44:
+	Updating Particles positions in local cell 45:
+	Updating Particles positions in local cell 46:
+	Updating Particles positions in local cell 47:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleAdvection testSwarmParticleAdvectionSingleAttractor.xml --particleCommInfo=False" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,124 @@
+<?xml version="1.0"?>
+<!--
+   "single attractor" or "reverse big bang" test: attracts all
+   the particles towards a central point, but after a user-specified
+   timestep reverse this to the original positions, then repeats this
+   periodically. While unrealistic for Snark, this is a useful "extreme"
+   test to see if one processor can temporarily handle all the
+   particles, then free the memory again.
+
+   PatrickSunter - 11 May 2006
+-->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins" mergeType="merge">
+		<param>StGermain_SingleAttractor</param>
+	</list>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+	<include>testParticleCoords.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">RandomParticleLayout</param>
+			<!--<param name="cellParticleCount">8</param>-->
+			<param name="cellParticleCount">1</param>
+			<param name="seed">13</param>
+		</struct>
+	</struct>
+	<param name="dim">3</param>
+	<param name="maxTimeSteps">5</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">12</param>
+	<param name="elementResJ">12</param>
+	<param name="elementResK">1</param>
+
+	<param name="movementSpeedDivisor">3</param>
+
+<!--	
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">0.5</param>
+			<param name="coordY">0.5</param>
+			<param name="coordZ">1.6</param>
+			<param name="focalPointX">0.5</param>
+			<param name="focalPointY">0.5</param>
+			<param name="focalPointZ">0.5</param>
+		</struct>
+		<struct name="particles">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="pointSize">5.0</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+		</struct>	
+		<struct name="ParticleColourMap">
+			<param name="Type">lucColourMap</param>
+			<param name="colours">Red Orange Yellow Green Blue Indigo Violet</param>
+			<param name="minimum">0.0</param>
+			<param name="maximum">1.0</param>
+			<param name="dynamicRange">t</param>
+		</struct>
+		<struct name="particleDirs">
+			<param name="Type">lucSwarmVectors</param>
+			<param name="Swarm">swarm</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+			<param name="DirectionVariable">swarm-Velocity</param>
+			<param name="arrowHeadSize">0.1</param>
+			<param name="length">2</param>
+		</struct>	
+		<struct name="meshView">
+			<param name="Type">lucMeshViewer</param>
+			<param name="Mesh">mesh-linear</param>
+			<param name="colour">blue</param>	
+		</struct>	
+		<struct name="particlesViewport">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particles</param>
+				<param>particleDirs</param>
+				<param>meshView</param>
+			</list>
+		</struct>
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="imageOutput">
+			<param name="Type">lucOutputPNG</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="Viewport">particlesViewport</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<list name="OutputFormat">
+				<param>imageOutput</param>
+			</list>
+			<param name="height">640</param>
+			<param name="width">640</param>
+			<param name="backgroundColour">white</param>
+		</struct>
+		<struct name="movie">
+			<param name="Type">lucEncoderLibfame</param>
+			<param name="Window">window</param>
+		</struct>	
+	</struct>
+	
+	<param name="interactive">true</param>
+-->	
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSpinner.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSpinner.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>
+<!--
+   "Spinner" test: advects particles around in a vortex
+   based on a sinusoidal velocity field from a paper on level
+   sets Dave May kindly provided me. Another fairly realistic
+   test.
+
+   PatrickSunter - 11 May 2006
+-->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins" mergeType="merge">
+		<param>StGermain_Spinner</param>
+	</list>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+	<!--include>testParticleCoords.xml</include-->
+
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">RandomParticleLayout</param>
+			<param name="cellParticleCount">8</param>
+			<param name="seed">13</param>
+		</struct>
+	</struct>
+	<param name="dim">2</param>
+	<param name="maxTimeSteps">200</param> 
+	<param name="dumpEvery">10</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param>
+	<param name="elementResK">10</param>
+
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">0.5</param>
+			<param name="coordY">0.5</param>
+			<param name="coordZ">1.6</param>
+			<param name="focalPointX">0.5</param>
+			<param name="focalPointY">0.5</param>
+			<param name="focalPointZ">0.5</param>
+		</struct>
+		<struct name="particles">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="pointSize">5.0</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+		</struct>	
+		<struct name="ParticleColourMap">
+			<param name="Type">lucColourMap</param>
+			<param name="colours">Red Orange Yellow Green Blue Indigo Violet</param>
+			<param name="minimum">0.0</param>
+			<param name="maximum">1.0</param>
+			<param name="dynamicRange">t</param>
+		</struct>
+		<struct name="particleDirs">
+			<param name="Type">lucSwarmVectors</param>
+			<param name="Swarm">swarm</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+			<param name="DirectionVariable">swarm-Velocity</param>
+			<param name="arrowHeadSize">0.1</param>
+			<param name="length">10</param>
+		</struct>	
+		<struct name="elementCellLayout"> 
+			<param name="Type">ElementCellLayout</param>
+			<param name="Mesh">linearMesh</param>
+		</struct>
+
+		<struct name="pMovementHandler"> 
+			<param name="Type">ParticleMovementHandler</param>
+		</struct>
+		
+		<struct name="pShadowSync"> 
+			<param name="Type">ParticleShadowSync</param>
+		</struct>
+		
+		<struct name="swarm">
+			<param name="Type">Swarm</param>
+			<param name="CellLayout">elementCellLayout</param>
+			<param name="ParticleLayout">particleLayout</param>
+			<list name="ParticleCommHandlers">
+				<param>pMovementHandler</param>
+				<param>pShadowSync</param>
+			</list>			
+		</struct>
+		<struct name="linearMesh">
+			<param name="Type">Mesh</param>
+			<param name="ElementSize">8</param>
+			<param name="NodeSize">0</param>
+		</struct>
+		<struct name="linearMeshGenerator" mergeType="merge">
+			<param name="Type">CartesianGenerator</param>
+			<param name="mesh">linearMesh</param>
+			<param name="dims">dim</param>
+			<list name="enabledDims">
+				<param>0</param>
+				<param>1</param>
+				<param>2</param>
+			</list>
+			<list name="enabledIncidence" mergeType="merge">
+				<param>0</param><param>0</param>
+				<param>0</param><param>1</param>
+				<param>0</param><param>2</param>
+				<param>1</param><param>0</param>
+				<param>1</param><param>2</param>
+				<param>2</param><param>0</param>
+				<param>2</param><param>1</param>
+			</list>
+			<list name="size">
+				<param>elementResI</param>
+				<param>elementResJ</param>
+				<param>elementResK</param>
+			</list>
+			<list name="minCoord">
+				<param> minX </param>
+				<param> minY </param>
+				<param> minZ </param>
+			</list>
+			<list name="maxCoord">
+				<param> maxX </param>
+				<param> maxY </param>
+				<param> maxZ </param>
+			</list>
+		</struct>
+		<struct name="linearMeshView">
+			<param name="Type">lucMeshViewer</param>
+			<param name="Mesh">linearMesh</param>
+			<param name="colour">blue</param>	
+		</struct>
+
+		<struct name="particlesViewport">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particles</param>
+				<param>particleDirs</param>
+				<param>linearMeshView</param>
+			</list>
+		</struct>
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="imageOutput">
+			<param name="Type">lucOutputPNG</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="Viewport">particlesViewport</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<list name="OutputFormat">
+				<param>imageOutput</param>
+			</list>
+			<param name="height">640</param>
+			<param name="width">640</param>
+			<param name="backgroundColour">white</param>
+		</struct>
+		<struct name="movie">
+			<param name="Type">lucEncoderLibfame</param>
+			<param name="Window">window</param>
+		</struct>	
+	</struct>
+	
+	<param name="interactive"> true </param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>
+<!--
+   "SpinnerSphere" XML, based on the "Spinner" field but
+   only creates a circular swarm within a certain region. This
+   can be advected forward, then back, to test if the shape
+   is recovered. Could be a good test to use for integration
+   schemes too since recovering the shape depends on timestep
+   and integration order.
+
+  PatrickSunter - 11 May 2006
+-->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins" mergeType="merge">
+		<param>StGermain_Spinner</param>
+	</list>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+	<include>testParticleCoords.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="sphere">
+			<param name="Type">Sphere</param>
+			<param name="radius">0.15</param>
+			<param name="CentreX">0.5</param>
+			<param name="CentreY">0.75</param>
+		</struct>
+		<struct name="particleLayout">
+			<param name="Type">WithinShapeParticleLayout</param>
+			<param name="averageInitialParticlesPerCell">8</param>
+			<param name="shape">sphere</param>
+		</struct>
+	</struct>
+	<param name="dim">2</param>
+	<param name="maxTimeSteps">61</param> 
+	<param name="dumpEvery">1</param> 
+	<param name="reverseTimeStep">31</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param>
+	<param name="elementResK">10</param>
+
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">0.5</param>
+			<param name="coordY">0.5</param>
+			<param name="coordZ">1.6</param>
+			<param name="focalPointX">0.5</param>
+			<param name="focalPointY">0.5</param>
+			<param name="focalPointZ">0.5</param>
+		</struct>
+		<struct name="particles">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="pointSize">5.0</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+		</struct>	
+		<struct name="ParticleColourMap">
+			<param name="Type">lucColourMap</param>
+			<param name="colours">Red Orange Yellow Green Blue Indigo Violet</param>
+			<param name="minimum">0.0</param>
+			<param name="maximum">1.0</param>
+			<param name="dynamicRange">t</param>
+		</struct>
+		<!--
+		<struct name="particleDirs">
+			<param name="Type">lucSwarmVectors</param>
+			<param name="Swarm">swarm</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+			<param name="DirectionVariable">swarm-Velocity</param>
+			<param name="arrowHeadSize">0.1</param>
+			<param name="length">10</param>
+		</struct>	
+		-->
+		<struct name="meshView">
+			<param name="Type">lucMeshViewer</param>
+			<param name="Mesh">mesh-linear</param>
+			<param name="colour">blue</param>	
+		</struct>	
+		<struct name="particlesViewport">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particles</param>
+				<!--<param>particleDirs</param>-->
+				<param>meshView</param>
+			</list>
+		</struct>
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="imageOutput">
+			<param name="Type">lucOutputPNG</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="Viewport">particlesViewport</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<list name="OutputFormat">
+				<param>imageOutput</param>
+			</list>
+			<param name="height">640</param>
+			<param name="width">640</param>
+			<param name="backgroundColour">white</param>
+		</struct>
+		<struct name="movie">
+			<param name="Type">lucEncoderLibfame</param>
+			<param name="Window">window</param>
+		</struct>	
+	</struct>
+	
+	<param name="interactive">true</param>
+<!--	
+-->	
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+<?xml version="1.0"?>
+<!--
+   "VaryingCornerAttractors" advection, a modification of
+   the singleAttractor, where the particles are periodically attracted
+   to the different corners, and thus end up as a tight bunch moving
+   between all processors - another extreme test to see if procs
+   can successfully pass a big tight bunch of processors to each other
+
+   - PatrickSunter - 11 May 2006
+   -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins" mergeType="merge">
+		<param>StGermain_VaryingCornerAttractors</param>
+	</list>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+	<include>testParticleCoords.xml</include>
+
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">RandomParticleLayout</param>
+			<param name="cellParticleCount">8</param>
+			<param name="seed">13</param>
+		</struct>
+	</struct>
+	<param name="dim">2</param>
+	<param name="maxTimeSteps">50</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param>
+	<param name="elementResK">10</param>
+
+<!--
+	<list name="plugins" mergeType="merge">
+		<param>lucPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+		<struct name="camera">
+			<param name="Type">lucCamera</param>
+			<param name="coordX">0.5</param>
+			<param name="coordY">0.5</param>
+			<param name="coordZ">1.6</param>
+			<param name="focalPointX">0.5</param>
+			<param name="focalPointY">0.5</param>
+			<param name="focalPointZ">0.5</param>
+		</struct>
+		<struct name="particles">
+			<param name="Type">lucSwarmViewer</param>
+			<param name="Swarm">swarm</param>
+			<param name="pointSize">5.0</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+		</struct>	
+		<struct name="ParticleColourMap">
+			<param name="Type">lucColourMap</param>
+			<param name="colours">Red Orange Yellow Green Blue Indigo Violet</param>
+			<param name="minimum">0.0</param>
+			<param name="maximum">1.0</param>
+			<param name="dynamicRange">t</param>
+		</struct>
+		<struct name="particleDirs">
+			<param name="Type">lucSwarmVectors</param>
+			<param name="Swarm">swarm</param>
+			<param name="ColourVariable">swarm-RandomColour</param>
+			<param name="ColourMap">ParticleColourMap</param>
+			<param name="DirectionVariable">swarm-Velocity</param>
+			<param name="arrowHeadSize">0.1</param>
+			<param name="length">2</param>
+		</struct>	
+		<struct name="meshView">
+			<param name="Type">lucMeshViewer</param>
+			<param name="Mesh">mesh-linear</param>
+			<param name="colour">blue</param>	
+		</struct>	
+		<struct name="particlesViewport">
+			<param name="Type">lucViewport</param>
+			<param name="Camera">camera</param>
+			<list name="DrawingObject">
+				<param>particles</param>
+				<param>particleDirs</param>
+				<param>meshView</param>
+			</list>
+		</struct>
+		<struct name="renderingEngine">
+			<param name="Type">lucRenderingEngineGL</param>
+		</struct>
+		<struct name="imageOutput">
+			<param name="Type">lucOutputPNG</param>
+		</struct>
+		<struct name="window">
+			<param name="Type">lucDefaultWindow</param>
+			<param name="Viewport">particlesViewport</param>
+			<param name="RenderingEngine">renderingEngine</param>
+			<list name="OutputFormat">
+				<param>imageOutput</param>
+			</list>
+			<param name="height">640</param>
+			<param name="width">640</param>
+			<param name="backgroundColour">white</param>
+		</struct>
+		<struct name="movie">
+			<param name="Type">lucEncoderLibfame</param>
+			<param name="Window">window</param>
+		</struct>	
+	</struct>
+	
+	<param name="interactive">true</param>
+-->	
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,28 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Cartesian generator: 'cartesianGenerator'
+	Target mesh: 'mesh-linear'
+	Global element size: 12x12x12
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 6x12x12
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Shadow particle validation: passed
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleShadowSync testSwarmParticleShadowSync.xml " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,28 @@
+StGermain Framework revision 4149. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Cartesian generator: 'cartesianGenerator'
+	Target mesh: 'mesh-linear'
+	Global element size: 12x12x12
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 4x12x12
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+Run until 5 timeSteps have been run
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+Shadow particle validation: passed
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSwarmParticleShadowSync testSwarmParticleShadowSync.xml " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,396 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Tests that particles can be successfully moved between cells. The problem is set up with a 
+**	"gravitational attractor" in the exact middle of the domain - all particles are sucked in
+**	towards it each timestep.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testSwarmParticleAdvection.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <unistd.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+	double  velocity[3];
+	double  randomColour;
+};
+
+double Dt( void* context ) {
+	return 2.0;
+}
+
+void ValidateShadowing( void *dummy, void* context );
+
+/** Global so other funcs can use */
+Index procToWatch = 0;
+
+int main( int argc, char* argv[] ) {
+	DomainContext*          context;
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	Dictionary*			dictionary;
+	Dictionary*                     componentDict;
+	Stg_ComponentFactory*           cf;
+	XML_IO_Handler*                 ioHandler;
+	ExtensionManager_Register*      extensionMgr_Register;
+	SwarmVariable_Register*         swarmVariable_Register;
+	Stream*                         stream;
+	Swarm*                          swarm = NULL;
+	Particle                        particle;
+	Particle*                       currParticle = NULL;
+	Particle_Index                  lParticle_I = 0;
+	Dimension_Index                 dim_I = 0;
+	char*                           directory;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	/* Add the StGermain path to the global xml path dictionary */
+	directory = Memory_Alloc_Array( char, 200, "xmlDirectory" ) ;
+	sprintf(directory, "%s%s", LIB_DIR, "/StGermain" );
+	XML_IO_Handler_AddDirectory( "StGermain", directory  );
+	Memory_Free(directory);
+	/* Add the plugin path to the global plugin list */
+	ModulesManager_AddDirectory( "StGermain", LIB_DIR );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	dictionary = Dictionary_New();
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	/* TODO: temporary hack until Al gets the journal read from file going again */
+	if ( False == Dictionary_GetBool_WithDefault( dictionary, "particleCommInfo", True ) ) {
+		Stream_Enable( Journal_Register( Info_Type, ParticleCommHandler_Type ), False );
+	}
+
+	Journal_ReadFromDictionary( dictionary );
+
+	/* *** Journal stuff *** */
+	Journal_Enable_TypedStream( DebugStream_Type, False );
+	Stream_EnableBranch( Swarm_Debug, True );
+	Stream_SetLevelBranch( Swarm_Debug, 3 );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	Stream_SetPrintingRank( Journal_Register( InfoStream_Type, "Context" ), procToWatch);
+	/* For plugins to read */
+	Dictionary_Add( dictionary, "procToWatch", Dictionary_Entry_Value_FromUnsignedInt( procToWatch ) );
+	
+/* Construction phase -------------------------------------------------------------------------------------------*/
+	
+	/* Create the Context */
+	context = DomainContext_New(
+			"context",
+			0,
+			0,
+			MPI_COMM_WORLD,
+			dictionary );
+
+	componentDict = Dictionary_GetDictionary( dictionary, "components" );
+	
+	assert( componentDict );
+
+	cf = context->CF = Stg_ComponentFactory_New( dictionary, componentDict, context->register_Register );
+
+	LiveComponentRegister_Add( cf->LCRegister, (Stg_Component*) context );
+	ModulesManager_Load( context->plugins, context, dictionary );
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	swarmVariable_Register = SwarmVariable_Register_New( NULL );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)extensionMgr_Register, "ExtensionManager_Register" );
+	Stg_ObjectList_ClassAppend( cf->registerRegister, (void*)swarmVariable_Register, "SwarmVariable_Register" );
+
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+	ModulesManager_ConstructModules( context->plugins, context->CF, 0 /* dummy */ );
+
+	KeyCall( context, context->constructExtensionsK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(context,context->constructExtensionsK), context );
+
+	swarm = (Swarm*) LiveComponentRegister_Get( context->CF->LCRegister, "swarm" );
+	ExtensionManager_Add( swarm->particleExtensionMgr, "ParticleVelocity", sizeof(double[3]) );
+	ExtensionManager_Add( swarm->particleExtensionMgr, "ParticleColour", sizeof(double) );
+
+	Swarm_NewVectorVariable(
+		swarm,
+		"Velocity",
+		(ArithPointer) &particle.velocity - (ArithPointer) &particle,
+		Variable_DataType_Double,
+		swarm->dim,
+		"VelocityX",
+		"VelocityY",
+		"VelocityZ" );
+
+	Swarm_NewScalarVariable(
+		swarm,
+		"RandomColour",
+		(ArithPointer) &particle.randomColour - (ArithPointer) &particle,
+		Variable_DataType_Double );
+
+	LiveComponentRegister_BuildAll( cf->LCRegister, context );
+	LiveComponentRegister_InitialiseAll( cf->LCRegister, context );
+
+	/* for each particle, set a random colour */
+	for ( lParticle_I=0; lParticle_I < swarm->particleLocalCount; lParticle_I++ ) {
+		currParticle = (Particle*)Swarm_ParticleAt( swarm, lParticle_I );
+		for ( dim_I=0; dim_I < 3; dim_I++ ) {
+			currParticle->velocity[dim_I] = 0;
+		}	
+		currParticle->randomColour = ( (double)  rand() ) / RAND_MAX;
+	}
+	
+	if( rank == procToWatch ) {
+          /* Print( swarm, stream ); */
+	}	
+
+	Stg_Component_Build( context, 0 /* dummy */, False );
+	Stg_Component_Initialise( context, 0 /* dummy */, False );
+	
+	/* +++ RUN PHASE +++ */
+	AbstractContext_Dump( context );
+
+	ContextEP_ReplaceAll( context, AbstractContext_EP_Dt, Dt );
+
+	ContextEP_Append( context, AbstractContext_EP_Sync, ValidateShadowing );
+	Stg_Component_Execute( context, 0 /* dummy */, False );
+	Stg_Component_Destroy( context, 0 /* dummy */, False );
+
+	/* Delete stuff */
+	/* Deleting the component factory automatically deletes all components in it */
+	/* TODO: should the component factory be renamed a comp. manager? Since it deletes */
+	/* 	components as well? */
+
+	if( rank == procToWatch ) {
+		Journal_Printf( Journal_Register( Info_Type, "success" ), "Shadow particle validation: passed\n" );
+	}
+
+	Stg_Class_Delete( cf );
+	/* Remaining registers etc that don't live on the context or anything */
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( swarmVariable_Register );
+	/* Input/Output stuff */
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( ioHandler );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+int listCompareFunction( void *a, void *b ){
+	if( a>b )
+		return 1;
+	else if( a<b )
+		return -1;
+	else
+		return 0;
+}
+
+void listDeleteFunction( void *a ){
+
+}
+
+void ValidateShadowing( void *dummy, void* context ) {
+	DomainContext *self = (DomainContext*)context;
+	Swarm*                          swarm = (Swarm*) LiveComponentRegister_Get( self->CF->LCRegister, "swarm" );
+
+	Swarm_UpdateAllParticleOwners( swarm );
+
+	return 0;
+	if(swarm->nProc > 1)
+	{
+		int ii = 0, jj = 0;
+		ShadowInfo*			cellShadowInfo = CellLayout_GetShadowInfo( swarm->cellLayout );
+		ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+		
+		{
+			MemoryPool *requestPool = MemoryPool_New( MPI_Request, 100, 10 );
+			MemoryPool *particlePool = MemoryPool_NewFunc( swarm->particleExtensionMgr->finalSize, 100, 10 );
+			LinkedList *list = LinkedList_New( listCompareFunction, NULL, NULL, listDeleteFunction, LINKEDLIST_UNSORTED );
+			LinkedList *particleList= LinkedList_New( listCompareFunction, NULL, NULL, listDeleteFunction, LINKEDLIST_UNSORTED );
+			LinkedListIterator *iter = LinkedListIterator_New( list );
+			void *data = NULL;
+
+			{
+				Neighbour_Index		        nbr_I;
+				int i = 0, j = 0;
+				int shadowCell = 0;
+
+				for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+					for( i=0; i<cellShadowInfo->procShadowCnt[nbr_I]; i++ ){
+						MPI_Request *req;
+						char *particle = NULL;
+						int proc = 0;
+					
+						proc = procNbrInfo->procNbrTbl[nbr_I];
+
+						shadowCell = cellShadowInfo->procShadowTbl[nbr_I][i];
+						for( j=0; j<swarm->shadowCellParticleCountTbl[shadowCell]; j++ ){
+							
+							req = MemoryPool_NewObject( MPI_Request, requestPool );
+							particle = MemoryPool_NewObjectFunc( swarm->particleExtensionMgr->finalSize, particlePool );
+							LinkedList_InsertNode( list, req, sizeof(void*) );
+							LinkedList_InsertNode( particleList, particle, sizeof(void*) );
+						
+							MPI_Irecv( particle, swarm->particleExtensionMgr->finalSize, MPI_BYTE, proc, 2001, MPI_COMM_WORLD, req );
+						}
+					}
+				}
+			
+			}
+
+			{
+				Neighbour_Index		        nbr_I;
+				int i = 0, j = 0;
+				int shadowedCell = 0;
+				char *array = malloc( swarm->particleExtensionMgr->finalSize );
+
+				for ( nbr_I=0; nbr_I < procNbrInfo->procNbrCnt; nbr_I++ ) {
+					for( i=0; i<cellShadowInfo->procShadowedCnt[nbr_I]; i++ ){
+						MPI_Request *req;
+						int proc = 0;
+
+						proc = procNbrInfo->procNbrTbl[nbr_I];
+
+						shadowedCell = cellShadowInfo->procShadowedTbl[nbr_I][i];
+						for( j=0; j<swarm->cellParticleCountTbl[shadowedCell]; j++ ){
+							int pIndex = 0;
+
+							pIndex = swarm->cellParticleTbl[shadowedCell][j];
+							Swarm_CopyParticleOffSwarm( swarm,
+								array, 0,
+								pIndex );
+
+							req = MemoryPool_NewObject( MPI_Request, requestPool );
+							LinkedList_InsertNode( list, req, sizeof(void*) );
+							MPI_Isend( array, swarm->particleExtensionMgr->finalSize, MPI_BYTE, proc, 2001, MPI_COMM_WORLD, req );
+						}
+					}
+				}
+				free( array );
+			}
+
+			for( data=LinkedListIterator_First(iter); data!=NULL; data=LinkedListIterator_Next(iter) ){
+				MPI_Status s;
+				MPI_Wait( ((MPI_Request*)data), &s );
+			}
+
+			{
+				LinkedListIterator *pIter = LinkedListIterator_New( particleList );
+				for( data=LinkedListIterator_First(pIter); data!=NULL; data=LinkedListIterator_Next(pIter) ){
+					Particle *p = (Particle*)data;
+					int found = 0;
+					double epsilon=1e-5;
+
+					for( ii=0; ii<procNbrInfo->procNbrCnt; ii++ ){
+						for( jj=0; jj<cellShadowInfo->procShadowCnt[ii]; jj++ ){
+							int shadowCell = 0;
+							int kk = 0;
+
+							shadowCell = cellShadowInfo->procShadowTbl[ii][jj];
+							for( kk=0; kk<swarm->shadowCellParticleCountTbl[shadowCell]; kk++ ){
+								int shadowParticleIdx = 0;
+								GlobalParticle *gp = NULL;
+
+								shadowParticleIdx = swarm->shadowCellParticleTbl[shadowCell][kk];
+								gp = ((GlobalParticle*)Swarm_ShadowParticleAt( swarm, shadowParticleIdx));
+								if( (fabs(p->coord[0]-gp->coord[0])<epsilon) && (fabs(p->coord[1]-gp->coord[1])<epsilon) && (fabs(p->coord[2]-gp->coord[2])<epsilon) ){
+									found = 1;
+								}
+							}
+						}
+					}
+					Journal_Firewall( found, swarm->debug, "Shadow particle validation failed" );
+				}
+			}
+			
+			Stg_Class_Delete( list );
+			Stg_Class_Delete( iter );
+			Stg_Class_Delete( requestPool );
+			Stg_Class_Delete( particlePool );
+			Stg_Class_Delete( particleList );
+		}
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testSwarmParticleShadowSync.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testSwarmParticleShadowSync.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>
+<!--
+   "single attractor" or "reverse big bang" test: attracts all
+   the particles towards a central point, but after a user-specified
+   timestep reverse this to the original positions, then repeats this
+   periodically. While unrealistic for Snark, this is a useful "extreme"
+   test to see if one processor can temporarily handle all the
+   particles, then free the memory again.
+
+   PatrickSunter - 11 May 2006
+-->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<struct name="components">
+		<struct name="mesh-linear">
+			<param name="Type">Mesh</param>
+			<param name="ElementSize">8</param>
+			<param name="NodeSize">0</param>
+		</struct>
+		<struct name="cartesianGenerator">
+			<param name="Type"> CartesianGenerator </param>
+			<param name="mesh"> mesh-linear </param>
+			<param name="dims"> dim </param>
+			<list name="size">
+				<param> elementResI </param>
+				<param> elementResJ </param>
+				<param> elementResK </param>
+			</list>
+			<param name="maxDecomposedDims"> 1 </param>
+			<list name="maxDecompositions">
+				<param> 0 </param>
+				<param> 1 </param>
+				<param> 1 </param>
+			</list>
+			<list name="minCoord">
+				<param> minX </param>
+				<param> minY </param>
+				<param> minZ </param>
+			</list>
+			<list name="maxCoord">
+				<param> maxX </param>
+				<param> maxY </param>
+				<param> maxZ </param>
+			</list>
+		</struct>
+ 
+		<struct name="elementCellLayout"> 
+			<param name="Type">ElementCellLayout</param>
+			<param name="Mesh">mesh-linear</param>
+		</struct>
+
+		<struct name="pShadowSync"> 
+			<param name="Type">ParticleShadowSync</param>
+		</struct>
+		
+		<struct name="swarm">
+			<param name="Type">Swarm</param>
+			<param name="CellLayout">elementCellLayout</param>
+			<param name="ParticleLayout">particleLayout</param>
+			<!--<list name="ParticleCommHandlers">
+				<param>pShadowSync</param>
+			</list>-->			
+		</struct>
+	</struct>
+ 
+	<param name="journal.info.lucInfo">true</param>
+	<param name="journal-level.info.lucInfo">2</param>
+	<param name="maxTimeSteps">1</param> 
+	<param name="dumpEvery">1</param>
+
+	<param name="outputPath">./output</param> 
+	<param name="dim">2</param>
+	<param name="elementResI">10</param>
+	<param name="elementResJ">10</param> 
+	<param name="elementResK">1</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">100.0</param> 
+	<param name="maxY">100.0</param>
+	<param name="maxZ">100.0</param>
+
+	<param name="journal.info.Context-verbose">true</param>
+	<param name="journal-level.info.Stg_ComponentFactory">0</param>
+	<param name="journal.info.Stg_ComponentFactory">False</param>
+
+
+	<struct name="components" mergeType="merge">
+		<struct name="particleLayout">
+			<param name="Type">RandomParticleLayout</param>
+			<!--<param name="cellParticleCount">8</param>-->
+			<param name="cellParticleCount">1</param>
+			<param name="seed">13</param>
+		</struct>
+	</struct>
+	<param name="dim">3</param>
+	<param name="maxTimeSteps">5</param> 
+	<param name="minX">0.0</param> 
+	<param name="minY">0.0</param> 
+	<param name="minZ">0.0</param>
+	<param name="maxX">1.0</param> 
+	<param name="maxY">1.0</param>
+	<param name="maxZ">1.0</param>
+	<param name="elementResI">12</param>
+	<param name="elementResJ">12</param>
+	<param name="elementResK">12</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 5x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 5x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+WithinShapeParticleLayout (ptr): 0x807f588:
+	SpaceFillerParticleLayout (ptr): 0x807f588:
+		GlobalParticleLayout (ptr): 0x807f588
+		ParticleLayout (ptr): 0x807f588
+		Stg_Class (ptr): 0x807f588
+			sizeOfSelf: 156
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0x4003ffb7
+			_print (func ptr): 0x4003ffe0
+			_copy (func ptr): 0x4004005a
+			_setInitialCounts (func ptr): 0x4002e1fe
+			_initialiseParticles (func ptr): 0x40040290
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0x40037f5b
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 0.333333
+		self->dim = 3
+	Stg_Component (ptr): 0x807f268
+	Stg_Object (ptr): 0x807f268
+		Stg_Class (ptr): 0x807f268
+			sizeOfSelf: 228
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0x400cecc5
+			_print (func ptr): 0x400cecee
+			_copy (func ptr): 0x400ced1e
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0x400ced7b
+		_construct (func ptr): 0x400cee20
+		_build (func ptr): 0x400cee91
+		_initialise (func ptr): 0x400ceec1
+		_execute (func ptr): 0x400ceef1
+		_destroy (func ptr): 0x400cef21
+		isConstructed: True
+		isBuilt: False
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: testSphere-Construct
+		build function name: testSphere-Build
+		initialise function name: testSphere-Initialise
+		execute function name: testSphere-Execute
+		destroy function name: testSphere-Destroy
+	Stg_Shape (ptr): (0x807f268)
+	self->_isCoordInside = (ptr)0x400cef51
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+	Local Cell   2:
+	Local Cell   3:
+	Local Cell   4:
+	Local Cell   5:
+	Local Cell   6:
+	Local Cell   7:
+		part. InCell   0 (local index      0): (    0.5,     0.5,     0.5)
+		part. InCell   1 (local index      1): (0.49976, 0.50269, 0.49487)
+		part. InCell   2 (local index      3): (0.52942, 0.49963, 0.48059)
+		part. InCell   3 (local index      4): (0.50827, 0.48257, 0.46768)
+		part. InCell   4 (local index      7): (0.47269, 0.49191, 0.48593)
+		part. InCell   5 (local index      8): (0.46072, 0.52487, 0.49155)
+	Local Cell   8:
+	Local Cell   9:
+	Local Cell  10:
+	Local Cell  11:
+	Local Cell  12:
+	Local Cell  13:
+	Local Cell  14:
+	Local Cell  15:
+	Local Cell  16:
+	Local Cell  17:
+	Local Cell  18:
+	Local Cell  19:
+	Local Cell  20:
+	Local Cell  21:
+	Local Cell  22:
+		part. InCell   0 (local index      2): (0.47058, 0.49744, 0.52234)
+		part. InCell   1 (local index      5): (0.49191, 0.48135, 0.53531)
+		part. InCell   2 (local index      6): (0.53909, 0.52707, 0.51328)
+		part. InCell   3 (local index      9): (0.52713, 0.48972, 0.51108)
+	Local Cell  23:
+	Local Cell  24:
+	Local Cell  25:
+	Local Cell  26:
+	Local Cell  27:
+	Local Cell  28:
+	Local Cell  29:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWithinShapeParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,97 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 5x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 3x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+WithinShapeParticleLayout (ptr): 0x80804c8:
+	SpaceFillerParticleLayout (ptr): 0x80804c8:
+		GlobalParticleLayout (ptr): 0x80804c8
+		ParticleLayout (ptr): 0x80804c8
+		Stg_Class (ptr): 0x80804c8
+			sizeOfSelf: 156
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0x4003ffb7
+			_print (func ptr): 0x4003ffe0
+			_copy (func ptr): 0x4004005a
+			_setInitialCounts (func ptr): 0x4002e1fe
+			_initialiseParticles (func ptr): 0x40040290
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0x40037f5b
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 0.333333
+		self->dim = 3
+	Stg_Component (ptr): 0x80801a8
+	Stg_Object (ptr): 0x80801a8
+		Stg_Class (ptr): 0x80801a8
+			sizeOfSelf: 228
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0x400cecc5
+			_print (func ptr): 0x400cecee
+			_copy (func ptr): 0x400ced1e
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0x400ced7b
+		_construct (func ptr): 0x400cee20
+		_build (func ptr): 0x400cee91
+		_initialise (func ptr): 0x400ceec1
+		_execute (func ptr): 0x400ceef1
+		_destroy (func ptr): 0x400cef21
+		isConstructed: True
+		isBuilt: False
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: testSphere-Construct
+		build function name: testSphere-Build
+		initialise function name: testSphere-Initialise
+		execute function name: testSphere-Execute
+		destroy function name: testSphere-Destroy
+	Stg_Shape (ptr): (0x80801a8)
+	self->_isCoordInside = (ptr)0x400cef51
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+	Local Cell   2:
+	Local Cell   3:
+	Local Cell   4:
+	Local Cell   5:
+		part. InCell   0 (local index      0): (    0.5,     0.5,     0.5)
+		part. InCell   1 (local index      1): (0.49976, 0.50269, 0.49487)
+		part. InCell   2 (local index      3): (0.52942, 0.49963, 0.48059)
+		part. InCell   3 (local index      4): (0.50827, 0.48257, 0.46768)
+		part. InCell   4 (local index      7): (0.47269, 0.49191, 0.48593)
+		part. InCell   5 (local index      8): (0.46072, 0.52487, 0.49155)
+	Local Cell   6:
+	Local Cell   7:
+	Local Cell   8:
+	Local Cell   9:
+	Local Cell  10:
+	Local Cell  11:
+	Local Cell  12:
+	Local Cell  13:
+	Local Cell  14:
+		part. InCell   0 (local index      2): (0.47058, 0.49744, 0.52234)
+		part. InCell   1 (local index      5): (0.49191, 0.48135, 0.53531)
+		part. InCell   2 (local index      6): (0.53909, 0.52707, 0.51328)
+		part. InCell   3 (local index      9): (0.52713, 0.48972, 0.51108)
+	Local Cell  15:
+	Local Cell  16:
+	Local Cell  17:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWithinShapeParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,81 @@
+StGermain Framework revision 4125. Copyright (C) 2003-2005 VPAC.
+Cartesian generator: ''
+	Target mesh: ''
+	Global element size: 5x3x2
+	Local offset of rank 0: 0x0x0
+	Local range of rank 0: 3x3x2
+	Generating vertices...
+		... done.
+	Generating elements...
+		... done.
+	Generating element-vertex incidence...
+		... done.
+	Generating vertex neighbours...
+		... done.
+	Generating geometry...
+		... done.
+	Generating element types...
+		... element types are 'Mesh_HexType',
+		... mesh algorithm type is 'Mesh_RegularAlgorithms',
+		... done.
+WithinShapeParticleLayout (ptr): 0x807ed10:
+	SpaceFillerParticleLayout (ptr): 0x807ed10:
+		GlobalParticleLayout (ptr): 0x807ed10
+		ParticleLayout (ptr): 0x807ed10
+		Stg_Class (ptr): 0x807ed10
+			sizeOfSelf: 156
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0xb7f87fb7
+			_print (func ptr): 0xb7f87fe0
+			_copy (func ptr): 0xb7f8805a
+			_setInitialCounts (func ptr): 0xb7f761fe
+			_initialiseParticles (func ptr): 0xb7f88290
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0xb7f7ff5b
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 0.333333
+		self->dim = 3
+	Stg_Component (ptr): 0x807e9f0
+	Stg_Object (ptr): 0x807e9f0
+		Stg_Class (ptr): 0x807e9f0
+			sizeOfSelf: 228
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0xb7ee7cc5
+			_print (func ptr): 0xb7ee7cee
+			_copy (func ptr): 0xb7ee7d1e
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7ee7d7b
+		_construct (func ptr): 0xb7ee7e20
+		_build (func ptr): 0xb7ee7e91
+		_initialise (func ptr): 0xb7ee7ec1
+		_execute (func ptr): 0xb7ee7ef1
+		_destroy (func ptr): 0xb7ee7f21
+		isConstructed: True
+		isBuilt: False
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: testSphere-Construct
+		build function name: testSphere-Build
+		initialise function name: testSphere-Initialise
+		execute function name: testSphere-Execute
+		destroy function name: testSphere-Destroy
+	Stg_Shape (ptr): (0x807e9f0)
+	self->_isCoordInside = (ptr)0xb7ee7f51
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+	Local Cell   2:
+	Local Cell   3:
+	Local Cell   4:
+	Local Cell   5:
+	Local Cell   6:
+	Local Cell   7:
+	Local Cell   8:
+	Local Cell   9:
+	Local Cell  10:
+	Local Cell  11:
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWithinShapeParticleLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Swarm/tests/testWithinShapeParticleLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Swarm/tests/testWithinShapeParticleLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,190 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Test that the within shape particle layout is working correctly
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testWithinShapeParticleLayout.c 4175 2007-08-16 03:39:26Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+};
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         numProcessors;
+	int                         procToWatch;
+	Dictionary*                 dictionary;
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {5, 3, 2};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	ExtensionManager_Register*  extensionMgr_Register;
+	Mesh*                       mesh;
+	WithinShapeParticleLayout*        particleLayout;
+	ElementCellLayout*          elementCellLayout;
+	Swarm*                      swarm;
+	Stream*                     stream;
+	Stg_Shape*                  shape;
+	XYZ                         centre;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	StgDomainSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+	/* Stream_RedirectFile_WithPrependedPath( stream, "output", "withinShapeParticleLayout.dat" ); */
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+/*	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );*/
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "averageInitialParticlesPerCell", Dictionary_Entry_Value_FromUnsignedInt( 20 ) );
+	
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Stg_Component_Build( mesh, 0, False );
+	Stg_Component_Initialise( mesh, 0, False );
+	
+	centre[I_AXIS] = centre[J_AXIS] = centre[K_AXIS] = 0.5;
+	shape = (Stg_Shape*)Sphere_New( "testSphere", nDims, centre, 0, 0, 0, 0.05 );
+	
+	/* Configure the gauss-particle-layout */
+	particleLayout = WithinShapeParticleLayout_New( "withinShapeParticleLayout", nDims, 10, shape );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New(  "testSwarm", elementCellLayout, particleLayout, nDims, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld, NULL );
+	
+	/* Build the swarm */
+	Stg_Component_Build( swarm, 0, False );
+	Stg_Component_Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		Stg_Class_Print( particleLayout, stream );
+		/* Print out the particles on all cells */
+		Swarm_PrintParticleCoords_ByCell( swarm, stream );
+	}
+
+	/* Destroy stuff */
+	Stg_Class_Delete( particleLayout );
+	Stg_Class_Delete( elementCellLayout );
+	Stg_Class_Delete( swarm );
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( dictionary );
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,41 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+subdirs = src tests
+
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllElementsVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllElementsVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,606 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: AllElementsVC.c 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "AllElementsVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type AllElementsVC_Type = "AllElementsVC";
+const Name defaultAllElementsVCName = "defaultAllElementsVCName";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* AllElementsVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)AllElementsVC_New( defaultAllElementsVCName, NULL, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+AllElementsVC* AllElementsVC_DefaultNew( Name name )
+{
+	return _AllElementsVC_New(
+		sizeof(AllElementsVC), 
+		AllElementsVC_Type, 
+		_AllElementsVC_Delete, 
+		_AllElementsVC_Print, 
+		_AllElementsVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)AllElementsVC_DefaultNew,
+		_AllElementsVC_Construct,
+		_AllElementsVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_AllElementsVC_BuildSelf, 
+		_AllElementsVC_PrintConcise,
+		_AllElementsVC_ReadDictionary,
+		_AllElementsVC_GetSet, 
+		_AllElementsVC_GetVariableCount, 
+		_AllElementsVC_GetVariableIndex, 
+		_AllElementsVC_GetValueIndex, 
+		_AllElementsVC_GetValueCount, 
+		_AllElementsVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL );
+}
+
+AllElementsVC*	AllElementsVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh )
+{
+	return _AllElementsVC_New(
+		sizeof(AllElementsVC), 
+		AllElementsVC_Type, 
+		_AllElementsVC_Delete, 
+		_AllElementsVC_Print, 
+		_AllElementsVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)AllElementsVC_DefaultNew,
+		_AllElementsVC_Construct,
+		_AllElementsVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_AllElementsVC_BuildSelf, 
+		_AllElementsVC_PrintConcise,
+		_AllElementsVC_ReadDictionary,
+		_AllElementsVC_GetSet, 
+		_AllElementsVC_GetVariableCount, 
+		_AllElementsVC_GetVariableIndex, 
+		_AllElementsVC_GetValueIndex, 
+		_AllElementsVC_GetValueCount, 
+		_AllElementsVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		mesh );
+}
+
+
+void AllElementsVC_Init(
+		AllElementsVC*					self,
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh )
+{
+	/* General info */
+	self->type = AllElementsVC_Type;
+	self->_sizeOfSelf = sizeof(AllElementsVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _AllElementsVC_Delete;
+	self->_print = _AllElementsVC_Print;
+	self->_copy = _AllElementsVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)AllElementsVC_DefaultNew;
+	self->_construct = _AllElementsVC_Construct,
+	self->_build = _AllElementsVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _AllElementsVC_BuildSelf;
+	self->_printConcise = _AllElementsVC_PrintConcise;
+	self->_readDictionary = _AllElementsVC_ReadDictionary;
+	self->_getSet = _AllElementsVC_GetSet;
+	self->_getVariableCount = _AllElementsVC_GetVariableCount;
+	self->_getVariableIndex = _AllElementsVC_GetVariableIndex;
+	self->_getValueIndex = _AllElementsVC_GetValueIndex;
+	self->_getValueCount = _AllElementsVC_GetValueCount;
+	self->_getValue = _AllElementsVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_AllElementsVC_Init( self, _dictionaryEntryName, mesh );
+}
+
+
+AllElementsVC* _AllElementsVC_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy,
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*	_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*			_destroy,
+		Name								name,
+		Bool								initFlag,
+		VariableCondition_BuildSelfFunc*		_buildSelf, 
+		VariableCondition_PrintConciseFunc*		_printConcise,
+		VariableCondition_ReadDictionaryFunc*		_readDictionary,
+		VariableCondition_GetSetFunc*			_getSet,
+		VariableCondition_GetVariableCountFunc*		_getVariableCount,
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+		VariableCondition_GetValueIndexFunc*		_getValueIndex,
+		VariableCondition_GetValueCountFunc*		_getValueCount,
+		VariableCondition_GetValueFunc*			_getValue,
+		VariableCondition_ApplyFunc*			_apply, 
+		Name									_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh)
+{
+	AllElementsVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(AllElementsVC));
+	self = (AllElementsVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_AllElementsVC_Init( self, _dictionaryEntryName, mesh );
+	}
+	
+	return self;
+}
+
+
+void _AllElementsVC_Init(
+		void* 						allElementsVC,
+		Name						_dictionaryEntryName, 
+		void*						mesh )
+{
+	AllElementsVC*			self = (AllElementsVC*)allElementsVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->mesh = (Mesh*)mesh;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+void _AllElementsVC_Construct( void* allElementsVC, Stg_ComponentFactory *cf, void* data )
+{
+	
+}
+
+void _AllElementsVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	AllElementsVC*			self = (AllElementsVC*)variableCondition;
+	Dictionary_Entry_Value*		vcDictVal;
+	Dictionary_Entry_Value		_vcDictVal;
+	Dictionary_Entry_Value*		varsVal;
+	AllElementsVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get( dictionary, self->_dictionaryEntryName );
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct( vcDictVal, dictionary );
+	}
+	
+	if (vcDictVal)
+	{
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( AllElementsVC_Entry, self->_entryCount, "AllElementsVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+						"definition of allElementsVC \"%s\", the cond. func. applied to "
+						"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+						__func__, self->_dictionaryEntryName, 
+						self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}			
+			else if (!strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+					self->_entryTbl[entry_I].value.as.typeArray.size,"AllElementsVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( !strcasecmp( valType, "double" ) || !strcasecmp( valType, "d" ) || !strcasecmp( valType, "float" ) || !strcasecmp( valType, "f" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( !strcasecmp( valType, "integer" ) || !strcasecmp( valType, "int" ) || !strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "short" ) || !strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "char" ) || !strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "pointer" ) || !strcasecmp( valType, "ptr" ) || !strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*)((ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _AllElementsVC_Delete( void* allElementsVC ) {
+	AllElementsVC*				self = (AllElementsVC*)allElementsVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _AllElementsVC_Print( void* allElementsVC, Stream* stream ) {
+	AllElementsVC*				self = (AllElementsVC*)allElementsVC;
+	AllElementsVC_Entry_Index		entry_I;
+	Index					i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "AllElementsVC (ptr): %p\n", self);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if( self->_entryTbl ) {
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+							Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	}
+}
+
+
+void* _AllElementsVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	AllElementsVC*		self = (AllElementsVC*)allElementsVC;
+	AllElementsVC*		newAllElementsVC;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newAllElementsVC = (AllElementsVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newAllElementsVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newAllElementsVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newAllElementsVC->mesh = (Mesh*)Stg_Class_Copy( self->mesh, NULL, deep, nameExt, map );
+		
+		if( (newAllElementsVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newAllElementsVC->_entryTbl = Memory_Alloc_Array( AllElementsVC_Entry, newAllElementsVC->_entryCount, "AllElementsVC->_entryTbl");
+			memcpy( newAllElementsVC->_entryTbl, self->_entryTbl, sizeof(AllElementsVC_Entry) * newAllElementsVC->_entryCount );
+			PtrMap_Append( map, newAllElementsVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newAllElementsVC->mesh = self->mesh;
+		newAllElementsVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newAllElementsVC;
+}
+
+
+void _AllElementsVC_Build( void* allElementsVC, void* data ) {
+	AllElementsVC*		self = (AllElementsVC*)allElementsVC;
+	
+	_AllElementsVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _AllElementsVC_BuildSelf( void* allElementsVC, void* data ) {
+	AllElementsVC*		self = (AllElementsVC*)allElementsVC;
+	
+	if( self->mesh ) {
+		Stg_Component_Build( self->mesh, data, False );
+	}
+}
+
+
+IndexSet* _AllElementsVC_GetSet( void* variableCondition ) {
+	AllElementsVC*				self = (AllElementsVC*)variableCondition;
+	IndexSet*				set;
+
+	set = IndexSet_New( Mesh_GetDomainSize( self->mesh, Mesh_GetDimSize( self->mesh ) ) );
+	IndexSet_AddAll( set );
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _AllElementsVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	AllElementsVC*	self = (AllElementsVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _AllElementsVC_GetVariableIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex) 
+{
+	AllElementsVC*	self = (AllElementsVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _AllElementsVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _AllElementsVC_GetValueCount( void* variableCondition ) {
+	AllElementsVC*	self = (AllElementsVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _AllElementsVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex ) {
+	AllElementsVC*	self = (AllElementsVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _AllElementsVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	AllElementsVC*		self = (AllElementsVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: all\n", self->type );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllElementsVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllElementsVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,197 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: AllElementsVC.h 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_AllElementsVC_h__
+#define __Domain_Utils_AllElementsVC_h__
+	
+
+	extern const Type AllElementsVC_Type;
+	
+	
+	#define __AllElementsVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _AllElementsVC_Entry { __AllElementsVC_Entry };
+	
+	
+	#define __AllElementsVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		AllElementsVC_Entry_Index	_entryCount; \
+		AllElementsVC_Entry*		_entryTbl; \
+		Mesh*				mesh;
+
+	struct _AllElementsVC { __AllElementsVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		AllElementsVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	AllElementsVC*	AllElementsVC_DefaultNew( Name name );
+	
+	AllElementsVC*			AllElementsVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				AllElementsVC_Init(
+						AllElementsVC*					self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	AllElementsVC*			_AllElementsVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy,
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*	_constructor,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*	_destroy,
+						Name						name,
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name							_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				_AllElementsVC_Init(
+						void*						allElementsVC, 
+						Name						_dictionaryEntryName, 
+						void*						mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_AllElementsVC_Construct( void* allElementsVC, Stg_ComponentFactory *cf, void* data );
+	
+	void				_AllElementsVC_Delete( void* allElementsVC );
+	
+	void				_AllElementsVC_Print( void* allElementsVC, Stream* stream );
+	
+	/* Copy */
+	#define AllElementsVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define AllElementsVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _AllElementsVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_AllElementsVC_Build( void* allElementsVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_AllElementsVC_BuildSelf( void* allElementsVC, void* data );
+	
+	void				_AllElementsVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_AllElementsVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_AllElementsVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_AllElementsVC_GetVariableIndex(
+						void*					variableCondition,
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_AllElementsVC_GetValueIndex(
+						void*					variableCondition, 
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_AllElementsVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_AllElementsVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_AllElementsVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_AllElementsVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllElementsVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllElementsVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">AllElementsVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllNodesVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllNodesVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,607 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: AllNodesVC.c 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "AllNodesVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type AllNodesVC_Type = "AllNodesVC";
+const Name defaultAllNodesVCName = "defaultAllNodesVCName";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* AllNodesVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)AllNodesVC_New( defaultAllNodesVCName, NULL, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+AllNodesVC* AllNodesVC_DefaultNew( Name name )
+{
+	return _AllNodesVC_New(
+		sizeof(AllNodesVC), 
+		AllNodesVC_Type, 
+		_AllNodesVC_Delete, 
+		_AllNodesVC_Print, 
+		_AllNodesVC_Copy, 
+		(Stg_Component_DefaultConstructorFunction*)AllNodesVC_DefaultNew,
+		_AllNodesVC_Construct,
+		_AllNodesVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_AllNodesVC_BuildSelf, 
+		_AllNodesVC_PrintConcise,
+		_AllNodesVC_ReadDictionary,
+		_AllNodesVC_GetSet, 
+		_AllNodesVC_GetVariableCount, 
+		_AllNodesVC_GetVariableIndex, 
+		_AllNodesVC_GetValueIndex, 
+		_AllNodesVC_GetValueCount, 
+		_AllNodesVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL );
+}
+
+AllNodesVC*	AllNodesVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh )
+{
+	return _AllNodesVC_New(
+		sizeof(AllNodesVC), 
+		AllNodesVC_Type, 
+		_AllNodesVC_Delete, 
+		_AllNodesVC_Print, 
+		_AllNodesVC_Copy, 
+		(Stg_Component_DefaultConstructorFunction*)AllNodesVC_DefaultNew,
+		_AllNodesVC_Construct,
+		_AllNodesVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_AllNodesVC_BuildSelf, 
+		_AllNodesVC_PrintConcise,
+		_AllNodesVC_ReadDictionary,
+		_AllNodesVC_GetSet, 
+		_AllNodesVC_GetVariableCount, 
+		_AllNodesVC_GetVariableIndex, 
+		_AllNodesVC_GetValueIndex, 
+		_AllNodesVC_GetValueCount, 
+		_AllNodesVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		mesh );
+}
+
+
+void AllNodesVC_Init(
+		AllNodesVC*					self,
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh )
+{
+	/* General info */
+	self->type = AllNodesVC_Type;
+	self->_sizeOfSelf = sizeof(AllNodesVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _AllNodesVC_Delete;
+	self->_print = _AllNodesVC_Print;
+	self->_copy = _AllNodesVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)AllNodesVC_DefaultNew,
+	self->_construct = _AllNodesVC_Construct,
+	self->_build = _VariableCondition_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _AllNodesVC_BuildSelf;
+	self->_printConcise = _AllNodesVC_PrintConcise;
+	self->_readDictionary = _AllNodesVC_ReadDictionary;
+	self->_getSet = _AllNodesVC_GetSet;
+	self->_getVariableCount = _AllNodesVC_GetVariableCount;
+	self->_getVariableIndex = _AllNodesVC_GetVariableIndex;
+	self->_getValueIndex = _AllNodesVC_GetValueIndex;
+	self->_getValueCount = _AllNodesVC_GetValueCount;
+	self->_getValue = _AllNodesVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_AllNodesVC_Init( self, _dictionaryEntryName, mesh );
+}
+
+
+AllNodesVC* _AllNodesVC_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*			_destroy,
+		Name								name, 
+		Bool								initFlag,
+		VariableCondition_BuildSelfFunc*		_buildSelf, 
+		VariableCondition_PrintConciseFunc*		_printConcise,
+		VariableCondition_ReadDictionaryFunc*		_readDictionary,
+		VariableCondition_GetSetFunc*			_getSet,
+		VariableCondition_GetVariableCountFunc*		_getVariableCount,
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+		VariableCondition_GetValueIndexFunc*		_getValueIndex,
+		VariableCondition_GetValueCountFunc*		_getValueCount,
+		VariableCondition_GetValueFunc*			_getValue,
+		VariableCondition_ApplyFunc*			_apply, 
+		Name							_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						mesh )
+{
+	AllNodesVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(AllNodesVC));
+	self = (AllNodesVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_AllNodesVC_Init( self, _dictionaryEntryName, mesh );
+	}
+	
+	return self;
+}
+
+
+void _AllNodesVC_Init(
+		void*						allNodesVC, 
+		Name						_dictionaryEntryName, 
+		void*						mesh )
+{
+	AllNodesVC*			self = (AllNodesVC*)allNodesVC;
+	
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->mesh = (Mesh*)mesh;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _AllNodesVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	AllNodesVC*			self = (AllNodesVC*)variableCondition;
+	Dictionary_Entry_Value*		vcDictVal;
+	Dictionary_Entry_Value		_vcDictVal;
+	Dictionary_Entry_Value*		varsVal;
+	AllNodesVC_Entry_Index		entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get( dictionary, self->_dictionaryEntryName );
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct( vcDictVal, dictionary );
+	}
+	
+	if (vcDictVal)
+	{
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( AllNodesVC_Entry, self->_entryCount, "AllNodesVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+						"definition of %s \"%s\", the cond. func. applied to "
+						"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+						__func__, self->type, self->_dictionaryEntryName, 
+						self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}	
+			else if (!strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double, 
+					self->_entryTbl[entry_I].value.as.typeArray.size, "AllNodesVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( !strcasecmp( valType, "double" ) || !strcasecmp( valType, "d" ) || !strcasecmp( valType, "float" ) || !strcasecmp( valType, "f" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( !strcasecmp( valType, "integer" ) || !strcasecmp( valType, "int" ) || !strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "short" ) || !strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "char" ) || !strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "pointer" ) || !strcasecmp( valType, "ptr" ) || !strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ((ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_Printf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _AllNodesVC_Delete( void* allNodesVC ) {
+	AllNodesVC*			self = (AllNodesVC*)allNodesVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _AllNodesVC_Print( void* allNodesVC, Stream* stream ) {
+	AllNodesVC*			self = (AllNodesVC*)allNodesVC;
+	AllNodesVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "AllNodesVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+							Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _AllNodesVC_Copy( void* allNodesVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	AllNodesVC*		self = (AllNodesVC*)allNodesVC;
+	AllNodesVC*		newAllNodesVC;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newAllNodesVC = (AllNodesVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newAllNodesVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newAllNodesVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newAllNodesVC->mesh = (Mesh*)Stg_Class_Copy( self->mesh, NULL, deep, nameExt, map );
+		
+		if( (newAllNodesVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newAllNodesVC->_entryTbl = Memory_Alloc_Array( AllNodesVC_Entry, newAllNodesVC->_entryCount, "AllNodesVC->_entryTbl");
+			memcpy( newAllNodesVC->_entryTbl, self->_entryTbl, sizeof(AllNodesVC_Entry) * newAllNodesVC->_entryCount );
+			PtrMap_Append( map, newAllNodesVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newAllNodesVC->mesh = self->mesh;
+		newAllNodesVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newAllNodesVC;
+}
+
+
+void _AllNodesVC_Build( void* allNodesVC, void* data ) {
+	AllNodesVC*		self = (AllNodesVC*)allNodesVC;
+	
+	_AllNodesVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _AllNodesVC_Construct( void* allNodesVC, Stg_ComponentFactory* cf, void* data ) 
+{
+
+}
+
+void _AllNodesVC_BuildSelf( void* allNodesVC, void* data ) {
+	AllNodesVC*		self = (AllNodesVC*)allNodesVC;
+	
+	if( self->mesh ) {
+		Stg_Component_Build( self->mesh, data, False );
+	}
+}
+
+
+IndexSet* _AllNodesVC_GetSet( void* variableCondition ) {
+	AllNodesVC*		self = (AllNodesVC*)variableCondition;
+	IndexSet*		set;
+
+	set = IndexSet_New( Mesh_GetDomainSize( self->mesh, MT_VERTEX ) );
+	IndexSet_AddAll( set );
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _AllNodesVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	AllNodesVC*	self = (AllNodesVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _AllNodesVC_GetVariableIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex varIndex )
+{
+	AllNodesVC*	self = (AllNodesVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _AllNodesVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _AllNodesVC_GetValueCount( void* variableCondition ) {
+	AllNodesVC*	self = (AllNodesVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _AllNodesVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex) {
+	AllNodesVC*	self = (AllNodesVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _AllNodesVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	AllNodesVC*		self = (AllNodesVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: all\n", self->type );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllNodesVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllNodesVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,197 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: AllNodesVC.h 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_AllNodesVC_h__
+#define __Domain_Utils_AllNodesVC_h__
+	
+	
+	extern const Type AllNodesVC_Type;
+	
+	
+	#define __AllNodesVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _AllNodesVC_Entry { __AllNodesVC_Entry };
+	
+	
+	#define __AllNodesVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		AllNodesVC_Entry_Index		_entryCount; \
+		AllNodesVC_Entry*		_entryTbl; \
+		Mesh*				mesh;
+
+	struct _AllNodesVC { __AllNodesVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		AllNodesVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	AllNodesVC*			AllNodesVC_DefaultNew( Name name );
+
+	AllNodesVC*			AllNodesVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				AllNodesVC_Init(
+						AllNodesVC*					self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	AllNodesVC*			_AllNodesVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy, 
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*		_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name								name,
+						Bool								initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name									_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				_AllNodesVC_Init(
+						void*						allNodesVC, 
+						Name						_dictionaryEntryName, 
+						void*						mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_AllNodesVC_Delete( void* allNodesVC );
+	
+	void				_AllNodesVC_Print( void* allNodesVC, Stream* stream );
+	
+	/* Copy */
+	#define AllNodesVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define AllNodesVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _AllNodesVC_Copy( void* allNodesVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_AllNodesVC_Build( void* allNodesVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_AllNodesVC_Construct( void* allNodesVC, Stg_ComponentFactory* cf, void* data ) ;
+	
+	void				_AllNodesVC_BuildSelf( void* allNodesVC, void* data );
+	
+	void				_AllNodesVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_AllNodesVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_AllNodesVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_AllNodesVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_AllNodesVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_AllNodesVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_AllNodesVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_AllNodesVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_AllNodesVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/AllNodesVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/AllNodesVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">AllNodesVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CellRemesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CellRemesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,303 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CellRemesher.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Remesher.h"
+#include "CellRemesher.h"
+
+
+/* Textual name of this class */
+const Type CellRemesher_Type = "CellRemesher";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+#define REMESHER_DEFARGS				\
+	sizeof(CellRemesher),				\
+	CellRemesher_Type,				\
+	_CellRemesher_Delete,				\
+	_CellRemesher_Print,				\
+	NULL,						\
+	(void*(*)(Name))_CellRemesher_DefaultNew,	\
+	_CellRemesher_Construct,			\
+	_CellRemesher_Build,				\
+	_CellRemesher_Initialise,			\
+	_CellRemesher_Execute,				\
+	_CellRemesher_Destroy,				\
+	name,						\
+	False,						\
+	_CellRemesher_SetMesh
+
+
+CellRemesher* CellRemesher_New( Name name ) {
+	return _CellRemesher_New( REMESHER_DEFARGS );
+}
+
+
+CellRemesher* _CellRemesher_New( CLASS_ARGS, 
+				 COMPONENT_ARGS, 
+				 REMESHER_ARGS )
+{
+	CellRemesher*	self;
+
+	/* Allocate memory. */
+	self = (CellRemesher*)_Remesher_New( _sizeOfSelf,
+					    type,
+					    _delete,
+					    _print, 
+					    _copy, 
+					    _defaultConstructor, 
+					    _construct, 
+					    _build, 
+					    _initialise, 
+					    _execute, 
+					    _destroy, 
+					    name, 
+					      initFlag, 
+					      setMeshFunc );
+
+	/* CellRemesher info */
+	if( initFlag ) {
+		_CellRemesher_Init( self );
+	}
+
+	return self;
+}
+
+
+void CellRemesher_Init( CellRemesher* self ) {
+	assert( 0 ); /* TODO */
+#if 0
+	/* General info */
+	self->type = CellRemesher_Type;
+	self->_sizeOfSelf = sizeof(CellRemesher);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _CellRemesher_Delete;
+	self->_print = _CellRemesher_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* CellRemesher info */
+	_CellRemesher_Init( self );
+#endif
+}
+
+
+void _CellRemesher_Init( CellRemesher* self ) {
+	/* CellRemesher info */
+	memset( &self->nDims, 
+		0, 
+		(size_t)&self->cellMesh - (size_t)&self->nDims + sizeof(Mesh*) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CellRemesher_Delete( void* cellRemesher ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+
+	/* Delete the class itself */
+	_CellRemesher_Free( self );
+
+	/* Delete parent */
+	_Remesher_Delete( cellRemesher );
+}
+
+
+void _CellRemesher_Print( void* cellRemesher, Stream* stream ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+	Stream*		myStream;
+	
+	/* Set the Journal for printing informations */
+	myStream = Journal_Register( InfoStream_Type, "CellRemesherStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+
+	/* General info */
+	Journal_Printf( myStream, "CellRemesher (ptr): (%p)\n", self );
+
+	/* Virtual info */
+
+	/* CellRemesher info */
+}
+
+
+CellRemesher* _CellRemesher_DefaultNew( Name name ) {
+	return _CellRemesher_New( REMESHER_DEFARGS );
+}
+
+
+void _CellRemesher_Construct( void* cellRemesher, Stg_ComponentFactory* cf, void* data ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+	Dictionary*	dict;
+	char*		cmName;
+
+	assert( self );
+	assert( cf );
+	assert( cf->componentDict );
+
+	_Remesher_Construct( self, cf, data );
+
+	/* Get the number of dimensions. */
+	dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+
+	/* Extract cell mesh. */
+	cmName = Dictionary_GetString( dict, "cellMesh" );
+	assert( cmName );
+	self->cellMesh = Stg_ComponentFactory_ConstructByName( cf, cmName, Mesh, True, data );
+}
+
+
+void _CellRemesher_Build( void* cellRemesher, void* data ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+
+	assert( self );
+
+	if( !self->meshType ) {
+		return;
+	}
+
+	assert( self->mesh );
+
+	/* Build parent. */
+	_Remesher_Build( self, data );
+
+	/* Build the cell mesh. */
+	Build( self->cellMesh, data, False );
+	self->nDims = Mesh_GetDimSize( self->cellMesh );
+}
+
+
+void _CellRemesher_Initialise( void* cellRemesher, void* data ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+
+	assert( self );
+
+	/* Initialise parent. */
+	_Remesher_Initialise( self, data );
+
+	/* Initialise the cell mesh. */
+	Initialise( self->cellMesh, data, False );
+}
+
+
+void _CellRemesher_Execute( void* cellRemesher, void* data ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+	double**	meshCrds;
+	double**	cellCrds;
+	unsigned	e_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( self->mesh->generator );
+	assert( self->cellMesh );
+	assert( self->cellMesh->generator );
+	/* TODO: remaining asserts */
+
+	meshCrds = self->mesh->verts;
+	cellCrds = self->cellMesh->verts;
+
+	/* Center the cell mesh's node coordinates in the cell mesh's elements. We assume identical
+	   ordering. */
+	for( e_i = 0; e_i < Mesh_GetLocalSize( self->cellMesh, self->nDims ); e_i++ ) {
+		unsigned	nElNodes;
+		unsigned*	elNodes;
+		double		fac;
+		unsigned	d_i;
+
+		Mesh_GetIncidence( self->cellMesh, self->nDims, e_i, MT_VERTEX, 
+				   &nElNodes, &elNodes );
+		fac = 1.0 / (double)nElNodes;
+
+		memset( meshCrds[e_i], 0, self->nDims * sizeof(double) );
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+			unsigned	en_i;
+
+			for( en_i = 0; en_i < nElNodes; en_i++ )
+				meshCrds[e_i][d_i] += cellCrds[elNodes[en_i]][d_i];
+			meshCrds[e_i][d_i] *= fac;
+		}
+	}
+}
+
+
+void _CellRemesher_Destroy( void* cellRemesher, void* data ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+
+	assert( self );
+
+	/* TODO: If delete deletes, what does destroy do? */
+}
+
+
+void _CellRemesher_SetMesh( void* cellRemesher, Mesh* mesh ) {
+	CellRemesher*	self = (CellRemesher*)cellRemesher;
+
+	assert( self );
+
+	/* Kill all internals. */
+	_CellRemesher_Free( self );
+
+	/* Store the mesh. */
+	self->mesh = mesh;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _CellRemesher_Free( CellRemesher* self ) {
+	assert( self );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CellRemesher.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CellRemesher.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: CellRemesher.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Utils_CellRemesher_h__
+#define __StGermain_Domain_Utils_CellRemesher_h__
+
+	/* Textual name of this class. */
+	extern const Type CellRemesher_Type;
+
+	/* Virtual function types. */
+
+	/* Class contents. */
+	#define __CellRemesher					\
+		/* General info */				\
+		__Remesher					\
+								\
+		/* Virtual info */				\
+								\
+		/* CellRemesher info ... */			\
+		unsigned			nDims;		\
+		Mesh*				cellMesh;
+
+	struct CellRemesher { __CellRemesher };
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create a CellRemesher */
+	CellRemesher* CellRemesher_New( Name name );
+
+	/* Creation implementation */
+	CellRemesher* _CellRemesher_New( CLASS_ARGS, 
+					 COMPONENT_ARGS, 
+					 REMESHER_ARGS );
+
+	/* Initialise a CellRemesher */
+	void CellRemesher_Init( CellRemesher* self );
+
+	/* Initialisation implementation functions */
+	void _CellRemesher_Init( CellRemesher* self );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CellRemesher_Delete( void* cellRemesher );
+	void _CellRemesher_Print( void* cellRemesher, Stream* stream );
+	CellRemesher* _CellRemesher_DefaultNew( Name name );
+	void _CellRemesher_Construct( void* cellRemesher, Stg_ComponentFactory* cf, void* data );
+	void _CellRemesher_Build( void* cellRemesher, void* data );
+	void _CellRemesher_Initialise( void* cellRemesher, void* data );
+	void _CellRemesher_Execute( void* cellRemesher, void* data );
+	void _CellRemesher_Destroy( void* cellRemesher, void* data );
+
+	void _CellRemesher_SetMesh( void* cellRemesher, Mesh* mesh );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void _CellRemesher_Free( CellRemesher* self );
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CellRemesher.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CellRemesher.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CellRemesher</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StgFEM</param>
+<param name="Location">./StgFEM/SLE/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgfem/WebHome</param>
+<param name="Copyright">Copyright (C) 2004-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CornerVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CornerVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,811 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CornerVC.c 3310 2005-10-26 07:10:18Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "CornerVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+
+const Type CornerVC_Type = "CornerVC";
+const Name defaultCornerVCName = "defaultCornerVCName";
+/* List of corner names */
+const char* CornerVC_CornerEnumToStr[CornerVC_Corner_Size] = {
+   "bottomLeftFront",
+   "bottomRightFront",
+   "topLeftFront",
+   "topRightFront",
+   "bottomLeftBack",
+   "bottomRightBack",
+   "topLeftBack",
+   "topRightBack" };
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* CornerVC_Factory(
+   Variable_Register*				variable_Register, 
+   ConditionFunction_Register*			conFunc_Register, 
+   Dictionary*					dictionary,
+   void*						data )
+{
+   return (VariableCondition*)CornerVC_New( defaultCornerVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+
+CornerVC*	CornerVC_DefaultNew( Name name )
+{
+	return _CornerVC_New(
+		sizeof(CornerVC), 
+		CornerVC_Type, 
+		_CornerVC_Delete, 
+		_CornerVC_Print, 
+		_CornerVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CornerVC_DefaultNew,
+		_CornerVC_Construct,	
+		_CornerVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_CornerVC_BuildSelf, 
+		_CornerVC_PrintConcise,
+		_CornerVC_ReadDictionary,
+		_CornerVC_GetSet, 
+		_CornerVC_GetVariableCount, 
+		_CornerVC_GetVariableIndex, 
+		_CornerVC_GetValueIndex, 
+		_CornerVC_GetValueCount, 
+		_CornerVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL);
+}
+
+CornerVC*	CornerVC_New(
+   Name                                name,
+   Name                                _dictionaryEntryName, 
+   Variable_Register*                  variable_Register, 
+   ConditionFunction_Register*         conFunc_Register, 
+   Dictionary*                         dictionary,
+   void*                               _mesh )
+{
+	return _CornerVC_New(
+		sizeof(CornerVC), 
+		CornerVC_Type, 
+		_CornerVC_Delete, 
+		_CornerVC_Print, 
+		_CornerVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CornerVC_DefaultNew,
+		_CornerVC_Construct,	
+		_CornerVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_CornerVC_BuildSelf, 
+		_CornerVC_PrintConcise,
+		_CornerVC_ReadDictionary,
+		_CornerVC_GetSet, 
+		_CornerVC_GetVariableCount, 
+		_CornerVC_GetVariableIndex, 
+		_CornerVC_GetValueIndex, 
+		_CornerVC_GetValueCount, 
+		_CornerVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		_mesh );
+}
+
+
+void CornerVC_Init(
+   CornerVC*                           self,
+   Name                                name,
+   Name                                _dictionaryEntryName, 
+   Variable_Register*                  variable_Register, 
+   ConditionFunction_Register*         conFunc_Register, 
+   Dictionary*                         dictionary,
+   void*                               _mesh )
+{
+   /* General info */
+   self->type = CornerVC_Type;
+   self->_sizeOfSelf = sizeof(CornerVC);
+   self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete =              _CornerVC_Delete;
+	self->_print =               _CornerVC_Print;
+	self->_copy =                _CornerVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)CornerVC_DefaultNew;
+	self->_construct =           _CornerVC_Construct;
+	self->_build =               _CornerVC_Build;
+	self->_initialise =          _VariableCondition_Initialise;
+	self->_execute =             _VariableCondition_Execute;
+	self->_destroy =             _VariableCondition_Destroy;
+	self->_buildSelf =           _CornerVC_BuildSelf;
+	self->_printConcise =        _CornerVC_PrintConcise;
+	self->_readDictionary =      _CornerVC_ReadDictionary;
+	self->_getSet =              _CornerVC_GetSet;
+	self->_getVariableCount =    _CornerVC_GetVariableCount;
+	self->_getVariableIndex =    _CornerVC_GetVariableIndex;
+	self->_getValueIndex =       _CornerVC_GetValueIndex;
+	self->_getValueCount =       _CornerVC_GetValueCount;
+	self->_getValue =            _CornerVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+   _Stg_Class_Init( (Stg_Class*)self );
+   _Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+   _Stg_Component_Init( (Stg_Component*)self );
+   _VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+   /* Stg_Class info */
+   _CornerVC_Init( self, _dictionaryEntryName, _mesh );
+}
+
+
+CornerVC* _CornerVC_New( 
+   SizeT                                       _sizeOfSelf, 
+   Type                                        type,
+   Stg_Class_DeleteFunction*                   _delete,
+   Stg_Class_PrintFunction*                    _print,
+   Stg_Class_CopyFunction*                     _copy, 
+   Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+   Stg_Component_ConstructFunction*            _construct,
+   Stg_Component_BuildFunction*                _build,
+   Stg_Component_InitialiseFunction*           _initialise,
+   Stg_Component_ExecuteFunction*              _execute,
+   Stg_Component_DestroyFunction*              _destroy,
+   Name                                        name, 
+   Bool                                        initFlag,
+   VariableCondition_BuildSelfFunc*            _buildSelf, 
+   VariableCondition_PrintConciseFunc*         _printConcise,
+   VariableCondition_ReadDictionaryFunc*       _readDictionary,
+   VariableCondition_GetSetFunc*               _getSet,
+   VariableCondition_GetVariableCountFunc*     _getVariableCount,
+   VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+   VariableCondition_GetValueIndexFunc*        _getValueIndex,
+   VariableCondition_GetValueCountFunc*        _getValueCount,
+   VariableCondition_GetValueFunc*             _getValue,
+   VariableCondition_ApplyFunc*			_apply, 
+   Name                                        _dictionaryEntryName, 
+   Variable_Register*                          variable_Register, 
+   ConditionFunction_Register*                 conFunc_Register, 
+   Dictionary*                                 dictionary,
+   void*                                       _mesh)
+{
+   CornerVC*	self;
+	
+   /* Allocate memory/General info */
+   assert(_sizeOfSelf >= sizeof(CornerVC));
+   self = (CornerVC*)_VariableCondition_New(
+      _sizeOfSelf, 
+      type, 
+      _delete, 
+      _print,
+      _copy,
+      _defaultConstructor,
+      _construct,	
+      _build,
+      _initialise,
+      _execute,
+      _destroy,
+      name,
+      initFlag,
+      _buildSelf, 
+      _printConcise,	
+      _readDictionary,
+      _getSet, 
+      _getVariableCount, 
+      _getVariableIndex, 
+      _getValueIndex, 
+      _getValueCount, 
+      _getValue, 
+      _apply, 
+      variable_Register, 
+      conFunc_Register,
+      dictionary );
+	
+   /* Virtual info */
+	
+   /* Stg_Class info */
+   if( initFlag ){
+      _CornerVC_Init( self, _dictionaryEntryName, _mesh );
+   }
+	
+   return self;
+}
+
+
+void _CornerVC_Init(
+   void*						cornerVC, 
+   Name						_dictionaryEntryName, 
+   void*						_mesh )
+{
+   CornerVC*		self = (CornerVC*)cornerVC;
+
+   self->isConstructed =         True;
+   self->_dictionaryEntryName =  _dictionaryEntryName;
+   self->_mesh =                 (Mesh*)_mesh;
+   self->_corner =               CornerVC_Corner_Size;
+   self->_entryTbl =             0;
+   self->_entryCount =           0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _CornerVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+   CornerVC*                 self = (CornerVC*)variableCondition;
+   Dictionary_Entry_Value*   vcDictVal;
+   Dictionary_Entry_Value    _vcDictVal;
+   Dictionary_Entry_Value*   varsVal;
+   CornerVC_Entry_Index      entry_I;
+	
+   /* Find dictionary entry */
+   if (self->_dictionaryEntryName) {
+      vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+   }
+   else
+   {
+      vcDictVal = &_vcDictVal;
+      Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+   }
+
+   if (vcDictVal)
+   {
+      char*	cornerStr;
+	
+      /* Obtain which corner */
+      cornerStr = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "corner" ));
+
+      if (!strcasecmp(cornerStr, "bottomLeftFront")){
+	 self->_corner = CornerVC_Corner_BottomLeftFront;
+      }
+      else if (!strcasecmp(cornerStr, "bottomRightFront"))
+	 self->_corner = CornerVC_Corner_BottomRightFront;
+      else if (!strcasecmp(cornerStr, "topLeftFront"))
+	 self->_corner = CornerVC_Corner_TopLeftFront;
+      else if (!strcasecmp(cornerStr, "topRightFront"))
+	 self->_corner = CornerVC_Corner_TopRightFront;
+      else if (!strcasecmp(cornerStr, "bottomLeftBack"))
+	 self->_corner = CornerVC_Corner_BottomLeftBack;
+      else if (!strcasecmp(cornerStr, "bottomRightBack"))
+	 self->_corner = CornerVC_Corner_BottomRightBack;
+      else if (!strcasecmp(cornerStr, "topLeftBack"))
+	 self->_corner = CornerVC_Corner_TopLeftBack;
+      else if (!strcasecmp(cornerStr, "topRightBack"))
+	 self->_corner = CornerVC_Corner_TopRightBack;
+      else {
+	 assert( 0 );
+	 self->_corner = CornerVC_Corner_Size; /* invalid entry */
+      }
+		
+      /* Obtain the variable entries */
+      self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+      self->_entryTbl = Memory_Alloc_Array( CornerVC_Entry, self->_entryCount, "CornerVC->_entryTbl" );
+      varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+      for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+      {
+	 char*			valType;
+	 Dictionary_Entry_Value*	valueEntry;
+	 Dictionary_Entry_Value*	varDictListVal;
+			
+	 varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+	 valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+	 self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+	    Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+	 valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+	 if (0 == strcasecmp(valType, "func"))
+	 {
+	    char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+	    Index	cfIndex;
+				
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+	    cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+	    if ( cfIndex == (unsigned)-1 ) {	
+	       Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+	       Journal_Printf( errorStr, "Error- in %s: While parsing "
+			       "definition of cornerVC \"%s\" (applies to corner \"%s\"), the cond. func. applied to "
+			       "variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+			       __func__, self->_dictionaryEntryName, CornerVC_CornerEnumToStr[self->_corner],
+			       self->_entryTbl[entry_I].varName, funcName );
+	       Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+	       ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+	       Journal_Printf( errorStr, ")\n");	
+	       assert(0);
+	    }	
+	    self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+	 }
+	 else if (0 == strcasecmp(valType, "array"))
+	 {
+	    Dictionary_Entry_Value*	valueElement;
+	    Index			i;
+
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+	    self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+	    self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+										    self->_entryTbl[entry_I].value.as.typeArray.size, "CornerVC->_entryTbl[].value.as.typeArray.array" );
+					
+	    for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+	    {
+	       valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+	       self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+		  Dictionary_Entry_Value_AsDouble(valueElement);
+	    }
+	 }
+	 else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+		  0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+	 {
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+	    self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+	 }
+	 else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+	    self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+	 }
+	 else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+	    self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+	 }
+	 else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+	    self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+	 }
+	 else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+	    self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+	 }
+	 else {
+	    /* Assume double */
+	    Journal_DPrintf( 
+	       Journal_Register( InfoStream_Type, "myStream" ), 
+	       "Type to variable on variable condition not given, assuming double\n" );
+	    self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+	    self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+	 }
+      }
+   }
+   else
+   {
+      self->_corner =     CornerVC_Corner_Size;
+      self->_entryCount = 0;
+      self->_entryTbl =   NULL;
+   }
+}
+
+
+void _CornerVC_Delete(void* cornerVC)
+{
+   CornerVC*	self = (CornerVC*)cornerVC;
+	
+   if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+   /* Stg_Class_Delete parent */
+   _VariableCondition_Delete(self);
+}
+
+
+void _CornerVC_Print(void* cornerVC, Stream* stream)
+{
+   CornerVC*                   self = (CornerVC*)cornerVC;
+   CornerVC_Entry_Index        entry_I;
+   Index                       i;
+	
+   /* Set the Journal for printing informations */
+   Stream* info = stream;
+	
+   /* General info */
+   Journal_Printf( info, "CornerVC (ptr): %p\n", self);
+	
+   /* Virtual info */
+	
+   /* Stg_Class info */
+   Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+   Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+   if (self->_dictionaryEntryName)
+      Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	
+   Journal_Printf( info, "\t_corner: %s\n", self->_corner == CornerVC_Corner_BottomLeftFront ? "BottomLeftFront" :
+		   self->_corner == CornerVC_Corner_BottomRightFront ? "BottomRightFront" : self->_corner == CornerVC_Corner_TopLeftFront ? "TopLeftFront" :
+		   self->_corner == CornerVC_Corner_TopRightFront ? "TopRightFront" : self->_corner == CornerVC_Corner_BottomLeftBack ? "BottomLeftBack" :
+		   self->_corner == CornerVC_Corner_BottomRightBack ? "BottomRightBack" : self->_corner == CornerVC_Corner_TopLeftBack ? "TopLeftBack" :
+		   self->_corner == CornerVC_Corner_TopRightBack ? "TopRightBack" : "None");
+   Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+   Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+   if (self->_entryTbl)
+      for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+      {
+	 Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+	 Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+	 if (self->_entryTbl[entry_I].varName)
+	    Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+	 Journal_Printf( info, "\t\t\tvalue:\n");
+	 switch (self->_entryTbl[entry_I].value.type)
+	 {
+	    case VC_ValueType_Double:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+	       Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+	       break;
+					
+	    case VC_ValueType_Int:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+	       Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+	       break;
+					
+	    case VC_ValueType_Short:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+	       Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+	       break;
+					
+	    case VC_ValueType_Char:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+	       Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+	       break;
+					
+	    case VC_ValueType_Ptr:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+	       Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+	       break;
+					
+	    case VC_ValueType_DoubleArray:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+	       Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+	       Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+			       self->_entryTbl[entry_I].value.as.typeArray.array);
+	       if (self->_entryTbl[entry_I].value.as.typeArray.array)
+		  for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+		     Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+				     self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+	       break;
+					
+	    case VC_ValueType_CFIndex:
+	       Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+	       Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+	       break;
+	 }
+      }
+   Journal_Printf( info, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+   /* Print parent */
+   _VariableCondition_Print(self);
+}
+
+
+void* _CornerVC_Copy( void* cornerVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+   CornerVC*       self = (CornerVC*)cornerVC;
+   CornerVC*       newCornerVC;
+   PtrMap*         map = ptrMap;
+   Bool            ownMap = False;
+	
+   if( !map ) {
+      map = PtrMap_New( 10 );
+      ownMap = True;
+   }
+	
+   newCornerVC = (CornerVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+   newCornerVC->_dictionaryEntryName = self->_dictionaryEntryName;
+   newCornerVC->_corner = self->_corner;
+   newCornerVC->_entryCount = self->_entryCount;
+	
+   if( deep ) {
+      newCornerVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+      if( (newCornerVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+	 newCornerVC->_entryTbl = Memory_Alloc_Array( CornerVC_Entry, newCornerVC->_entryCount, "CornerVC->_entryTbl");
+	 memcpy( newCornerVC->_entryTbl, self->_entryTbl, sizeof(CornerVC_Entry) * newCornerVC->_entryCount );
+	 PtrMap_Append( map, newCornerVC->_entryTbl, self->_entryTbl );
+      }
+   }
+   else {
+      newCornerVC->_mesh = self->_mesh;
+      newCornerVC->_entryTbl = self->_entryTbl;
+   }
+	
+   if( ownMap ) {
+      Stg_Class_Delete( map );
+   }
+	
+   return (void*)newCornerVC;
+}
+
+
+void _CornerVC_Build(  void* cornerVC, void* data ) {
+   CornerVC*         self = (CornerVC*)cornerVC;
+	
+   _CornerVC_BuildSelf( self, data );
+	
+   _VariableCondition_Build( self, data );
+}
+	
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CornerVC_Construct( void* cornerVC, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _CornerVC_BuildSelf(  void* cornerVC, void* data ) {
+   CornerVC*        self = (CornerVC*)cornerVC;
+	
+   if( self->_mesh ) {
+      Stg_Component_Build( self->_mesh, data, False );
+   }
+}
+
+IndexSet* _CornerVC_GetSet(void* variableCondition)
+{
+   CornerVC*   self = (CornerVC*)variableCondition;
+   IndexSet    *set = NULL;
+   Stream*     warningStr = Journal_Register( Error_Type, self->type );
+   unsigned	nDims;
+   Grid*	vertGrid;
+
+   nDims = Mesh_GetDimSize( self->_mesh );
+	vertGrid = *(Grid**)ExtensionManager_Get( self->_mesh->info, self->_mesh, 
+						  ExtensionManager_GetHandle( self->_mesh->info, 
+									      "vertexGrid" ) );
+
+   switch (self->_corner) {
+      case CornerVC_Corner_BottomLeftFront:
+	 if ( nDims < 3 || !vertGrid->sizes[2] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "K" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalBottomLeftFrontSet(self->_mesh);
+	 }
+	 break;
+			
+      case CornerVC_Corner_BottomRightFront:
+	 if ( !vertGrid->sizes[0] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "I" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else if ( nDims < 3 || !vertGrid->sizes[2] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "K" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalBottomRightFrontSet(self->_mesh);
+	 }	
+	 break;
+			
+      case CornerVC_Corner_TopLeftFront:
+	 if ( nDims < 2 || !vertGrid->sizes[1] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "J" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+	 }
+	 else if ( nDims < 3 || !vertGrid->sizes[2] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "K" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalTopLeftFrontSet(self->_mesh);
+	 }	
+	 break;
+			
+      case CornerVC_Corner_TopRightFront:
+	 if ( nDims < 2 || !vertGrid->sizes[1] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "J" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else if ( nDims < 3 || !vertGrid->sizes[2] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "K" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else if ( !vertGrid->sizes[0] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "I" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalTopRightFrontSet(self->_mesh);
+	 }	
+	 break;
+			
+      case CornerVC_Corner_BottomLeftBack:
+	 set = RegularMeshUtils_CreateGlobalBottomLeftBackSet(self->_mesh);
+	 break;
+			
+      case CornerVC_Corner_BottomRightBack:
+	 if ( !vertGrid->sizes[0] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "I" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalBottomRightBackSet(self->_mesh);
+	 }
+	 break;
+			
+      case CornerVC_Corner_TopLeftBack:
+	 if ( nDims < 2 || !vertGrid->sizes[1] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "J" );
+	    set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalTopLeftBackSet(self->_mesh);
+	 }	
+	 break;
+			
+      case CornerVC_Corner_TopRightBack:
+	 if ( !vertGrid->sizes[0] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "I" );
+	    set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );	
+	 }
+	 else if ( nDims < 2 || !vertGrid->sizes[1] ) {
+	    Journal_Printf( warningStr, "Warning - in %s: Can't build a %s corner VC "
+			    "when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+			    CornerVC_CornerEnumToStr[self->_corner], "J" );
+	    set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));
+	 }
+	 else {
+	    set = RegularMeshUtils_CreateGlobalTopRightBackSet(self->_mesh);
+	 }
+	 break;
+		
+      case CornerVC_Corner_Size:
+      default:
+	 assert(0);
+	 break;
+   }
+
+   return set;
+}
+
+
+VariableCondition_VariableIndex _CornerVC_GetVariableCount(void* variableCondition, Index globalIndex)
+{
+   CornerVC*   self = (CornerVC*)variableCondition;
+	
+   return self->_entryCount;
+}
+
+
+Variable_Index _CornerVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex)
+{
+   CornerVC*       self = (CornerVC*)variableCondition;
+   Variable_Index  searchedIndex = 0;
+   Stream*         errorStr = Journal_Register( Error_Type, self->type );
+   Name            varName;
+	
+   varName = self->_entryTbl[varIndex].varName;
+   searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+   Journal_Firewall( ( searchedIndex < self->variable_Register->count ), errorStr, "Error- in %s: searching for index of "
+		     "varIndex %u (\"%s\") at global node number %u failed - register returned index %u, greater than "
+		     "count %u.\n", __func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+   return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _CornerVC_GetValueIndex(
+   void*				variableCondition, 
+   Index				globalIndex, 
+   VariableCondition_VariableIndex	varIndex)
+{
+   return varIndex;
+}
+
+
+VariableCondition_ValueIndex _CornerVC_GetValueCount(void* variableCondition)
+{
+   CornerVC*	self = (CornerVC*)variableCondition;
+	
+   return self->_entryCount;
+}
+
+
+VariableCondition_Value _CornerVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex)
+{
+   CornerVC*	self = (CornerVC*)variableCondition;
+
+   return self->_entryTbl[valIndex].value;
+}
+
+void _CornerVC_PrintConcise( void* variableCondition, Stream* stream ) {
+   CornerVC*	self = (CornerVC*)variableCondition;
+	
+   Journal_Printf( stream, "\ttype: %s, set: ", self->type );
+   Journal_Printf( stream, "%s\n", 
+		   self->_corner == CornerVC_Corner_BottomLeftFront ? "BottomLeftFront" :
+		   self->_corner == CornerVC_Corner_BottomRightFront ? "BottomRightFront" : 
+		   self->_corner == CornerVC_Corner_TopLeftFront ? "TopLeftFront" :
+		   self->_corner == CornerVC_Corner_TopRightFront ? "TopRightFront" : 
+		   self->_corner == CornerVC_Corner_BottomLeftBack ? "BottomLeftBack" :
+		   self->_corner == CornerVC_Corner_BottomRightBack ? "BottomRightBack" : 
+		   self->_corner == CornerVC_Corner_TopLeftBack ? "TopLeftBack" :
+		   self->_corner == CornerVC_Corner_TopRightBack ? "TopRightBack" : "None" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CornerVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CornerVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,199 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: CornerVC.h 3291 2005-10-18 00:05:33Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_CornerVC_h__
+#define __Domain_Utils_CornerVC_h__
+	
+
+	extern const Type CornerVC_Type;
+
+	extern const char* CornerVC_CornerEnumToStr[CornerVC_Corner_Size];
+	
+	#define __CornerVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _CornerVC_Entry { __CornerVC_Entry };
+	
+	
+	#define __CornerVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		CornerVC_Corner			_corner; \
+		CornerVC_Entry_Index		_entryCount; \
+		CornerVC_Entry*			_entryTbl; \
+		Mesh*				_mesh;
+
+	struct _CornerVC { __CornerVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*	CornerVC_Factory(
+							Variable_Register*                  variable_Register, 
+							ConditionFunction_Register*         conFunc_Register, 
+							Dictionary*                         dictionary,
+							void*                               data );
+	
+	CornerVC*			CornerVC_DefaultNew( Name name );
+
+	CornerVC*			CornerVC_New(
+							Name                                name,
+							Name                                _dictionaryEntryName, 
+							Variable_Register*                  variable_Register, 
+							ConditionFunction_Register*         conFunc_Register, 
+							Dictionary*                         dictionary,
+							void*                               _mesh );
+	
+	void				CornerVC_Init(
+							CornerVC*                           self,
+							Name                                name,
+							Name                                _dictionaryEntryName, 
+							Variable_Register*                  variable_Register, 
+							ConditionFunction_Register*         conFunc_Register, 
+							Dictionary*                         dictionary,
+							void*                               _mesh );
+	
+	CornerVC*			_CornerVC_New( 
+							SizeT                                       _sizeOfSelf, 
+							Type                                        type,
+							Stg_Class_DeleteFunction*                   _delete,
+							Stg_Class_PrintFunction*                    _print,
+							Stg_Class_CopyFunction*                     _copy,
+							Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+							Stg_Component_ConstructFunction*            _construct,
+							Stg_Component_BuildFunction*                _build,
+							Stg_Component_InitialiseFunction*           _initialise,
+							Stg_Component_ExecuteFunction*              _execute,
+							Stg_Component_DestroyFunction*              _destroy,
+							Name                                        name, 
+							Bool                                        initFlag,
+							VariableCondition_BuildSelfFunc*            _buildSelf, 
+							VariableCondition_PrintConciseFunc*         _printConcise,
+							VariableCondition_ReadDictionaryFunc*       _readDictionary,
+							VariableCondition_GetSetFunc*               _getSet,
+							VariableCondition_GetVariableCountFunc*     _getVariableCount,
+							VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+							VariableCondition_GetValueIndexFunc*        _getValueIndex,
+							VariableCondition_GetValueCountFunc*        _getValueCount,
+							VariableCondition_GetValueFunc*             _getValue,
+							VariableCondition_ApplyFunc*			_apply, 
+							Name                                        _dictionaryEntryName, 
+							Variable_Register*                          variable_Register, 
+							ConditionFunction_Register*                 conFunc_Register, 
+							Dictionary*                                 dictionary,
+							void*                                       _mesh );
+	
+	void				_CornerVC_Init(
+							void*                       cornerVC, 
+							Name                        _dictionaryEntryName, 
+							void*                       _mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_CornerVC_Delete( void* cornerVC );
+	
+	void				_CornerVC_Print( void* cornerVC, Stream* stream );
+	
+	/* Copy */
+	#define CornerVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CornerVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _CornerVC_Copy( void* cornerVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_CornerVC_Build(  void* cornerVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_CornerVC_Construct( void* cornerVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_CornerVC_BuildSelf( void* cornerVC, void* data );
+	
+	void				_CornerVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_CornerVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_CornerVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index		_CornerVC_GetVariableIndex(
+							void*                           variableCondition,
+							Index                           globalIndex, 
+							VariableCondition_VariableIndex varIndex );
+						
+	VariableCondition_ValueIndex	_CornerVC_GetValueIndex(
+							void*                           variableCondition, 
+							Index                           globalIndex, 
+							VariableCondition_VariableIndex varIndex );
+						
+	VariableCondition_ValueIndex	_CornerVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value         _CornerVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_CornerVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_CornerVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/CornerVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/CornerVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CornerVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description"> This function is designed so that a user can specify BC's at the corners of a region. See xml file: ../tests/data/CornerVC.xml </param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DiscretisationContext.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DiscretisationContext.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">DiscretisationContext</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">AbstractContext</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DofLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DofLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,679 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: DofLayout.c 4137 2007-06-07 05:46:46Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "DofLayout.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type DofLayout_Type = "DofLayout";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Private function declarations
+*/
+
+/** Add a new Variable to the group that may be used as dofs, where varIndex is the index of the variable
+in the variable register. */
+Dof_Index	_DofLayout_AddVariable_ByIndex(void* dofLayout, Variable_Index varIndex);
+
+/** Add a new Variable to the group that may be used as dofs - by name. */
+Dof_Index	_DofLayout_AddVariable_ByName(void* dofLayout, Name varName);
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+DofLayout* DofLayout_DefaultNew( Name name )
+{
+	return _DofLayout_New(
+			sizeof(DofLayout), 
+			DofLayout_Type, 
+			_DofLayout_Delete, 
+			_DofLayout_Print, 
+			_DofLayout_Copy,
+			(Stg_Component_DefaultConstructorFunction*)DofLayout_DefaultNew,
+			_DofLayout_Construct,
+			_DofLayout_Build, 
+			_DofLayout_Initialise, 
+			_DofLayout_Execute, 
+			_DofLayout_Destroy,
+			name,
+			False,
+			NULL, 
+			0, 
+			NULL );
+}
+
+DofLayout* DofLayout_New( Name name, Variable_Register* variableRegister, Index numItemsInLayout, void* mesh )
+{
+	return _DofLayout_New(
+			sizeof(DofLayout), 
+			DofLayout_Type, 
+			_DofLayout_Delete, 
+			_DofLayout_Print, 
+			_DofLayout_Copy,
+			(Stg_Component_DefaultConstructorFunction*)DofLayout_DefaultNew,
+			_DofLayout_Construct,
+			_DofLayout_Build, 
+			_DofLayout_Initialise, 
+			_DofLayout_Execute, 
+			_DofLayout_Destroy,
+			name, 
+			True,
+			variableRegister, 
+			numItemsInLayout, 
+			mesh );
+}
+
+
+void DofLayout_Init(DofLayout* self, Name name, Variable_Register* variableRegister, Index numItemsInLayout, void* mesh )
+{
+	/* General info */
+	self->type = Variable_Type;
+	self->_sizeOfSelf = sizeof(Variable);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Variable_Delete;
+	self->_print = _Variable_Print;
+	self->_copy = _DofLayout_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)DofLayout_DefaultNew;
+	self->_construct = _DofLayout_Construct;
+	self->_build = _DofLayout_Build;
+	self->_execute = _DofLayout_Execute;
+	self->_destroy = _DofLayout_Destroy;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_DofLayout_Init(self, variableRegister, numItemsInLayout, 0, NULL, mesh);
+}
+
+DofLayout* _DofLayout_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*			_destroy,
+		Name						name,
+		Bool						initFlag,
+		Variable_Register*				variableRegister,
+		Index						numItemsInLayout, 
+		void*						mesh )
+{
+	DofLayout*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(DofLayout));
+	self = (DofLayout*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, (Stg_Component_DefaultConstructorFunction*)DofLayout_DefaultNew,
+			_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* Virtual info */
+	self->_build = _build;
+	self->_initialise = _initialise;
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_DofLayout_Init(self, variableRegister, numItemsInLayout, 0, NULL, mesh );
+	}
+	
+	return self;
+}
+
+
+void _DofLayout_Init(void* dofLayout, Variable_Register* variableRegister, 
+		     Index numItemsInLayout, Variable_Index baseVariableCount, Variable** baseVariableArray, void* _mesh )
+{
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Mesh*		mesh = (Mesh*)_mesh;
+	
+	self->isConstructed = True;
+	self->_variableRegister = variableRegister;
+
+	self->_numItemsInLayout = numItemsInLayout;
+	self->_variableEnabledSets = NULL;
+	self->_totalVarCount = 0;
+	self->_varIndicesMapping = NULL;
+	
+	self->dofCounts = NULL;
+
+	self->mesh = mesh;
+	self->nBaseVariables = baseVariableCount;
+	self->baseVariables = baseVariableArray;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _DofLayout_Delete(void* dofLayout)
+{
+	DofLayout*	self = (DofLayout*)dofLayout;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete(self);
+}
+
+
+void _DofLayout_Print(void* dofLayout, Stream* stream)
+{
+	DofLayout*	self = (DofLayout*)dofLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* compositeVCStream = stream;
+	
+	/* General info */
+	Journal_Printf( compositeVCStream, "DofLayout (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	
+	/* Print parent */
+	_Stg_Component_Print( self, compositeVCStream );
+}
+
+
+void* _DofLayout_Copy( void* dofLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	DofLayout*	newDofLayout;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newDofLayout = (DofLayout*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	newDofLayout->_variableRegister = self->_variableRegister;
+	newDofLayout->_numItemsInLayout = self->_numItemsInLayout;
+	newDofLayout->_totalVarCount = self->_totalVarCount;
+	
+	if( deep ) {
+		if( (newDofLayout->_variableEnabledSets = PtrMap_Find( map, self->_variableEnabledSets )) == NULL && self->_variableEnabledSets ) {
+			Index	set_I;
+			
+			newDofLayout->_variableEnabledSets = Memory_Alloc_Array( IndexSet*, newDofLayout->_totalVarCount, "DofLayout->_variableEnabledSets" );
+			for( set_I = 0; set_I < newDofLayout->_totalVarCount; set_I++ ) {
+				newDofLayout->_variableEnabledSets[set_I] = (IndexSet*)Stg_Class_Copy( self->_variableEnabledSets[set_I], NULL, deep, nameExt, map );
+			}
+			PtrMap_Append( map, self->_variableEnabledSets, newDofLayout->_variableEnabledSets );
+		}
+		
+		if( (newDofLayout->_varIndicesMapping = PtrMap_Find( map, self->_varIndicesMapping )) == NULL && self->_varIndicesMapping ) {
+			newDofLayout->_varIndicesMapping = Memory_Alloc_Array( Variable_Index, newDofLayout->_totalVarCount, "DofLayout->_varIndicesMapping" );
+			memcpy( newDofLayout->_varIndicesMapping, self->_varIndicesMapping, sizeof(Variable_Index) * newDofLayout->_totalVarCount );
+			PtrMap_Append( map, self->_varIndicesMapping, newDofLayout->_varIndicesMapping );
+		}
+		
+		if( (newDofLayout->dofCounts = PtrMap_Find( map, self->dofCounts )) == NULL && self->dofCounts ) {
+			newDofLayout->dofCounts = Memory_Alloc_Array( Index, newDofLayout->_numItemsInLayout, "DofLayout->dofCounts" );
+			memcpy( newDofLayout->dofCounts, self->dofCounts, sizeof(Index) * newDofLayout->_numItemsInLayout );
+			PtrMap_Append( map, self->dofCounts, newDofLayout->dofCounts );
+		}
+		
+		if( (newDofLayout->varIndices = PtrMap_Find( map, self->varIndices )) == NULL && self->varIndices ) {
+			Index	idx_I;
+			
+			newDofLayout->varIndices = Memory_Alloc_2DComplex( Variable_Index, newDofLayout->_numItemsInLayout, self->dofCounts, "DofLayout->varIndices" );
+			for( idx_I = 0; idx_I < newDofLayout->_numItemsInLayout; idx_I++ ) {
+				memcpy( newDofLayout->varIndices[idx_I], self->varIndices[idx_I], sizeof(Variable_Index) * newDofLayout->dofCounts[idx_I] );
+			}
+			PtrMap_Append( map, self->varIndices, newDofLayout->varIndices );
+		}
+	}
+	else {
+		newDofLayout->_variableEnabledSets = self->_variableEnabledSets;
+		newDofLayout->_varIndicesMapping = self->_varIndicesMapping;
+		newDofLayout->dofCounts = self->dofCounts;
+		newDofLayout->varIndices = self->varIndices;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newDofLayout;
+}
+
+void _DofLayout_Construct( void* dofLayout, Stg_ComponentFactory* cf, void* data ) 
+{
+	DofLayout *             self              = (DofLayout*)dofLayout;
+	Dictionary*             thisComponentDict = NULL;
+	void*                   variableRegister  = NULL;
+	Dictionary_Entry_Value* list;
+	Variable_Index          baseVariableCount = 0;
+	Variable**              baseVariableList  = NULL;
+	Mesh*			mesh;
+
+	/* Get component's dictionary setup */
+	assert( cf->componentDict );
+	thisComponentDict = Dictionary_GetDictionary( cf->componentDict, self->name );
+	assert( thisComponentDict );
+
+	/* Get the mesh. */
+	mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, True, data );
+
+	variableRegister = (void*)Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variableRegister );
+
+	if (( list = Dictionary_Get( thisComponentDict, "BaseVariables" ) )) {
+		Variable_Index          baseVariable_I    = 0;
+		Name                    variableName;
+
+		baseVariableCount = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "BaseVariableCount", Dictionary_Entry_Value_GetCount( list ) );
+		Journal_Firewall(
+				baseVariableCount <= Dictionary_Entry_Value_GetCount( list ),
+				Journal_Register( Error_Type, self->type ),
+				"BaseVariableCount %u is too large for list given.\n", baseVariableCount );
+
+		baseVariableList = Memory_Alloc_Array( Variable*, baseVariableCount, "baseVariableList" );
+		
+		for ( baseVariable_I = 0 ; baseVariable_I < baseVariableCount ; baseVariable_I++ ) {
+			variableName = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( list, baseVariable_I ) );
+
+			Journal_PrintfL( cf->infoStream, 2, "Looking for Variable '%s' in Variable_Register\n", variableName );
+			baseVariableList[ baseVariable_I ] = Variable_Register_GetByName( variableRegister, variableName );
+			if ( !baseVariableList[ baseVariable_I ] )
+				baseVariableList[ baseVariable_I ] = 
+					Stg_ComponentFactory_ConstructByName( cf, variableName, Variable, True, data );
+		}
+	}
+	
+	_DofLayout_Init( self, variableRegister, 0, baseVariableCount, baseVariableList, mesh );
+}
+
+void _DofLayout_Build( void* dofLayout, void* data ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Index		indexCount;
+	Index*		indices;
+	Index		set_I, i, pos;
+
+	assert( self );
+
+	/* Build mesh and extract domain size, if required. */
+	if( self->mesh ) {
+		Stg_Component_Build( self->mesh, data, False );
+		self->_numItemsInLayout = Mesh_GetDomainSize( self->mesh, MT_VERTEX );
+	}
+
+	/* Adds each variable in this list as a base degree of freedom to each item in DofLayout */
+	DofLayout_AddAllFromVariableArray( self, self->nBaseVariables, self->baseVariables );
+
+	/* ensure variables are built */
+	for( i = 0; i < self->_totalVarCount; i++ )
+		Stg_Component_Build( Variable_Register_GetByIndex( self->_variableRegister, self->_varIndicesMapping[i] ), data, False );
+	
+	self->dofCounts = Memory_Alloc_Array( Index, self->_numItemsInLayout, "DofLayout->dofCounts" );
+	memset(self->dofCounts, 0, sizeof(Index)*self->_numItemsInLayout);
+	
+	for (set_I = 0; set_I < self->_totalVarCount; set_I++)
+	{
+		IndexSet_GetMembers(self->_variableEnabledSets[set_I], &indexCount, &indices);
+		for (i = 0; i < indexCount; i++)
+		{
+			self->dofCounts[indices[i]]++;
+		}
+			
+		if (indices) Memory_Free(indices);
+	}
+	
+	self->varIndices = Memory_Alloc_2DComplex( Variable_Index, self->_numItemsInLayout, self->dofCounts,
+		"DofLayout->varIndices" );
+	for (i = 0; i < self->_numItemsInLayout; i++)
+	{
+		pos = 0;
+		for (set_I = 0; set_I < self->_totalVarCount; set_I++)
+		{
+			if (IndexSet_IsMember(self->_variableEnabledSets[set_I], i))
+				self->varIndices[i][pos++] = self->_varIndicesMapping[set_I];
+		}
+	}
+}
+
+
+void _DofLayout_Initialise( void* dofLayout, void* data ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Index           var_I;
+
+	/* Initialise all the Variables used - in some cases they don't allocate themselves properly until
+		this is done */
+	for( var_I = 0; var_I < self->_totalVarCount; var_I++ ) {
+		Stg_Component_Initialise( Variable_Register_GetByIndex( self->_variableRegister, self->_varIndicesMapping[var_I] ),
+			data, False );
+	}	
+}
+
+
+void _DofLayout_Execute( void* dofLayout, void* data ) {
+}
+
+void _DofLayout_Destroy( void* dofLayout, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Private functions
+*/
+
+Dof_Index _DofLayout_AddVariable_ByIndex(void* dofLayout, Variable_Index varIndex) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Dof_Index	dof_I;
+	
+	for (dof_I = 0; dof_I < self->_totalVarCount; dof_I++)
+		if (varIndex == self->_varIndicesMapping[dof_I])
+			return dof_I;
+	
+	self->_totalVarCount++;
+	
+	/* Do an Alloc if array does not exist to register stats in memory module. Other times, just Realloc */
+	if ( self->_varIndicesMapping )
+	{
+		self->_varIndicesMapping = Memory_Realloc_Array( self->_varIndicesMapping, Variable_Index, self->_totalVarCount );
+	}
+	else
+	{
+		self->_varIndicesMapping = Memory_Alloc_Array( Variable_Index, self->_totalVarCount,
+			"DofLayout->_varIndicesMapping" );
+	}
+	self->_varIndicesMapping[self->_totalVarCount - 1] = varIndex;
+
+	if ( self->_variableEnabledSets )
+	{
+		self->_variableEnabledSets = Memory_Realloc_Array( self->_variableEnabledSets, IndexSet*, self->_totalVarCount );
+	}
+	else
+	{
+		self->_variableEnabledSets = Memory_Alloc_Array( IndexSet*, self->_totalVarCount,
+			"DofLayout->_variableEnabledSets" );
+	}
+	self->_variableEnabledSets[self->_totalVarCount - 1] = IndexSet_New(self->_numItemsInLayout);
+	
+	return self->_totalVarCount - 1;
+}
+
+
+Dof_Index _DofLayout_AddVariable_ByName(void* dofLayout, Name varName) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Dof_Index	dof_I;
+	
+	dof_I = Variable_Register_GetIndex( self->_variableRegister, varName );
+	Journal_Firewall( 
+		dof_I != (unsigned)-1,
+		Journal_Register( Error_Type, DofLayout_Type ),
+		"Attempting to name a variable as a DOF that is not in the variable registry!\n" );
+	return _DofLayout_AddVariable_ByIndex( self, dof_I );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public functions
+*/
+
+void DofLayout_AddDof_ByVarIndex(void* dofLayout, Variable_Index varIndex, Index index) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	
+	IndexSet_Add(self->_variableEnabledSets[varIndex], index);
+}
+
+
+void DofLayout_AddDof_ByVarName(void* dofLayout, Name varName, Index index) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	
+	DofLayout_AddDof_ByVarIndex(self, _DofLayout_AddVariable_ByName(self, varName), index);
+}
+
+Variable* DofLayout_GetVariable(void* dofLayout, Index index, Dof_Index dofAtItemIndex ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Variable_Index	var_I = self->varIndices[index][dofAtItemIndex];
+	
+	return Variable_Register_GetByIndex( self->_variableRegister, var_I );
+}
+
+
+void DofLayout_CopyValues( void* dofLayout, void* destDofLayout ) {
+	DofLayout*    self = (DofLayout*)dofLayout;
+	DofLayout*    dest = (DofLayout*)destDofLayout;
+	Index         ii = 0;
+	Dof_Index     dof_I = 0;
+	Stream*       error = Journal_Register( Error_Type, self->type );
+	
+	Journal_Firewall( (self->_numItemsInLayout == dest->_numItemsInLayout), error,
+		"Error: Number of items in source dof layout (%d) not equal to number of "
+		"items in destination dof layout (%d).\n",
+		self->_numItemsInLayout, dest->_numItemsInLayout );
+
+	for ( ii=0; ii < self->_numItemsInLayout; ii++ ) {
+		#ifdef CAUTIOUS
+		Journal_Firewall( (self->dofCounts[ii] == dest->dofCounts[ii] ), error,
+			"Error: Number of dofs in source dof layout (item %d, %d dofs) not equal to "
+			"number of dofs in destination dof layout at same entry (%d).\n",
+			self->_numItemsInLayout, self->dofCounts[ii], dest->dofCounts[ii] );
+		#endif	
+
+		for ( dof_I = 0; dof_I < self->dofCounts[ii]; dof_I++ ) {
+			DofLayout_SetValueDouble( dest, ii, dof_I,
+				DofLayout_GetValueDouble( self, ii, dof_I ) );
+		}
+	}
+}
+
+
+void DofLayout_SetAllToZero( void* dofLayout ) {
+	DofLayout*    self = (DofLayout*)dofLayout;
+	Index         ii = 0;
+	Dof_Index     dof_I = 0;
+	
+	for ( ii=0; ii < self->_numItemsInLayout; ii++ ) {
+
+		for ( dof_I = 0; dof_I < self->dofCounts[ii]; dof_I++ ) {
+			DofLayout_SetValueDouble( self, ii, dof_I, 0 );
+		}
+	}
+}
+
+
+void DofLayout_Remap( void* dofLayout, Index newIndexCount, IndexMap* map ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Index		item_I;
+	
+	assert( newIndexCount && map ); /* TODO: change this to Journal commands */
+	
+	/*
+	** NOTE: it is possible that a remapping will eliminate some of the variables accessed
+	**	 by the DofLayout.  This will require a bit more effort to account for, but for
+	**	 the moment it shouldn't matter.
+	*/
+	
+	if( self->_variableEnabledSets ) {
+		IndexSet**	variableEnabledSets;
+		Index		set_I;
+		
+		variableEnabledSets = Memory_Alloc_Array( IndexSet*, self->_totalVarCount, "DofLayout->_variableEnabledSets" );
+		for( set_I = 0; set_I < self->_totalVarCount; set_I++ ) {
+			Index	itemCount;
+			Index*	items;
+			
+			variableEnabledSets[set_I] = IndexSet_New( newIndexCount );
+			
+			IndexSet_GetMembers( self->_variableEnabledSets[set_I], &itemCount, &items );
+			for( item_I = 0; item_I < itemCount; item_I++ ) {
+				Index	mappedValue = IndexMap_Find( map, items[item_I] );
+				
+				if( mappedValue < self->_numItemsInLayout ) {
+					IndexSet_Add( variableEnabledSets[set_I], mappedValue );
+				}
+			}
+			
+			Memory_Free( items );
+			Stg_Class_Delete( self->_variableEnabledSets[set_I] );
+		}
+		Memory_Free( self->_variableEnabledSets );
+		self->_variableEnabledSets = variableEnabledSets;
+	}
+	
+	/* Map dofCounts */
+	if( self->dofCounts ) {
+		Dof_Index*	dofCounts;
+		
+		dofCounts = Memory_Alloc_Array( Dof_Index, newIndexCount, "DofLayout->dofCounts" );
+		for( item_I = 0; item_I < self->_numItemsInLayout; item_I++ ) {
+			Index	mappedValue = IndexMap_Find( map, item_I );
+			
+			if( mappedValue < self->_numItemsInLayout ) {
+				dofCounts[mappedValue] = self->dofCounts[item_I];
+			}
+		}
+		Memory_Free( self->dofCounts );
+		self->dofCounts = dofCounts;
+	}
+	
+	/* Map varIndices */
+	if( self->varIndices ) {
+		Variable_Index**	varIndices;
+		
+		varIndices = Memory_Alloc_2DComplex( Variable_Index, newIndexCount, self->dofCounts, "DofLayout->varIndices" );
+		for( item_I = 0; item_I < self->_numItemsInLayout; item_I++ ) {
+			Index	mappedValue = IndexMap_Find( map, item_I );
+			
+			if( mappedValue < self->_numItemsInLayout ) {
+				memcpy( varIndices[mappedValue], 
+					self->varIndices[item_I], 
+					sizeof(Variable_Index) * self->dofCounts[mappedValue] );
+			}
+		}
+		Memory_Free( self->varIndices );
+		self->varIndices = varIndices;
+	}
+	
+	/* Overwrite old values */
+	self->_numItemsInLayout = newIndexCount;
+}
+
+void DofLayout_AddAllFromVariableArray( void* dofLayout, Variable_Index variableCount, Variable** variableArray ) {
+	DofLayout*      self        = (DofLayout*) dofLayout;
+	Index           item_I;
+	Index           itemCount   = self->_numItemsInLayout;
+	Variable_Index  variable_I;
+	Stream*         errorStream = Journal_Register( Error_Type, self->type );
+
+	for( variable_I = 0; variable_I < variableCount ; variable_I++ ) {
+		Journal_Firewall( variableArray[variable_I] != NULL, errorStream,
+				"In func %s for %s '%s' - Variable %d in array is NULL.\n", __func__, self->type, self->name, variable_I);
+		for( item_I = 0; item_I < itemCount ; item_I++ ) {
+			DofLayout_AddDof_ByVarName( self, variableArray[variable_I]->name, item_I );
+		}
+	}
+}
+
+
+void DofLayout_SaveAllVariablesToFiles( void* dofLayout, char* prefixString, unsigned rank ) {
+	DofLayout*  self = (DofLayout*) dofLayout;
+	Index       ownedVar_I, var_I;
+	Variable*   variable = NULL;
+	char*       varFileName;
+	int         prefixStringLength=0;
+
+	for ( ownedVar_I = 0; ownedVar_I < self->_totalVarCount; ownedVar_I++ ) {
+		var_I = self->_varIndicesMapping[ownedVar_I];
+		variable = Variable_Register_GetByIndex( self->_variableRegister, var_I );
+
+		if ( prefixString ) {
+			prefixStringLength = strlen(prefixString);
+		}
+		else {
+			prefixStringLength = 0;
+		}
+
+		varFileName = Memory_Alloc_Array_Unnamed( char, prefixStringLength + strlen( variable->name ) + 5 + 4 + 1 );
+		if ( prefixString ) {
+			sprintf( varFileName, "%s.%s.dat.%.4d", prefixString, variable->name, rank );
+		}
+		else {
+			sprintf( varFileName, "%s.dat.%.4d", variable->name, rank );
+		}
+		
+		Variable_SaveToFileAsDoubles( variable, varFileName );
+		Memory_Free( varFileName );
+	}
+}
+
+
+void DofLayout_LoadAllVariablesFromFiles( void* dofLayout, char* prefixString, unsigned rank ) {
+	DofLayout*  self = (DofLayout*) dofLayout;
+	Index       ownedVar_I, var_I;
+	Variable*   variable = NULL;
+	char*       varFileName;
+	int         prefixStringLength=0;
+
+	for ( ownedVar_I = 0; ownedVar_I < self->_totalVarCount; ownedVar_I++ ) {
+		var_I = self->_varIndicesMapping[ownedVar_I];
+		variable = Variable_Register_GetByIndex( self->_variableRegister, var_I );
+
+		if ( prefixString ) {
+			prefixStringLength = strlen(prefixString);
+		}
+		else {
+			prefixStringLength = 0;
+		}
+
+		varFileName = Memory_Alloc_Array_Unnamed( char, prefixStringLength + strlen( variable->name ) + 5 + 4 + 1 );
+		if ( prefixString ) {
+			sprintf( varFileName, "%s.%s.dat.%.4d", prefixString, variable->name, rank );
+		}
+		else {
+			sprintf( varFileName, "%s.dat.%.4d", variable->name, rank );
+		}
+		
+		Variable_ReadFromFileAsDoubles( variable, varFileName );
+		Memory_Free( varFileName );
+	}
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DofLayout.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DofLayout.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,209 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Allows the user to lay out which Variables exist at each index in a structure (eg nodes of a mesh). Also allows
+**	the user to "connect", through the use of the Variable class, where the the dofs that are conceptually
+**	associated with each node actually reside in memory (e.g. it could be on a separate array, rather than on
+**	the nodes themselves.
+**
+** Assumptions:
+**
+** Comments:
+**	Note on terminology: we call this class a DofLayout because we consider Dofs (Degrees of Freedom)
+**	as instantiations of a Variable onto some structure (i.e. we might say a given mesh has 30,000
+**	velocity dofs if it has 10,000 nodes, each with a vx, vy, vz (Variables). )
+**
+**	This general DofLayout should have subclasses which add a set of dofs to each node of a mesh, etc.
+**
+** $Id: DofLayout.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_DofLayout_h__
+#define __Domain_Utils_DofLayout_h__
+	
+	/** Textual name of this class */
+	extern const Type DofLayout_Type;
+	
+	/** DofLayout contents */
+	#define __DofLayout \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		/** Variable register containing the variables referenced in this layout. */ \
+		Variable_Register*	_variableRegister; \
+		\
+		/** The number of items that are controlled by this dof layout, hence number of entries in each set. */ \
+		Index			_numItemsInLayout; \
+		/** The total number of variables referred to across all the indices in the dof layout. */ \
+		Index			_totalVarCount; \
+		/** Array of sets, 1 per variable, which record the items in the layout that have that variable as a dof. */ \
+		IndexSet**		_variableEnabledSets; \
+		/** Table which maps local storage indices of variables to indices into the Variable_Register. */ \
+		Variable_Index*		_varIndicesMapping; \
+		\
+		/** Array containing number of dofs at each index (e.g. at each node in a mesh) */ \
+		Dof_Index*		dofCounts; \
+		/** 2D Array: for each index (e.g. each node), stores an array (of size dofCounts[i]) containing
+		the indexes into the DofLayout::_variableRegister of the Variable s at that index. */ \
+		Variable_Index**	varIndices; \
+						    \
+		Mesh*			mesh;	\
+		unsigned		nBaseVariables; \
+		Variable**		baseVariables;
+
+
+	/** Allows the user to lay out which Variables exist at each index in a structure (eg nodes of a mesh) - see
+	 DofLayout.h for details. */
+	struct _DofLayout { __DofLayout };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	DofLayout*	DofLayout_DefaultNew( Name name );
+	
+	DofLayout*	DofLayout_New( Name name, Variable_Register* variableRegister, Index numItemsInLayout, void* mesh );
+	
+	void		DofLayout_Init(DofLayout* self, Name name, Variable_Register* variableRegister, Index numItemsInLayout, void* mesh );
+	
+	DofLayout*	_DofLayout_New( 
+				SizeT						_sizeOfSelf, 
+				Type						type,
+				Stg_Class_DeleteFunction*				_delete,
+				Stg_Class_PrintFunction*				_print,
+				Stg_Class_CopyFunction*				_copy,
+				Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+				Stg_Component_ConstructFunction*			_construct,
+				Stg_Component_BuildFunction*			_build,
+				Stg_Component_InitialiseFunction*			_initialise,
+				Stg_Component_ExecuteFunction*			_execute,
+				Stg_Component_DestroyFunction*			_destroy,
+				Name							name,
+				Bool							initFlag,
+				Variable_Register*				variableRegister,
+				Index						numItemsInLayout, 
+				void*						mesh );
+	
+	void _DofLayout_Init(void* dofLayout, Variable_Register* variableRegister, Index numItemsInLayout, Variable_Index baseVariableCount, Variable** baseVariableArray, void* mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void	_DofLayout_Delete(void* dofLayout);
+	
+	/** Stg_Class_Print() implementation */
+	void	_DofLayout_Print(void* dofLayout, Stream* stream);
+	
+	/* Copy */
+	#define DofLayout_Copy( self ) \
+		(DofLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define DofLayout_DeepCopy( self ) \
+		(DofLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _DofLayout_Copy( void* dofLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Stg_Component_Construct() implementation */
+	void _DofLayout_Construct( void* dofLayout, Stg_ComponentFactory* cf, void* data );
+	
+	/** Stg_Component_Build() implementation */
+	void _DofLayout_Build( void* dofLayout, void* data );
+	
+	/** Stg_Component_Initialise() implementation */
+	void _DofLayout_Initialise( void* dofLayout, void* data );
+	
+	/* Stg_Component_Execute() implementation */
+	void _DofLayout_Execute( void* dofLayout, void* data );
+	
+	/* Stg_Component_Destroy() implementation */
+	void _DofLayout_Destroy( void* dofLayout, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	/** Adds a new Dof, by specifying the Variable index (into the Variable_Register) the dof is an instantiation of,
+	and the index in the client's structure it applies to. An example might be (var index 0 ("vx"), node 100). */
+	void	DofLayout_AddDof_ByVarIndex(void* dofLayout, Variable_Index varIndex, Index index);
+	
+	/** Adds a new Dof, by specifying the Variable name the dof is an instantiation of, and the index into the
+	client's structure it applies to. An example might be (variable "vx", node 100).  */
+	void	DofLayout_AddDof_ByVarName(void* dofLayout, Name varName, Index index);
+
+	/** Gets a ptr to the Variable that lives at a particular index for a Dof */
+	Variable* DofLayout_GetVariable(void* dofLayout, Index index, Dof_Index dofAtItemIndex );
+
+	/** Shortcut macro to set a value of a particular dof, at a given index, without having to worry
+	about the underlying variable interface. (Only have a "double" version as that's all we need so far */
+	#define DofLayout_SetValueDouble( dofLayout, index, dofAtItemIndex, value ) \
+		( Variable_SetValueDouble( DofLayout_GetVariable( dofLayout, index, dofAtItemIndex ), index, value ) )
+	
+	/** Shortcut macro to get a value of a particular dof, at a given index, without having to worry
+	about the underlying variable interface. (Only have a "double" version as that's all we need so far */
+	#define DofLayout_GetValueDouble( dofLayout, index, dofAtItemIndex ) \
+		( Variable_GetValueDouble( DofLayout_GetVariable( dofLayout, index, dofAtItemIndex ), index ) )
+	
+	/** Utility function to set every dof's value to zero. */
+	void DofLayout_SetAllToZero( void* dofLayout );
+	
+	/** Copies values from one dofLayout to another. Note this function requires the destination and
+	source dofLayouts to have the same "shape". */
+	void DofLayout_CopyValues( void* dofLayout, void* destDofLayout );
+	
+	/* Map the dofLayout to another set of indices */
+	void DofLayout_Remap( void* dofLayout, Index newIndexCount, IndexMap* map );
+
+	/** Adds each variable in this array to each item in the dof layout */
+	void DofLayout_AddAllFromVariableArray( void* dofLayout, Variable_Index variableCount, Variable** variableArray ) ;
+
+	/** Saves all variables used by this dofLayout to files */
+	void DofLayout_SaveAllVariablesToFiles( void* dofLayout, char* prefixString, unsigned rank );
+
+	/** Saves all variables used by this dofLayout to files */
+	void DofLayout_LoadAllVariablesFromFiles( void* dofLayout, char* prefixString, unsigned rank );
+
+#endif /* __Domain_Utils_DofLayout_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DofLayout.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DofLayout.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">DofLayout</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">Count</param>
+		<param name="Type">String</param>
+		<param name="Default">""</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name"></param>
+		<param name="Type">UnsignedInt( cf, self->name, "BaseVariableCount", Dictionary_Entry_Value_GetCount</param>
+		<param name="Default"></param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">variableName</param>
+		<param name="Type">Variable</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 320 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DomainContext.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DomainContext.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,175 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Context.c 2454 2004-12-21 04:50:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+                                                                                                                                    
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+                                                                                                                                    
+#include "types.h"
+#include "FieldVariable.h"
+#include "FieldVariable_Register.h"
+#include "DomainContext.h"
+                                                                                                                                    
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type DomainContext_Type = "DomainContext";
+
+DomainContext* DomainContext_New( 
+		Name                                        name,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary )
+{
+		return _DomainContext_New(
+			sizeof(DomainContext),
+			DomainContext_Type,
+			_DomainContext_Delete,
+			_DomainContext_Print,
+			NULL,
+			NULL,
+			_AbstractContext_Construct,
+			_AbstractContext_Build,
+			_AbstractContext_Initialise,
+			_AbstractContext_Execute,
+			_AbstractContext_Destroy,
+			name,
+			True,
+			_DomainContext_SetDt,
+			start,
+			stop,
+			MPI_COMM_WORLD,
+			dictionary );
+}
+
+DomainContext* _DomainContext_New( 
+		SizeT                                       sizeOfSelf,
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy, 
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		Name                                        name,
+		Bool                                        initFlag,
+		AbstractContext_SetDt*                      _setDt,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary )
+{
+	DomainContext* self;
+	
+	/* Allocate memory */
+	self = (DomainContext*)_AbstractContext_New( 
+		sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_setDt, 
+		start, 
+		stop, 
+		communicator, 
+		dictionary );
+	
+	/* General info */
+
+	/* Virtual info */
+	
+	if( initFlag ){
+		_DomainContext_Init( self );
+		
+	}
+	
+	return self;
+}
+
+
+void _DomainContext_Init( DomainContext* self ) {
+
+	self->isConstructed = True;
+	self->fieldVariable_Register = FieldVariable_Register_New();
+
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->fieldVariable_Register, "FieldVariable_Register" );
+	self->dim = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "dim", 2 );
+}
+
+
+/* Virtual Functions -------------------------------------------------------------------------------------------------------------*/
+
+void _DomainContext_Delete( void* context ) {
+	DomainContext* self = (DomainContext*)context;
+	
+	Journal_DPrintf( self->debug, "In: %s()\n", __func__ );
+
+	Journal_DPrintfL( self->debug, 2, "Deleting the FieldVariable register (and hence all FieldVariables).\n" );
+	Stg_Class_Delete( self->fieldVariable_Register ); 
+
+	/* Stg_Class_Delete parent */
+	_AbstractContext_Delete( self );
+}
+
+
+void _DomainContext_Print( void* context, Stream* stream ) {
+	DomainContext* self = (DomainContext*)context;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "DomainContext (ptr): %p\n", self );
+	
+	/* Print parent */
+	_AbstractContext_Print( self, stream );
+
+	Journal_Printf( (void*) stream, "\tfieldVariables (ptr): %p\n", self->fieldVariable_Register );
+	Stg_Class_Print( self->fieldVariable_Register, stream );
+}
+
+
+void _DomainContext_SetDt( void* context, double dt ) {
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/DomainContext.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/DomainContext.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,98 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Context.h 2454 2004-12-21 04:50:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_DomainContext_h__
+#define __Domain_Utils_DomainContext_h__
+	
+	/* Textual name of this class */
+	extern const Type DomainContext_Type;
+	
+	#define __DomainContext \
+		/* General info */ \
+		__AbstractContext \
+		\
+		/* Virtual info */ \
+		\
+		/* DomainContext info */ \
+		FieldVariable_Register*             fieldVariable_Register; \
+		Dimension_Index	                    dim;						\
+		
+	struct DomainContext { __DomainContext };
+	
+	DomainContext* DomainContext_New( 
+		Name                                        name,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary );
+	
+	/** Creation implementation / Virtual constructor */
+	DomainContext* _DomainContext_New( 
+		SizeT                                       sizeOfSelf,
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy, 
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		Name                                        name,
+		Bool                                        initFlag,
+		AbstractContext_SetDt*                      _setDt,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary );
+	
+	/** Initialisation implementation */
+	void 						_DomainContext_Init( DomainContext* self );
+
+	/* Virtual Functions ------------------------------------------------------------------------------------------------*/
+	
+	/* Stg_Class_Delete implementation */
+	void						_DomainContext_Delete( void* context );
+	
+	/* Print implementation */
+	void						_DomainContext_Print( void* context, Stream* stream );
+	
+	void _DomainContext_SetDt( void* context, double dt ) ;
+
+#endif /* __DomainContext_h__*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/EmbeddedSurface.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/EmbeddedSurface.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,331 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: EmbeddedSurface.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "EmbeddedSurface.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+
+const Type EmbeddedSurface_Type = "EmbeddedSurface";
+
+
+EmbeddedSurface *EmbeddedSurface_New(Mesh *surface)
+{
+	return _EmbeddedSurface_New(sizeof(EmbeddedSurface),
+				    EmbeddedSurface_Type,
+				    _EmbeddedSurface_Delete,
+				    _EmbeddedSurface_Print,
+				    surface);
+}
+
+
+EmbeddedSurface *_EmbeddedSurface_New(SizeT			_sizeOfSelf,
+				      Type			type,
+				      Stg_Class_DeleteFunction*	_delete,
+				      Stg_Class_PrintFunction*	_print,
+				      Mesh			*surface)
+{
+	EmbeddedSurface *self;
+	
+	/* Allocate memory */
+	self = (EmbeddedSurface *)_Stg_Class_New(_sizeOfSelf,
+		type,
+		_delete,
+		_print);
+		
+	/* General info */
+	self->surface = surface;
+	
+	/* Virtual info */
+	
+	/* EmbeddedSurface info */
+	_EmbeddedSurface_Init(self);
+	
+	return self;
+}
+
+
+void EmbeddedSurface_Init(EmbeddedSurface *self)
+{
+	_EmbeddedSurface_Init(self);
+}
+
+
+void _EmbeddedSurface_Init(EmbeddedSurface *self)
+{
+	/* Note: assumes surface is an irregular tri surf */
+	Element_GlobalIndex	edc = self->surface->elementDomainCount;
+	Node			*nodeAt;
+	Coord			*node;
+	Triangle_List		element = ((TriSurfTopology*)self->surface->layout->topology)->elementTbl;
+	Coord			*edgeVector;
+	Element_Index		*eltBndryCnt;
+	Index			i;
+	
+	/* Build coord list */
+	node = Memory_Alloc_Array( Coord, self->surface->nodeDomainCount, "node" );
+	for (i = 0; i < self->surface->nodeDomainCount; i++)
+	{
+		nodeAt = Mesh_NodeAt(self->surface, i);
+		node[i][0] = ((Advectable *)nodeAt)->coord[0];
+		node[i][1] = ((Advectable *)nodeAt)->coord[1];
+		node[i][2] = ((Advectable *)nodeAt)->coord[2];
+	}
+
+	/* Build edge list and edge face list */
+	self->edgeCount = Edge_BuildList_FromTriangles(element, edc, &self->edge, &self->edgeElement);
+	
+	/* Generate element normals/planes */
+	self->elementPlane = Memory_Alloc_Array( Plane, edc, "EmbeddedSurface->elementPlace" );
+	for (i = 0; i < edc; i++)
+	{
+		Coord a, b;
+
+		Vector_Sub(a, node[element[i][1]], node[element[i][0]]);
+		Vector_Sub(b, node[element[i][2]], node[element[i][0]]);
+		Vector_Cross(self->elementPlane[i], a, b);
+		Vector_Norm(self->elementPlane[i], self->elementPlane[i]);
+		self->elementPlane[i][3] = Vector_Dot(self->elementPlane[i], node[element[i][0]]);
+	}
+	
+	/* Order the edge faces, ie. edgeElement[i][0] = left face, edgeElement[i][1] = right face */
+	edgeVector = Memory_Alloc_Array( Coord, self->edgeCount, "edgeVector" );
+	for (i = 0; i < self->edgeCount; i++)
+	{
+		Node_Index ni0 = self->edge[i][0];
+		Node_Index ni1 = self->edge[i][1];
+		Element_Index ei0 = self->edgeElement[i][0];
+		Node_Index ni2 = element[ei0][0] != ni1 ? element[ei0][0] :
+				 (element[ei0][1] != ni1 ? element[ei0][1] :
+				 element[ei0][2]);
+		Coord elementVector, cross;
+
+		Vector_Sub(edgeVector[i], node[ni1], node[ni0]);
+		Vector_Sub(elementVector, node[ni2], node[ni0]);
+		Vector_Cross(cross, edgeVector[i], elementVector);
+		if (Vector_Dot(cross, self->elementPlane[ei0]) >= 0.0)
+		{
+			self->edgeElement[i][0] = self->edgeElement[i][1];
+			self->edgeElement[i][1] = ei0;
+		}
+	}
+	
+	/* Build tables for determining distance from surface to point */
+	eltBndryCnt = Memory_Alloc_Array( Element_Index, edc, "eltBndryCnt" );
+	memset(eltBndryCnt, 0, sizeof(Element_Index)*edc);
+	
+	self->elementBoundary = Memory_Alloc_Array( TriangleBoundary, edc, "EmbeddedSurface->elementBoundary" );
+
+	for (i = 0; i < self->edgeCount; i++)
+	{
+		Coord plane;
+		
+		if (self->edgeElement[i][0] < edc)
+		{
+			Element_Index	eiLeft = self->edgeElement[i][0];
+			Index		epiLeft = eltBndryCnt[eiLeft]++;
+
+			Vector_Set(plane, self->elementPlane[eiLeft]);
+			
+			if (self->edgeElement[i][1] < edc)
+			{
+				Element_Index	eiRight = self->edgeElement[i][1];
+				Index		epiRight = eltBndryCnt[eiRight]++;
+
+				Vector_Add(plane, plane, self->elementPlane[eiRight]);
+				
+				Vector_Cross(self->elementBoundary[eiLeft][epiLeft], edgeVector[i], plane);
+				Vector_Mult(self->elementBoundary[eiRight][epiRight], self->elementBoundary[eiLeft][epiLeft], -1.0);
+				Vector_Norm(self->elementBoundary[eiLeft][epiLeft], self->elementBoundary[eiLeft][epiLeft]);
+				Vector_Norm(self->elementBoundary[eiRight][epiRight], self->elementBoundary[eiRight][epiRight]);
+				self->elementBoundary[eiLeft][epiLeft][3] = Vector_Dot(self->elementBoundary[eiLeft][epiLeft], node[self->edge[i][0]]);
+				self->elementBoundary[eiRight][epiRight][3] = Vector_Dot(self->elementBoundary[eiRight][epiRight], node[self->edge[i][0]]);
+			}
+			else
+			{
+				Vector_Cross(self->elementBoundary[eiLeft][epiLeft], edgeVector[i], plane);
+				Vector_Norm(self->elementBoundary[eiLeft][epiLeft], self->elementBoundary[eiLeft][epiLeft]);
+				self->elementBoundary[eiLeft][epiLeft][3] = Vector_Dot(self->elementBoundary[eiLeft][epiLeft], node[self->edge[i][0]]);
+			}
+		}
+		else
+		{
+			Element_Index	eiRight = self->edgeElement[i][1];
+			Index		epiRight = eltBndryCnt[eiRight]++;
+
+			Vector_Set(plane, self->elementPlane[eiRight]);
+				
+			Vector_Cross(self->elementBoundary[eiRight][epiRight], edgeVector[i], plane);
+			Vector_Mult(self->elementBoundary[eiRight][epiRight], self->elementBoundary[eiRight][epiRight], -1.0);
+			Vector_Norm(self->elementBoundary[eiRight][epiRight], self->elementBoundary[eiRight][epiRight]);
+			self->elementBoundary[eiRight][epiRight][3] = Vector_Dot(self->elementBoundary[eiRight][epiRight], node[self->edge[i][0]]);
+		}
+	}
+	
+	if (eltBndryCnt) Memory_Free(eltBndryCnt);
+	if (edgeVector) Memory_Free(edgeVector);
+	if (node) Memory_Free(node);
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Generic virtual functions
+*/
+
+void _EmbeddedSurface_Delete(void *embeddedSurface)
+{
+	EmbeddedSurface	*self = (EmbeddedSurface *)embeddedSurface;
+	
+	if (self->edge) Memory_Free(self->edge);
+	if (self->edgeElement) Memory_Free(self->edgeElement);
+	if (self->elementPlane) Memory_Free(self->elementPlane);
+	if (self->elementBoundary) Memory_Free(self->elementBoundary);
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(embeddedSurface);
+}
+
+
+void _EmbeddedSurface_Print(void *embeddedSurface)
+{
+	EmbeddedSurface	*self = (EmbeddedSurface *)embeddedSurface;
+	Element_GlobalIndex edc = self->surface->elementDomainCount;
+	Index i, j;
+	
+	/* Set the Journal for printing informations */
+	Stream* embeddedSurfaceStream = Journal_Register( InfoStream_Type,	"EmbeddedSurfaceStream");
+	
+	Journal_Printf( embeddedSurfaceStream, "EmbeddedSurface (%p):\n", self);
+	Journal_Printf( embeddedSurfaceStream, "\tsurface: %p\n", self->surface);
+	
+	Journal_Printf( embeddedSurfaceStream, "\tedgeCount: %u\n", self->edgeCount);
+	for (i = 0; i < self->edgeCount; i++)
+		Journal_Printf( embeddedSurfaceStream, "\t\tedge[%u]: %u-->%u\n", i, self->edge[i][0], self->edge[i][1]);
+	for (i = 0; i < self->edgeCount; i++)
+	{
+		Journal_Printf( embeddedSurfaceStream, "\t\tedgeElement[%u]: ", i);
+		if (self->edgeElement[i][0] < edc)
+			Journal_Printf( embeddedSurfaceStream, "left %03u, ", self->edgeElement[i][0]);
+		else
+			Journal_Printf( embeddedSurfaceStream, "left xxx, ");
+		if (self->edgeElement[i][1] < edc)
+			Journal_Printf( embeddedSurfaceStream, "right %03u\n", self->edgeElement[i][1]);
+		else
+			Journal_Printf( embeddedSurfaceStream, "right xxx\n");
+	}
+	
+	for (i = 0; i < edc; i++)
+		Journal_Printf( embeddedSurfaceStream, "\telementPlane[%u]: %.3fx + %.3fy + %.3fz = %.3f\n", i, self->elementPlane[i][0], 
+			self->elementPlane[i][1], self->elementPlane[i][2], self->elementPlane[i][3]);
+	for (i = 0; i < edc; i++)
+		for (j = 0; j < 3; j++)
+			Journal_Printf( embeddedSurfaceStream, "\telementBoundary[%u][%u]: %.3fx + %.3fy + %.3fz = %.3f\n", i, j, self->elementBoundary[i][j][0], 
+				self->elementBoundary[i][j][1], self->elementBoundary[i][j][2], self->elementBoundary[i][j][3]);
+
+	/* Print parent class */
+	_Stg_Class_Print(embeddedSurface);
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Utility functions
+*/
+
+Element_GlobalIndex EmbeddedSurface_BuildIntersection(EmbeddedSurface *self, Element_GlobalIndex *intersect)
+{
+	MeshLayout		*spatial = ((IrregularMeshDecomp *)self->surface->layout->decomp)->_layout;
+	Node			*node;
+	Node_GlobalIndex	ndc = self->surface->nodeDomainCount;
+	Element_GlobalIndex	be, intersectCnt = 0;
+	Index i, j;
+
+	for (i = 0; i < ndc; i++)
+	{
+		node = Mesh_NodeAt(self->surface, i);
+		be = MeshLayout_ElementWithPoint(spatial, ((Advectable *)node)->coord);
+
+		for (j = 0; j < intersectCnt; j++)
+			if (intersect[j] == be) break;
+		if (j < intersectCnt) continue;
+		
+		intersect[intersectCnt++] = be;
+	}
+	
+	return intersectCnt;
+}
+
+
+double EmbeddedSurface_DistanceToPoint(EmbeddedSurface *self, Coord point)
+{
+	Element_GlobalIndex	edc = self->surface->elementDomainCount;
+	double			dist[2];
+	Bool			first = True;
+	Index			i, j;
+
+	for (i = 0; i < edc; i++)
+	{
+		for (j = 0; j < 3; j++)
+		{
+			dist[1] = Vector_Dot(self->elementBoundary[i][j], point);
+			if (dist[1] < self->elementBoundary[i][j][3])
+				break;
+		}
+		if (j < 3) continue;
+		
+		dist[1] = Vector_Dot(self->elementPlane[i], point);
+		dist[1] = fabs(dist[1] - self->elementPlane[i][3]);
+		
+		if (!first)
+		{
+			if (dist[1] < dist[0])
+				dist[0] = dist[1];
+		}
+		else
+		{
+			dist[0] = dist[1];
+			first = False;
+		}
+	}
+	
+	if (first)
+		Journal_Printf( (void*) stream,  *** Warning *** : Point in DistanceToPoint outside plane domain\n");
+	
+	return dist[0];
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/EmbeddedSurface.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/EmbeddedSurface.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,100 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: EmbeddedSurface.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Domain_Utils_EmbeddedSurface_h__
+#define __Domain_Utils_EmbeddedSurface_h__
+
+
+	extern const Type EmbeddedSurface_Type;
+
+
+	#define __EmbeddedSurface \
+		/* General info */ \
+		__Stg_Class \
+		Mesh			*surface; \
+		\
+		/* Virtual info */ \
+		\
+		/* EmbeddedSurface info */ \
+		Edge_List		edge; \
+		Edge_Index		edgeCount; \
+		EdgeFaces		*edgeElement; \
+		\
+		Plane			*elementPlane; \
+		TriangleBoundary	*elementBoundary;
+	struct _EmbeddedSurface { __EmbeddedSurface };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	EmbeddedSurface *EmbeddedSurface_New(Mesh *surface);
+	
+	EmbeddedSurface *_EmbeddedSurface_New(SizeT			_sizeOfSelf,
+					      Type			type,
+					      Stg_Class_DeleteFunction*	_delete,
+					      Stg_Class_PrintFunction*	_print,
+					      Mesh			*surface);
+	
+	void EmbeddedSurface_Init(EmbeddedSurface *self);
+	
+	void _EmbeddedSurface_Init(EmbeddedSurface *self);
+	
+	
+	/*----------------------------------------------------------------------------------------------------------------------------------
+	** Generic virtual functions
+	*/
+	
+	void _EmbeddedSurface_Delete(void *embeddedSurface);
+	
+	void _EmbeddedSurface_Print(void *embeddedSurface);
+	
+	
+	/*----------------------------------------------------------------------------------------------------------------------------------
+	** Utility functions
+	*/
+	
+	#define ES_IntersectionMax(self) \
+		(self)->surface->elementDomainCount
+	
+	Element_GlobalIndex EmbeddedSurface_BuildIntersection(EmbeddedSurface *self, Element_GlobalIndex *intersect);
+	
+	double EmbeddedSurface_DistanceToPoint(EmbeddedSurface *self, Coord point);
+
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FieldVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FieldVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,372 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: FieldVariable.c 4076 2007-04-24 04:37:28Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "FieldVariable.h"
+#include "DomainContext.h"
+#include "FieldVariable_Register.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type FieldVariable_Type = "FieldVariable";
+
+const char* InterpolationResultToStringMap[4] = {
+	"OTHER_PROC",
+	"LOCAL",
+	"SHADOW",
+	"OUTSIDE_GLOBAL"
+	};
+
+FieldVariable* FieldVariable_DefaultNew( Name name )
+{
+		return _FieldVariable_New( 
+			sizeof(FieldVariable), 
+			FieldVariable_Type, 
+			_FieldVariable_Delete, 
+			_FieldVariable_Print,
+			_FieldVariable_Copy, 
+			(Stg_Component_DefaultConstructorFunction*)FieldVariable_DefaultNew,
+			_FieldVariable_Construct,
+			_FieldVariable_Build, 
+			_FieldVariable_Initialise, 
+			_FieldVariable_Execute, 
+			_FieldVariable_Destroy, 
+			name,
+			False,
+			NULL, 
+			NULL,
+			NULL, 
+			NULL,
+			NULL, 
+			0,
+			0,
+			False,
+			MPI_COMM_WORLD,
+			NULL);
+}
+
+FieldVariable* FieldVariable_New(		
+		Name                                               name,
+		FieldVariable_InterpolateValueAtFunction*          _interpolateValueAt,
+		FieldVariable_GetValueFunction*                    _getMinGlobalFieldMagnitude,
+		FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude,		
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords,
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords,
+		Index                                              fieldComponentCount,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fieldVariable_Register ) 
+{
+	return _FieldVariable_New(
+			sizeof(FieldVariable),
+			FieldVariable_Type,
+			_FieldVariable_Delete,
+			_FieldVariable_Print,
+			_FieldVariable_Copy, 
+			(Stg_Component_DefaultConstructorFunction*)FieldVariable_DefaultNew,
+			_FieldVariable_Construct,
+			_FieldVariable_Build, 
+			_FieldVariable_Initialise, 
+			_FieldVariable_Execute, 
+			_FieldVariable_Destroy,
+			name,
+			True,
+			_interpolateValueAt,
+			_getMinGlobalFieldMagnitude,
+			_getMaxGlobalFieldMagnitude,		
+			_getMinAndMaxLocalCoords,
+			_getMinAndMaxGlobalCoords,
+			fieldComponentCount,
+			dim,
+			isCheckpointedAndReloaded,
+			communicator,
+			fieldVariable_Register );
+}
+
+FieldVariable* _FieldVariable_New(
+ 		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print, 
+		Stg_Class_CopyFunction*	                    _copy, 
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_ExecuteFunction*              _destroy,
+		Name                                        name,
+		Bool                                        initFlag,
+		FieldVariable_InterpolateValueAtFunction*   _interpolateValueAt,
+		FieldVariable_GetValueFunction*             _getMinGlobalFieldMagnitude,
+		FieldVariable_GetValueFunction*             _getMaxGlobalFieldMagnitude,		
+		FieldVariable_GetCoordFunction*             _getMinAndMaxLocalCoords,
+		FieldVariable_GetCoordFunction*             _getMinAndMaxGlobalCoords,
+		Index                                       fieldComponentCount,
+		Dimension_Index                             dim,
+		Bool                                        isCheckpointedAndReloaded,
+		MPI_Comm                                    communicator,
+		FieldVariable_Register*                     fieldVariable_Register )		
+{
+	FieldVariable*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(FieldVariable) );
+	self = (FieldVariable*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy,
+		_defaultConstructor, _construct, _build, _initialise, _execute, _destroy,
+		name, NON_GLOBAL );
+	
+	/* Virtual functions */
+	self->_interpolateValueAt         = _interpolateValueAt;
+	self->_getMinGlobalFieldMagnitude = _getMinGlobalFieldMagnitude;
+	self->_getMaxGlobalFieldMagnitude = _getMaxGlobalFieldMagnitude;
+	self->_getMinAndMaxLocalCoords    = _getMinAndMaxLocalCoords;
+	self->_getMinAndMaxGlobalCoords   = _getMinAndMaxGlobalCoords;
+
+	/* General info */
+	/* FieldVariable info */
+	if( initFlag ){
+		_FieldVariable_Init( self, fieldComponentCount, dim, isCheckpointedAndReloaded, 
+			communicator, fieldVariable_Register );
+	}
+	
+	return self;
+}
+
+void _FieldVariable_Delete( void* fieldVariable ) {
+	FieldVariable* self = (FieldVariable*) fieldVariable;
+
+	if( self->extensionMgr ) {
+		Stg_Class_Delete( self->extensionMgr );
+	}
+	_Stg_Component_Delete( self );
+}
+
+void _FieldVariable_Print( void* _fieldVariable, Stream* stream ) {
+	FieldVariable* self = (FieldVariable*) _fieldVariable;
+
+	Journal_Printf( stream, "FieldVariable - '%s'\n", self->name );
+	Stream_Indent( stream );
+	_Stg_Component_Print( self, stream );
+
+	Journal_PrintPointer( stream, self->_interpolateValueAt );
+	Journal_PrintPointer( stream, self->_getMinGlobalFieldMagnitude );
+	Journal_PrintPointer( stream, self->_getMaxGlobalFieldMagnitude );
+	Journal_PrintPointer( stream, self->_getMinAndMaxLocalCoords );
+	Journal_PrintPointer( stream, self->_getMinAndMaxGlobalCoords );
+
+	Journal_PrintValue( stream, self->fieldComponentCount );
+	Journal_PrintValue( stream, self->dim );
+	Journal_PrintBool( stream, self->isCheckpointedAndReloaded);
+	#ifdef LAM_MPI
+		Journal_PrintPointer( stream, self->communicator );
+	#elif  defined( OPEN_MPI )
+		Journal_PrintPointer( stream, self->communicator );
+	#else
+		Journal_PrintValue( stream, self->communicator );
+	#endif
+	Journal_PrintPointer( stream, self->fieldVariable_Register );
+	Stream_UnIndent( stream );
+}
+
+void _FieldVariable_Init( 
+		FieldVariable*                                     self, 
+		Index                                              fieldComponentCount, 
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator, 
+		FieldVariable_Register*                            fV_Register ) {
+	/* Add ourselves to the register for later retrieval by clients */
+	self->isConstructed = True;
+
+	self->fieldComponentCount         = fieldComponentCount;
+	self->dim                         = dim;
+	self->communicator                = communicator;
+	self->fieldVariable_Register      = fV_Register;
+	self->isCheckpointedAndReloaded   = isCheckpointedAndReloaded;
+	if (self != NULL && fV_Register != NULL)	
+		FieldVariable_Register_Add( fV_Register, self );
+
+	self->extensionMgr = ExtensionManager_New_OfExistingObject( self->name, self );
+}
+
+
+void* _FieldVariable_Copy( void* fieldVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+	FieldVariable*	newFieldVariable;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newFieldVariable = _Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	newFieldVariable->_interpolateValueAt        = self->_interpolateValueAt;
+	newFieldVariable->_getMinAndMaxLocalCoords   = self->_getMinAndMaxLocalCoords;
+	newFieldVariable->_getMinAndMaxGlobalCoords  = self->_getMinAndMaxGlobalCoords;
+
+	newFieldVariable->fieldComponentCount        = self->fieldComponentCount;
+	newFieldVariable->dim                        = self->dim;
+	newFieldVariable->isCheckpointedAndReloaded  = self->isCheckpointedAndReloaded;
+	newFieldVariable->communicator               = self->communicator;
+	newFieldVariable->fieldVariable_Register     =  self->fieldVariable_Register;
+
+	newFieldVariable->extensionMgr               = Stg_Class_Copy( self->extensionMgr, NULL, deep, nameExt, map );
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+				
+	return (void*)newFieldVariable;
+}
+
+void _FieldVariable_Construct( void* fieldVariable, Stg_ComponentFactory* cf, void* data ) {
+	FieldVariable*	        self         = (FieldVariable*)fieldVariable;
+	FieldVariable_Register* fV_Register;
+	Dimension_Index         dim;
+	Index                   fieldComponentCount;
+	Bool                    isCheckpointedAndReloaded;
+	Dictionary_Entry_Value* feVarsList = NULL;
+	
+	fV_Register = (FieldVariable_Register*) Stg_ObjectList_Get( cf->registerRegister, "FieldVariable_Register" );
+	assert( fV_Register );
+
+	dim = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	fieldComponentCount = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "fieldComponentCount", 0 );
+
+	/* Decide whether this FieldVariable will be checkpointed & reloaded, based on the dictionary list 
+	   "fieldVariableToCheckpoint". NB may want to put this in the XML component definintion of a
+	   FieldVariable itself, but for now prefer list so it can be centrally set.
+	   -- Pat, Jules, Kath - 29 November 2006 
+	 */
+
+	/* Case insensitive search */
+	feVarsList = Dictionary_Get( cf->rootDict, "fieldVariablesToCheckpoint" );
+	if ( NULL == feVarsList ) {
+		feVarsList = Dictionary_Get( cf->rootDict, "FieldVariablesToCheckpoint" );
+	}
+
+	if (feVarsList != NULL ) {
+		Index                    listLength = Dictionary_Entry_Value_GetCount( feVarsList );
+		Index                    var_I = 0;
+		Dictionary_Entry_Value*  feVarDictValue = NULL;
+		char*                    fieldVariableName;
+	
+		isCheckpointedAndReloaded = False;
+		for ( var_I = 0; var_I < listLength; var_I++ ) {
+			feVarDictValue = Dictionary_Entry_Value_GetElement( feVarsList, var_I );
+			fieldVariableName = Dictionary_Entry_Value_AsString( feVarDictValue ); 
+			if ( 0 == strcmp( self->name, fieldVariableName ) ) {
+				isCheckpointedAndReloaded = True;
+				break;
+			}
+			else {
+				continue;
+			}	
+		}
+	}
+	else {
+		/* If there's no special list, just checkpoint/reload everything. */
+		isCheckpointedAndReloaded = True;
+	}	
+	
+	_FieldVariable_Init( self, fieldComponentCount, dim, isCheckpointedAndReloaded, 
+		MPI_COMM_WORLD, fV_Register );
+	
+}
+
+void _FieldVariable_Build( void* fieldVariable, void* data ) {
+
+}
+
+void _FieldVariable_Initialise( void* fieldVariable, void* data ) {
+
+}
+
+void _FieldVariable_Execute( void* fieldVariable, void* data ) {
+
+}
+
+void _FieldVariable_Destroy( void* fieldVariable, void* data ) {
+
+}
+
+InterpolationResult FieldVariable_InterpolateValueAt( void* fieldVariable, Coord coord, double* value ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+
+	return self->_interpolateValueAt( self, coord, value );
+}
+
+double FieldVariable_GetMinGlobalFieldMagnitude( void* fieldVariable ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+	return self->_getMinGlobalFieldMagnitude( self );
+}
+
+
+double FieldVariable_GetMaxGlobalFieldMagnitude( void* fieldVariable ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+	return self->_getMaxGlobalFieldMagnitude( self );
+}
+
+
+void FieldVariable_GetMinAndMaxLocalCoords( void* fieldVariable, Coord min, Coord max ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+
+	self->_getMinAndMaxLocalCoords( self, min, max );
+}
+
+void FieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord min, Coord max ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+
+	self->_getMinAndMaxGlobalCoords( self, min, max );
+}
+
+void _FieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord globalMin, Coord globalMax ) {
+	FieldVariable*	self = (FieldVariable*)fieldVariable;
+	Coord localMin, localMax;
+
+	self->_getMinAndMaxLocalCoords( self, localMin, localMax );
+
+	MPI_Allreduce( localMin, globalMin, self->dim, MPI_DOUBLE, MPI_MIN, self->communicator );
+	MPI_Allreduce( localMax, globalMax, self->dim, MPI_DOUBLE, MPI_MAX, self->communicator );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FieldVariable.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FieldVariable.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,185 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents a Variable that is a discretisation of a field-like physical property over a spatial domain.
+**
+** Assumptions:
+**	The function interfaces assume the spatially disc. variable is stored as a double
+**	(it can't be an int because its an approximation to a continuous variable right?)
+**
+** Comments:
+**	Abstract class that defines an interface to use when accessing spatially discretised
+**	field variables.
+**
+**	This means that e.g. visualisation code can be written to use this class,
+**	and doesn't have to worry exactly how the variable is discretised - that will be
+**	done by the back-end implementation of this class.
+**
+**	The name comes from the definition of "field" in the physics domain: A region of space
+**	characterized by a physical property, such as gravitational or electromagnetic force or
+**	fluid pressure, having a determinable value at every point in the region.
+**
+**	TODO: should it have a ptr to the Variable its based on at this level?
+**	doesn't make sense at the moment as the FeVariable used a \
+**	doflayout rather than a variable -> but may in future... 
+**
+**	$Id: FieldVariable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_FieldVariable_h__
+#define __Domain_Utils_FieldVariable_h__
+
+	/** Textual name of this class */
+	extern const Type FieldVariable_Type;
+	
+	/** Enumerated type to allow the user to know the result of an effort to interpolate the value of a
+	 * FieldVariable at a particular point.
+	 * Note that the order in the enum has been chosen for backward-compatibility for functions that now
+	 * return one of these instead of a Bool: 0 (false) meant other proc, 1 (true) meant local
+	 */
+	typedef enum InterpolationResult {
+		OTHER_PROC = 0,	/**< The value wasn't interpolated, as the requested co-ord is on another processor */
+		LOCAL = 1,	/**< The value was successfully interpolated, in local space. */
+		SHADOW,		/**< The value was successfully interpolated, in shadow space. */
+		OUTSIDE_GLOBAL	/**< The value wasn't interpolated, as the requested co-ord is outside the entire field */
+	} InterpolationResult;
+	
+	/** Mapping to convert an interpolation result to a string for debug purposes */
+	extern const char* InterpolationResultToStringMap[4];
+	
+	typedef InterpolationResult	(FieldVariable_InterpolateValueAtFunction) ( void* fieldVariable, Coord coord, double* value );
+	typedef double	(FieldVariable_GetValueFunction) ( void* fieldVariable );
+	typedef void	(FieldVariable_GetCoordFunction) ( void* fieldVariable, Coord min, Coord max );
+	
+	/** FieldVariable contents */
+	#define __FieldVariable \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		FieldVariable_InterpolateValueAtFunction*          _interpolateValueAt; \
+		FieldVariable_GetValueFunction*                    _getMinGlobalFieldMagnitude; \
+		FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude; \
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords;	\
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords;	\
+		\
+		/* Member info */ \
+		ExtensionManager*                                  extensionMgr;                \
+		Index                                              fieldComponentCount;         \
+		Dimension_Index                                    dim;                         \
+		MPI_Comm                                           communicator;                \
+		FieldVariable_Register*                            fieldVariable_Register;      \
+		Bool                                               isCheckpointedAndReloaded;    \
+
+	struct FieldVariable { __FieldVariable };	
+
+	/** General Virtual Functions */
+	#define FieldVariable_Copy( self ) \
+		(FieldVariable*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+
+	/** Creation implementation */
+	FieldVariable* FieldVariable_DefaultNew( Name name );
+
+	FieldVariable* FieldVariable_New(		
+		Name                                               name,
+		FieldVariable_InterpolateValueAtFunction*          _interpolateValueAt,
+		FieldVariable_GetValueFunction*                    _getMinGlobalFieldMagnitude,
+		FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude,		
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords,
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords,
+		Index                                              fieldComponentCount,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fieldVariable_Register ) ;
+	
+	FieldVariable* _FieldVariable_New(
+		SizeT							_sizeOfSelf, 
+		Type							type,
+		Stg_Class_DeleteFunction*					_delete,
+		Stg_Class_PrintFunction*					_print, 
+		Stg_Class_CopyFunction*					_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*			_construct,
+		Stg_Component_BuildFunction*				_build,
+		Stg_Component_InitialiseFunction*				_initialise,
+		Stg_Component_ExecuteFunction*				_execute,
+		Stg_Component_DestroyFunction*				_destroy,
+		Name									name,
+		Bool									initFlag,
+		FieldVariable_InterpolateValueAtFunction*          _interpolateValueAt,
+		FieldVariable_GetValueFunction*                    _getMinGlobalFieldMagnitude,
+		FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude,		
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords,
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords,
+		Index                                              fieldComponentCount,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fieldVariable_Register );
+
+	/** Member initialisation implementation */
+	void _FieldVariable_Init( 
+			FieldVariable*                  self, 
+			Index                           fieldComponentCount, 
+			Dimension_Index                 dim,
+			Bool                            isCheckpointedAndReloaded,
+			MPI_Comm                        communicator, 
+			FieldVariable_Register*         fV_Register ) ;
+	
+	void _FieldVariable_Delete( void* fieldVariable ) ;
+	void _FieldVariable_Print( void* _fieldVariable, Stream* stream ) ;
+	void _FieldVariable_Construct( void* fieldVariable, Stg_ComponentFactory* cf, void* data ) ;
+	void _FieldVariable_Build( void* fieldVariable, void* data ) ;
+	void _FieldVariable_Execute( void* fieldVariable, void* data ) ;
+	void _FieldVariable_Destroy( void* fieldVariable, void* data ) ;
+	void _FieldVariable_Initialise( void* fieldVariable, void* data ) ;
+	
+	/* Copy */
+	void* _FieldVariable_Copy( void* fieldVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Interface to determine the value of the field at a specific co-ordinate in space.
+	Return status determines whether operation was successful - i.e. whether the given
+	coordinate was valid, and within the processor's local domain*/
+	InterpolationResult FieldVariable_InterpolateValueAt( void* fieldVariable, Coord coord, double* value );
+
+	/** Interface for finding the minimum field value */
+	double FieldVariable_GetMinGlobalFieldMagnitude( void* fieldVariable );
+
+	/** Interface for finding the maximum field value */
+	double FieldVariable_GetMaxGlobalFieldMagnitude( void* fieldVariable );
+
+	/* Interface for finding the boundary of the spatial region this processor is holding info on */
+	void FieldVariable_GetMinAndMaxLocalCoords( void* fieldVariable, Coord min, Coord max ) ;
+	void FieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord min, Coord max ) ;
+	void _FieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord min, Coord max ) ;
+
+
+#endif /* __Domain_Utils_FieldVariable_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FieldVariable.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FieldVariable.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">FieldVariable</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">dim</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">fieldComponentCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">0</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FieldVariable_Register.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FieldVariable_Register.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,54 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: FieldVariable_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "FieldVariable_Register.h"
+
+#include <assert.h>
+
+
+const Type FieldVariable_Register_Type = "FieldVariable_Register_Type";
+
+FieldVariable_Register*	FieldVariable_Register_New( void ) {
+	return (FieldVariable_Register*) _NamedObject_Register_New(
+		sizeof(FieldVariable_Register),
+		FieldVariable_Register_Type,
+		_NamedObject_Register_Delete,
+		_NamedObject_Register_Print,
+		NULL );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FieldVariable_Register.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FieldVariable_Register.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,84 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Allows users to access FieldVariables based on their textual name,
+**	or index.
+**
+** Assumptions:
+**
+** Comments:
+**
+**
+** $Id: FieldVariable_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_FieldVariable_Register_h__
+#define __Domain_Utils_FieldVariable_Register_h__
+	
+	
+	extern const Type FieldVariable_Register_Type;
+	
+	#define __FieldVariable_Register \
+		/* General info */ \
+		__NamedObject_Register \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+
+	struct FieldVariable_Register { __FieldVariable_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	FieldVariable_Register*	FieldVariable_Register_New( void );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	#define FieldVariable_Register_Add NamedObject_Register_Add
+
+	#define FieldVariable_Register_GetIndex NamedObject_Register_GetIndex 
+
+	#define FieldVariable_Register_GetByName( self, fieldVariableName ) \
+		( (FieldVariable*) NamedObject_Register_GetByName( self, fieldVariableName ) ) 
+
+	#define FieldVariable_Register_GetByIndex( self, fieldVariableIndex ) \
+		( (FieldVariable*) NamedObject_Register_GetByIndex( self, fieldVariableIndex ) )
+
+	#define FieldVariable_Register_PrintAllEntryNames NamedObject_Register_PrintAllEntryNames
+
+#endif /* __Domain_Utils_FieldVariable_Register_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StgDomainUtils_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_Finalise_h__
+#define __Domain_Utils_Finalise_h__
+	
+	Bool StgDomainUtils_Finalise( void );
+	
+#endif /* __Domain_Utils_Finalise_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FrictionVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FrictionVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,747 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This file may be distributed under the terms of the VPAC Public License
+** as defined by VPAC of Australia and appearing in the file
+** LICENSE.VPL included in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** $Id: FrictionVC.c 3310 2005-10-26 07:10:18Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Modified 2006 Walter Landry to implement Friction VC's */
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "FrictionVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type FrictionVC_Type = "FrictionVC";
+const Name defaultFrictionVCName = "defaultFrictionVCName";
+
+const char* FrictionVC_WallEnumToStr[FrictionVC_Wall_Size] = {
+	"back",
+	"left",
+	"bottom",
+	"right",
+	"top",
+	"front" };
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* FrictionVC_Factory(
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						data )
+{
+	return (VariableCondition*)FrictionVC_New( defaultFrictionVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+
+FrictionVC*	FrictionVC_DefaultNew( Name name )
+{
+	return _FrictionVC_New(
+		sizeof(FrictionVC), 
+		FrictionVC_Type, 
+		_FrictionVC_Delete, 
+		_FrictionVC_Print, 
+		_FrictionVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)FrictionVC_DefaultNew,
+		_FrictionVC_Construct,	
+		_FrictionVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_FrictionVC_BuildSelf, 
+		_FrictionVC_PrintConcise,
+		_FrictionVC_ReadDictionary,
+		_FrictionVC_GetSet, 
+		_FrictionVC_GetVariableCount, 
+		_FrictionVC_GetVariableIndex, 
+		_FrictionVC_GetValueIndex, 
+		_FrictionVC_GetValueCount, 
+		_FrictionVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL);
+}
+
+FrictionVC*	FrictionVC_New(
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	return _FrictionVC_New(
+		sizeof(FrictionVC), 
+		FrictionVC_Type, 
+		_FrictionVC_Delete, 
+		_FrictionVC_Print, 
+		_FrictionVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)FrictionVC_DefaultNew,
+		_FrictionVC_Construct,	
+		_FrictionVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_FrictionVC_BuildSelf, 
+		_FrictionVC_PrintConcise,
+		_FrictionVC_ReadDictionary,
+		_FrictionVC_GetSet, 
+		_FrictionVC_GetVariableCount, 
+		_FrictionVC_GetVariableIndex, 
+		_FrictionVC_GetValueIndex, 
+		_FrictionVC_GetValueCount, 
+		_FrictionVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		_mesh );
+}
+
+
+void FrictionVC_Init(
+	FrictionVC*						self,
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	/* General info */
+	self->type = FrictionVC_Type;
+	self->_sizeOfSelf = sizeof(FrictionVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _FrictionVC_Delete;
+	self->_print = _FrictionVC_Print;
+	self->_copy = _FrictionVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)FrictionVC_DefaultNew;
+	self->_construct = _FrictionVC_Construct;
+	self->_build = _FrictionVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _FrictionVC_BuildSelf;
+	self->_printConcise = _FrictionVC_PrintConcise;
+	self->_readDictionary = _FrictionVC_ReadDictionary;
+	self->_getSet = _FrictionVC_GetSet;
+	self->_getVariableCount = _FrictionVC_GetVariableCount;
+	self->_getVariableIndex = _FrictionVC_GetVariableIndex;
+	self->_getValueIndex = _FrictionVC_GetValueIndex;
+	self->_getValueCount = _FrictionVC_GetValueCount;
+	self->_getValue = _FrictionVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_FrictionVC_Init( self, _dictionaryEntryName, _mesh );
+}
+
+
+FrictionVC* _FrictionVC_New( 
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*			_build,
+	Stg_Component_InitialiseFunction*			_initialise,
+	Stg_Component_ExecuteFunction*			_execute,
+	Stg_Component_DestroyFunction*			_destroy,
+	Name								name, 
+	Bool								initFlag,
+	VariableCondition_BuildSelfFunc*		_buildSelf, 
+	VariableCondition_PrintConciseFunc*		_printConcise,
+	VariableCondition_ReadDictionaryFunc*		_readDictionary,
+	VariableCondition_GetSetFunc*			_getSet,
+	VariableCondition_GetVariableCountFunc*		_getVariableCount,
+	VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+	VariableCondition_GetValueIndexFunc*		_getValueIndex,
+	VariableCondition_GetValueCountFunc*		_getValueCount,
+	VariableCondition_GetValueFunc*			_getValue,
+	VariableCondition_ApplyFunc*			_apply, 
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh)
+{
+	FrictionVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(FrictionVC));
+	self = (FrictionVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_FrictionVC_Init( self, _dictionaryEntryName, _mesh );
+	}
+	
+	return self;
+}
+
+
+void _FrictionVC_Init(
+	void*						wallVC, 
+	Name						_dictionaryEntryName, 
+	void*						_mesh )
+{
+	FrictionVC*			self = (FrictionVC*)wallVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_mesh = (Mesh*)_mesh;
+	self->_wall = FrictionVC_Wall_Size;
+	self->_entryTbl = 0;
+	self->_entryCount = 0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _FrictionVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	FrictionVC*			self = (FrictionVC*)variableCondition;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	FrictionVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+	
+	if (vcDictVal)
+	{
+		char*	wallStr;
+		
+		/* Obtain which wall */
+		wallStr = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "wall" ));
+		if (!strcasecmp(wallStr, "back"))
+			self->_wall = FrictionVC_Wall_Back;
+		else if (!strcasecmp(wallStr, "left"))
+			self->_wall = FrictionVC_Wall_Left;
+		else if (!strcasecmp(wallStr, "bottom"))
+			self->_wall = FrictionVC_Wall_Bottom;
+		else if (!strcasecmp(wallStr, "right"))
+			self->_wall = FrictionVC_Wall_Right;
+		else if (!strcasecmp(wallStr, "top"))
+			self->_wall = FrictionVC_Wall_Top;
+		else if (!strcasecmp(wallStr, "front"))
+			self->_wall = FrictionVC_Wall_Front;
+		else {
+			assert( 0 );
+			self->_wall = FrictionVC_Wall_Size; /* invalid entry */
+		}
+		
+		/* Obtain the variable entries */
+		self->_entryCount = 0;
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( FrictionVC_Entry, self->_entryCount, "FrictionVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+							"definition of wallVC \"%s\" (applies to wall \"%s\"), the cond. func. applied to "
+							"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+							__func__, self->_dictionaryEntryName, FrictionVC_WallEnumToStr[self->_wall],
+							self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+													self->_entryTbl[entry_I].value.as.typeArray.size, "FrictionVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				 0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_wall = FrictionVC_Wall_Size;
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _FrictionVC_Delete(void* wallVC)
+{
+	FrictionVC*	self = (FrictionVC*)wallVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _FrictionVC_Print(void* wallVC, Stream* stream)
+{
+	FrictionVC*				self = (FrictionVC*)wallVC;
+	FrictionVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "FrictionVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_wall: %s\n", self->_wall == FrictionVC_Wall_Front ? "Front" :
+			self->_wall == FrictionVC_Wall_Back ? "Back" : self->_wall == FrictionVC_Wall_Left ? "Left" :
+			self->_wall == FrictionVC_Wall_Right ? "Right" : self->_wall == FrictionVC_Wall_Top ? "Top" :
+			self->_wall == FrictionVC_Wall_Bottom ? "Bottom" : "None");
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+			case VC_ValueType_Double:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+				Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+				break;
+					
+			case VC_ValueType_Int:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+				Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+				break;
+					
+			case VC_ValueType_Short:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+				Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+				break;
+					
+			case VC_ValueType_Char:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+				Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+				break;
+					
+			case VC_ValueType_Ptr:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+				Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+				break;
+					
+			case VC_ValueType_DoubleArray:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+				Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+				Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+				if (self->_entryTbl[entry_I].value.as.typeArray.array)
+					for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+						Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+				break;
+					
+			case VC_ValueType_CFIndex:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+				Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+				break;
+			}
+		}
+	Journal_Printf( info, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _FrictionVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	FrictionVC*		self = (FrictionVC*)wallVC;
+	FrictionVC*		newFrictionVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newFrictionVC = (FrictionVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newFrictionVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newFrictionVC->_wall = self->_wall;
+	newFrictionVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newFrictionVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newFrictionVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newFrictionVC->_entryTbl = Memory_Alloc_Array( FrictionVC_Entry, newFrictionVC->_entryCount, "FrictionVC->_entryTbl");
+			memcpy( newFrictionVC->_entryTbl, self->_entryTbl, sizeof(FrictionVC_Entry) * newFrictionVC->_entryCount );
+			PtrMap_Append( map, newFrictionVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newFrictionVC->_mesh = self->_mesh;
+		newFrictionVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newFrictionVC;
+}
+
+
+void _FrictionVC_Build(  void* wallVC, void* data ) {
+	FrictionVC*			self = (FrictionVC*)wallVC;
+	
+	_FrictionVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+	
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _FrictionVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _FrictionVC_BuildSelf(  void* wallVC, void* data ) {
+	FrictionVC*			self = (FrictionVC*)wallVC;
+	
+	if( self->_mesh ) {
+		Stg_Component_Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _FrictionVC_GetSet(void* variableCondition)
+{
+	FrictionVC*		self = (FrictionVC*)variableCondition;
+	IndexSet	*set = NULL;
+	Stream*     warningStr = Journal_Register( Error_Type, self->type );
+	unsigned	nDims;
+	unsigned*	gSize;
+
+	nDims = Mesh_GetDimSize( self->_mesh );
+	gSize = (unsigned*)ExtensionManager_Get( self->_mesh->info, self->_mesh, 
+						 ExtensionManager_GetHandle( self->_mesh->info, 
+									     "cartesianGlobalSize" ) );
+	
+	switch (self->_wall) {
+	case FrictionVC_Wall_Front:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalFrontSet(self->_mesh);
+		}
+		break;
+			
+	case FrictionVC_Wall_Back:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBackSet(self->_mesh);
+		}	
+		break;
+			
+	case FrictionVC_Wall_Top:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+		}	
+		break;
+			
+	case FrictionVC_Wall_Bottom:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+		}	
+		break;
+			
+	case FrictionVC_Wall_Left:
+		if ( !gSize[0] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+		}	
+		break;
+			
+	case FrictionVC_Wall_Right:
+		if ( !gSize[0] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					FrictionVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalRightSet(self->_mesh);
+		}
+		break;
+			
+	case FrictionVC_Wall_Size:
+	default:
+		assert(0);
+		break;
+	}
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _FrictionVC_GetVariableCount(void* variableCondition, Index globalIndex)
+{
+	FrictionVC*	self = (FrictionVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _FrictionVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex)
+{
+	FrictionVC*		self = (FrictionVC*)variableCondition;
+	Variable_Index	searchedIndex = 0;
+	Stream*		errorStr = Journal_Register( Error_Type, self->type );
+	Name		varName;
+	
+	varName = self->_entryTbl[varIndex].varName;
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+	Journal_Firewall( ( searchedIndex < self->variable_Register->count ), errorStr, "Error- in %s: searching for index of "
+			  "varIndex %u (\"%s\") at global node number %u failed - register returned index %u, greater than "
+			  "count %u.\n", __func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _FrictionVC_GetValueIndex(
+	void*				variableCondition, 
+	Index				globalIndex, 
+	VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _FrictionVC_GetValueCount(void* variableCondition)
+{
+	FrictionVC*	self = (FrictionVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _FrictionVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex)
+{
+	FrictionVC*	self = (FrictionVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _FrictionVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	FrictionVC*		self = (FrictionVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: ", self->type );
+	Journal_Printf( stream, "%s\n", 
+			self->_wall == FrictionVC_Wall_Front ? "Front" :
+			self->_wall == FrictionVC_Wall_Back ? "Back" : 
+			self->_wall == FrictionVC_Wall_Left ? "Left" :
+			self->_wall == FrictionVC_Wall_Right ? "Right" : 
+			self->_wall == FrictionVC_Wall_Top ? "Top" :
+			self->_wall == FrictionVC_Wall_Bottom ? "Bottom" : "None" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FrictionVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FrictionVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,193 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This file may be distributed under the terms of the VPAC Public License
+** as defined by VPAC of Australia and appearing in the file
+** LICENSE.VPL included in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: FrictionVC.h 3291 2005-10-18 00:05:33Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Modified 2006 Walter Landry to implement Friction VC's */
+
+#ifndef __Gale_BoundaryConditions_FrictionVC_h__
+#define __Gale_BoundaryConditions_FrictionVC_h__
+	
+
+	extern const Type FrictionVC_Type;
+	
+	extern const char* FrictionVC_WallEnumToStr[FrictionVC_Wall_Size];
+	
+	#define __FrictionVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _FrictionVC_Entry { __FrictionVC_Entry };
+	
+	
+	#define __FrictionVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		FrictionVC_Wall			_wall; \
+		FrictionVC_Entry_Index		_entryCount; \
+		FrictionVC_Entry*			_entryTbl; \
+		Mesh*				_mesh;
+
+	struct _FrictionVC { __FrictionVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*	FrictionVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	FrictionVC*				FrictionVC_DefaultNew( Name name );
+
+	FrictionVC*				FrictionVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				FrictionVC_Init(
+						FrictionVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	FrictionVC*				_FrictionVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy,
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*			_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name						name, 
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				_FrictionVC_Init(
+						void*						wallVC, 
+						Name						_dictionaryEntryName, 
+						void*						_mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_FrictionVC_Delete( void* wallVC );
+	
+	void				_FrictionVC_Print( void* wallVC, Stream* stream );
+	
+	/* Copy */
+	#define FrictionVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define FrictionVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _FrictionVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_FrictionVC_Build(  void* wallVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_FrictionVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_FrictionVC_BuildSelf( void* wallVC, void* data );
+	
+	void				_FrictionVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_FrictionVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_FrictionVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_FrictionVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_FrictionVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_FrictionVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_FrictionVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_FrictionVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_FrictionVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/FrictionVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/FrictionVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">FrictionVC</param>
+<param name="Author">...</param>
+<param name="Organisation">CIG</param>
+<param name="Project">Gale</param>
+<param name="Location">./Gale/BoundaryConditions/src/</param>
+<param name="Project Web">http://geodynamics.org</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC. Copyright (c) 2006 California Institute of Technology</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Type">RheologyMaterial</param>
+		<param name="Description">Determines the frictional parameters of the wall.</param>
+	</struct>
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,125 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 4160 2007-07-30 06:17:06Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "Utils.h"
+
+
+Bool StgDomainUtils_Init( int* argc, char** argv[] ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	VariableCondition_Register_Add( variableCondition_Register, AllElementsVC_Type, AllElementsVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, AllNodesVC_Type, AllNodesVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, WallVC_Type, WallVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, CornerVC_Type, CornerVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, InnerWallVC_Type, InnerWallVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, MeshShapeVC_Type, MeshShapeVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, FrictionVC_Type, FrictionVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, SplitFrictionWallVC_Type, SplitFrictionWallVC_Factory );
+	
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), AllElementsVC_Type, 
+				   "0", (void* (*)(Name))AllElementsVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), AllNodesVC_Type, 
+				   "0", (void* (*)(Name))AllNodesVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), DofLayout_Type, 
+				   "0", (void* (*)(Name))DofLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), FieldVariable_Type, "0", 
+				   (void* (*)(Name))FieldVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), OperatorFieldVariable_Type, 
+				   "0", (void* (*)(Name))OperatorFieldVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), WallVC_Type, 
+				   "0", (void* (*)(Name))WallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CornerVC_Type, 
+				   "0", (void* (*)(Name))CornerVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), InnerWallVC_Type, 
+				   "0", (void* (*)(Name))InnerWallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), MeshShapeVC_Type, 
+				   "0", (void*  (*)(Name))_MeshShapeVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), FrictionVC_Type, 
+				   "0", (void* (*)(Name))FrictionVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SplitFrictionWallVC_Type, 
+				   "0", (void* (*)(Name))SplitFrictionWallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), 
+				   RegularRemesherCmpt_Type, 
+				   "0", (void* (*)(Name))_RegularRemesherCmpt_DefaultNew );
+/*
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Remesher_Type, 
+				   "0", (void* (*)(Name))_Remesher_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), StripRemesher_Type, 
+				   "0", (void* (*)(Name))_StripRemesher_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CellRemesher_Type, 
+				   "0", (void* (*)(Name))_CellRemesher_DefaultNew );
+*/
+
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TimeIntegrator_Type, 
+				   "0", (void*  (*)(Name))_TimeIntegrator_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TimeIntegratee_Type, 
+				   "0", (void*  (*)(Name))_TimeIntegratee_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ShapeAdvector_Type, 
+				   "0", (void*  (*)(Name))_ShapeAdvector_DefaultNew );
+
+	RegisterParent( DomainContext_Type,    AbstractContext_Type );
+
+	RegisterParent( Operator_Type,                 Stg_Object_Type );
+	RegisterParent( AllElementsVC_Type,            VariableCondition_Type );
+	RegisterParent( AllNodesVC_Type,               VariableCondition_Type );
+	RegisterParent( WallVC_Type,                   VariableCondition_Type );
+	RegisterParent( CornerVC_Type,		       VariableCondition_Type );
+	RegisterParent( InnerWallVC_Type,	       VariableCondition_Type );
+	RegisterParent( MeshShapeVC_Type,                  VariableCondition_Type );
+	RegisterParent( FrictionVC_Type,               VariableCondition_Type );
+	RegisterParent( SplitFrictionWallVC_Type,      VariableCondition_Type );
+	RegisterParent( DofLayout_Type,                Stg_Component_Type );
+	RegisterParent( RegularRemesherCmpt_Type,      Remesher_Type );
+/*
+	RegisterParent( Remesher_Type,                 Stg_Component_Type );
+	RegisterParent( StripRemesher_Type,            Remesher_Type );
+	RegisterParent( CellRemesher_Type,            Remesher_Type );
+*/
+
+	RegisterParent( FieldVariable_Type,            Stg_Component_Type );
+	RegisterParent( OperatorFieldVariable_Type,    FieldVariable_Type );
+	RegisterParent( FieldVariable_Register_Type,   NamedObject_Register_Type );
+
+	RegisterParent( LinearRegression_Type,         Stg_Class_Type );
+	
+	RegisterParent( TimeIntegratee_Type,           Stg_Component_Type );
+	RegisterParent( TimeIntegrator_Type,           Stg_Component_Type );
+	RegisterParent( ShapeAdvector_Type,            Stg_Component_Type );
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_Init_h__
+#define __Domain_Utils_Init_h__
+	
+	Bool StgDomainUtils_Init( int* argc, char** argv[] );
+	
+#endif /* __Domain_Utils_Init_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/InnerWallVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/InnerWallVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,752 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: InnerWallVC.c 3310 2005-10-26 07:10:18Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "InnerWallVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type InnerWallVC_Type = "InnerWallVC";
+const Name defaultInnerWallVCName = "defaultInnerWallVCName";
+
+const char* InnerWallVC_InnerWallEnumToStr[InnerWallVC_InnerWall_Size] = {
+	"back",
+	"left",
+	"bottom",
+	"right",
+	"top",
+	"front" };
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* InnerWallVC_Factory(
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						data )
+{
+	return (VariableCondition*)InnerWallVC_New( defaultInnerWallVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+
+InnerWallVC*	InnerWallVC_DefaultNew( Name name )
+{
+	return _InnerWallVC_New(
+		sizeof(InnerWallVC), 
+		InnerWallVC_Type, 
+		_InnerWallVC_Delete, 
+		_InnerWallVC_Print, 
+		_InnerWallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)InnerWallVC_DefaultNew,
+		_InnerWallVC_Construct,	
+		_InnerWallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_InnerWallVC_BuildSelf, 
+		_InnerWallVC_PrintConcise,
+		_InnerWallVC_ReadDictionary,
+		_InnerWallVC_GetSet, 
+		_InnerWallVC_GetVariableCount, 
+		_InnerWallVC_GetVariableIndex, 
+		_InnerWallVC_GetValueIndex, 
+		_InnerWallVC_GetValueCount, 
+		_InnerWallVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL);
+}
+
+InnerWallVC*	InnerWallVC_New(
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	return _InnerWallVC_New(
+		sizeof(InnerWallVC), 
+		InnerWallVC_Type, 
+		_InnerWallVC_Delete, 
+		_InnerWallVC_Print, 
+		_InnerWallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)InnerWallVC_DefaultNew,
+		_InnerWallVC_Construct,	
+		_InnerWallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_InnerWallVC_BuildSelf, 
+		_InnerWallVC_PrintConcise,
+		_InnerWallVC_ReadDictionary,
+		_InnerWallVC_GetSet, 
+		_InnerWallVC_GetVariableCount, 
+		_InnerWallVC_GetVariableIndex, 
+		_InnerWallVC_GetValueIndex, 
+		_InnerWallVC_GetValueCount, 
+		_InnerWallVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		_mesh );
+}
+
+
+void InnerWallVC_Init(
+	InnerWallVC*						self,
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	/* General info */
+	self->type = InnerWallVC_Type;
+	self->_sizeOfSelf = sizeof(InnerWallVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _InnerWallVC_Delete;
+	self->_print = _InnerWallVC_Print;
+	self->_copy = _InnerWallVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)InnerWallVC_DefaultNew;
+	self->_construct = _InnerWallVC_Construct;
+	self->_build = _InnerWallVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _InnerWallVC_BuildSelf;
+	self->_printConcise = _InnerWallVC_PrintConcise;
+	self->_readDictionary = _InnerWallVC_ReadDictionary;
+	self->_getSet = _InnerWallVC_GetSet;
+	self->_getVariableCount = _InnerWallVC_GetVariableCount;
+	self->_getVariableIndex = _InnerWallVC_GetVariableIndex;
+	self->_getValueIndex = _InnerWallVC_GetValueIndex;
+	self->_getValueCount = _InnerWallVC_GetValueCount;
+	self->_getValue = _InnerWallVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_InnerWallVC_Init( self, _dictionaryEntryName, _mesh );
+}
+
+
+InnerWallVC* _InnerWallVC_New( 
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*			_build,
+	Stg_Component_InitialiseFunction*			_initialise,
+	Stg_Component_ExecuteFunction*			_execute,
+	Stg_Component_DestroyFunction*			_destroy,
+	Name								name, 
+	Bool								initFlag,
+	VariableCondition_BuildSelfFunc*		_buildSelf, 
+	VariableCondition_PrintConciseFunc*		_printConcise,
+	VariableCondition_ReadDictionaryFunc*		_readDictionary,
+	VariableCondition_GetSetFunc*			_getSet,
+	VariableCondition_GetVariableCountFunc*		_getVariableCount,
+	VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+	VariableCondition_GetValueIndexFunc*		_getValueIndex,
+	VariableCondition_GetValueCountFunc*		_getValueCount,
+	VariableCondition_GetValueFunc*			_getValue,
+	VariableCondition_ApplyFunc*			_apply, 
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh)
+{
+	InnerWallVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(InnerWallVC));
+	self = (InnerWallVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_InnerWallVC_Init( self, _dictionaryEntryName, _mesh );
+	}
+	
+	return self;
+}
+
+
+void _InnerWallVC_Init(
+	void*						innerWallVC, 
+	Name						_dictionaryEntryName, 
+	void*						_mesh )
+{
+	InnerWallVC*			self = (InnerWallVC*)innerWallVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_mesh = (Mesh*)_mesh;
+	self->_innerWall = InnerWallVC_InnerWall_Size;
+	self->_entryTbl = 0;
+	self->_entryCount = 0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _InnerWallVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	InnerWallVC*			self = (InnerWallVC*)variableCondition;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	InnerWallVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+	
+	if (vcDictVal)
+	{
+		char*	innerWallStr;
+		
+		/* Obtain which innerWall */
+		innerWallStr = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "innerWall" ));
+		if (!strcasecmp(innerWallStr, "back"))
+			self->_innerWall = InnerWallVC_InnerWall_Back;
+		else if (!strcasecmp(innerWallStr, "left"))
+			self->_innerWall = InnerWallVC_InnerWall_Left;
+		else if (!strcasecmp(innerWallStr, "bottom"))
+			self->_innerWall = InnerWallVC_InnerWall_Bottom;
+		else if (!strcasecmp(innerWallStr, "right"))
+			self->_innerWall = InnerWallVC_InnerWall_Right;
+		else if (!strcasecmp(innerWallStr, "top"))
+			self->_innerWall = InnerWallVC_InnerWall_Top;
+		else if (!strcasecmp(innerWallStr, "front"))
+			self->_innerWall = InnerWallVC_InnerWall_Front;
+		else {
+			assert( 0 );
+			self->_innerWall = InnerWallVC_InnerWall_Size; /* invalid entry */
+		}
+		
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( InnerWallVC_Entry, self->_entryCount, "InnerWallVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+							"definition of innerWallVC \"%s\" (applies to innerWall \"%s\"), the cond. func. applied to "
+							"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+							__func__, self->_dictionaryEntryName, InnerWallVC_InnerWallEnumToStr[self->_innerWall],
+							self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+													self->_entryTbl[entry_I].value.as.typeArray.size, "InnerWallVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				 0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_innerWall = InnerWallVC_InnerWall_Size;
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _InnerWallVC_Delete(void* innerWallVC)
+{
+	InnerWallVC*	self = (InnerWallVC*)innerWallVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _InnerWallVC_Print(void* innerWallVC, Stream* stream)
+{
+	InnerWallVC*				self = (InnerWallVC*)innerWallVC;
+	InnerWallVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "InnerWallVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_innerWall: %s\n", self->_innerWall == InnerWallVC_InnerWall_Front ? "Front" :
+			self->_innerWall == InnerWallVC_InnerWall_Back ? "Back" : self->_innerWall == InnerWallVC_InnerWall_Left ? "Left" :
+			self->_innerWall == InnerWallVC_InnerWall_Right ? "Right" : self->_innerWall == InnerWallVC_InnerWall_Top ? "Top" :
+			self->_innerWall == InnerWallVC_InnerWall_Bottom ? "Bottom" : "None");
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+			case VC_ValueType_Double:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+				Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+				break;
+					
+			case VC_ValueType_Int:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+				Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+				break;
+					
+			case VC_ValueType_Short:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+				Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+				break;
+					
+			case VC_ValueType_Char:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+				Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+				break;
+					
+			case VC_ValueType_Ptr:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+				Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+				break;
+					
+			case VC_ValueType_DoubleArray:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+				Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+				Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+				if (self->_entryTbl[entry_I].value.as.typeArray.array)
+					for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+						Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+				break;
+					
+			case VC_ValueType_CFIndex:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+				Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+				break;
+			}
+		}
+	Journal_Printf( info, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _InnerWallVC_Copy( void* innerWallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	InnerWallVC*		self = (InnerWallVC*)innerWallVC;
+	InnerWallVC*		newInnerWallVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newInnerWallVC = (InnerWallVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newInnerWallVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newInnerWallVC->_innerWall = self->_innerWall;
+	newInnerWallVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newInnerWallVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newInnerWallVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newInnerWallVC->_entryTbl = Memory_Alloc_Array( InnerWallVC_Entry, newInnerWallVC->_entryCount, "InnerWallVC->_entryTbl");
+			memcpy( newInnerWallVC->_entryTbl, self->_entryTbl, sizeof(InnerWallVC_Entry) * newInnerWallVC->_entryCount );
+			PtrMap_Append( map, newInnerWallVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newInnerWallVC->_mesh = self->_mesh;
+		newInnerWallVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newInnerWallVC;
+}
+
+
+void _InnerWallVC_Build(  void* innerWallVC, void* data ) {
+	InnerWallVC*			self = (InnerWallVC*)innerWallVC;
+	
+	_InnerWallVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+	
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _InnerWallVC_Construct( void* innerWallVC, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _InnerWallVC_BuildSelf(  void* innerWallVC, void* data ) {
+	InnerWallVC*			self = (InnerWallVC*)innerWallVC;
+	
+	if( self->_mesh ) {
+		Stg_Component_Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _InnerWallVC_GetSet(void* variableCondition)
+{
+	InnerWallVC*		self = (InnerWallVC*)variableCondition;
+	IndexSet	*set = NULL;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+	unsigned	nDims;
+	unsigned*	gSize;
+
+	nDims = Mesh_GetDimSize( self->_mesh );
+	gSize = (unsigned*)ExtensionManager_Get( self->_mesh->info, self->_mesh, 
+						 ExtensionManager_GetHandle( self->_mesh->info, 
+									     "cartesianGlobalSize" ) );
+	
+	switch (self->_innerWall) {
+	case InnerWallVC_InnerWall_Front:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "K" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerFrontSet( self->_mesh );
+		}
+		break;
+			
+	case InnerWallVC_InnerWall_Back:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "K" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerBackSet( self->_mesh );
+		}	
+		break;
+			
+	case InnerWallVC_InnerWall_Top:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "J" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerTopSet(self->_mesh);
+		}	
+		break;
+			
+	case InnerWallVC_InnerWall_Bottom:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "J" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerBottomSet(self->_mesh);
+		}	
+		break;
+			
+	case InnerWallVC_InnerWall_Left:
+		if ( nDims < 1 ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "I" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerLeftSet(self->_mesh);
+		}	
+		break;
+			
+	case InnerWallVC_InnerWall_Right:
+		if( nDims < 1 ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "I" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalInnerRightSet(self->_mesh);
+		}
+		break;
+			
+	case InnerWallVC_InnerWall_Size:
+	default:
+		assert(0);
+		break;
+	}
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _InnerWallVC_GetVariableCount(void* variableCondition, Index globalIndex)
+{
+	InnerWallVC*	self = (InnerWallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _InnerWallVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex)
+{
+	InnerWallVC*		self = (InnerWallVC*)variableCondition;
+	Variable_Index	searchedIndex = 0;
+	Stream*		errorStr = Journal_Register( Error_Type, self->type );
+	Name		varName;
+	
+	varName = self->_entryTbl[varIndex].varName;
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+	Journal_Firewall( ( searchedIndex < self->variable_Register->count ), errorStr, "Error- in %s: searching for index of "
+			  "varIndex %u (\"%s\") at global node number %u failed - register returned index %u, greater than "
+			  "count %u.\n", __func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _InnerWallVC_GetValueIndex(
+	void*				variableCondition, 
+	Index				globalIndex, 
+	VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _InnerWallVC_GetValueCount(void* variableCondition)
+{
+	InnerWallVC*	self = (InnerWallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _InnerWallVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex)
+{
+	InnerWallVC*	self = (InnerWallVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _InnerWallVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	InnerWallVC*		self = (InnerWallVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: ", self->type );
+	Journal_Printf( stream, "%s\n", 
+			self->_innerWall == InnerWallVC_InnerWall_Front ? "Front" :
+			self->_innerWall == InnerWallVC_InnerWall_Back ? "Back" : 
+			self->_innerWall == InnerWallVC_InnerWall_Left ? "Left" :
+			self->_innerWall == InnerWallVC_InnerWall_Right ? "Right" : 
+			self->_innerWall == InnerWallVC_InnerWall_Top ? "Top" :
+			self->_innerWall == InnerWallVC_InnerWall_Bottom ? "Bottom" : "None" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/InnerWallVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/InnerWallVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,199 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: InnerWallVC.h 3291 2005-10-18 00:05:33Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_InnerWallVC_h__
+#define __Domain_Utils_InnerWallVC_h__
+	
+
+	extern const Type InnerWallVC_Type;
+	
+	extern const char* InnerWallVC_InnerWallEnumToStr[InnerWallVC_InnerWall_Size];
+	
+	#define __InnerWallVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _InnerWallVC_Entry { __InnerWallVC_Entry };
+	
+	
+	#define __InnerWallVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		InnerWallVC_InnerWall			_innerWall; \
+		InnerWallVC_Entry_Index		_entryCount; \
+		InnerWallVC_Entry*			_entryTbl; \
+		Mesh*				_mesh;
+
+	struct _InnerWallVC { __InnerWallVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*	InnerWallVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	InnerWallVC*				InnerWallVC_DefaultNew( Name name );
+
+	InnerWallVC*				InnerWallVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				InnerWallVC_Init(
+						InnerWallVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	InnerWallVC*				_InnerWallVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy,
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*			_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name						name, 
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				_InnerWallVC_Init(
+						void*						innerWallVC, 
+						Name						_dictionaryEntryName, 
+						void*						_mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_InnerWallVC_Delete( void* innerWallVC );
+	
+	void				_InnerWallVC_Print( void* innerWallVC, Stream* stream );
+	
+	/* Copy */
+	#define InnerWallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define InnerWallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _InnerWallVC_Copy( void* innerWallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_InnerWallVC_Build(  void* innerWallVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_InnerWallVC_Construct( void* innerWallVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_InnerWallVC_BuildSelf( void* innerWallVC, void* data );
+	
+	void				_InnerWallVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_InnerWallVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_InnerWallVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_InnerWallVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_InnerWallVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_InnerWallVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_InnerWallVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_InnerWallVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_InnerWallVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/InnerWallVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/InnerWallVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">InnerWallVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/LinearRegression.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/LinearRegression.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,169 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: LinearRegression.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "LinearRegression.h"
+
+#include <assert.h>
+
+const Type LinearRegression_Type = "LinearRegression";
+
+LinearRegression* LinearRegression_New(Variable* xVariable, Variable* yVariable) {
+	return _LinearRegression_New(
+			sizeof(LinearRegression),
+			LinearRegression_Type,
+			_LinearRegression_Delete,
+			_LinearRegression_Print,
+			_LinearRegression_Copy, 
+			xVariable,
+			yVariable);
+}
+
+LinearRegression* _LinearRegression_New(
+ 		SizeT                           _sizeOfSelf, 
+		Type                            type,
+		Stg_Class_DeleteFunction*       _delete,
+		Stg_Class_PrintFunction*        _print, 
+		Stg_Class_CopyFunction*         _copy,
+		Variable*                       xVariable, 
+		Variable*                       yVariable )		
+{
+	LinearRegression*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(LinearRegression) );
+	self = (LinearRegression*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	self->xVariable = xVariable;
+	self->yVariable = yVariable;
+	
+	return self;
+}
+
+void _LinearRegression_Delete( void* linearRegression ) {
+	LinearRegression* self = (LinearRegression*) linearRegression;
+	_Stg_Class_Delete( self );
+}
+
+void _LinearRegression_Print( void* _linearRegression, Stream* stream ) {
+	LinearRegression* self = (LinearRegression*) _linearRegression;
+	Journal_Printf( stream, "LinearRegression\n" );
+
+	Journal_PrintValue( stream, self->xMean );
+	Journal_PrintValue( stream, self->yMean );
+	Journal_PrintValue( stream, self->slope );
+	Journal_PrintValue( stream, self->interceptor );
+	Journal_PrintValue( stream, self->slopeStandardError );
+	Journal_PrintValue( stream, self->interceptorStandardError );
+	Journal_PrintValue( stream, self->correlationCoefficient );
+}
+
+void* _LinearRegression_Copy( void* linearRegression, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	LinearRegression*	self = (LinearRegression*)linearRegression;
+	LinearRegression*	newLinearRegression;
+	
+	newLinearRegression = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+				
+	return (void*)newLinearRegression;
+}
+
+/* Based on least squares proceedure described in 
+ * Eric W. Weisstein. "Least Squares Fitting." From MathWorld--A Wolfram Web Resource.
+ * http://mathworld.wolfram.com/LeastSquaresFitting.html */
+void LinearRegression_Calculate( void* linearRegression ) {
+	LinearRegression*	self      = (LinearRegression*)linearRegression;
+	Variable*           xVariable = self->xVariable;
+	Variable*           yVariable = self->yVariable;
+	Index               array_I;
+	Index               arraySize;
+	double              xMean     = 0.0;
+	double              yMean     = 0.0;
+	double              xValue;
+	double              yValue;
+	double              SS_xx     = 0.0;
+	double              SS_yy     = 0.0;
+	double              SS_xy     = 0.0;
+	double              slope;
+	double              errorVariance;
+
+	Variable_Update( xVariable );
+	Variable_Update( yVariable );
+
+	arraySize = self->xVariable->arraySize;
+	assert( arraySize == yVariable->arraySize );
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		xValue = Variable_GetValueDouble( xVariable, array_I );
+		yValue = Variable_GetValueDouble( yVariable, array_I );
+
+		xMean += xValue;
+		yMean += yValue;
+
+		/* Sum intermediate values - Equations 17, 19, 21 */
+		SS_xx += xValue * xValue;
+		SS_yy += yValue * yValue;
+		SS_xy += xValue * yValue;
+	}
+
+	/* Divide by array size to obtain true mean */
+	xMean /= (double) arraySize;
+	yMean /= (double) arraySize;
+	self->xMean = xMean;
+	self->yMean = yMean;
+
+	/* Calculate intermediate values - Equations 17, 19, 21 */
+	SS_xx -= (double) arraySize * xMean * xMean;
+	SS_yy -= (double) arraySize * yMean * yMean;
+	SS_xy -= (double) arraySize * xMean * yMean;
+
+	/* Finalise calculation coefficients of linear equations y ~= slope * x + interceptor - Equation 27 - 28 */
+	self->slope = slope = SS_xy / SS_xx;
+	self->interceptor   =         yMean - slope * xMean;
+
+	/* Calculate the correlation coefficient r^2 - Equation 29 */
+	self->correlationCoefficient = SS_xy * SS_xy / ( SS_xx * SS_yy );
+
+	/* Calculate Standard errors - Equations 33-35 */
+	errorVariance = sqrt( ( SS_yy - slope * SS_xy ) / (double) (arraySize - 2 ) );
+	self->interceptorStandardError = errorVariance * sqrt( 1.0/(double)arraySize + xMean*xMean/SS_xx );
+	self->slopeStandardError       = errorVariance / sqrt( SS_xx );
+}
+
+
+
+
+	
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/LinearRegression.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/LinearRegression.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,101 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents a Variable that is a discretisation of a field-like physical property over a spatial domain.
+**
+** Assumptions:
+**	The function interfaces assume the spatially disc. variable is stored as a double
+**	(it can't be an int because its an approximation to a continuous variable right?)
+**
+** Comments:
+**	Abstract class that defines an interface to use when accessing spatially discretised
+**	field variables.
+**
+**	This means that e.g. visualisation code can be written to use this class,
+**	and doesn't have to worry exactly how the variable is discretised - that will be
+**	done by the back-end implementation of this class.
+**
+**	The name comes from the definition of "field" in the physics domain: A region of space
+**	characterized by a physical property, such as gravitational or electromagnetic force or
+**	fluid pressure, having a determinable value at every point in the region.
+**
+**	TODO: should it have a ptr to the Variable its based on at this level?
+**	doesn't make sense at the moment as the FeVariable used a \
+**	doflayout rather than a variable -> but may in future... 
+**
+**	$Id: LinearRegression.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_LinearRegression_h__
+#define __Domain_Utils_LinearRegression_h__
+
+	extern const Type LinearRegression_Type;
+
+	/** LinearRegression contents */
+	#define __LinearRegression \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Other Info */\
+		Variable* xVariable;                \
+		Variable* yVariable;                \
+		double    xMean;                    \
+		double    yMean;                    \
+		double    slope;                    \
+		double    interceptor;              \
+		double    slopeStandardError;       \
+		double    interceptorStandardError; \
+		double    correlationCoefficient;   
+
+	struct LinearRegression { __LinearRegression };
+
+	LinearRegression* LinearRegression_New(Variable* xVariable, Variable* yVariable) ;
+
+	LinearRegression* _LinearRegression_New(
+					SizeT                           _sizeOfSelf,
+					Type                            type,
+					Stg_Class_DeleteFunction*       _delete,
+					Stg_Class_PrintFunction*        _print,
+					Stg_Class_CopyFunction*         _copy,
+					Variable*                       xVariable,
+					Variable*                       yVariable );
+
+	void _LinearRegression_Delete( void* linearRegression ) ;
+	void _LinearRegression_Print( void* _linearRegression, Stream* stream ) ;
+	void* _LinearRegression_Copy( void* linearRegression, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) ;
+
+	/* Based on least squares proceedure described in
+	 * Eric W. Weisstein. "Least Squares Fitting." From MathWorld--A Wolfram Web Resource.
+	 * http://mathworld.wolfram.com/LeastSquaresFitting.html */
+	void LinearRegression_Calculate( void* linearRegression ) ;
+
+#endif /* __Domain_Utils_LinearRegression_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/MeshShapeVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/MeshShapeVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,529 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: MeshShapeVC.c 4160 2007-07-30 06:17:06Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "MeshShapeVC.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type MeshShapeVC_Type = "MeshShapeVC";
+const Name defaultMeshShapeVCName = "defaultMeshShapeVCName";
+
+/*-----------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+VariableCondition* MeshShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data )
+{
+	return (VariableCondition*) 
+		MeshShapeVC_New( defaultMeshShapeVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+MeshShapeVC* MeshShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                                dictionary,
+		void*                                       _mesh )
+{
+	MeshShapeVC* self = (MeshShapeVC*) _MeshShapeVC_DefaultNew( name );
+
+	_VariableCondition_Init( self, variable_Register, conFunc_Register, dictionary );
+	_MeshShapeVC_Init( self, _dictionaryEntryName, _mesh );
+
+	return self;
+}
+
+MeshShapeVC* _MeshShapeVC_New( 
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy,
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		VariableCondition_BuildSelfFunc*            _buildSelf, 
+		VariableCondition_PrintConciseFunc*         _printConcise,
+		VariableCondition_ReadDictionaryFunc*       _readDictionary,
+		VariableCondition_GetSetFunc*               _getSet,
+		VariableCondition_GetVariableCountFunc*     _getVariableCount,
+		VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+		VariableCondition_GetValueIndexFunc*        _getValueIndex,
+		VariableCondition_GetValueCountFunc*        _getValueCount,
+		VariableCondition_GetValueFunc*             _getValue,
+		VariableCondition_ApplyFunc*			_apply, 
+		Name                                        name  )
+{
+	MeshShapeVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(MeshShapeVC));
+	self = (MeshShapeVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		False,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		NULL, 
+		NULL,
+		NULL );
+	
+	/* Virtual info */
+	
+	return self;
+}
+
+
+void _MeshShapeVC_Init(
+		void*                                       variableCondition, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _mesh )
+{
+	MeshShapeVC*			self = (MeshShapeVC*) variableCondition;
+
+	self->isConstructed        = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_mesh                = (Mesh*)_mesh;
+	self->_entryTbl            = 0;
+	self->_entryCount          = 0;
+
+	assert( _mesh && Stg_Class_IsInstance( _mesh, Mesh_Type ) );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+
+void _MeshShapeVC_Delete(void* variableCondition) {
+	MeshShapeVC*	self = (MeshShapeVC*)variableCondition;
+	
+	if ( self->_entryTbl ) 
+		Memory_Free(self->_entryTbl);
+
+	if ( self->shapeName )
+		Memory_Free( self->shapeName );
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _MeshShapeVC_Print(void* variableCondition, Stream* stream) {
+	MeshShapeVC*                self = (MeshShapeVC*)variableCondition;
+	MeshShapeVC_Entry_Index     entry_I;
+	Index                   array_I;
+	
+	/* General info */
+	Journal_Printf( stream, "MeshShapeVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( stream, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( stream, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( stream, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	if ( self->_shape )
+		Journal_Printf( stream, "\t_shape: %s '%s'\n", self->_shape->type, self->_shape->name );
+	
+	Journal_Printf( stream, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( stream, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl) {
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++) {
+			Journal_Printf( stream, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( stream, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( stream, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( stream, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type) {
+				case VC_ValueType_Double:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( stream, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( stream, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( stream, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( stream, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( stream, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( stream, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( stream, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for ( array_I = 0;  array_I < self->_entryTbl[entry_I].value.as.typeArray.size;  array_I++)
+							Journal_Printf( stream, "\t\t\t\tasDoubleArray[%u]: %g\n",  array_I,
+								self->_entryTbl[entry_I].value.as.typeArray.array[ array_I]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( stream, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( stream, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	}
+	Journal_Printf( stream, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+	/* Print parent */
+	_VariableCondition_Print( self );
+}
+
+
+void* _MeshShapeVC_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	MeshShapeVC*        self           = (MeshShapeVC*)variableCondition;
+	MeshShapeVC*        newMeshShapeVC;
+	PtrMap*         map            = ptrMap;
+	Bool            ownMap         = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newMeshShapeVC = (MeshShapeVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newMeshShapeVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newMeshShapeVC->_shape = self->_shape;
+	newMeshShapeVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newMeshShapeVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newMeshShapeVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newMeshShapeVC->_entryTbl = Memory_Alloc_Array( MeshShapeVC_Entry, newMeshShapeVC->_entryCount, "MeshShapeVC->_entryTbl");
+			memcpy( newMeshShapeVC->_entryTbl, self->_entryTbl, sizeof(MeshShapeVC_Entry) * newMeshShapeVC->_entryCount );
+			PtrMap_Append( map, newMeshShapeVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newMeshShapeVC->_mesh = self->_mesh;
+		newMeshShapeVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newMeshShapeVC;
+}
+	
+/****************** Stg_Component Virtual Functions ******************/
+void* _MeshShapeVC_DefaultNew( Name name ) {
+	return (void*) _MeshShapeVC_New(
+		sizeof(MeshShapeVC), 
+		MeshShapeVC_Type, 
+		_MeshShapeVC_Delete, 
+		_MeshShapeVC_Print, 
+		_MeshShapeVC_Copy,
+		_MeshShapeVC_DefaultNew,
+		_MeshShapeVC_Construct,	
+		_MeshShapeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		_MeshShapeVC_BuildSelf, 
+		_MeshShapeVC_PrintConcise,
+		_MeshShapeVC_ReadDictionary,
+		_MeshShapeVC_GetSet, 
+		_MeshShapeVC_GetVariableCount, 
+		_MeshShapeVC_GetVariableIndex, 
+		_MeshShapeVC_GetValueIndex, 
+		_MeshShapeVC_GetValueCount, 
+		_MeshShapeVC_GetValue,
+		_VariableCondition_Apply, 
+		name );
+}
+
+void _MeshShapeVC_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _MeshShapeVC_Build(  void* variableCondition, void* data ) {
+	MeshShapeVC*			self = (MeshShapeVC*)variableCondition;
+
+	_MeshShapeVC_BuildSelf( self, data );
+	_VariableCondition_Build( self, data );
+}
+	
+/****************** VariableCondition Virtual Functions ******************/
+void _MeshShapeVC_BuildSelf(  void* variableCondition, void* data /* for build phase */ ) {
+	MeshShapeVC*         self    = (MeshShapeVC*)variableCondition;
+	AbstractContext* context = (AbstractContext*) data;
+
+	assert( context && Stg_Class_IsInstance( context, AbstractContext_Type ) );
+	assert( self->shapeName );
+	Journal_Firewall( strlen( self->shapeName ) > 0, Journal_MyStream( Error_Type, self ),
+			"You need to fill out the 'Shape' dictionary entry for this MeshShapeVC.\n" );
+	assert( self->_mesh );
+
+	self->_shape =  Stg_ComponentFactory_ConstructByName(  context->CF,  self->shapeName, Stg_Shape,  True, 0 /* dummy */  ) ;
+	
+	Stg_Component_Build( self->_mesh, data, False );
+	Stg_Component_Build( self->_shape, data, False );
+}
+
+void _MeshShapeVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	MeshShapeVC* self = (MeshShapeVC*) variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, Shape: %s '%s'", self->type, self->_shape->type, self->_shape->name );
+}
+
+void _MeshShapeVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	MeshShapeVC*                  self = (MeshShapeVC*)variableCondition;
+	Dictionary_Entry_Value*   vcDictVal;
+	Dictionary_Entry_Value    _vcDictVal;
+	Dictionary_Entry_Value*   varsVal;
+	MeshShapeVC_Entry_Index	      entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else {
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+	
+	if (vcDictVal) {
+		/* Get Name of Shape from dictionary - Grab pointer to shape later on */
+		self->shapeName = StG_Strdup( 
+				Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "Shape" )) );
+
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( MeshShapeVC_Entry, self->_entryCount, "MeshShapeVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++) {
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func")) {
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (Index) -1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+						"definition of MeshShapeVC \"%s\" (applies to shape \"%s\"), the cond. func. applied to "
+						"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+						__func__, self->_dictionaryEntryName, self->shapeName,
+						self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+					self->_entryTbl[entry_I].value.as.typeArray.size, "MeshShapeVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+IndexSet* _MeshShapeVC_GetSet(void* variableCondition) {
+	MeshShapeVC*	self = (MeshShapeVC*)variableCondition;
+	Mesh*		mesh = self->_mesh;
+	IndexSet*	set;
+	unsigned	v_i;
+
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	set = IndexSet_New( Mesh_GetDomainSize( mesh, MT_VERTEX ) );
+
+	for( v_i = 0; v_i < Mesh_GetDomainSize( mesh, MT_VERTEX ); v_i++ ) {
+		if( Stg_Shape_IsCoordInside( self->_shape, Mesh_GetVertex( mesh, v_i ) ) )
+			IndexSet_Add( set, v_i );
+	}
+
+	return set;
+}
+
+VariableCondition_VariableIndex _MeshShapeVC_GetVariableCount(void* variableCondition, Index globalIndex) {
+	MeshShapeVC*	self = (MeshShapeVC*)variableCondition;
+
+	return self->_entryCount;
+}
+
+Variable_Index _MeshShapeVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex) {
+	MeshShapeVC*        self          = (MeshShapeVC*)variableCondition;
+	Variable_Index  searchedIndex = 0;
+	Stream*         errorStr      = Journal_Register( Error_Type, self->type );
+	Name            varName;
+	
+	varName = self->_entryTbl[varIndex].varName;
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+	Journal_Firewall( 
+			( searchedIndex < self->variable_Register->count ),
+			errorStr,
+			"Error- in %s: searching for index of varIndex %u (\"%s\") at global node number %u failed"
+			" - register returned index %u, greater than count %u.\n",
+			__func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _MeshShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _MeshShapeVC_GetValueCount(void* variableCondition) {
+	MeshShapeVC*	self = (MeshShapeVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _MeshShapeVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex) {
+	MeshShapeVC*	self = (MeshShapeVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/MeshShapeVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/MeshShapeVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,150 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: MeshShapeVC.h 4160 2007-07-30 06:17:06Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_MeshShapeVC_h__
+#define __Domain_Utils_MeshShapeVC_h__
+	
+	extern const Type MeshShapeVC_Type;
+	
+	#define __MeshShapeVC_Entry \
+		Name                                        varName; \
+		VariableCondition_Value                     value; \
+	
+	typedef struct { __MeshShapeVC_Entry } MeshShapeVC_Entry;
+	
+	#define __MeshShapeVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name                                        _dictionaryEntryName; \
+		MeshShapeVC_Entry_Index                         _entryCount;          \
+		MeshShapeVC_Entry*                              _entryTbl;            \
+		Mesh*                                       _mesh;                \
+		Stg_Shape*                                  _shape;               \
+		Name                                        shapeName;
+
+	struct MeshShapeVC { __MeshShapeVC };
+	
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition* MeshShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data );
+	
+
+	MeshShapeVC* MeshShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                                dictionary,
+		void*                                       _mesh );
+	
+	MeshShapeVC* _MeshShapeVC_New( 
+		SizeT                                       _sizeOfSelf, 
+		Type                                        type,
+		Stg_Class_DeleteFunction*                   _delete,
+		Stg_Class_PrintFunction*                    _print,
+		Stg_Class_CopyFunction*                     _copy,
+		Stg_Component_DefaultConstructorFunction*   _defaultConstructor,
+		Stg_Component_ConstructFunction*            _construct,
+		Stg_Component_BuildFunction*                _build,
+		Stg_Component_InitialiseFunction*           _initialise,
+		Stg_Component_ExecuteFunction*              _execute,
+		Stg_Component_DestroyFunction*              _destroy,
+		VariableCondition_BuildSelfFunc*            _buildSelf, 
+		VariableCondition_PrintConciseFunc*         _printConcise,
+		VariableCondition_ReadDictionaryFunc*       _readDictionary,
+		VariableCondition_GetSetFunc*               _getSet,
+		VariableCondition_GetVariableCountFunc*     _getVariableCount,
+		VariableCondition_GetVariableIndexFunc*     _getVariableIndex,
+		VariableCondition_GetValueIndexFunc*        _getValueIndex,
+		VariableCondition_GetValueCountFunc*        _getValueCount,
+		VariableCondition_GetValueFunc*             _getValue,
+		VariableCondition_ApplyFunc*			_apply, 
+		Name                                        name );
+	
+	void _MeshShapeVC_Init(
+		void*                                       shapeVC, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _mesh );
+	
+	/* Stg_Class Virtual Functions */
+	void _MeshShapeVC_Delete( void* shapeVC );
+	void _MeshShapeVC_Print( void* shapeVC, Stream* stream );
+	void* _MeshShapeVC_Copy( void* shapeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	#define MeshShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	/* Stg_Component Virtual Functions */
+	void* _MeshShapeVC_DefaultNew( Name name );
+	void _MeshShapeVC_Build(  void* shapeVC, void* data );
+	void _MeshShapeVC_Construct( void* shapeVC, Stg_ComponentFactory* cf, void* data );
+	
+	/* VariableCondition Virtual Functions */
+	void _MeshShapeVC_BuildSelf( void* shapeVC, void* data );
+	void _MeshShapeVC_PrintConcise( void* variableCondition, Stream* stream );
+	void _MeshShapeVC_ReadDictionary( void* variableCondition, void* dictionary );
+	IndexSet* _MeshShapeVC_GetSet( void* variableCondition );
+	VariableCondition_VariableIndex	_MeshShapeVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	Variable_Index _MeshShapeVC_GetVariableIndex(
+		void*                                       variableCondition,
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _MeshShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _MeshShapeVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value	_MeshShapeVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/MeshShapeVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/MeshShapeVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshShapeVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">self->shapeName</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 325 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/NewRemesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/NewRemesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,76 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: NewRemesher.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "NewRemesher.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void _NewRemesher_Init( void* _self ) {
+   NewRemesher* self = Class_Cast( _self, NewRemesher );
+
+   _NewClass_Init( self );
+   self->mesh = NULL;
+}
+
+void _NewRemesher_Copy( void* _self, const void* _op ) {
+   NewRemesher* self = Class_Cast( _self, NewRemesher );
+   const NewRemesher* op = Class_Cast( _op, NewRemesher );
+
+   _NewClass_Copy( self, op );
+   self->mesh = op->mesh;
+}
+
+void _NewRemesher_Print( const void* _self, Stream* stream ) {
+   NewRemesher* self = Class_Cast( _self, NewRemesher );
+
+   _NewClass_Print( self, stream );
+}
+
+void NewRemesher_SetMesh( void* _self, void* mesh ) {
+   NewRemesher* self = Class_Cast( _self, NewRemesher );
+
+   /*assert( Class_IsSuper( mesh, Mesh ) );*/
+
+   self->mesh = (Mesh*)mesh;
+}
+
+Mesh* NewRemesher_GetMesh( const void* self ) {
+   assert( Class_IsSuper( self, NewRemesher ) );
+   return ((NewRemesher*)self)->mesh;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/NewRemesher.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/NewRemesher.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,93 @@
+/* Inherit from a parent class and clear any pre-existing 
+   class definitions. */
+#include INHERIT( StGermain/Base/Foundation/NewClass )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+
+/*
+** Class parameter declarations. Here we need to define:
+**   CLASSDIR and
+**   CLASSNAME.
+**
+** We can optionally define:
+**   PREFIX, 
+**   PARENTDIR and
+**   PARENT.
+*/
+
+#define PARENTDIR StGermain/Base/Foundation
+#define PARENT NewClass
+#define CLASSDIR StgDomain/Utils
+#define CLASSNAME NewRemesher
+
+/* Do standard class initialisation. */
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+
+/*
+** Declare all class members using the MEMBER command.  Accepted
+** parameters are:
+**   ( <type>, <name> )
+*/
+
+MEMBER( Mesh*, mesh )
+
+
+/*
+** Declare all virtual, abstract and overridden methods.
+**
+** Available method types are:
+**   VIRTUALMETHOD, 
+**   VOIDVIRTUALMETHOD, 
+**   ABSTRACTMETHOD, 
+**   VOIDABSTRACTMETHOD, 
+**   OVERRIDE and
+**   VOIDOVERRIDE.
+**
+** All method types accept the following parameters:
+**   ( <name>, 
+**     <return type>, 
+**     <arg definitions>, 
+**     <arg names> )
+**
+** where:
+**   <name> is the method name, 
+**   <return type> is the type to be returned by the method, 
+**   <arg definitions> is a parenthesised list of method arguments and 
+**   <arg names> is a parenthesised list of method argument names.
+**
+** Note that any virtual, abstract or overridden method that returns
+** void must be declared as VOIDVIRTUALMETHOD, VOIDABSTRACTMETHOD or
+** VOIDOVERRIDE.
+*/
+
+VOIDOVERRIDE( Init, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Copy, void, 
+	      (void* self, const void* op), 
+	      (self, op) )
+
+VOIDOVERRIDE( Print, void, 
+	      (const void* self, Stream* stream), 
+	      (self, stream) )
+
+VOIDABSTRACTMETHOD( Remesh, void, 
+		    (void* self), 
+		    (self) )
+
+
+/*
+** Declare all local methods using the METHOD command.  Local method 
+** declarations accept the same parameters as virtual methods, however 
+** there are no separate declarations required for void return types.
+*/
+
+METHOD( SetMesh, void, 
+	(void* self, void* mesh), 
+	(self, mesh) )
+
+METHOD( GetMesh, Mesh*, 
+	(const void* self), 
+	(self) )
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/NewRemesher.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/NewRemesher.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: NewRemesher.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Utils_NewRemesher_h__
+#define __StGermain_Domain_Utils_NewRemesher_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Utils
+#define CLASSNAME NewRemesher
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Utils_NewRemesher_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Operator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Operator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,569 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Operator.c 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Operator.h"
+
+const Type Operator_Type = "Operator";
+
+Operator* Operator_New(		
+		Name                                       name, 		
+		Func_Ptr                                   _carryOut,
+		Index                                      numberOfOperands,
+		Dof_Index                                  operandDofs,
+		Dof_Index                                  resultDofs,
+		Dimension_Index                            dim ) 
+{
+	return _Operator_New( 
+			sizeof( Operator ),
+			Operator_Type,
+			_Operator_Delete,
+			_Operator_Print,
+			_Operator_Copy,
+			name,
+			_carryOut,
+			numberOfOperands,
+			operandDofs,
+			resultDofs,
+			dim );
+}
+
+Operator* _Operator_New(		
+		SizeT                                      _sizeOfSelf,
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print, 
+		Stg_Class_CopyFunction*                    _copy,
+		Name                                       name,
+		Func_Ptr                                   _carryOut,
+		Index                                      numberOfOperands,
+		Dof_Index                                  operandDofs,
+		Dof_Index                                  resultDofs,
+		Dimension_Index                            dim )
+{
+	Operator* self = (Operator*) _Stg_Object_New(_sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL);
+
+	/* Set values */
+	self->_carryOut        = _carryOut;
+	self->numberOfOperands = numberOfOperands;
+	self->operandDofs      = operandDofs;
+	self->resultDofs       = resultDofs;
+	self->dim              = dim;
+
+	/* Create Stream */
+	self->errorStream = Journal_MyStream( Error_Type, self );
+
+	return self;
+}
+
+
+void _Operator_Delete(void* operator) {
+	Operator* self = (Operator*) operator;
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+void _Operator_Print(void* operator, Stream* stream) {
+  /*Operator* self = (Operator*) operator; */
+
+	abort();
+}
+
+void* _Operator_Copy( void* operator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+  /*Operator* self = (Operator*) operator; */
+	abort();
+}
+
+
+/* Carry Out Operators */
+void Operator_CarryOutUnaryOperation( void* operator, double* operand0, double* result ) {
+	Operator* self            = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+			
+	(*(Operator_CarryOutUnaryOperationFunction*) (self->_carryOut))( self, operand0, result );
+}
+
+void Operator_CarryOutBinaryOperation( void* operator, double* operand0, double* operand1, double* result ) {
+	Operator* self            = (Operator*) operator;
+
+	Operator_FirewallBinary( self );
+
+	(*(Operator_CarryOutBinaryOperationFunction*) (self->_carryOut))( self, operand0, operand1, result );
+}
+
+/** Operator Functions */
+#define SQUARE_VECTOR2D( vector ) \
+	( vector[0] * vector[0] + vector[1] * vector[1] )
+#define SQUARE_VECTOR3D( vector ) \
+	( vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2] )
+
+void Operator_VectorSquare( void* operator, double* operand0, double* result ) {
+	Operator* self            = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+
+	switch ( self->operandDofs ) {
+		case 2:
+			*result = SQUARE_VECTOR2D( operand0 ); break;
+		case 3:
+			*result = SQUARE_VECTOR3D( operand0 ); break;
+		default:
+			Journal_Printf( self->errorStream, 
+					"Error in %s for %s '%s': Incorrect number of degrees of freedom for what you are operating on.\n",
+					__func__, self->type, self->name );
+			abort();
+	}
+}
+
+void Operator_Magnitude( void* operator, double* operand0, double* result ) {
+	Operator* self            = (Operator*) operator;
+	Index     val_I;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+
+	switch ( self->operandDofs ) {
+		
+		case 2:
+			*result = sqrt( SQUARE_VECTOR2D( operand0 ) ); break;
+		case 3:
+			*result = sqrt( SQUARE_VECTOR3D( operand0 ) ); break;
+		case 1:
+			*result = fabs( *operand0 ); break;
+		case 6:
+			*result = 0;
+			for( val_I = 0; val_I < self->operandDofs ; val_I++ ) 
+				*result += operand0[val_I]*operand0[val_I];
+
+			*result = sqrt( *result ); break;
+		default:
+			Journal_Printf( self->errorStream, 
+					"Error in %s for %s '%s': Incorrect number of degrees of freedom for what you are operating on.\n",
+					__func__, self->type, self->name );
+			abort();			
+	}
+}
+
+void Operator_TensorSymmetricPart( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	
+	TensorArray_GetSymmetricPart( operand0, self->dim, result );
+}
+
+void Operator_SymmetricTensor_Invariant( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	
+	*result = SymmetricTensor_2ndInvariant( operand0, self->dim );
+}
+
+void Operator_TensorAntisymmetricPart( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+		
+	TensorArray_GetAntisymmetricPart( operand0, self->dim, result );
+}
+
+void Operator_SymmetricTensor_GetNegAverageTrace( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	
+	SymmetricTensor_GetTrace( operand0, self->dim, result ); 
+
+	*result = -1.0 * (*result) / self->dim ;
+}
+
+void Operator_Tensor_GetNegAverageTrace( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	
+	TensorArray_GetTrace( operand0, self->dim, result ); 
+
+	*result = -1.0 * (*result) / self->dim ;
+}
+	
+
+void Operator_TakeFirstComponent( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallMinimumOperandDofs( self, 1 );
+
+	*result = operand0[0];
+}
+void Operator_TakeSecondComponent( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallMinimumOperandDofs( self, 2 );
+
+	*result = operand0[1];
+}
+void Operator_TakeThirdComponent( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallMinimumOperandDofs( self, 3 );
+
+	*result = operand0[2];
+}
+void Operator_TakeFourthComponent( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallMinimumOperandDofs( self, 4 );
+
+	*result = operand0[3];
+}
+void Operator_TakeFifthComponent( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallMinimumOperandDofs( self, 5 );
+
+	*result = operand0[4];
+}
+
+/** Binary Operator Functions */
+void Operator_Addition( void* operator, double* operand0, double* operand1, double* result){
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallBinary( self );
+	Operator_FirewallEqualOperandAndResultDofs( self );
+	
+	switch (self->operandDofs) {
+		case 6:
+			result[5] = operand0[5] + operand1[5];
+		case 5:
+			result[4] = operand0[4] + operand1[4];
+		case 4:
+			result[3] = operand0[3] + operand1[3];
+		case 3:
+			result[2] = operand0[2] + operand1[2];
+		case 2:
+			result[1] = operand0[1] + operand1[1];
+		case 1:
+			result[0] = operand0[0] + operand1[0]; break;
+		default:
+			Journal_Printf( self->errorStream, 
+					"Error in %s for %s '%s': Incorrect number of degrees of freedom for what you are operating on.\n",
+					__func__, self->type, self->name );
+			abort();				
+	}
+}
+
+void Operator_Subtraction( void* operator, double* operand0, double* operand1, double* result){
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallBinary( self );
+	Operator_FirewallEqualOperandAndResultDofs( self );
+	
+	switch (self->operandDofs) {
+		case 6:
+			result[5] = operand0[5] - operand1[5];
+		case 5:
+			result[4] = operand0[4] - operand1[4];
+		case 4:
+			result[3] = operand0[3] - operand1[3];
+		case 3:
+			result[2] = operand0[2] - operand1[2];
+		case 2:
+			result[1] = operand0[1] - operand1[1];
+		case 1:
+			result[0] = operand0[0] - operand1[0]; break;
+		default:
+			Journal_Printf( self->errorStream, 
+					"Error in %s for %s '%s': Incorrect number of degrees of freedom for what you are operating on.\n",
+					__func__, self->type, self->name );
+			abort();				
+	}
+}
+	
+void Operator_ScalarMultiplication( void* operator, double* operand0, double* operand1, double* result ) {
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallBinary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallEqualOperandAndResultDofs( self );
+
+	*result = (*operand0) * (*operand1);
+}
+
+
+void Operator_ScalarDivision( void* operator, double* operand0, double* operand1, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallBinary( self );
+	Operator_FirewallResultDofs( self, 1 );
+	Operator_FirewallEqualOperandAndResultDofs( self );
+
+	*result = (*operand0) / (*operand1);
+}
+
+void Operator_VectorScale( void* operator, double* operand0, double* operand1, double* result){
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallBinary( self );
+
+	switch (self->operandDofs) {
+		case 3:
+			result[2] = (*operand0) * operand1[2];
+		case 2:
+			result[1] = (*operand0) * operand1[1];
+		case 1:
+			result[0] = (*operand0) * operand1[0]; break;
+		default:
+			Journal_Printf( self->errorStream, 
+					"Error in %s for %s '%s': Incorrect number of degrees of freedom for what you are operating on.\n",
+					__func__, self->type, self->name );
+			abort();				
+	}
+}
+
+void Operator_Rounding( void* operator, double* operand0, double* result ) {
+	Operator*     self = (Operator*) operator;
+	/* TODO: read this in from somewhere instead of just hard-coding it.... */
+	unsigned int  nSigFigsToRoundTo = 6;
+	Index         val_I;
+
+	Operator_FirewallUnary( self );
+
+	for( val_I = 0; val_I < self->operandDofs ; val_I++ ) {	
+		result[val_I] = StG_RoundDoubleToNSigFigs( operand0[val_I], nSigFigsToRoundTo );
+	}
+}
+
+
+void Operator_HorizontalDivergence( void* operator, double* velocityGradient, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );
+
+	*result = velocityGradient[0] + velocityGradient[8];
+}
+
+void Operator_VerticalVorticity( void* operator, double* velocityGradient, double* result ) {
+	Operator* self = (Operator*) operator;
+
+	Operator_FirewallUnary( self );
+	Operator_FirewallResultDofs( self, 1 );	
+
+	*result = velocityGradient[2] - velocityGradient[6];
+}
+
+void Operator_Divergence( void* operator, double* velocityGradient, double* result ) {
+	Operator* self = (Operator*) operator;
+	
+	Operator_FirewallUnary( self );
+
+	TensorArray_GetTrace( velocityGradient, self->dim, result );
+}
+
+void Operator_SymmetricTensorInnerProduct( void* operator, double* operand0, double* operand1, double* result ) {
+	Operator* self = (Operator*)operator;
+	
+	Operator_FirewallBinary( self );
+
+	/* Must be symmetric Tensors */
+	if( self->dim == 2 ) {
+		*result = operand0[0] * operand1[0] + operand0[1] * operand1[1] + ( 2 * operand0[2] * operand1[2] );
+	} else {
+		*result = operand0[0] * operand1[0]
+		       	+ operand0[1] * operand1[1] 
+			+ operand0[2] * operand1[2] 
+			+ 2.0 * (operand0[3] * operand1[3] + operand0[4] * operand1[4] + operand0[5] * operand1[5] );
+	}
+}
+
+void Operator_TensorInvariant( void* operator, double* operand0, double* result ) {
+	Operator* self = (Operator*)operator;
+
+	Operator_FirewallUnary( self );
+
+	/* Must be a full Tensor */
+	*result = TensorArray_2ndInvariant( operand0, self->dim );
+}
+
+/* HACK - This function isn't extensible */
+Operator* Operator_NewFromName( 
+		Name                                       name, 		
+		Dof_Index                                  operandDofs,
+		Dimension_Index                            dim ) 
+{
+	Func_Ptr                                   _carryOut;
+	Dof_Index                                  resultDofs;
+	Index                                      numberOfOperands;
+
+	if ( ! strcasecmp( name, "VectorSquare" ) ) {
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_VectorSquare;
+	}
+	else if ( ! strcasecmp( name, "Magnitude" ) ) {
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_Magnitude;
+	}
+	else if ( ! strcasecmp( name, "TensorSymmetricPart" ) ) {
+		resultDofs = StGermain_nSymmetricTensorVectorComponents( dim );
+		numberOfOperands = 1;
+		_carryOut = Operator_TensorSymmetricPart;
+	}
+	else if ( ! strcasecmp( name, "TensorAntisymmetricPart" ) ) { 
+		resultDofs = dim * dim;
+		numberOfOperands = 1;
+		_carryOut = Operator_TensorAntisymmetricPart;
+	}
+	else if ( ! strcasecmp( name, "SymmetricTensor_Invariant" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_SymmetricTensor_Invariant;
+	}
+	else if ( ! strcasecmp( name, "SymmetricTensor_NegAverageTrace" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_SymmetricTensor_GetNegAverageTrace;
+	}
+	else if ( ! strcasecmp( name, "Tensor_NegAverageTrace" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_Tensor_GetNegAverageTrace;
+	}
+	else if ( ! strcasecmp( name, "TakeFirstComponent" ) ) {
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_TakeFirstComponent;
+	}
+	else if ( ! strcasecmp( name, "TakeSecondComponent" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_TakeSecondComponent;
+	}
+	else if ( ! strcasecmp( name, "TakeThirdComponent" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_TakeThirdComponent;
+	}
+	else if ( ! strcasecmp( name, "Addition" ) ) {
+		resultDofs = operandDofs;
+		numberOfOperands = 2;
+		_carryOut = Operator_Addition;
+	}
+	else if ( ! strcasecmp( name, "Subtraction" ) ){ 
+		resultDofs = operandDofs;
+		numberOfOperands = 2;
+		_carryOut = Operator_Subtraction;
+	}
+	else if ( ! strcasecmp( name, "ScalarMultiplication" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 2;
+		_carryOut = Operator_ScalarMultiplication;
+	}
+	else if ( ! strcasecmp( name, "ScalarDivision" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 2;
+		_carryOut = Operator_ScalarDivision;
+	}
+	else if ( ! strcasecmp( name, "VectorScale" ) ){ 
+		resultDofs = dim;
+		numberOfOperands = 2;
+		_carryOut = Operator_VectorScale;
+	} 
+	else if ( ! strcasecmp( name, "Rounding" ) ){ 
+		resultDofs = operandDofs;
+		numberOfOperands = 1;
+		_carryOut = Operator_Rounding;
+	} 
+	else if ( ! strcasecmp( name, "TensorInnerProduct" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 2;
+		_carryOut = Operator_SymmetricTensorInnerProduct;
+	}
+	else if ( ! strcasecmp( name, "TensorInvariant" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_TensorInvariant;
+	}
+	else if ( ! strcasecmp( name, "HorizontalDivergence" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_HorizontalDivergence;
+	}
+	else if ( ! strcasecmp( name, "VerticalVorticity" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_VerticalVorticity;
+	}
+	else if ( ! strcasecmp( name, "Divergence" ) ){ 
+		resultDofs = 1;
+		numberOfOperands = 1;
+		_carryOut = Operator_Divergence;
+	}
+	else {
+		resultDofs = 0;
+		numberOfOperands = 0;
+		_carryOut = NULL;
+		
+		Journal_Printf( Journal_Register( Error_Type, Operator_Type ), 
+				"In func %s: Error trying to create operator from name '%s'.\n",
+				__func__, name );
+		abort();
+	}
+
+	return Operator_New( name, _carryOut, numberOfOperands, operandDofs, resultDofs, dim );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Operator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Operator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,158 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Operator.h 3896 2006-11-20 04:59:16Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#ifndef __Domain_Utils_Operator_h__
+#define __Domain_Utils_Operator_h__
+
+typedef void (Operator_CarryOutUnaryOperationFunction)  ( void* operatorObject, double* operand0, double* result );
+typedef void (Operator_CarryOutBinaryOperationFunction) ( void* operatorObject, double* operand0, double* operand1, double* result );
+
+	/** Class contents */
+	#define __Operator \
+		/* Parent info */ \
+		__Stg_Object \
+		/* Virtual Functions */ \
+		Func_Ptr                                   _carryOut;                            \
+		/* Other information */ \
+		Index                                      numberOfOperands;                     \
+		Dof_Index                                  operandDofs;                          \
+		Dof_Index                                  resultDofs;                           \
+		Dimension_Index                            dim;                                  \
+		Stream*                                    errorStream;                          \
+
+
+	struct Operator { __Operator };
+
+	extern const Type Operator_Type;
+
+	Operator* Operator_New(		
+		Name                                       name,
+		Func_Ptr                                   _carryOut,
+		Index                                      numberOfOperands,
+		Dof_Index                                  operandDofs,
+		Dof_Index                                  resultDofs,
+		Dimension_Index                            dim ) ;
+
+	Operator* _Operator_New(		
+		SizeT                                      _sizeOfSelf,
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print, 
+		Stg_Class_CopyFunction*                    _copy,
+		Name                                       name,
+		Func_Ptr                                   _carryOut,
+		Index                                      numberOfOperands,
+		Dof_Index                                  operandDofs,
+		Dof_Index                                  resultDofs,
+		Dimension_Index                            dim );
+
+	void _Operator_Delete(void* operatorObject) ;
+	void _Operator_Print(void* operatorObject, Stream* stream) ;
+	void* _Operator_Copy( void* operatorObject, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) ;
+
+	/* Carry Out Wrapper functions */
+	void Operator_CarryOutUnaryOperation( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_CarryOutBinaryOperation( void* operatorObject, double* operand0, double* operand1, double* result ) ;
+
+	/** Unary Operator Functions */
+	void Operator_VectorSquare( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_Magnitude( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_TensorSymmetricPart( void* operatorObject, double* operand0, double* result );
+	void Operator_SymmetricTensor_Invariant( void* operatorObject, double* operand0, double* result );
+	void Operator_TensorAntisymmetricPart( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_Tensor_GetNegAverageTrace( void* operatorObject, double* operand0, double* result );
+	void Operator_SymmetricTensor_GetNegAverageTrace( void* operatorObject, double* operand0, double* result );
+	void Operator_TakeFirstComponent( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_TakeSecondComponent( void* operatorObject, double* operand0, double* result ) ;
+	void Operator_TakeThirdComponent( void* operatorObject, double* operand0, double* result );
+	void Operator_TakeFourthComponent( void* operatorObject, double* operand0, double* result );
+	void Operator_TakeFifthComponent( void* operatorObject, double* operand0, double* result );
+
+	/** Binary Operator Functions */
+	void Operator_Addition( void* operatorObject, double* operand0, double* operand1, double* result);	
+	void Operator_Subtraction( void* operatorObject, double* operand0, double* operand1, double* result);
+	void Operator_ScalarMultiplication( void* operatorObject, double* operand0, double* operand1, double* result ) ;
+	void Operator_ScalarDivision( void* operatorObject, double* operand0, double* operand1, double* result ) ;
+	void Operator_VectorScale( void* operatorObject, double* operand0, double* operand1, double* result);
+	void Operator_Rounding( void* operatorObject, double* operand0, double* result );
+	void Operator_HorizontalDivergence( void* operatorObject, double* velocityGradient, double* result ) ;
+	void Operator_VerticalVorticity( void* operatorObject, double* velocityGradient, double* result ) ;
+	void Operator_Divergence( void* operatorObject, double* velocityGradient, double* result ) ;
+	void Operator_TensorInnerProduct( void* operatorObject, double* operand0, double* operand1, double* result );
+
+	Operator* Operator_NewFromName( 
+		Name                                       name, 		
+		Dof_Index                                  operandDofs,
+		Dimension_Index                            dim ) ;
+
+/* Error Checking Macros */
+#define Operator_FirewallUnary( self ) \
+	Journal_DFirewall(                                                                  \
+			self->numberOfOperands == 1,                                                \
+			self->errorStream,                                                          \
+			"Error in %s for %s '%s':\n"                                                \
+			"\tOperator expects %u operands but is trying to use a unary function.\n",  \
+			__func__, self->type, self->name, self->numberOfOperands );
+
+#define Operator_FirewallBinary( self ) \
+	Journal_DFirewall(                                                                  \
+			self->numberOfOperands == 2,                                                \
+			self->errorStream,                                                          \
+			"Error in %s for %s '%s':\n"                                                \
+			"\tOperator expects %u operands but is trying to use a binary function.\n", \
+			__func__, self->type, self->name, self->numberOfOperands );
+
+#define Operator_FirewallResultDofs( self, expectedResultDofs )                                 \
+	Journal_DFirewall(                                                                  \
+			self->resultDofs == expectedResultDofs,                                             \
+			self->errorStream,                                                          \
+			"Error in %s for %s '%s':\n"                                                \
+			"\tResult for Operator expects %u degrees of freedom but is using a function expects %u.\n", \
+			__func__, self->type, self->name, self->resultDofs, expectedResultDofs );
+
+#define Operator_FirewallMinimumOperandDofs( self, minimumOperandDofs )                                 \
+	Journal_DFirewall(                                                                  \
+			self->operandDofs >= minimumOperandDofs,                                             \
+			self->errorStream,                                                          \
+			"Error in %s for %s '%s':\n"                                                \
+			"\tOperand has %u degrees of freedom but this function needs at least %u.\n", \
+			__func__, self->type, self->name, self->operandDofs, minimumOperandDofs );
+
+
+#define Operator_FirewallEqualOperandAndResultDofs( self )                                 \
+	Journal_DFirewall(                                                                  \
+			self->operandDofs == self->resultDofs,                                             \
+			self->errorStream,                                                          \
+			"Error in %s for %s '%s':\n"                                                \
+			"\tFunction expects operands and result to have the same number of degrees of freedom.\n", \
+			__func__, self->type, self->name );
+	
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/OperatorFieldVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/OperatorFieldVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,399 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: OperatorFieldVariable.c 4137 2007-06-07 05:46:46Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "FieldVariable.h"
+#include "Operator.h"
+#include "OperatorFieldVariable.h"
+#include "DomainContext.h"
+#include "FieldVariable_Register.h"
+
+#include <assert.h>
+
+const Type OperatorFieldVariable_Type = "OperatorFieldVariable";
+const Name defaultOperatorFieldVariableName = "defaultOperatorFieldVariableName";
+
+OperatorFieldVariable* OperatorFieldVariable_NewUnary( 
+		Name                                               name,
+		void*                                              _fieldVariable,
+		Name                                               operatorName )
+{
+	FieldVariable* fieldVariable = (FieldVariable*) _fieldVariable;
+       	
+	return OperatorFieldVariable_New( 
+			name,
+			OperatorFieldVariable_UnaryInterpolationFunc, 
+			operatorName,
+			1,
+			&fieldVariable, 
+			fieldVariable->dim,
+			fieldVariable->isCheckpointedAndReloaded,
+			fieldVariable->communicator,
+			fieldVariable->fieldVariable_Register );
+}
+
+OperatorFieldVariable* OperatorFieldVariable_NewBinary( 
+		Name                                               name,
+		void*                                              _fieldVariable1,
+		void*                                              _fieldVariable2,
+		Name                                               operatorName )
+{
+	FieldVariable* fieldVariableList[2];
+       
+	fieldVariableList[0] = (FieldVariable*) _fieldVariable1;
+	fieldVariableList[1] = (FieldVariable*) _fieldVariable2;
+	
+	return OperatorFieldVariable_New( 
+			name,
+			OperatorFieldVariable_BinaryInterpolationFunc, 
+			operatorName,
+			2, 
+			fieldVariableList, 
+			fieldVariableList[0]->dim,
+			fieldVariableList[0]->isCheckpointedAndReloaded,
+			fieldVariableList[0]->communicator,
+			fieldVariableList[0]->fieldVariable_Register );
+}
+
+OperatorFieldVariable* OperatorFieldVariable_DefaultNew( Name name )
+{
+		return _OperatorFieldVariable_New( 
+			sizeof(OperatorFieldVariable), 
+			OperatorFieldVariable_Type, 
+			_FieldVariable_Delete, 
+			_OperatorFieldVariable_Print,
+			_OperatorFieldVariable_Copy, 
+			(Stg_Component_DefaultConstructorFunction*)OperatorFieldVariable_DefaultNew,
+			_OperatorFieldVariable_Construct,
+			_OperatorFieldVariable_Build, 
+			_OperatorFieldVariable_Initialise, 
+			_OperatorFieldVariable_Execute,
+			_OperatorFieldVariable_Destroy,
+			name,
+			False, 
+			_OperatorFieldVariable_GetMinLocalFieldMagnitude,
+			_OperatorFieldVariable_GetMaxLocalFieldMagnitude, 
+			_OperatorFieldVariable_GetMinAndMaxLocalCoords,
+			_OperatorFieldVariable_GetMinAndMaxGlobalCoords, 
+			_OperatorFieldVariable_InterpolateValueAt,
+			NULL,
+			0,
+			NULL,
+			0,
+			False, /* Setting default to false, as do not want to checkpoint OperatorFeVariables */
+			MPI_COMM_WORLD,
+			NULL);
+}
+
+OperatorFieldVariable* OperatorFieldVariable_New( 
+		Name                                               name,
+		FieldVariable_InterpolateValueAtFunction*          interpolateValueAt,
+		Name                                               operatorName,
+		Index                                              fieldVariableCount,
+		FieldVariable**                                    fieldVariableList,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fV_Register ) 
+{
+
+		return _OperatorFieldVariable_New( 
+			sizeof(OperatorFieldVariable), 
+			OperatorFieldVariable_Type, 
+			_FieldVariable_Delete, 
+			_OperatorFieldVariable_Print,
+			_OperatorFieldVariable_Copy, 
+			(Stg_Component_DefaultConstructorFunction*)OperatorFieldVariable_DefaultNew,
+			_OperatorFieldVariable_Construct,
+			_OperatorFieldVariable_Build, 
+			_OperatorFieldVariable_Initialise, 
+			_OperatorFieldVariable_Execute,
+			_OperatorFieldVariable_Destroy,
+			name, 
+			True,
+			_OperatorFieldVariable_GetMinLocalFieldMagnitude,
+			_OperatorFieldVariable_GetMaxLocalFieldMagnitude, 
+			_OperatorFieldVariable_GetMinAndMaxLocalCoords,
+			_OperatorFieldVariable_GetMinAndMaxGlobalCoords,
+			interpolateValueAt,
+			operatorName,
+			fieldVariableCount,
+			fieldVariableList,
+			dim,
+			isCheckpointedAndReloaded,
+			communicator,
+			fV_Register );
+}
+
+OperatorFieldVariable* _OperatorFieldVariable_New(
+ 		SizeT                                              _sizeOfSelf, 
+		Type                                               type,
+		Stg_Class_DeleteFunction*                          _delete,
+		Stg_Class_PrintFunction*                           _print, 
+		Stg_Class_CopyFunction*                            _copy, 
+		Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+		Stg_Component_ConstructFunction*                   _construct,
+		Stg_Component_BuildFunction*                       _build,
+		Stg_Component_InitialiseFunction*                  _initialise,
+		Stg_Component_ExecuteFunction*                     _execute,
+		Stg_Component_DestroyFunction*                     _destroy,
+		Name                                               name,
+		Bool												initFlag,
+		FieldVariable_GetValueFunction*	                   _getMinGlobalFieldMagnitude,
+		FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude,
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords,
+		FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords,
+		FieldVariable_InterpolateValueAtFunction*          interpolateValueAt,
+		Name                                               operatorName,
+		Index                                              fieldVariableCount,
+		FieldVariable**                                    fieldVariableList,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fV_Register )
+{
+	OperatorFieldVariable*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(OperatorFieldVariable) );
+	self = (OperatorFieldVariable*) _FieldVariable_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,	
+			_build, 
+			_initialise, 
+			_execute,
+			_destroy,
+			name, 
+			initFlag,
+			interpolateValueAt,
+			_getMinGlobalFieldMagnitude,
+			_getMaxGlobalFieldMagnitude,
+			_getMinAndMaxLocalCoords,
+			_getMinAndMaxGlobalCoords,
+			0, /* field component count - this will be reset later */
+			dim,
+			False, /* Setting this to false as I don't think we want to checkpoint operators*/
+			communicator,
+			fV_Register );
+
+	if( initFlag ){
+		_OperatorFieldVariable_Init( self, operatorName, fieldVariableCount, fieldVariableList  );
+	}
+	
+	return self;
+}
+
+void _OperatorFieldVariable_Delete( void* _fieldVariable ) {
+	OperatorFieldVariable* self = (OperatorFieldVariable*) _fieldVariable;
+
+	Memory_Free( self->fieldVariableList );
+
+	_FieldVariable_Delete( self );
+}
+
+void _OperatorFieldVariable_Print( void* _fieldVariable, Stream* stream ) {
+	OperatorFieldVariable* self = (OperatorFieldVariable*) _fieldVariable;
+	Index                  fieldVariable_I;
+
+	_FieldVariable_Print( self, stream );
+
+	Journal_PrintValue( stream, self->fieldVariableCount );
+	for ( fieldVariable_I = 0 ; fieldVariable_I < self->fieldVariableCount ; fieldVariable_I++ ) 
+		Journal_Printf( stream, "\tFieldVariable %u - '%s'\n", fieldVariable_I, self->fieldVariableList[ fieldVariable_I ]->name );
+
+}
+
+void _OperatorFieldVariable_Init( void* ofv, Name operatorName, Index fieldVariableCount, FieldVariable** fieldVariableList ) {
+	OperatorFieldVariable*	self = (OperatorFieldVariable*)ofv;
+	FieldVariable*              fieldVariable;
+	Index                       fieldVariable_I;
+	Stream*                     errorStream       = Journal_Register( Error_Type, self->type );
+
+	self->isConstructed = True;
+
+	/* Create operator */
+	self->_operator = Operator_NewFromName( operatorName, fieldVariableList[0]->fieldComponentCount, self->dim );
+	self->fieldComponentCount = self->_operator->resultDofs; /* Reset this value from the one generated from the operator */
+
+	self->fieldVariableCount     = fieldVariableCount;
+
+	/* Copy field variable list */
+	self->fieldVariableList      = Memory_Alloc_Array( FieldVariable*, fieldVariableCount, "Array of Field Variables" );
+	memcpy( self->fieldVariableList, fieldVariableList, fieldVariableCount * sizeof( FieldVariable* ) );
+
+	for ( fieldVariable_I = 0 ; fieldVariable_I < fieldVariableCount ; fieldVariable_I++ ) {
+		fieldVariable = fieldVariableList[ fieldVariable_I ];
+		Journal_Firewall( fieldVariable != NULL, errorStream, 
+				"In func %s: FieldVariable %u in list is NULL\n", __func__, fieldVariable_I );
+		Journal_Firewall( fieldVariable->fieldComponentCount <= MAX_FIELD_COMPONENTS, errorStream, 
+			"In func %s: Field Variable '%s' has too many components.\n", __func__, fieldVariable->name );
+	}
+}
+
+
+void* _OperatorFieldVariable_Copy( void* fieldVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	OperatorFieldVariable*	self = (OperatorFieldVariable*)fieldVariable;
+	OperatorFieldVariable*	newOperatorFieldVariable;
+	
+	newOperatorFieldVariable = _FieldVariable_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newOperatorFieldVariable->_operator              = self->_operator;
+	newOperatorFieldVariable->fieldVariableCount     = self->fieldVariableCount;
+	
+	if (deep) {
+		newOperatorFieldVariable->fieldVariableList = Memory_Alloc_Array( FieldVariable*, self->fieldVariableCount, 
+				"Array of Field Variables" );
+		memcpy( newOperatorFieldVariable->fieldVariableList, self->fieldVariableList, 
+				self->fieldVariableCount * sizeof( FieldVariable* ) );
+	}
+	else 
+		newOperatorFieldVariable->fieldVariableList = self->fieldVariableList;
+	
+	return (void*)newOperatorFieldVariable;
+}
+
+void _OperatorFieldVariable_Construct( void* fieldVariable, Stg_ComponentFactory* cf, void* data ) {
+	OperatorFieldVariable*     self       = (OperatorFieldVariable*) fieldVariable;
+	Index                      fieldVariableCount = 0;
+	Name                       operatorName;
+	FieldVariable**            fieldVariableList;
+	
+	/* Construct Parent */
+	_FieldVariable_Construct( self, cf, data );
+
+	operatorName = Stg_ComponentFactory_GetString( cf, self->name, "Operator", "" );
+
+	fieldVariableList = Stg_ComponentFactory_ConstructByList( 
+		cf, 
+		self->name, 
+		"FieldVariables", 
+		Stg_ComponentFactory_Unlimited, 
+		FieldVariable, 
+		True, 
+		&fieldVariableCount,
+		data );
+
+	_OperatorFieldVariable_Init( self, operatorName, fieldVariableCount, fieldVariableList );
+
+	Memory_Free( fieldVariableList );
+}
+
+void _OperatorFieldVariable_Build( void* fieldVariable, void* data ) {
+	OperatorFieldVariable* self = (OperatorFieldVariable*) fieldVariable;
+	Index                  fieldVariable_I;
+
+	for ( fieldVariable_I = 0 ; fieldVariable_I < self->fieldVariableCount ; fieldVariable_I++ ) 
+		Stg_Component_Build( self->fieldVariableList[ fieldVariable_I ] , data, False );
+}
+
+void _OperatorFieldVariable_Execute( void* fieldVariable, void* data ) {}
+
+void _OperatorFieldVariable_Destroy( void* fieldVariable, void* data ) {}
+
+void _OperatorFieldVariable_Initialise( void* fieldVariable, void* data ) {
+	OperatorFieldVariable* self = (OperatorFieldVariable*) fieldVariable;
+	Index                  fieldVariable_I;
+
+	for ( fieldVariable_I = 0 ; fieldVariable_I < self->fieldVariableCount ; fieldVariable_I++ ) 
+		Stg_Component_Initialise( self->fieldVariableList[ fieldVariable_I ] , data, False );
+}
+
+/* TODO - Think of something clever for these */
+double _OperatorFieldVariable_GetMinLocalFieldMagnitude( void* fieldVariable ) { return 0.0; }
+double _OperatorFieldVariable_GetMaxLocalFieldMagnitude( void* fieldVariable ) { return 0.0; }
+
+void  _OperatorFieldVariable_GetMinAndMaxLocalCoords( void* fieldVariable, Coord min, Coord max ) {
+	OperatorFieldVariable* self            = (OperatorFieldVariable*) fieldVariable;
+
+	FieldVariable_GetMinAndMaxLocalCoords( self->fieldVariableList[0], min, max );
+}
+
+void  _OperatorFieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord min, Coord max ) {
+	OperatorFieldVariable* self            = (OperatorFieldVariable*) fieldVariable;
+
+	FieldVariable_GetMinAndMaxGlobalCoords( self->fieldVariableList[0], min, max );
+}
+
+InterpolationResult _OperatorFieldVariable_InterpolateValueAt( void* fieldVariable, Coord coord, double* value ) {
+	OperatorFieldVariable* self            = (OperatorFieldVariable*) fieldVariable;
+
+	switch ( self->fieldVariableCount ) {
+		case 1:
+			self->_interpolateValueAt = OperatorFieldVariable_UnaryInterpolationFunc; break;
+		case 2:
+			self->_interpolateValueAt = OperatorFieldVariable_BinaryInterpolationFunc; break;
+		default:
+			Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Can't use func '%s' with fieldVariableCount = %d\n", __func__, self->fieldVariableCount );
+	}
+
+	return FieldVariable_InterpolateValueAt( self, coord, value );
+}
+
+InterpolationResult OperatorFieldVariable_UnaryInterpolationFunc( void* fieldVariable, Coord coord, double* value ) {
+	OperatorFieldVariable* self            = (OperatorFieldVariable*) fieldVariable;
+	FieldVariable*         field0          = self->fieldVariableList[0];
+	InterpolationResult    result;
+	double                 fieldValue[ MAX_FIELD_COMPONENTS ]; 
+
+	result = field0->_interpolateValueAt( field0, coord, fieldValue );
+	Operator_CarryOutUnaryOperation( self->_operator, fieldValue, value );
+	return result;
+}
+
+InterpolationResult OperatorFieldVariable_BinaryInterpolationFunc( void* fieldVariable, Coord coord, double* value ) {
+	OperatorFieldVariable* self            = (OperatorFieldVariable*) fieldVariable;
+	FieldVariable*         field0          = self->fieldVariableList[0];
+	FieldVariable*         field1          = self->fieldVariableList[1];
+	double                 fieldValue0[ MAX_FIELD_COMPONENTS ]; 
+	double                 fieldValue1[ MAX_FIELD_COMPONENTS ]; 
+	InterpolationResult    result0;
+	InterpolationResult    result1;
+
+	result0 = field0->_interpolateValueAt( field0, coord, fieldValue0 );
+	result1 = field1->_interpolateValueAt( field1, coord, fieldValue1 );
+
+	Operator_CarryOutBinaryOperation( self->_operator, fieldValue0, fieldValue1, value ); 
+
+	return result0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/OperatorFieldVariable.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/OperatorFieldVariable.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,162 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents a Variable that is a discretisation of a field-like physical property over a spatial domain.
+**
+** Assumptions:
+**	The function interfaces assume the spatially disc. variable is stored as a double
+**	(it can't be an int because its an approximation to a continuous variable right?)
+**
+** Comments:
+**	Abstract class that defines an interface to use when accessing spatially discretised
+**	field variables.
+**
+**	This means that e.g. visualisation code can be written to use this class,
+**	and doesn't have to worry exactly how the variable is discretised - that will be
+**	done by the back-end implementation of this class.
+**
+**	The name comes from the definition of "field" in the physics domain: A region of space
+**	characterized by a physical property, such as gravitational or electromagnetic force or
+**	fluid pressure, having a determinable value at every point in the region.
+**
+**	TODO: should it have a ptr to the Variable its based on at this level?
+**	doesn't make sense at the moment as the FeVariable used a \
+**	doflayout rather than a variable -> but may in future... 
+**
+**	$Id: OperatorFieldVariable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_OperatorFieldVariable_h__
+#define __Domain_Utils_OperatorFieldVariable_h__
+
+	#define MAX_FIELD_COMPONENTS 9
+
+	/** Textual name of this class */
+	extern const Type OperatorFieldVariable_Type;
+
+	typedef void (OperatorFieldVariable_UnaryOperatorFunction)  ( void* fieldVariable, double* value0, double* result );
+	typedef void (OperatorFieldVariable_BinaryOperatorFunction) ( void* fieldVariable, double* value0, double* value1, double* result );
+	
+	/** OperatorFieldVariable contents */
+	#define __OperatorFieldVariable \
+		/* General info */ \
+		__FieldVariable \
+		\
+		/* Virtual info */ \
+		Operator*                                                   _operator;           \
+		Index                                                       fieldVariableCount;  \
+		FieldVariable**                                             fieldVariableList;   \
+
+
+	struct OperatorFieldVariable { __OperatorFieldVariable };	
+
+	/** Shortcut constructors */
+	OperatorFieldVariable* OperatorFieldVariable_NewUnary(
+		Name                                               name,
+		void*                                              _fieldVariable,
+		Name                                               operatorName );
+
+	OperatorFieldVariable* OperatorFieldVariable_NewBinary(
+		Name                                               name,
+		void*                                              _fieldVariable1,
+		void*                                              _fieldVariable2,
+		Name                                               operatorName );
+	
+	/* Public Constructor */
+	OperatorFieldVariable* OperatorFieldVariable_DefaultNew();
+
+	OperatorFieldVariable* OperatorFieldVariable_New( 
+		Name                                               name,
+		FieldVariable_InterpolateValueAtFunction*          interpolateValueAt,
+		Name                                               operatorName,
+		Index                                              fieldVariableCount,
+		FieldVariable**                                    fieldVariableList,
+		Dimension_Index                                    dim,
+		Bool                                               isCheckpointedAndReloaded,
+		MPI_Comm                                           communicator,
+		FieldVariable_Register*                            fV_Register ) ;
+
+	/** Private Constructor */
+	OperatorFieldVariable* _OperatorFieldVariable_New(
+			SizeT                                              _sizeOfSelf, 
+			Type                                               type,
+			Stg_Class_DeleteFunction*                          _delete,
+			Stg_Class_PrintFunction*                           _print, 
+			Stg_Class_CopyFunction*                            _copy, 
+			Stg_Component_DefaultConstructorFunction*          _defaultConstructor,
+			Stg_Component_ConstructFunction*                   _construct,
+			Stg_Component_BuildFunction*                       _build,
+			Stg_Component_InitialiseFunction*                  _initialise,
+			Stg_Component_ExecuteFunction*                     _execute,
+			Stg_Component_DestroyFunction*                     _destroy,
+			Name                                               name,
+			Bool												initFlag,
+			FieldVariable_GetValueFunction*	                   _getMinGlobalFieldMagnitude,
+			FieldVariable_GetValueFunction*                    _getMaxGlobalFieldMagnitude,
+			FieldVariable_GetCoordFunction*                    _getMinAndMaxLocalCoords,
+			FieldVariable_GetCoordFunction*                    _getMinAndMaxGlobalCoords,
+			FieldVariable_InterpolateValueAtFunction*          interpolateValueAt,
+			Name                                               operatorName,
+			Index                                              fieldVariableCount,
+			FieldVariable**                                    fieldVariableList,
+			Dimension_Index                                    dim,
+			Bool                                               isCheckpointedAndReloaded,
+			MPI_Comm                                           communicator,
+			FieldVariable_Register*                            fV_Register );
+
+	void _OperatorFieldVariable_Init( void* fieldVariable, Name operatorName, Index fieldVariableCount, FieldVariable** fieldVariableList ) ;
+
+	void _OperatorFieldVariable_Delete( void* variable ) ;
+	void _OperatorFieldVariable_Print( void* _fieldVariable, Stream* stream ) ;
+
+
+	void* _OperatorFieldVariable_Copy( void* fieldVariable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) ;
+	void _OperatorFieldVariable_Construct( void* fieldVariable, Stg_ComponentFactory* cf, void* data ) ;
+	void _OperatorFieldVariable_Build( void* fieldVariable, void* data ) ;
+	void _OperatorFieldVariable_Execute( void* variable, void* data ) ;
+	void _OperatorFieldVariable_Destroy( void* variable, void* data ) ;
+	void _OperatorFieldVariable_Initialise( void* variable, void* data ) ;
+
+	InterpolationResult _OperatorFieldVariable_InterpolateValueAt( void* fieldVariable, Coord coord, double* value ) ;
+
+	double _OperatorFieldVariable_GetMinLocalFieldMagnitude( void* fieldVariable ) ;
+	double _OperatorFieldVariable_GetMaxLocalFieldMagnitude( void* fieldVariable ) ;
+	void  _OperatorFieldVariable_GetMinAndMaxLocalCoords( void* fieldVariable, Coord min, Coord max ) ;
+	void  _OperatorFieldVariable_GetMinAndMaxGlobalCoords( void* fieldVariable, Coord min, Coord max ) ;
+
+	InterpolationResult _OperatorFieldVariable_InterpolateValueAt( void* fieldVariable, Coord coord, double* value ) ;
+	
+	InterpolationResult OperatorFieldVariable_UnaryInterpolationFunc( void* fieldVariable, Coord coord, double* value ) ;
+	InterpolationResult OperatorFieldVariable_BinaryInterpolationFunc( void* fieldVariable, Coord coord, double* value ) ;
+
+	void OperatorFieldVariable_UnaryOperator( void* fieldVariable, double* fieldValue0, double* value ) ;
+	void OperatorFieldVariable_BinaryOperator( void* fieldVariable, double* fieldValue0, double* fieldValue1, double* value ) ;
+
+#endif /* __Domain_Utils_OperatorFieldVariable_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/OperatorFieldVariable.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/OperatorFieldVariable.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">OperatorFieldVariable</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">FieldVariable</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">Operator</param>
+		<param name="Type">String</param>
+		<param name="Default">""</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+
+<!-- PLEASE, check line number 299 for a dependency and add its information and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularMeshUtils.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularMeshUtils.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,879 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RegularMeshUtils.c 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "RegularMeshUtils.h"
+
+
+Index RegularMeshUtils_ascendingIJK_ToHughesNodeNumberMap[8] = { 0, 1, 3, 2, 4, 5, 7, 6 };
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Mapping functions
+*/
+
+void RegularMeshUtils_Node_1DTo3D( void* _mesh, unsigned global, unsigned* inds ) {
+	Mesh*	mesh = (Mesh*)_mesh;
+	Grid**	grid;
+
+	assert( mesh );
+	assert( global < Mesh_GetGlobalSize( mesh, MT_VERTEX ) );
+	assert( inds );
+
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+	Grid_Lift( *grid, global, inds );
+}
+
+unsigned RegularMeshUtils_Node_3DTo1D( void* _mesh, unsigned* inds ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid**		grid;
+
+	assert( mesh );
+	assert( inds );
+
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	return Grid_Project( *grid, inds );
+}
+
+void RegularMeshUtils_Element_1DTo3D( void* _mesh, unsigned global, unsigned* inds ) {
+	Mesh*	mesh = (Mesh*)_mesh;
+	Grid**	grid;
+
+	assert( mesh );
+	assert( global < Mesh_GetGlobalSize( mesh, MT_VERTEX ) );
+	assert( inds );
+
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "elementGrid" ) );
+	Grid_Lift( *grid, global, inds );
+}
+
+unsigned RegularMeshUtils_Element_3DTo1D( void* _mesh, unsigned* inds ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid**		grid;
+
+	assert( mesh );
+	assert( inds );
+
+	grid = (Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "elementGrid" ) );
+
+	return Grid_Project( *grid, inds );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Set functions
+*/
+
+IndexSet* RegularMeshUtils_CreateGlobalTopSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == grid->sizes[1] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalLeftSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalRightSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 3 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[2] == grid->sizes[2] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 3 );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[2] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerTopSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == grid->sizes[1] - 1 && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[0] != 0 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[2] != 0 ) && 
+		    (ijk[0] != 0 || ijk[2] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerBottomSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == 0 && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[0] != 0 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[2] != 0 ) && 
+		    (ijk[0] != 0 || ijk[2] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerLeftSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    (ijk[1] != grid->sizes[1] - 1 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[1] != 0 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[1] != grid->sizes[1] - 1 || ijk[2] != 0 ) && 
+		    (ijk[1] != 0 || ijk[2] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerRightSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 && 
+		    (ijk[1] != grid->sizes[1] - 1 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[1] != 0 || ijk[2] != grid->sizes[2] - 1 ) && 
+		    (ijk[1] != grid->sizes[1] - 1 || ijk[2] != 0 ) && 
+		    (ijk[1] != 0 || ijk[2] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[2] - 1 && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[1] != grid->sizes[1] - 1 ) && 
+		    (ijk[0] != 0 || ijk[1] != grid->sizes[1] - 1 ) && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[1] != 0 ) && 
+		    (ijk[0] != 0 || ijk[1] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[1] != grid->sizes[1] - 1 ) && 
+		    (ijk[0] != 0 || ijk[1] != grid->sizes[1] - 1 ) && 
+		    (ijk[0] != grid->sizes[0] - 1 || ijk[1] != 0 ) && 
+		    (ijk[0] != 0 || ijk[1] != 0 ) )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomLeftFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    ijk[1] == 0 && 
+		    ijk[2] == grid->sizes[2] - 1 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomRightFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 && 
+		    ijk[1] == 0 && 
+		    ijk[2] == grid->sizes[2] - 1 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalTopLeftFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    ijk[1] == grid->sizes[1] - 1 && 
+		    ijk[2] == grid->sizes[2] - 1 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalTopRightFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 && 
+		    ijk[1] == grid->sizes[1] - 1 && 
+		    ijk[2] == grid->sizes[2] - 1 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomLeftBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    ijk[1] == 0 && 
+		    ijk[2] == 0 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomRightBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 && 
+		    ijk[1] == 0 && 
+		    ijk[2] == 0 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalTopLeftBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 && 
+		    ijk[1] == grid->sizes[1] - 1 && 
+		    ijk[2] == 0 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalTopRightBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 && 
+		    ijk[1] == grid->sizes[1] - 1 && 
+		    ijk[2] == 0 )
+		{
+			IndexSet_Add( set, n_i );
+		}
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalTopSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == grid->sizes[1] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalBottomSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 2 );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[1] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalLeftSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalRightSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[0] == grid->sizes[0] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalFrontSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	Grid*		grid;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 3 );
+
+	grid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+					      ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[2] == grid->sizes[2] - 1 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalBackSet( void* _mesh ) {
+	Mesh*		mesh = (Mesh*)_mesh;
+	unsigned	nNodes;
+	IndexSet*	set;
+	IJK		ijk;
+	unsigned	n_i;
+
+	assert( mesh );
+	assert( Mesh_GetDimSize( mesh ) >= 3 );
+
+	nNodes = Mesh_GetLocalSize( mesh, MT_VERTEX );
+	set = IndexSet_New( nNodes );
+
+	for( n_i = 0; n_i < nNodes; n_i++ ) {
+		RegularMeshUtils_Node_1DTo3D( mesh, Mesh_DomainToGlobal( mesh, MT_VERTEX, n_i ), ijk );
+		if( ijk[2] == 0 )
+			IndexSet_Add( set, n_i );
+	}
+
+	return set;
+}
+
+Node_DomainIndex RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex( void* _mesh, 
+									 Element_DomainIndex refElement_dI, 
+									 Node_DomainIndex refNode_dI )
+{
+	Mesh*              mesh = (Mesh*)_mesh;
+	const Node_Index   oppositeNodesMap2D[] = { 3, 2, 1, 0 };
+	Node_Index         oppositeNodesMap3D[] = { 7, 6, 5, 4, 3, 2, 1, 0 };
+	Node_DomainIndex*  currElementNodes = NULL;
+	Node_Index         currElementNodeCount = 0;
+	Node_Index         refNode_eI = 0;
+	Node_DomainIndex   oppositeNode_dI = 0;
+	Node_Index         oppositeNode_eI = 0;
+	Stream*            errorStrm = Journal_Register( Error_Type, "RegularMeshUtils" );
+	IArray*		   inc;
+
+	Journal_Firewall( Mesh_GetElementType( mesh, refElement_dI )->type == Mesh_HexType_Type, errorStrm, 
+			  "Error (%s:%s:%d):\n\tIncorrect element type (%s); require %s.\n", 
+			  __func__, __FILE__, __LINE__, Mesh_GetElementType( mesh, refElement_dI )->type, 
+			  Mesh_HexType_Type );
+
+#if 0
+	Journal_Firewall( CornerNL_Type == mesh->layout->nodeLayout->type , errorStr,
+		"Error- in %s: Given mesh has node layout of type \"%s\", different to "
+		"required type \"%s\".\n", __func__, mesh->layout->nodeLayout->type, CornerNL_Type );
+#endif
+
+	inc = IArray_New();
+	Mesh_GetIncidence( mesh, Mesh_GetDimSize( mesh ), refElement_dI, MT_VERTEX, 
+			   inc );
+	currElementNodeCount = IArray_GetSize( inc );
+	currElementNodes = IArray_GetPtr( inc );
+
+	/* Find index of reference node within reference element */
+	for( refNode_eI = 0; refNode_eI < currElementNodeCount; refNode_eI++ ) {
+		if ( refNode_dI == currElementNodes[refNode_eI] )
+			break;
+	}
+	Journal_Firewall( refNode_eI < currElementNodeCount, errorStrm,
+		"Error - in %s(): Reference node %d (domain) not found within reference element %d (domain).\n",
+		__func__, refNode_dI, refElement_dI );
+
+	/* Use mapping table to get diagonally opposite node, then convert back to domain index */
+	
+	if ( Mesh_GetDimSize( mesh ) == 2 ) {
+		oppositeNode_eI = oppositeNodesMap2D[refNode_eI];
+	}
+	else {
+		oppositeNode_eI = oppositeNodesMap3D[refNode_eI];
+	}
+
+	oppositeNode_dI = currElementNodes[oppositeNode_eI];
+	NewClass_Delete( inc );
+	return oppositeNode_dI;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularMeshUtils.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularMeshUtils.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,144 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Utilities to get the sides of a regular mesh etc.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: RegularMeshUtils.h 4081 2007-04-27 06:20:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_RegularMeshUtils_h__
+#define __Domain_Utils_RegularMeshUtils_h__
+
+	extern Index RegularMeshUtils_ascendingIJK_ToHughesNodeNumberMap[8];
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Mapping functions
+	*/
+
+	void RegularMeshUtils_Node_1DTo3D( void* mesh, unsigned global, unsigned* inds );
+	unsigned RegularMeshUtils_Node_3DTo1D( void* mesh, unsigned* inds );
+
+	void RegularMeshUtils_Element_1DTo3D( void* mesh, unsigned global, unsigned* inds );
+	unsigned RegularMeshUtils_Element_3DTo1D( void* mesh, unsigned* inds );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Set functions
+	*/
+	
+	/** Create a new set, based on node indices, of nodes on the top of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalTopSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the bottom of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalBottomSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the left of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalLeftSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the right of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalRightSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the front of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalFrontSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the back of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalBackSet( void* _mesh );
+
+
+	/** Create a new set, based on node indices, of nodes on the top without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerTopSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the bottom without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerBottomSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the left without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerLeftSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the right without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerRightSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the front without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerFrontSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the back without the corners of the global regular mesh */
+	IndexSet* RegularMeshUtils_CreateGlobalInnerBackSet( void* _mesh );
+	
+
+	/** Create a new set, based on node indices, of the node on the bottom front lefthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalBottomLeftFrontSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the bottom front righthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalBottomRightFrontSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the top front lefthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalTopLeftFrontSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the top front righthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalTopRightFrontSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the bottom back lefthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalBottomLeftBackSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the bottom back righthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalBottomRightBackSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the top back lefthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalTopLeftBackSet( void* _mesh );
+
+	/** Create a new set, based on node indices, of the node on the top back righthand corner */
+	IndexSet* RegularMeshUtils_CreateGlobalTopRightBackSet( void* _mesh );
+
+
+	/** Create a new set, based on node indices, of nodes on the top of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalTopSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the bottom of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalBottomSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the left of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalLeftSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the right of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalRightSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the front of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalFrontSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the back of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalInGlobalBackSet( void* _mesh );
+
+	Node_DomainIndex RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex( void* _mesh, 
+										 Element_DomainIndex refElement_dI, 
+										 Node_DomainIndex refNode_dI );
+
+#endif /* __Domain_Utils_RegularMeshUtils_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,313 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RegularRemesher.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "NewRemesher.h"
+#include "RegularRemesher.h"
+#include "StGermain/Base/Foundation/ClassDef.h"
+
+
+void _RegularRemesher_Init( void* _self ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+
+   _NewRemesher_Init( self );
+   self->remeshDims = ISet_New();
+   self->staticWalls = Class_Array( self, ISet*, 2 );
+   self->staticWalls[0] = ISet_New();
+   self->staticWalls[1] = ISet_New();
+   ISet_SetMaxSize( self->remeshDims, 10 );
+   ISet_SetMaxSize( self->staticWalls[0], 10 );
+   ISet_SetMaxSize( self->staticWalls[1], 10 );
+   self->syncs = NULL;
+   self->crds = NULL;
+   self->nWallVerts = NULL;
+   self->wallVerts = NULL;
+   self->wallCrds = NULL;
+}
+
+void _RegularRemesher_Copy( void* _self, const void* _op ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+   const RegularRemesher* op = Class_Cast( _op, RegularRemesher );
+
+   _NewRemesher_Copy( self, op );
+   /* TODO */
+}
+
+void _RegularRemesher_Destruct( void* _self ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+   int nDims;
+   int d_i;
+
+   if( self->syncs ) {
+      nDims = self->nDims;
+      for( d_i = 0; d_i < nDims; d_i++ ) {
+   	 NewClass_RemoveRef( self->syncs[d_i] );
+	 Class_Free( self, self->crds[d_i] );
+	 Class_Free( self, self->nWallVerts[d_i] );
+	 Class_Free( self, self->wallVerts[d_i][0] );
+	 Class_Free( self, self->wallVerts[d_i][1] );
+	 Class_Free( self, self->wallVerts[d_i] );
+	 Class_Free( self, self->wallCrds[d_i][0] );
+	 Class_Free( self, self->wallCrds[d_i][1] );
+	 Class_Free( self, self->wallCrds[d_i] );
+      }
+      Class_Free( self, self->syncs );
+      Class_Free( self, self->crds );
+      Class_Free( self, self->nWallVerts );
+      Class_Free( self, self->wallVerts );
+      Class_Free( self, self->wallCrds );
+   }
+   NewClass_Delete( self->remeshDims );
+   NewClass_Delete( self->staticWalls[0] );
+   NewClass_Delete( self->staticWalls[1] );
+   Class_Free( self, self->staticWalls );
+   _NewClass_Destruct( self );
+}
+
+void _RegularRemesher_Print( const void* _self, Stream* stream ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+
+   _NewRemesher_Print( self, stream );
+}
+
+void _RegularRemesher_Remesh( void* _self ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+   Mesh* mesh;
+   Grid *vGrid;
+   Sync* meshSync;
+   int nDims, nVerts;
+   int center, ind, *inds;
+   double leftCrd, rightCrd;
+   int d_i, v_i, w_i;
+
+   assert( self->mesh );
+
+   mesh = self->mesh;
+   meshSync = Mesh_GetSync( mesh, 0 );
+   nDims = Mesh_GetDimSize( mesh );
+   nVerts = Mesh_GetLocalSize( mesh, 0 );
+   vGrid = *Mesh_GetExtension( mesh, Grid**, "vertexGrid" );
+   inds = Class_Array( self, int, nDims );
+
+   for( d_i = 0; d_i < nDims; d_i++ ) {
+      for( w_i = 0; w_i < 2; w_i++ ) {
+	 if( !ISet_Has( self->staticWalls[w_i], d_i ) )
+	    continue;
+	 for( v_i = 0; v_i < self->nWallVerts[d_i][w_i]; v_i++ ) {
+	    mesh->verts[self->wallVerts[d_i][w_i][v_i]][d_i] = 
+	       self->wallCrds[d_i][w_i][v_i];
+	 }
+      }
+   }
+
+   for( d_i = 0; d_i < nDims; d_i++ ) {
+      if( !ISet_Has( self->remeshDims, d_i ) )
+	 continue;
+
+      Sync_SyncArray( self->syncs[d_i], 
+		      mesh->verts[0] + d_i, nDims * sizeof(double), 
+		      self->crds[d_i], sizeof(double), 
+		      sizeof(double) );
+
+      for( v_i = 0; v_i < nVerts; v_i++ ) {
+	 ind = Sync_DomainToGlobal( meshSync, v_i );
+	 Grid_Lift( vGrid, ind, (unsigned*)inds );
+	 center = inds[d_i];
+	 if( center == 0 || center == vGrid->sizes[d_i] - 1 )
+	    continue;
+
+	 inds[d_i] = 0;
+	 ind = Grid_Project( vGrid, (unsigned*)inds );
+	 ind = Sync_GlobalToDomain( self->syncs[d_i], ind );
+	 if( ind >= nVerts )
+	    leftCrd = self->crds[d_i][ind - nVerts];
+	 else
+	    leftCrd = Mesh_GetVertex( mesh, ind)[d_i];
+
+	 inds[d_i] = vGrid->sizes[d_i] - 1;
+	 ind = Grid_Project( vGrid, (unsigned*)inds );
+	 ind = Sync_GlobalToDomain( self->syncs[d_i], ind );
+	 if( ind >= nVerts )
+	    rightCrd = self->crds[d_i][ind - nVerts];
+	 else
+	    rightCrd = Mesh_GetVertex( mesh, ind)[d_i];
+
+	 mesh->verts[v_i][d_i] = leftCrd + 
+	    (double)center * (rightCrd - leftCrd) / 
+	    (double)(vGrid->sizes[d_i] - 1);
+      }
+   }
+
+   Class_Free( self, inds );
+   Mesh_Sync( mesh );
+   Mesh_DeformationUpdate( mesh );
+}
+
+void RegularRemesher_Build( void* _self ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+   Mesh* mesh;
+   Sync* meshSync;
+   const Decomp* meshDecomp;
+   ISet* wallSet;
+   Grid* vGrid;
+   int *inds, ind;
+   int nDims, nVerts;
+   int nRems, *rems;
+   int d_i, w_i, v_i;
+
+   mesh = self->mesh;
+   Stg_Component_Build( mesh, NULL, False );
+   meshSync = Mesh_GetSync( mesh, 0 );
+   meshDecomp = Sync_GetDecomp( meshSync );
+   vGrid = *Mesh_GetExtension( mesh, Grid**, "vertexGrid" );
+   nDims = Mesh_GetDimSize( mesh );
+   self->nDims = nDims;
+   nVerts = Mesh_GetLocalSize( mesh, 0 );
+   inds = Class_Array( self, int, nDims );
+
+   if( !self->syncs ) {
+      self->syncs = Class_Array( self, Sync*, nDims );
+      self->crds = Class_Array( self, double*, nDims );
+      self->nWallVerts = Class_Array( self, int*, nDims );
+      self->wallVerts = Class_Array( self, int**, nDims );
+      self->wallCrds = Class_Array( self, double**, nDims );
+      for( d_i = 0; d_i < nDims; d_i++ ) {
+	 self->nWallVerts[d_i] = Class_Array( self, int, 2 );
+	 self->wallVerts[d_i] = Class_Array( self, int*, 2 );
+	 self->wallCrds[d_i] = Class_Array( self, double*, 2 );
+	 memset( self->nWallVerts[d_i], 0, 2 * sizeof(int) );
+	 memset( self->wallVerts[d_i], 0, 2 * sizeof(int*) );
+	 memset( self->wallCrds[d_i], 0, 2 * sizeof(double*) );
+      }
+      memset( self->syncs, 0, nDims * sizeof(Sync*) );
+      memset( self->crds, 0, nDims * sizeof(double*) );
+   }
+
+   wallSet = ISet_New();
+   ISet_SetMaxSize( wallSet, nVerts );
+   for( d_i = 0; d_i < nDims; d_i++ ) {
+      for( w_i = 0; w_i < 2; w_i++ ) {
+	 Class_Free( self, self->wallVerts[d_i][w_i] );
+	 Class_Free( self, self->wallCrds[d_i][w_i] );
+	 if( !ISet_Has( self->staticWalls[w_i], d_i ) ) {
+	    self->nWallVerts[d_i][w_i] = 0;
+	    self->wallVerts[d_i][w_i] = NULL;
+	    self->wallCrds[d_i][w_i] = NULL;
+	    continue;
+	 }
+
+	 for( v_i = 0; v_i < nVerts; v_i++ ) {
+	    ind = Sync_DomainToGlobal( meshSync, v_i );
+	    Grid_Lift( vGrid, ind, (unsigned*)inds );
+	    if( (w_i == 0 && inds[d_i] == 0) || 
+		(w_i == 1 && inds[d_i] == vGrid->sizes[d_i] - 1) )
+	    {
+	       ISet_Insert( wallSet, v_i );
+	    }
+	 }
+
+	 self->nWallVerts[d_i][w_i] = ISet_GetSize( wallSet );
+	 self->wallVerts[d_i][w_i] = Class_Array( 
+	    self, int, self->nWallVerts[d_i][w_i] );
+	 self->wallCrds[d_i][w_i] = Class_Array( 
+	    self, double, self->nWallVerts[d_i][w_i] );
+	 ISet_GetArray( wallSet, self->wallVerts[d_i][w_i] );
+	 ISet_Clear( wallSet );
+	 for( v_i = 0; v_i < self->nWallVerts[d_i][w_i]; v_i++ ) {
+	    self->wallCrds[d_i][w_i][v_i] = 
+	       mesh->verts[self->wallVerts[d_i][w_i][v_i]][d_i];
+	 }
+      }
+   }
+
+   for( d_i = 0; d_i < nDims; d_i++ ) {
+      NewClass_RemoveRef( self->syncs[d_i] );
+      Class_Free( self, self->crds[d_i] );
+      if( !ISet_Has( self->remeshDims, d_i ) ) {
+	 self->syncs[d_i] = NULL;
+	 self->crds[d_i] = NULL;
+	 continue;
+      }
+
+      for( v_i = 0; v_i < nVerts; v_i++ ) {
+	 ind = Sync_DomainToGlobal( meshSync, v_i );
+	 Grid_Lift( vGrid, ind, (unsigned*)inds );
+	 inds[d_i] = 0;
+	 ind = Grid_Project( vGrid, (unsigned*)inds );
+	 if( !Sync_TryGlobalToDomain( meshSync, ind, &ind ) )
+	    ISet_TryInsert( wallSet, ind );
+
+	 inds[d_i] = vGrid->sizes[d_i] - 1;
+	 ind = Grid_Project( vGrid, (unsigned*)inds );
+	 if( !Sync_TryGlobalToDomain( meshSync, ind, &ind ) )
+	    ISet_TryInsert( wallSet, ind );
+      }
+
+      nRems = ISet_GetSize( wallSet );
+      rems = Class_Array( self, int, nRems );
+      ISet_GetArray( wallSet, rems );
+      ISet_Clear( wallSet );
+      self->syncs[d_i] = Sync_New();
+      NewClass_AddRef( self->syncs[d_i] );
+      Sync_SetDecomp( self->syncs[d_i], meshDecomp );
+      Sync_FindRemotes( self->syncs[d_i], nRems, rems );
+      Class_Free( self, rems );
+      self->crds[d_i] = Class_Array( self, double, nRems );
+   }
+
+   Class_Free( self, inds );
+   NewClass_Delete( wallSet );
+}
+
+void RegularRemesher_SetRemeshState( void* _self, int dim, Bool state ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+
+   if( state )
+      ISet_TryInsert( self->remeshDims, dim );
+   else if( ISet_Has( self->remeshDims, dim ) )
+      ISet_Remove( self->remeshDims, dim );
+}
+
+void RegularRemesher_SetStaticWall( void* _self, int dim, int wall, Bool state ) {
+   RegularRemesher* self = Class_Cast( _self, RegularRemesher );
+
+   if( state )
+      ISet_TryInsert( self->staticWalls[wall], dim );
+   else if( ISet_Has( self->staticWalls[wall], dim ) )
+      ISet_Remove( self->staticWalls[wall], dim );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesher.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesher.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,108 @@
+/* Inherit from a parent class and clear any pre-existing 
+   class definitions. */
+#include INHERIT( StgDomain/Utils/NewRemesher )
+#include "StGermain/Base/Foundation/ClassClear.h"
+
+
+/*
+** Class parameter declarations. Here we need to define:
+**   CLASSDIR and
+**   CLASSNAME.
+**
+** We can optionally define:
+**   PREFIX, 
+**   PARENTDIR and
+**   PARENT.
+*/
+
+#define PARENTDIR StgDomain/Utils
+#define PARENT Remesher
+#define CLASSDIR StgDomain/Utils
+#define CLASSNAME RegularRemesher
+
+/* Do standard class initialisation. */
+#include "StGermain/Base/Foundation/ClassSetup.h"
+
+
+/*
+** Declare all class members using the MEMBER command.  Accepted
+** parameters are:
+**   ( <type>, <name> )
+*/
+
+MEMBER( int, nDims )
+MEMBER( ISet*, remeshDims )
+MEMBER( ISet**, staticWalls )
+MEMBER( Sync**, syncs )
+MEMBER( double**, crds )
+MEMBER( int**, nWallVerts )
+MEMBER( int***, wallVerts )
+MEMBER( double***, wallCrds )
+
+
+/*
+** Declare all virtual, abstract and overridden methods.
+**
+** Available method types are:
+**   VIRTUALMETHOD, 
+**   VOIDVIRTUALMETHOD, 
+**   ABSTRACTMETHOD, 
+**   VOIDABSTRACTMETHOD, 
+**   OVERRIDE and
+**   VOIDOVERRIDE.
+**
+** All method types accept the following parameters:
+**   ( <name>, 
+**     <return type>, 
+**     <arg definitions>, 
+**     <arg names> )
+**
+** where:
+**   <name> is the method name, 
+**   <return type> is the type to be returned by the method, 
+**   <arg definitions> is a parenthesised list of method arguments and 
+**   <arg names> is a parenthesised list of method argument names.
+**
+** Note that any virtual, abstract or overridden method that returns
+** void must be declared as VOIDVIRTUALMETHOD, VOIDABSTRACTMETHOD or
+** VOIDOVERRIDE.
+*/
+
+VOIDOVERRIDE( Init, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Copy, void, 
+	      (void* self, const void* op), 
+	      (self, op) )
+
+VOIDOVERRIDE( Destruct, void, 
+	      (void* self), 
+	      (self) )
+
+VOIDOVERRIDE( Print, void, 
+	      (const void* self, Stream* stream), 
+	      (self, stream) )
+
+VOIDOVERRIDE( Remesh, void, 
+	      (void* self), 
+	      (self) )
+
+
+/*
+** Declare all local methods using the METHOD command.  Local method 
+** declarations accept the same parameters as virtual methods, however 
+** there are no separate declarations required for void return types.
+*/
+
+METHOD( Build, void, 
+	(void* self), 
+	(self) )
+
+METHOD( SetRemeshState, void, 
+	(void* self, int dim, Bool state), 
+	(self, dim, state) )
+
+METHOD( SetStaticWall, void, 
+	(void* self, int dim, int wall, Bool state), 
+	(self, dim, int wall, state) )
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesher.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesher.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+ ** <b>Role:</b>
+ **	Abstract class faciliting how class inheritance is done.
+ **
+ ** <b>Assumptions:</b>
+ **	None
+ **
+ ** <b>Comments:</b>
+ **	None
+ **
+ ** $Id: RegularRemesher.h 3904 2006-12-14 00:52:06Z LukeHodkinson $
+ **
+ **/
+ 
+#ifndef __StGermain_Domain_Utils_RegularRemesher_h__
+#define __StGermain_Domain_Utils_RegularRemesher_h__
+
+#include "StGermain/Base/Foundation/ClassClear.h"
+#define CLASSDIR StgDomain/Utils
+#define CLASSNAME RegularRemesher
+#include "StGermain/Base/Foundation/ClassHdr.h"
+
+#endif /* __StGermain_Domain_Utils_RegularRemesher_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesherCmpt.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesherCmpt.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,257 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: RegularRemesherCmpt.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Remesher.h"
+#include "NewRemesher.h"
+#include "RegularRemesher.h"
+#include "RegularRemesherCmpt.h"
+
+
+/* Textual name of this class */
+const Type RegularRemesherCmpt_Type = "RegularRemesherCmpt";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+#define REMESHER_DEFARGS				\
+	sizeof(RegularRemesherCmpt),				\
+	RegularRemesherCmpt_Type,				\
+	_RegularRemesherCmpt_Delete,				\
+	_RegularRemesherCmpt_Print,				\
+	NULL,						\
+	(void*(*)(Name))_RegularRemesherCmpt_DefaultNew,	\
+	_RegularRemesherCmpt_Construct,			\
+	_RegularRemesherCmpt_Build,				\
+	_RegularRemesherCmpt_Initialise,			\
+	_RegularRemesherCmpt_Execute,				\
+	_RegularRemesherCmpt_Destroy,				\
+	name,						\
+		False, 				\
+		NULL
+
+
+RegularRemesherCmpt* RegularRemesherCmpt_New( Name name ) {
+	return _RegularRemesherCmpt_New( REMESHER_DEFARGS );
+}
+
+
+RegularRemesherCmpt* _RegularRemesherCmpt_New( CLASS_ARGS, 
+					       COMPONENT_ARGS, 
+					       REMESHER_ARGS )
+{
+	RegularRemesherCmpt*	self;
+
+	/* Allocate memory. */
+	self = (RegularRemesherCmpt*)_Remesher_New( _sizeOfSelf,
+					    type,
+					    _delete,
+					    _print, 
+					    _copy, 
+					    _defaultConstructor, 
+					    _construct, 
+					    _build, 
+					    _initialise, 
+					    _execute, 
+					    _destroy, 
+					    name, 
+							 initFlag, 
+							 NULL );
+
+	/* RegularRemesherCmpt info */
+	if( initFlag ) {
+		_RegularRemesherCmpt_Init( self );
+	}
+
+	return self;
+}
+
+
+void RegularRemesherCmpt_Init( RegularRemesherCmpt* self ) {
+	assert( 0 ); /* TODO */
+#if 0
+	/* General info */
+	self->type = RegularRemesherCmpt_Type;
+	self->_sizeOfSelf = sizeof(RegularRemesherCmpt);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _RegularRemesherCmpt_Delete;
+	self->_print = _RegularRemesherCmpt_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* RegularRemesherCmpt info */
+	_RegularRemesherCmpt_Init( self );
+#endif
+}
+
+
+void _RegularRemesherCmpt_Init( RegularRemesherCmpt* self ) {
+	/* RegularRemesherCmpt info */
+	self->regRemesh = RegularRemesher_New();
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _RegularRemesherCmpt_Delete( void* remesher ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+
+	/* Delete the class itself */
+	NewClass_Delete( self->regRemesh );
+
+	/* Delete parent */
+	_Stg_Component_Delete( remesher );
+}
+
+
+void _RegularRemesherCmpt_Print( void* remesher, Stream* stream ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+	Stream*		myStream;
+	
+	/* Set the Journal for printing informations */
+	myStream = Journal_Register( InfoStream_Type, "RegularRemesherCmptStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+
+	/* General info */
+	Journal_Printf( myStream, "RegularRemesherCmpt (ptr): (%p)\n", self );
+
+	/* Virtual info */
+
+	/* RegularRemesherCmpt info */
+}
+
+
+RegularRemesherCmpt* _RegularRemesherCmpt_DefaultNew( Name name ) {
+	return _RegularRemesherCmpt_New( REMESHER_DEFARGS );
+}
+
+
+void _RegularRemesherCmpt_Construct( void* remesher, Stg_ComponentFactory* cf, void* data ) {
+	RegularRemesherCmpt* self = (RegularRemesherCmpt*)remesher;
+	Dictionary* dict;
+	Dictionary_Entry_Value* list;
+	Mesh* mesh;
+	int nItms, dim, wall;
+	int i_i;
+
+	assert( self );
+	assert( cf );
+
+	_RegularRemesherCmpt_Init( self );
+
+	mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, True, data );
+	NewRemesher_SetMesh( self->regRemesh, mesh );
+
+	dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+	list = Dictionary_Get( dict, "remeshDims" );
+	if( list ) {
+		nItms = Dictionary_Entry_Value_GetCount( list );
+		for( i_i = 0; i_i < nItms; i_i++ ) {
+			dim = Dictionary_Entry_Value_AsInt( 
+				Dictionary_Entry_Value_GetElement( list, i_i ) );
+			RegularRemesher_SetRemeshState( self->regRemesh, dim, True );
+		}
+	}
+
+	list = Dictionary_Get( dict, "staticWalls" );
+	if( list ) {
+		nItms = Dictionary_Entry_Value_GetCount( list );
+		assert( nItms % 2 == 0 );
+		for( i_i = 0; i_i < nItms; i_i += 2 ) {
+			dim = Dictionary_Entry_Value_AsInt( 
+				Dictionary_Entry_Value_GetElement( list, i_i ) );
+			wall = Dictionary_Entry_Value_AsInt( 
+				Dictionary_Entry_Value_GetElement( list, i_i + 1 ) );
+			RegularRemesher_SetStaticWall( self->regRemesh, dim, wall, True );
+		}
+	}
+}
+
+
+void _RegularRemesherCmpt_Build( void* remesher, void* data ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+
+	assert( self );
+
+	RegularRemesher_Build( self->regRemesh );
+}
+
+
+void _RegularRemesherCmpt_Initialise( void* remesher, void* data ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+
+	assert( self );
+}
+
+
+void _RegularRemesherCmpt_Execute( void* remesher, void* data ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+
+	assert( self );
+
+	RegularRemesher_Remesh( self->regRemesh );
+}
+
+
+void _RegularRemesherCmpt_Destroy( void* remesher, void* data ) {
+	RegularRemesherCmpt*	self = (RegularRemesherCmpt*)remesher;
+
+	assert( self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesherCmpt.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesherCmpt.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,103 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: RegularRemesherCmpt.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Utils_RegularRemesherCmpt_h__
+#define __StGermain_Domain_Utils_RegularRemesherCmpt_h__
+
+	/* Textual name of this class. */
+	extern const Type RegularRemesherCmpt_Type;
+
+	/* Virtual function types. */
+
+	/* Class contents. */
+	#define __RegularRemesherCmpt			\
+		/* General info */			\
+		__Remesher				\
+							\
+		/* Virtual info */			\
+							\
+		/* RegularRemesherCmpt info ... */	\
+		RegularRemesher*	regRemesh;
+
+	struct RegularRemesherCmpt { __RegularRemesherCmpt };
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create a RegularRemesherCmpt */
+	RegularRemesherCmpt* RegularRemesherCmpt_New( Name name );
+
+	/* Creation implementation */
+	RegularRemesherCmpt* _RegularRemesherCmpt_New( CLASS_ARGS, 
+						       COMPONENT_ARGS, 
+						       REMESHER_ARGS );
+	/* Initialise a RegularRemesherCmpt */
+	void RegularRemesherCmpt_Init( RegularRemesherCmpt* self );
+
+	/* Initialisation implementation functions */
+	void _RegularRemesherCmpt_Init( RegularRemesherCmpt* self );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _RegularRemesherCmpt_Delete( void* remesher );
+	void _RegularRemesherCmpt_Print( void* remesher, Stream* stream );
+	RegularRemesherCmpt* _RegularRemesherCmpt_DefaultNew( Name name );
+	void _RegularRemesherCmpt_Construct( void* remesher, Stg_ComponentFactory* cf, void* data );
+	void _RegularRemesherCmpt_Build( void* remesher, void* data );
+	void _RegularRemesherCmpt_Initialise( void* remesher, void* data );
+	void _RegularRemesherCmpt_Execute( void* remesher, void* data );
+	void _RegularRemesherCmpt_Destroy( void* remesher, void* data );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/RegularRemesherCmpt.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/RegularRemesherCmpt.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">RegularRemesherCmpt</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StgFEM</param>
+<param name="Location">./StgFEM/SLE/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgfem/WebHome</param>
+<param name="Copyright">Copyright (C) 2004-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Remesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Remesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,221 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Remesher.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Remesher.h"
+
+
+/* Textual name of this class */
+const Type Remesher_Type = "Remesher";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+#define REMESH_DEFARGS				\
+	sizeof(Remesher),			\
+	Remesher_Type,				\
+	_Remesher_Delete,			\
+	_Remesher_Print,			\
+	NULL,					\
+	(void*(*)(Name))_Remesher_DefaultNew,	\
+	_Remesher_Construct,			\
+	_Remesher_Build,			\
+	_Remesher_Initialise,			\
+	_Remesher_Execute,			\
+	_Remesher_Destroy,			\
+	name,					\
+	False,					\
+	NULL
+
+
+Remesher* _Remesher_New( CLASS_ARGS, 
+			 COMPONENT_ARGS, 
+			 REMESHER_ARGS )
+{
+	Remesher*	self;
+
+	/* Allocate memory. */
+	self = (Remesher*)_Stg_Component_New( _sizeOfSelf,
+					    type,
+					    _delete,
+					    _print, 
+					    _copy, 
+					    _defaultConstructor, 
+					    _construct, 
+					    _build, 
+					    _initialise, 
+					    _execute, 
+					    _destroy, 
+					    name, 
+					    initFlag );
+
+	/* Virtual functions. */
+	self->setMeshFunc = setMeshFunc;
+
+	/* Remesher info */
+	if( initFlag ) {
+		_Remesher_Init( self );
+	}
+
+	return self;
+}
+
+
+void _Remesher_Init( Remesher* self ) {
+	/* Remesher info */
+	memset( &self->meshType, 
+		0, 
+		(size_t)&self->comm - (size_t)&self->meshType + sizeof(MPI_Comm) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Remesher_Delete( void* remesher ) {
+	Remesher*	self = (Remesher*)remesher;
+
+	/* Delete the class itself */
+
+	/* Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Remesher_Print( void* remesher, Stream* stream ) {
+	Remesher*	self = (Remesher*)remesher;
+	Stream*		myStream;
+	
+	/* Set the Journal for printing informations */
+	myStream = Journal_Register( InfoStream_Type, "RemesherStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+
+	/* General info */
+	Journal_Printf( myStream, "Remesher (ptr): (%p)\n", self );
+
+	/* Virtual info */
+
+	/* Remesher info */
+}
+
+
+Remesher* _Remesher_DefaultNew( Name name ) {
+	return _Remesher_New( REMESH_DEFARGS );
+}
+
+
+void _Remesher_Construct( void* remesher, Stg_ComponentFactory* cf, void* data ) {
+	Remesher*	self = (Remesher*)remesher;
+	char*		meshName;
+
+	assert( self );
+	assert( cf );
+	assert( cf->componentDict );
+
+	meshName = Stg_ComponentFactory_GetString( cf, self->name, "mesh", "" );
+	if( !strcmp( meshName, "" ) ) {
+		return;
+	}
+
+	self->mesh = Stg_ComponentFactory_ConstructByName( cf, meshName, Mesh, True, data );
+	self->meshType = Stg_ComponentFactory_GetString( cf, self->name, "meshType", "unknown" );
+	if( !strcmp( self->meshType, "unknown" ) ) {
+		fprintf( stderr, "Remesher: Unknown mesh type.\n" );
+		assert( 0 );
+	}
+}
+
+
+void _Remesher_Build( void* remesher, void* data ) {
+	Remesher*	self = (Remesher*)remesher;
+
+	assert( self );
+
+	if( !self->meshType ) {
+		return;
+	}
+
+	assert( self->mesh );
+
+	/* Build the mesh. */
+	Stg_Component_Build( self->mesh, NULL, False );
+	Remesher_SetMesh( self, self->mesh );
+}
+
+
+void _Remesher_Initialise( void* remesher, void* data ) {
+	Remesher*	self = (Remesher*)remesher;
+
+	assert( self );
+}
+
+
+void _Remesher_Execute( void* remesher, void* data ) {
+	Remesher*	self = (Remesher*)remesher;
+
+	assert( self );
+	assert( self->mesh );
+}
+
+
+void _Remesher_Destroy( void* remesher, void* data ) {
+	Remesher*	self = (Remesher*)remesher;
+
+	assert( self );
+
+	/* TODO: If delete deletes, what does destroy do? */
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Remesher.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Remesher.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,126 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Remesher.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Utils_Remesher_h__
+#define __StGermain_Domain_Utils_Remesher_h__
+
+	/* Textual name of this class. */
+	extern const Type Remesher_Type;
+
+	/* Virtual function types. */
+	typedef void (Remesher_SetMeshFunc)( void* remesher, Mesh* mesh );
+
+	/* Class contents. */
+	#define __Remesher					\
+		/* General info */				\
+		__Stg_Component					\
+								\
+		/* Virtual info */				\
+		Remesher_SetMeshFunc*	setMeshFunc;		\
+								\
+		/* Remesher info ... */				\
+		char*			meshType;		\
+		Mesh*			mesh;			\
+		MPI_Comm		comm;
+
+	struct Remesher { __Remesher };
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define CLASS_ARGS					\
+		SizeT				_sizeOfSelf,	\
+		Type				type,		\
+		Stg_Class_DeleteFunction*	_delete,	\
+		Stg_Class_PrintFunction*	_print, 	\
+		Stg_Class_CopyFunction*		_copy
+
+	#define COMPONENT_ARGS								\
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,	\
+		Stg_Component_ConstructFunction*		_construct, 		\
+		Stg_Component_BuildFunction*			_build, 		\
+		Stg_Component_InitialiseFunction*		_initialise, 		\
+		Stg_Component_ExecuteFunction*			_execute, 		\
+		Stg_Component_DestroyFunction*			_destroy, 		\
+		Name						name, 			\
+		Bool						initFlag
+
+	#define REMESHER_ARGS				\
+		Remesher_SetMeshFunc*	setMeshFunc
+
+
+	/* Creation implementation */
+	Remesher* _Remesher_New( CLASS_ARGS, 
+				 COMPONENT_ARGS, 
+				 REMESHER_ARGS );
+
+	/* Initialisation implementation functions */
+	void _Remesher_Init( Remesher* self );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Remesher_Delete( void* remesher );
+	void _Remesher_Print( void* remesher, Stream* stream );
+	Remesher* _Remesher_DefaultNew( Name name );
+	void _Remesher_Construct( void* remesher, Stg_ComponentFactory* cf, void* data );
+	void _Remesher_Build( void* remesher, void* data );
+	void _Remesher_Initialise( void* remesher, void* data );
+	void _Remesher_Execute( void* remesher, void* data );
+	void _Remesher_Destroy( void* remesher, void* data );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	#define Remesher_SetMesh( self, mesh )		\
+		(self)->setMeshFunc( self, mesh )
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Remesher.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Remesher.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Remesher</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web"></param>
+<param name="Copyright">Copyright (C) 2004-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SemiRegDeform.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SemiRegDeform.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,472 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SemiRegDeform.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "SemiRegDeform.h"
+
+
+/* Textual name of this class */
+const Type SemiRegDeform_Type = "SemiRegDeform";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+SemiRegDeform* SemiRegDeform_DefaultNew( Name name ) {
+	return _SemiRegDeform_New( 
+		sizeof(SemiRegDeform), 
+		SemiRegDeform_Type, 
+		_SemiRegDeform_Delete, 
+		_SemiRegDeform_Print, 
+		NULL, 
+		(Stg_Component_DefaultConstructorFunction*)SemiRegDeform_DefaultNew, 
+		_SemiRegDeform_Construct, 
+		_SemiRegDeform_Build, 
+		_SemiRegDeform_Initialise, 
+		_SemiRegDeform_Execute, 
+		_SemiRegDeform_Destroy, 
+		name );
+}
+
+SemiRegDeform* SemiRegDeform_New( Name name ) {
+	return _SemiRegDeform_New( 
+		sizeof(SemiRegDeform), 
+		SemiRegDeform_Type, 
+		_SemiRegDeform_Delete, 
+		_SemiRegDeform_Print, 
+		NULL, 
+		(Stg_Component_DefaultConstructorFunction*)SemiRegDeform_DefaultNew, 
+		_SemiRegDeform_Construct, 
+		_SemiRegDeform_Build, 
+		_SemiRegDeform_Initialise, 
+		_SemiRegDeform_Execute, 
+		_SemiRegDeform_Destroy, 
+		name );
+}
+
+SemiRegDeform* _SemiRegDeform_New( SizeT					_sizeOfSelf, 
+				   Type						type,
+				   Stg_Class_DeleteFunction*			_delete,
+				   Stg_Class_PrintFunction*			_print, 
+				   Stg_Class_CopyFunction*			_copy, 
+				   Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+				   Stg_Component_ConstructFunction*		_construct,
+				   Stg_Component_BuildFunction*			_build,
+				   Stg_Component_InitialiseFunction*		_initialise,
+				   Stg_Component_ExecuteFunction*		_execute,
+				   Stg_Component_DestroyFunction*		_destroy, 
+				   Name						name )
+{
+	SemiRegDeform*	self;
+	
+	/* Allocate memory. */
+	self = (SemiRegDeform*)_Stg_Component_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy, 
+		_defaultConstructor, 
+		_construct, 
+		_build, 
+		_initialise, 
+		_execute, 
+		_destroy, 
+		name, 
+		NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* SemiRegDeform info */
+	_SemiRegDeform_Init( self );
+	
+	return self;
+}
+
+void SemiRegDeform_Init( SemiRegDeform* self, Name name ) {
+	/* General info */
+	self->type = SemiRegDeform_Type;
+	self->_sizeOfSelf = sizeof(SemiRegDeform);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _SemiRegDeform_Delete;
+	self->_print = _SemiRegDeform_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)SemiRegDeform_DefaultNew;
+	self->_construct = _SemiRegDeform_Construct;
+	self->_build = _SemiRegDeform_Build;
+	self->_execute = _SemiRegDeform_Execute;
+	self->_destroy = _SemiRegDeform_Destroy;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	/* SemiRegDeform info */
+	_SemiRegDeform_Init( self );
+}
+
+void _SemiRegDeform_Init( SemiRegDeform* self ) {
+	self->nStrips = 0;
+	self->beginInds = NULL;
+	self->endInds = NULL;
+	self->conDims = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _SemiRegDeform_Delete( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	
+	/* Delete the class itself */
+	SemiRegDeform_Destruct( self );
+	
+	/* Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _SemiRegDeform_Print( void* srd, Stream* stream ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	Stream*	myStream;
+	
+	/* Set the Journal for printing informations */
+	myStream = Journal_Register( InfoStream_Type, "SemiRegDeformStream" );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( myStream, "SemiRegDeform (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* SemiRegDeform info */
+}
+
+void _SemiRegDeform_Construct( void* srd, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _SemiRegDeform_Build( void* srd, void* data ) {
+}
+
+void _SemiRegDeform_Initialise( void* srd, void* data ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+
+	assert( self );
+
+
+	/*
+	** Validate the provided strips.  No two strips can occupy any of the same nodes in the same
+	** dimension.
+	*/
+
+	/* TODO */
+
+
+	/*
+	** Initialise the synchronisation.
+	*/
+
+	SemiRegDeform_InitSync( self );
+}
+
+void _SemiRegDeform_Execute( void* srd, void* data ) {
+}
+
+void _SemiRegDeform_Destroy( void* srd, void* data ) {
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void SemiRegDeform_SetMesh( void* srd, Mesh* mesh ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+
+	assert( !self->isInitialised );
+
+	SemiRegDeform_Destruct( self );
+	self->mesh = mesh;
+}
+
+void SemiRegDeform_AddStrip( void* srd, unsigned begin, unsigned end ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	Grid*		vertGrid;
+	unsigned short	conDim;
+	IJK		inds[2];
+	Bool		store;
+	unsigned	s_i;
+
+	assert( self->mesh );
+	assert( !self->isInitialised );
+
+	/* Get the vertex grid. */
+	vertGrid = *(Grid**)ExtensionManager_Get( self->mesh->info, self->mesh, 
+						  ExtensionManager_GetHandle( self->mesh->info, "vertexGrid" ) );
+
+	/*
+	** Ensure the specified strip has not already been added.
+	*/
+
+#ifndef NDEBUG
+	for( s_i = 0; s_i < self->nStrips; s_i++ ) {
+		if( self->beginInds[s_i] == begin && self->endInds[s_i] == end ) {
+			assert( 0 );
+		}
+	}
+#endif
+
+
+	/*
+	** Ensure the specified strip is one dimensionally valid.
+	*/
+
+	{
+		Bool		found;
+		unsigned	d_i;
+
+		Grid_Lift( vertGrid, begin, inds[0] );
+		Grid_Lift( vertGrid, end, inds[1] );
+
+		/* Find the one dimension that is not in-line. */
+		found = False;
+		for( d_i = 0; d_i < Mesh_GetDimSize( self->mesh ); d_i++ ) {
+			if( inds[0][d_i] != inds[1][d_i] ) {
+				/* Check if we have found multiple connected dimensions. */
+				assert( found == False );
+
+				found = True;
+				conDim = d_i;
+			}
+		}
+	}
+
+
+	/*
+	** If the strip has no points stored locally then don't store on this processor.
+	*/
+
+	{
+		unsigned	len = inds[1][conDim] - inds[0][conDim] + 1;
+		IJK		cur;
+		unsigned	n_i;
+
+		store = False;
+		memcpy( cur, inds[0], sizeof(IJK) );
+		for( n_i = 0; n_i < len; n_i++ ) {
+			unsigned	gInd, dInd;
+
+			gInd = Grid_Project( vertGrid, cur );
+			if( Mesh_GlobalToDomain( self->mesh, MT_VERTEX, gInd, &dInd ) && 
+			    dInd < Mesh_GetLocalSize( self->mesh, MT_VERTEX ) )
+			{
+				store = True;
+				break;
+			}
+			cur[conDim]++;
+		}
+	}
+
+	if( !store )
+		return;
+
+	/*
+	** Store.
+	*/
+
+	self->beginInds = Memory_Realloc_Array( self->beginInds, unsigned, self->nStrips + 1 );
+	self->endInds = Memory_Realloc_Array( self->endInds, unsigned, self->nStrips + 1 );
+	self->conDims = Memory_Realloc_Array( self->conDims, unsigned, self->nStrips + 1 );
+	self->beginInds[self->nStrips] = begin;
+	self->endInds[self->nStrips] = end;
+	self->conDims[self->nStrips] = conDim;
+	self->nStrips++;
+}
+
+#define GET_VAL( ind )							\
+	(((ind) < Mesh_GetLocalSize( self->mesh, MT_VERTEX )) ? self->mesh->verts[ind] : \
+	 self->remVerts[ind - Mesh_GetLocalSize( self->mesh, MT_VERTEX )])
+
+void SemiRegDeform_Deform( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	Grid*		vertGrid;
+
+	assert( self );
+
+	/* Get the vertex grid. */
+	vertGrid = *(Grid**)ExtensionManager_Get( self->mesh->info, self->mesh, 
+						  ExtensionManager_GetHandle( self->mesh->info, "vertexGrid" ) );
+
+	/*
+	** Actually deform the specified strips.
+	*/
+
+	/* Import remote values. */
+	Decomp_Sync_SyncArray( self->sync, self->syncArray );
+
+	/* Interpolate each strip. */
+	{
+		unsigned	nDims;
+		unsigned*	begin;
+		unsigned*	end;
+		unsigned	strip_i;
+
+		/* Get dimensionality. */
+		nDims = Mesh_GetDimSize( self->mesh );
+
+		/* Allocate for the dimensions. */
+		begin = Memory_Alloc_Array( unsigned, nDims, "SemiRegDeform" );
+		end = Memory_Alloc_Array( unsigned, nDims, "SemiRegDeform" );
+
+		for( strip_i = 0; strip_i < self->nStrips; strip_i++ ) {
+			unsigned	len;
+			unsigned	conDim;
+			double		first, step;
+			unsigned	dInd;
+			unsigned	node_i;
+
+			/* Extract the basics. */
+			Grid_Lift( vertGrid, self->beginInds[strip_i], begin );
+			Grid_Lift( vertGrid, self->endInds[strip_i], end );
+			conDim = self->conDims[strip_i];
+			len = end[conDim] - begin[conDim] + 1;
+			assert( len > 1 );
+
+			insist( Sync_GlobalToDomain( self->sync, self->beginInds[strip_i], &dInd ), == True );
+			first = GET_VAL( dInd )[conDim];
+			insist( Sync_GlobalToDomain( self->sync, self->endInds[strip_i], &dInd ), == True );
+			step = GET_VAL( dInd )[conDim];
+			step = (step - first) / (len - 1);
+
+			/* Loop and interpolate. */
+			for( node_i = 1; node_i < len - 1; node_i++ ) {
+				unsigned	ind;
+
+				begin[conDim]++;
+				ind = Grid_Project( vertGrid, begin );
+				if( Sync_GlobalToDomain( self->sync, ind, &dInd ) ) {
+					GET_VAL( dInd )[conDim] = first + (double)node_i * step;
+				}
+			}
+		}
+		FreeArray( begin );
+		FreeArray( end );
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+
+void SemiRegDeform_InitSync( SemiRegDeform* self ) {
+	unsigned	nRequired;
+	unsigned*	required;
+	unsigned	nDims;
+	unsigned	strip_i;
+
+	assert( self );
+
+	/*
+	** Setup the synchronisation component.
+	*/
+
+	/* Build required indices. */
+	nRequired = 0;
+	required = Memory_Alloc_Array( unsigned, self->nStrips * 2, "SemiRegDeform" );
+	for( strip_i = 0; strip_i < self->nStrips; strip_i++ ) {
+		unsigned	dInd;
+
+		if( !Mesh_GlobalToDomain( self->mesh, MT_VERTEX, self->beginInds[strip_i], &dInd ) || 
+		    dInd >= Mesh_GetLocalSize( self->mesh, MT_VERTEX ) )
+		{
+			required[nRequired++] = self->beginInds[strip_i];
+		}
+		if( !Mesh_GlobalToDomain( self->mesh, MT_VERTEX, self->endInds[strip_i], &dInd ) || 
+		    dInd >= Mesh_GetLocalSize( self->mesh, MT_VERTEX ) )
+		{
+			required[nRequired++] = self->endInds[strip_i];
+		}
+	}
+	required = Memory_Realloc_Array( required, unsigned, nRequired );
+
+	self->sync = Decomp_Sync_New( "" );
+	Decomp_Sync_SetDecomp( self->sync, self->mesh->topo->domains[MT_VERTEX]->decomp );
+	Decomp_Sync_SetRequired( self->sync, nRequired, required );
+
+	/* Free arrays. */
+	FreeArray( required );
+
+	/* Allocate for sources. */
+	nDims = Mesh_GetDimSize( self->mesh );
+	self->remVerts = AllocNamedArray2D( double, Decomp_Sync_GetRemoteSize( self->sync ), nDims, 
+					    "SemiRegDeform::remVerts" );
+
+	/* Initialise array. */
+	self->syncArray = Decomp_Sync_Array_New();
+	Decomp_Sync_Array_SetSync( self->syncArray, self->sync );
+	Decomp_Sync_Array_SetMemory( self->syncArray, 
+				     self->mesh->verts[0], self->remVerts ? self->remVerts[0] : NULL, 
+				     sizeof(double) * nDims, sizeof(double) * nDims, 
+				     sizeof(double) * nDims );
+}
+
+void SemiRegDeform_Destruct( SemiRegDeform* self ) {
+	assert( self );
+
+	self->mesh = NULL;
+	KillObject( self->syncArray );
+	KillObject( self->sync );
+
+	KillArray( self->beginInds );
+	KillArray( self->endInds );
+	KillArray( self->conDims );
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SemiRegDeform.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SemiRegDeform.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,113 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: SemiRegDeform.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_SemiRegDeform_h__
+#define __Domain_Utils_SemiRegDeform_h__
+	
+	/* Textual name of this class */
+	extern const Type SemiRegDeform_Type;
+
+	/* Virtual function types */
+	
+	/* Class contents */
+	#define __SemiRegDeform						\
+		/* General info */					\
+		__Stg_Component						\
+									\
+		/* Virtual info */					\
+									\
+		/* SemiRegDeform info ... */				\
+		Mesh*					mesh;		\
+		Sync*					sync;		\
+									\
+		double**				remVerts;	\
+		unsigned				nStrips;	\
+		unsigned*				beginInds;	\
+		unsigned*				endInds;	\
+		unsigned*				conDims;
+
+	struct SemiRegDeform { __SemiRegDeform };
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	SemiRegDeform* SemiRegDeform_New( Name name );
+	SemiRegDeform* _SemiRegDeform_New(SizeT						_sizeOfSelf, 
+					  Type						type,
+					  Stg_Class_DeleteFunction*			_delete,
+					  Stg_Class_PrintFunction*			_print, 
+					  Stg_Class_CopyFunction*			_copy, 
+					  Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+					  Stg_Component_ConstructFunction*		_construct,
+					  Stg_Component_BuildFunction*			_build,
+					  Stg_Component_InitialiseFunction*		_initialise,
+					  Stg_Component_ExecuteFunction*		_execute,
+					  Stg_Component_DestroyFunction*		_destroy, 
+					  Name						name );
+	void _SemiRegDeform_Init( SemiRegDeform* self );
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void _SemiRegDeform_Delete( void* srd );
+	void _SemiRegDeform_Print( void* srd, Stream* stream );
+	void _SemiRegDeform_Construct( void* srd, Stg_ComponentFactory* cf, void* data );
+	void _SemiRegDeform_Build( void* srd, void* data );
+	void _SemiRegDeform_Initialise( void* srd, void* data );
+	void _SemiRegDeform_Execute( void* srd, void* data );
+	void _SemiRegDeform_Destroy( void* srd, void* data );
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void SemiRegDeform_SetMesh( void* srd, Mesh* mesh );
+	void SemiRegDeform_AddStrip( void* srd, unsigned begin, unsigned end );
+	void SemiRegDeform_Deform( void* srd );
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	void SemiRegDeform_InitSync( SemiRegDeform* self );
+	void SemiRegDeform_Destruct( SemiRegDeform* self );
+	
+#endif /* __Domain_Utils_SemiRegDeform_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SemiRegDeform.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SemiRegDeform.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SemiRegDeform</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/ShapeAdvector.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/ShapeAdvector.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,206 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) ) {
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ShapeAdvector.c 212 2005-11-08 23:50:02Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "ShapeAdvector.h"
+#include "TimeIntegrator.h"
+#include "TimeIntegratee.h"
+#include "FieldVariable.h"
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+
+/* Textual name of this class */
+const Type ShapeAdvector_Type = "ShapeAdvector";
+
+/*-------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+ShapeAdvector* ShapeAdvector_New(
+		Name                                       name,
+		TimeIntegrator*                            timeIntegrator,
+		FieldVariable*                             velocityField,
+		Stg_Shape*                                 shape,
+		Bool                                       allowFallbackToFirstOrder )
+{
+	ShapeAdvector* self = (ShapeAdvector*) _ShapeAdvector_DefaultNew( name );
+
+	/* 	ShapeAdvector_InitAll */
+	_ShapeAdvector_Init( self, timeIntegrator, velocityField, shape, allowFallbackToFirstOrder );
+
+	return self;
+}
+
+ShapeAdvector* _ShapeAdvector_New(
+		SizeT                                      _sizeOfSelf, 
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print,
+		Stg_Class_CopyFunction*                    _copy, 
+		Stg_Component_DefaultConstructorFunction*  _defaultConstructor,
+		Stg_Component_ConstructFunction*           _construct,
+		Stg_Component_BuildFunction*               _build,
+		Stg_Component_InitialiseFunction*          _initialise,
+		Stg_Component_ExecuteFunction*             _execute,
+		Stg_Component_DestroyFunction*             _destroy,		
+		Name                                       name )
+{
+	ShapeAdvector* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ShapeAdvector) );
+	self = (ShapeAdvector*)_Stg_Component_New( 
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print,
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,		
+			name,
+			NON_GLOBAL );
+	
+	/* General info */
+
+	/* Virtual Info */
+	
+	return self;
+}
+
+void _ShapeAdvector_Init( 
+		ShapeAdvector*                             self,
+		TimeIntegrator*                            timeIntegrator,
+		FieldVariable*                             velocityField,
+		Stg_Shape*                                 shape,
+		Bool                                       allowFallbackToFirstOrder )
+{
+	self->velocityField = velocityField;
+	self->shape = shape;
+	self->shapeCount = 1;
+	self->shapeCentrePtr = shape->centre;
+
+	self->shapeCentreVariable = 
+		Variable_NewVector( "shapeCentreVariable", Variable_DataType_Double, shape->dim, &self->shapeCount, NULL,  &self->shapeCentrePtr, NULL );
+	self->timeIntegratee = 
+		TimeIntegratee_New( "shapeTimeIntegratee", timeIntegrator, self->shapeCentreVariable, 1,
+		(Stg_Component**) &velocityField, allowFallbackToFirstOrder );
+}
+
+
+/*------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _ShapeAdvector_Delete( void* shapeAdvector ) {
+	ShapeAdvector* self = (ShapeAdvector*)shapeAdvector;
+
+	Stg_Class_Delete( self->shapeCentreVariable );
+	Stg_Class_Delete( self->timeIntegratee );
+
+	/* Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _ShapeAdvector_Print( void* shapeAdvector, Stream* stream ) {
+	ShapeAdvector* self = (ShapeAdvector*)shapeAdvector;
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+}
+
+
+void* _ShapeAdvector_Copy( void* shapeAdvector, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ShapeAdvector*	self = (ShapeAdvector*)shapeAdvector;
+	ShapeAdvector*	newShapeAdvector;
+	
+	newShapeAdvector = (ShapeAdvector*)_Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newShapeAdvector->velocityField = self->velocityField;
+	newShapeAdvector->shape         = self->shape;
+	
+	return (void*)newShapeAdvector;
+}
+
+void* _ShapeAdvector_DefaultNew( Name name ) {
+	return (void*) _ShapeAdvector_New(
+			sizeof(ShapeAdvector),
+			ShapeAdvector_Type,
+			_ShapeAdvector_Delete,
+			_ShapeAdvector_Print,
+			_ShapeAdvector_Copy,
+			_ShapeAdvector_DefaultNew,
+			_ShapeAdvector_Construct,
+			_ShapeAdvector_Build,
+			_ShapeAdvector_Initialise,
+			_ShapeAdvector_Execute,
+			_ShapeAdvector_Destroy,
+			name );
+}
+
+
+void _ShapeAdvector_Construct( void* shapeAdvector, Stg_ComponentFactory* cf, void* data ) {
+	ShapeAdvector*	            self          = (ShapeAdvector*) shapeAdvector;
+	FieldVariable*              velocityField;
+	Stg_Shape*                  shape;
+	TimeIntegrator*             timeIntegrator;
+	Bool                        allowFallbackToFirstOrder = False;
+
+	timeIntegrator = Stg_ComponentFactory_ConstructByKey( cf, self->name, "TimeIntegrator", TimeIntegrator, True, data  ) ;
+	velocityField  = Stg_ComponentFactory_ConstructByKey( cf, self->name, "VelocityField", FieldVariable, True, data  ) ;
+	shape          = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Shape", Stg_Shape, True, data ) ;
+	allowFallbackToFirstOrder = Stg_ComponentFactory_GetBool( cf, self->name, "allowFallbackToFirstOrder", False );
+
+	_ShapeAdvector_Init( self, timeIntegrator, velocityField, shape, allowFallbackToFirstOrder );
+}
+
+void _ShapeAdvector_Build( void* shapeAdvector, void* data ) {
+}
+void _ShapeAdvector_Initialise( void* shapeAdvector, void* data ) {
+}
+void _ShapeAdvector_Execute( void* shapeAdvector, void* data ) {
+}
+void _ShapeAdvector_Destroy( void* shapeAdvector, void* data ) {
+}
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/ShapeAdvector.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/ShapeAdvector.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ShapeAdvector.h 189 2005-10-20 00:39:29Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_ShapeAdvector_h__
+#define __Domain_Utils_ShapeAdvector_h__
+
+	/* Textual name of this class */
+	extern const Type ShapeAdvector_Type;
+
+	/* ShapeAdvector information */
+	#define __ShapeAdvector \
+		/* General info */ \
+		__Stg_Component \
+		/* Virtual Info */\
+		/* Other Info */\
+		Stg_Shape*                            shape;                \
+		FieldVariable*                        velocityField;        \
+		TimeIntegratee*                       timeIntegratee;       \
+		Variable*                             shapeCentreVariable;  \
+		Index                                 shapeCount;           \
+		void*                                 shapeCentrePtr;
+
+	struct ShapeAdvector { __ShapeAdvector };
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	ShapeAdvector* ShapeAdvector_New(
+		Name                                       name,
+		TimeIntegrator*                            timeIntegrator,
+		FieldVariable*                             velocityField,
+		Stg_Shape*                                 shape,
+		Bool                                       allowFallbackToFirstOrder );
+
+	ShapeAdvector* _ShapeAdvector_New(
+		SizeT                                      _sizeOfSelf, 
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print,
+		Stg_Class_CopyFunction*                    _copy, 
+		Stg_Component_DefaultConstructorFunction*  _defaultConstructor,
+		Stg_Component_ConstructFunction*           _construct,
+		Stg_Component_BuildFunction*               _build,
+		Stg_Component_InitialiseFunction*          _initialise,
+		Stg_Component_ExecuteFunction*             _execute,
+		Stg_Component_DestroyFunction*             _destroy,		
+		Name                                       name );
+
+	void _ShapeAdvector_Init( 
+		ShapeAdvector*                             self,
+		TimeIntegrator*                            timeIntegrator,
+		FieldVariable*                             velocityField,
+		Stg_Shape*                                 shape,
+		Bool                                       allowFallbackToFirstOrder );
+
+	void _ShapeAdvector_Delete( void* materialPoints );
+	void _ShapeAdvector_Print( void* materialPoints, Stream* stream );
+	#define ShapeAdvector_Copy( self ) \
+		(ShapeAdvector*) Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ShapeAdvector_DeepCopy( self ) \
+		(ShapeAdvector*) Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _ShapeAdvector_Copy( void* materialPoints, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _ShapeAdvector_DefaultNew( Name name ) ;
+	void _ShapeAdvector_Construct( void* shape, Stg_ComponentFactory* cf, void* data ) ;
+	void _ShapeAdvector_Build( void* materialPoints, void* data ) ;
+	void _ShapeAdvector_Initialise( void* materialPoints, void* data ) ;
+	void _ShapeAdvector_Execute( void* materialPoints, void* data );
+	void _ShapeAdvector_Destroy( void* materialPoints, void* data ) ;
+	
+		
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Private functions
+	*/
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Entry Point Hooks
+	*/
+	void ShapeAdvector_AdvectionSetup( TimeIntegrator* timeIntegrator, ShapeAdvector* self ) ;
+	
+	/*---------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/ShapeAdvector.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/ShapeAdvector.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">ShapeAdvector</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">TimeIntegrator</param>
+		<param name="Type">TimeIntegrator</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 178 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">VelocityField</param>
+		<param name="Type">FieldVariable</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 179 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Shape</param>
+		<param name="Type">Stg_Shape</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 180 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SobolGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SobolGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,498 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SobolGenerator.c 3745 2006-08-03 10:10:21Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "SobolGenerator.h"
+#include "DomainContext.h"
+
+#include <assert.h>
+
+const Type SobolGenerator_Type = "SobolGenerator";
+
+/* Some macros for clarity */
+#define BITS_IN_A_BYTE 8
+
+SobolGenerator* SobolGenerator_New( 
+			Name                                               name,
+			unsigned int                                       polynomialDegree,
+			unsigned int                                       polynomialCoefficient,
+			const unsigned int *                               initialDirectionNumbers )
+{
+	SobolGenerator* self = _SobolGenerator_New( 
+			sizeof(SobolGenerator), 
+			SobolGenerator_Type, 
+			_SobolGenerator_Delete, 
+			_SobolGenerator_Print,
+			_SobolGenerator_Copy, 
+			name );
+	_SobolGenerator_Init( self, polynomialDegree, polynomialCoefficient, initialDirectionNumbers );
+
+	return self;
+}
+
+SobolGenerator* _SobolGenerator_New(
+			SizeT                                              _sizeOfSelf, 
+			Type                                               type,
+			Stg_Class_DeleteFunction*                          _delete,
+			Stg_Class_PrintFunction*                           _print, 
+			Stg_Class_CopyFunction*                            _copy, 
+			Name                                               name )
+{
+	SobolGenerator*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(SobolGenerator) );
+	self = (SobolGenerator*)_Stg_Object_New(
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print,
+			_copy, 
+			name,
+			NON_GLOBAL );
+
+	return self;
+}
+
+void _SobolGenerator_Init( 
+		SobolGenerator*                                    self,
+		unsigned int                                       polynomialDegree,
+		unsigned int                                       polynomialCoefficient,
+		const unsigned int *                               initialDirectionNumbers ) 
+{
+	unsigned int        directionNum_I;
+
+	self->directionalNumbersAlloced = 20;
+
+	self->directionalNumberIsCalc = Memory_Alloc_Array( Bool, self->directionalNumbersAlloced, "Calculate Flag" );
+	self->directionalNumberList   = Memory_Alloc_Array( unsigned int , self->directionalNumbersAlloced, "DirectionalNumbers" );
+	memset( self->directionalNumberIsCalc, 0, sizeof( Bool ) * self->directionalNumbersAlloced );
+
+	self->polynomialDegree      = polynomialDegree;
+	self->polynomialCoefficient = polynomialCoefficient;
+
+	memcpy( self->directionalNumberList, initialDirectionNumbers, polynomialDegree * sizeof( unsigned int ) );
+
+	self->lastCalculated_I = 0;
+	self->lastCalculatedNumber = 0.5;
+		
+	for ( directionNum_I = 0 ; directionNum_I < polynomialDegree ; directionNum_I++ )
+		self->directionalNumberIsCalc[ directionNum_I ] = True;
+	
+}
+
+
+void _SobolGenerator_Delete( void* sobolGenerator ) {
+	SobolGenerator* self = (SobolGenerator*) sobolGenerator;
+
+	Memory_Free( self->directionalNumberIsCalc );
+	Memory_Free( self->directionalNumberList );
+
+	_Stg_Object_Delete( self );
+}
+
+void _SobolGenerator_Print( void* sobolGenerator, Stream* stream ) {
+	SobolGenerator* self  = (SobolGenerator*) sobolGenerator;
+	unsigned int    index;
+
+	Journal_Printf( stream, "Sobol Generator: '%s'\n", self->name );
+	Stream_Indent( stream );
+
+	_Stg_Object_Print( self, stream );
+
+	Journal_PrintValue( stream, self->polynomialDegree );
+	Journal_PrintValue( stream, self->polynomialCoefficient );
+	Journal_Printf( stream, "This leads to polynomial: x^%u + ", self->polynomialDegree );
+	for ( index = self->polynomialDegree - 1 ; index > 0 ; index-- ) {
+		if ( self->polynomialCoefficient & 1 << (index - 1) )
+			Journal_Printf( stream, "x^%u + ", index );
+	}
+	Journal_Printf( stream, "1\n" );
+
+	Journal_PrintValue( stream, self->directionalNumbersAlloced );
+	Journal_Printf( stream, "Directional Numbers Calculated:\n" );
+	for ( index = 0 ; index < self->directionalNumbersAlloced ; index++ ) {
+		if ( self->directionalNumberIsCalc[ index ] )
+			Journal_Printf( stream, "\tDirectional Number %u = %lu\n", index, self->directionalNumberList[ index ] );
+	}
+
+	Journal_PrintValue( stream, self->lastCalculated_I );
+	Journal_PrintValue( stream, self->lastCalculatedNumber );
+	
+	Stream_UnIndent( stream );
+}
+
+void* _SobolGenerator_Copy( void* sobolGenerator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	SobolGenerator*	self = (SobolGenerator*)sobolGenerator;
+	SobolGenerator*	newSobolGenerator;
+	
+	newSobolGenerator = (SobolGenerator*) _Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newSobolGenerator->lastCalculated_I          = self->lastCalculated_I;
+	newSobolGenerator->lastCalculatedNumber      = self->lastCalculatedNumber;
+	newSobolGenerator->directionalNumbersAlloced = self->directionalNumbersAlloced;
+	newSobolGenerator->polynomialDegree          = self->polynomialDegree;
+	newSobolGenerator->polynomialCoefficient     = self->polynomialCoefficient ;
+	
+	if (deep) {
+		newSobolGenerator->directionalNumberIsCalc = Memory_Alloc_Array( Bool, self->directionalNumbersAlloced, "Flag" );
+		memcpy( newSobolGenerator->directionalNumberIsCalc, self->directionalNumberIsCalc, 
+				self->directionalNumbersAlloced * sizeof( Bool ) );
+
+		newSobolGenerator->directionalNumberList = Memory_Alloc_Array( unsigned int, self->directionalNumbersAlloced, "V_i" );
+		memcpy( newSobolGenerator->directionalNumberList, self->directionalNumberList, 
+				self->directionalNumbersAlloced * sizeof( unsigned int ) );
+	}
+	else {
+		newSobolGenerator->directionalNumberIsCalc      = self->directionalNumberIsCalc;
+		newSobolGenerator->directionalNumberList        = self->directionalNumberList;
+	}
+	
+	return (void*)newSobolGenerator;
+}
+
+Bit_Index _SobolGenerator_FindRightmostZeroBit( unsigned int number ) {
+	Bit_Index bit = 0;
+
+	while ( number & 1 ) {
+		/* Shift All bits to right by one */
+		number >>= 1;
+
+		/* Increment counter to find bit */
+		bit++;
+		assert( bit < sizeof( unsigned int ) * BITS_IN_A_BYTE );
+	}
+	return bit;
+}
+
+unsigned int  SobolGenerator_GetDirectionalNumber( void* sobolGenerator, unsigned int directionalNum_I ) {
+	SobolGenerator*	     self          = (SobolGenerator*)sobolGenerator;
+	unsigned int         result;
+	unsigned int         coefficient_I;
+	unsigned int         powerOfTwo;
+	Bit_Index            bitToTest;
+	unsigned int         directionNumber = 0;
+
+	if ( directionalNum_I >= self->directionalNumbersAlloced ) {
+		unsigned int  difference       = 10;
+		unsigned int  newNumberToAlloc = directionalNum_I + difference;
+		
+		/* Allocate More Memory */
+		self->directionalNumberIsCalc = Memory_Realloc_Array( self->directionalNumberIsCalc, Bool, newNumberToAlloc );
+		self->directionalNumberList   = Memory_Realloc_Array( self->directionalNumberList, unsigned int , newNumberToAlloc );
+
+		/* Set Bools */
+		memset( &self->directionalNumberIsCalc[ self->directionalNumbersAlloced ], 0, sizeof(Bool) * difference );
+		
+		self->directionalNumbersAlloced = newNumberToAlloc;
+	}
+	/* Check to see whether the directional number has already been calculated */
+	else if ( self->directionalNumberIsCalc[ directionalNum_I ] )
+		return self->directionalNumberList[ directionalNum_I ];
+
+	/* If the code hasn't precalculated all the directional numbers up to polynomialDegree then there is something wrong */
+	assert( directionalNum_I >= self->polynomialDegree );
+
+	/* Calculate Directional Number */
+	result = 0;
+	for ( coefficient_I = 0 ; coefficient_I < self->polynomialDegree ; coefficient_I++ ) {
+		/* Test for this coefficient is 1 */
+		bitToTest = self->polynomialDegree - 2 - coefficient_I;
+		if ( coefficient_I == self->polynomialDegree - 1 || self->polynomialCoefficient & 1 << bitToTest ) {
+			powerOfTwo = 0;
+			powerOfTwo |= 1 << (coefficient_I + 1);
+			
+			directionNumber = SobolGenerator_GetDirectionalNumber( self, directionalNum_I - 1 - coefficient_I );
+			result ^= powerOfTwo * directionNumber;
+		}
+	}
+	result ^= directionNumber;
+
+	self->directionalNumberIsCalc[ directionalNum_I ] = True;
+
+	return self->directionalNumberList[ directionalNum_I ] = result;
+}
+
+#define WORDLENGTH 30
+double SobolGenerator_GetNextNumber( void* sobolGenerator ) {
+	SobolGenerator*   self          = (SobolGenerator*)sobolGenerator;
+	Bit_Index         differentBit;
+	unsigned int      directionalNumber;
+
+	/* The Gray Code of the index last calculated quasi-random number will differ by only one bit 
+	 * from the Gray Code of the index of the current quasi-random number to calculate
+	 * this bit is the right most zero bit in lastCalcuated_I */
+	differentBit = _SobolGenerator_FindRightmostZeroBit( self->lastCalculated_I );
+
+	/* This bit can be used to find the next quasi-random number in Sobol's sequence 
+	 * x_{n+1} = x_{n} ^ v_{c}, where
+	 * x_{j} is the j^{th} quasi-random number in the sequence
+	 * v_{j} is the j^{th} directional number
+	 * c is the single different bit between the Gray codes for n and n+1 */
+
+	self->lastCalculated_I++;
+	directionalNumber = SobolGenerator_GetDirectionalNumber( self, differentBit );
+	directionalNumber <<= (WORDLENGTH - differentBit - 1);
+	self->lastCalculatedNumber ^= directionalNumber;
+
+	return (double) self->lastCalculatedNumber / (double) (1L << (WORDLENGTH));
+}
+	
+double SobolGenerator_GetNumberByIndex( void* sobolGenerator, unsigned int index ) {
+	SobolGenerator*   self          = (SobolGenerator*)sobolGenerator;
+	unsigned int      grayCode;
+	Bit_Index         bit_I;
+	unsigned int      directionalNumber;
+	unsigned int      result   =  0;
+
+	/* have to shift index because index 0 is the initial zero for the sequence to begin */
+	index++;
+
+	/* Get Gray Code of 'index' */
+	grayCode = index ^ (index >> 1);
+
+	for ( bit_I = 0 ; bit_I < sizeof( unsigned int ) * BITS_IN_A_BYTE ; bit_I++ ) {
+		if ( grayCode & 1 << bit_I ) {
+			directionalNumber = SobolGenerator_GetDirectionalNumber( self, bit_I );
+			directionalNumber <<= (WORDLENGTH - bit_I - 1);
+
+			result ^= directionalNumber;
+		}
+	}
+
+	return (double) result / (double) (1L << (WORDLENGTH));
+}
+
+double SobolGenerator_GetNextNumber_WithMinMax( void* sobolGenerator, double min, double max ) {
+	return (max - min) * SobolGenerator_GetNextNumber( sobolGenerator ) + min;
+}
+
+double SobolGenerator_GetNumberByIndex_WithMinMax( void* sobolGenerator, unsigned int index, double min, double max ) {
+	return (max - min) * SobolGenerator_GetNumberByIndex( sobolGenerator, index ) + min;
+}
+
+/* Some global variables that drive the random number generator */
+/* These numbers for initialisation come  from:
+ * Stephen Joe and Frances Y. Juo. Remark on Algorithm 659: Implementing Sobol¿s Quasirandom Sequence Generator. ACM Transactions on Mathematical Software, 29(1), March 2003.*/
+const unsigned int SobolGenerator_PolynomialDegree[] = {
+	1,2,3,3,4, 4,5,5,5,5,
+	5,5,6,6,6, 6,6,6,7,7,
+	7,7,7,7,7, 7,7,7,7,7,
+	7,7,7,7,7, 7,8,8,8,8,
+	8,8,8,8,8, 8,8,8,8,8,
+	
+	8,8,9,9,9, 9,9,9,9,9,
+	9,9,9,9,9, 9,9,9,9,9,
+	9,9,9,9,9, 9,9,9,9,9,
+	9,9,9,9,9, 9,9,9,9,9,
+	9,9,9,9,9, 9,9,9,9,9
+	};
+
+const unsigned int SobolGenerator_PolynomialCoefficient[] = {
+	0,1,1,2,1, 4,2,13,7,14,
+	11,4,1,16,13, 22,19,25,1,32,
+	4,8,7,56,14, 28,19,50,21,42,
+	31,62,37,41,55, 59,14,56,21,22,
+	38,47,49,50,52, 67,70,84,97,103,
+
+	115,122,8,13,16, 22,25,44,47,52,
+	55,59,62,67,74, 81,82,87,91,94,
+	103,104,109,122,124, 137,138,143,145,152,
+	157,167,173,176,181, 182,185,191,194,199,
+	218,220,227,229,230, 234,236,241,244,253
+	};
+
+const unsigned int SobolGenerator_InitialDirectionNumbers[][13] = {
+	 { 1 },
+	 { 1, 1 },
+	 { 1, 3, 7 },
+	 { 1, 1, 5 },
+	 { 1, 3, 1, 1 },
+
+	 { 1, 1, 3, 7 },
+	 { 1, 3, 3, 9, 9 },
+	 { 1, 3, 7, 13, 3 },
+	 { 1, 1, 5, 11, 27 },
+	 { 1, 3, 5, 1, 15 },
+
+	 /*10*/
+	 { 1, 1, 7, 3, 29 },
+	 { 1, 3, 7, 7, 21 },
+	 { 1, 1, 1, 9, 23, 37 },
+	 { 1, 3, 3, 5, 19, 33 },
+	 { 1, 1, 3, 13, 11, 7 },
+
+	 { 1, 1, 7, 13, 25, 5 },
+	 { 1, 3, 5, 11, 7, 11 },
+	 { 1, 1, 1, 3, 13, 39 },
+	 { 1, 3, 1, 15, 17, 63, 13 },
+	 { 1, 1, 5, 5, 1, 59, 33 },
+
+	 /*20*/
+	 { 1, 3, 3, 3, 25, 17, 115 },
+	 { 1, 1, 7, 15, 29, 15, 41 },
+	 { 1, 3, 1, 7, 3, 23, 79 },
+	 { 1, 3, 7, 9, 31, 29, 17 },
+	 { 1, 1, 5, 13, 11, 3, 29 },
+	 
+	 { 1, 1, 1, 9, 5, 21, 119 },
+	 { 1, 1, 3, 1, 23, 13, 75 },
+	 { 1, 3, 7, 11, 27, 31, 73 },
+	 { 1, 1, 7, 7, 19, 25, 105 },
+	 { 1, 3, 1, 5, 21, 9, 7 },
+	 
+	 /*30*/
+	 { 1, 1, 1, 15, 5, 49, 59 },
+	 { 1, 3, 1, 1, 1, 33, 65 },
+	 { 1, 3, 5, 15, 17, 19, 21 },
+	 { 1, 1, 7, 11, 13, 29, 3 },
+	 { 1, 3, 7, 5, 7, 11, 113 },
+	 
+	 { 1, 1, 5, 11, 15, 19, 61 },
+	 { 1, 1, 1, 1, 9, 27, 89, 7 },
+	 { 1, 1, 3, 7, 31, 15, 45, 23 },
+	 { 1, 3, 3, 9, 25, 25, 107, 39 },
+	 { 1, 1, 7, 7, 3, 63, 21, 217 },
+	 
+	 /*40*/
+	 { 1, 3, 5, 7, 5, 55, 71, 141 },
+	 { 1, 1, 5, 1, 23, 17, 79, 27 },
+	 { 1, 1, 5, 15, 7, 63, 19, 53 },
+	 { 1, 1, 3, 15, 3, 49, 71, 181 },
+	 { 1, 3, 3, 15, 17, 19, 61, 169 },
+	 
+	 { 1, 3, 3, 13, 23, 41, 41, 35 },
+	 { 1, 1, 1, 3, 3, 59, 57, 15 },
+	 { 1, 3, 1, 3, 3, 3, 121, 207 },
+	 { 1, 3, 5, 15, 21, 57, 87, 45 },
+	 { 1, 1, 1, 5, 25, 33, 119, 247 },
+	 
+	 /*50*/
+	 { 1, 1, 1, 9, 25, 49, 55, 185 },
+	 { 1, 3, 5, 7, 23, 53, 85, 117 },
+	 { 1, 3, 3, 13, 11, 57, 121, 41, 235 },
+	 { 1, 1, 3, 3, 19, 57, 119, 81, 307 },
+	 { 1, 3, 3, 7, 3, 39, 11, 223, 495 },
+	 
+	 { 1, 3, 3, 5, 11, 21, 23, 151, 417 },
+	 { 1, 3, 1, 11, 31, 7, 61, 81, 57 },
+	 { 1, 1, 3, 9, 7, 53, 11, 189, 151 },
+	 { 1, 3, 7, 1, 9, 9, 35, 61, 19 },
+	 { 1, 1, 5, 9, 5, 55, 33, 95, 119 },
+	 
+	 /*60*/
+	 { 1, 3, 7, 1, 17, 15, 43, 185, 375 },
+	 { 1, 1, 3, 5, 23, 59, 107, 23, 451 },
+	 { 1, 1, 7, 7, 17, 19, 113, 73, 55 },
+	 { 1, 3, 1, 13, 17, 49, 101, 113, 449 },
+	 { 1, 3, 3, 9, 25, 31, 29, 239, 501 },
+	 
+	 { 1, 1, 3, 9, 13, 3, 87, 85, 53 },
+	 { 1, 1, 5, 1, 11, 39, 119, 9, 185 },
+	 { 1, 1, 1, 7, 31, 5, 97, 201, 317 },
+	 { 1, 1, 3, 3, 27, 5, 29, 83, 17 },
+	 { 1, 3, 5, 5, 19, 41, 17, 53, 21 },
+	 
+	 /*70*/
+	 { 1, 1, 5, 1, 17, 9, 89, 183, 487 },
+	 { 1, 1, 7, 11, 23, 19, 5, 203, 13 },
+	 { 1, 3, 7, 11, 7, 9, 127, 91, 347 },
+	 { 1, 1, 7, 13, 5, 57, 89, 149, 393 },
+	 { 1, 1, 1, 7, 11, 25, 119, 101, 15 },
+	 
+	 { 1, 1, 1, 7, 19, 1, 117, 13, 391 },
+	 { 1, 3, 3, 9, 19, 15, 103, 111, 307 },
+	 { 1, 3, 3, 9, 7, 51, 105, 239, 189 },
+	 { 1, 1, 1, 1, 13, 11, 41, 3, 381 },
+	 { 1, 3, 1, 1, 21, 19, 83, 205, 71 },
+	 
+	 /*80*/
+	 { 1, 3, 5, 3, 21, 61, 25, 253, 163 },
+	 { 1, 1, 1, 9, 7, 53, 41, 247, 99 },
+	 { 1, 3, 5, 15, 9, 29, 55, 121, 467 },
+	 { 1, 3, 7, 1, 11, 19, 69, 189, 167 },
+	 { 1, 3, 5, 5, 1, 11, 117, 169, 433 },
+	 
+	 { 1, 1, 1, 13, 5, 9, 49, 179, 337 },
+	 { 1, 3, 7, 1, 21, 21, 127, 197, 257 },
+	 { 1, 3, 5, 9, 11, 19, 29, 175, 179 },
+	 { 1, 3, 3, 9, 13, 43, 1, 217, 47 },
+	 { 1, 1, 3, 9, 25, 13, 99, 249, 385 },
+	 
+	 /*90*/
+	 { 1, 3, 1, 9, 9, 13, 53, 195, 23 },
+	 { 1, 3, 5, 9, 7, 41, 83, 95, 117 },
+	 { 1, 1, 7, 13, 7, 25, 15, 63, 369 },
+	 { 1, 3, 1, 11, 27, 31, 31, 19, 425 },
+	 { 1, 3, 7, 3, 15, 9, 73, 7, 207 },
+	 
+	 { 1, 3, 5, 5, 25, 11, 115, 5, 433 },
+	 { 1, 1, 1, 11, 15, 19, 35, 75, 301 },
+	 { 1, 3, 7, 11, 21, 5, 21, 217, 147 },
+	 { 1, 1, 3, 13, 17, 53, 89, 245, 333 },
+	 { 1, 3, 1, 5, 19, 37, 5, 111, 85 }
+	 };
+
+
+SobolGenerator* SobolGenerator_NewFromTable( Name name ) {
+	static int        generatorCount                = 0;
+	Index             generatorIndex;
+
+	generatorIndex = generatorCount;
+
+	/* Make sure that the number generators used from this function is smaller than the number in the table */
+	Journal_Firewall(
+		generatorIndex < sizeof(SobolGenerator_PolynomialDegree)/sizeof(unsigned int),
+		Journal_Register( Error_Type, SobolGenerator_Type ),
+		"Error in func '%s' - Trying to instantiate a %dth SobolGenerator ('%s') using table, "
+		"but only %d initial directional numbers have been implemented. Please contact developers.\n",
+		__func__, generatorIndex + 1, name, sizeof(SobolGenerator_PolynomialDegree)/sizeof(unsigned int) );
+	
+	generatorCount++;
+	/* If we reach the end of the array of generators, restart from the first one - PatrickSunter, 3 August 2006 */
+	if ( generatorCount >= sizeof(SobolGenerator_PolynomialDegree)/sizeof(unsigned int) ) {
+		generatorCount = 0;
+	}
+		
+	return SobolGenerator_New( 
+			name,
+			SobolGenerator_PolynomialDegree[ generatorIndex ], 
+			SobolGenerator_PolynomialCoefficient[ generatorIndex ],
+			SobolGenerator_InitialDirectionNumbers[ generatorIndex ] );
+
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SobolGenerator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SobolGenerator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,106 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+**	$Id: SobolGenerator.h 3742 2006-08-02 10:48:21Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_SobolGenerator_h__
+#define __Domain_Utils_SobolGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type SobolGenerator_Type;
+	
+	/** SobolGenerator contents */
+	#define __SobolGenerator \
+		/* General info */ \
+		__Stg_Object \
+		\
+		/* Virtual info */ \
+		\
+		/* Object Info */ \
+		unsigned int        polynomialDegree;                     \
+		unsigned int        polynomialCoefficient;                \
+		Bool*               directionalNumberIsCalc;              \
+		unsigned int *      directionalNumberList;                \
+		unsigned int        directionalNumbersAlloced;            \
+		unsigned int        lastCalculated_I;                     \
+		unsigned int        lastCalculatedNumber;                 \
+
+
+	struct SobolGenerator { __SobolGenerator };	
+
+	/** Public constructor */
+	SobolGenerator* SobolGenerator_NewFromTable( Name name ) ;
+	
+	SobolGenerator* SobolGenerator_New( 
+			Name                                               name,
+			unsigned int                                       polynomialDegree,
+			unsigned int                                       polynomialCoefficient,
+			const unsigned int *                               initialDirectionNumbers );
+
+	/** Private Constructor */
+	SobolGenerator* _SobolGenerator_New(
+			SizeT                                              _sizeOfSelf, 
+			Type                                               type,
+			Stg_Class_DeleteFunction*                          _delete,
+			Stg_Class_PrintFunction*                           _print, 
+			Stg_Class_CopyFunction*                            _copy, 
+			Name                                               name );
+
+	void _SobolGenerator_Init( 
+		SobolGenerator*                                    self,
+		unsigned int                                       polynomialDegree,
+		unsigned int                                       polynomialCoefficient,
+		const unsigned int *                               initialDirectionNumbers )	;		
+
+	/** Stg_Class Virtual Functions */
+	void _SobolGenerator_Delete( void* sobolGenerator ) ;
+	void _SobolGenerator_Print( void* sobolGenerator, Stream* stream ) ;
+	void* _SobolGenerator_Copy( void* sobolGenerator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) ;
+	
+	/** +++ Private Functions +++ **/
+	Bit_Index _SobolGenerator_FindRightmostZeroBit( unsigned int number ) ;
+
+	/** +++ Public Functions +++ **/
+	/** See  B.L. Fox P. Bratley. Implementing Sobol's Quasirandom Sequence Generator. 
+	 * ACM Transactions on Mathematical Software, 14(1):88 - 100, March 1988. For details of algorithm */
+	unsigned int SobolGenerator_GetDirectionalNumber( void* sobolGenerator, unsigned int directionalNum_I ) ;
+	double SobolGenerator_GetNextNumber( void* sobolGenerator ) ;
+	double SobolGenerator_GetNumberByIndex( void* sobolGenerator, unsigned int index ) ;
+
+	double SobolGenerator_GetNextNumber_WithMinMax( void* sobolGenerator, double min, double max ) ;
+	double SobolGenerator_GetNumberByIndex_WithMinMax( void* sobolGenerator, unsigned int index, double min, double max ) ;
+
+#endif /* __Domain_Utils_SobolGenerator_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SplitFrictionWallVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SplitFrictionWallVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,746 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This file may be distributed under the terms of the VPAC Public License
+** as defined by VPAC of Australia and appearing in the file
+** LICENSE.VPL included in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** $Id: SplitFrictionWallVC.c 3310 2005-10-26 07:10:18Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Modified 2006 Walter Landry to implement Split Friction Wall VC's */
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "SplitFrictionWallVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type SplitFrictionWallVC_Type = "SplitFrictionWallVC";
+const Name defaultSplitFrictionWallVCName = "defaultSplitFrictionWallVCName";
+
+const char* SplitFrictionWallVC_WallEnumToStr[SplitFrictionWallVC_Wall_Size] = {
+	"back",
+	"left",
+	"bottom",
+	"right",
+	"top",
+	"front" };
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* SplitFrictionWallVC_Factory(
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						data )
+{
+	return (VariableCondition*)SplitFrictionWallVC_New( defaultSplitFrictionWallVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+
+SplitFrictionWallVC*	SplitFrictionWallVC_DefaultNew( Name name )
+{
+	return _SplitFrictionWallVC_New(
+		sizeof(SplitFrictionWallVC), 
+		SplitFrictionWallVC_Type, 
+		_SplitFrictionWallVC_Delete, 
+		_SplitFrictionWallVC_Print, 
+		_SplitFrictionWallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SplitFrictionWallVC_DefaultNew,
+		_SplitFrictionWallVC_Construct,	
+		_SplitFrictionWallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_SplitFrictionWallVC_BuildSelf, 
+		_SplitFrictionWallVC_PrintConcise,
+		_SplitFrictionWallVC_ReadDictionary,
+		_SplitFrictionWallVC_GetSet, 
+		_SplitFrictionWallVC_GetVariableCount, 
+		_SplitFrictionWallVC_GetVariableIndex, 
+		_SplitFrictionWallVC_GetValueIndex, 
+		_SplitFrictionWallVC_GetValueCount, 
+		_SplitFrictionWallVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL);
+}
+
+SplitFrictionWallVC*	SplitFrictionWallVC_New(
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	return _SplitFrictionWallVC_New(
+		sizeof(SplitFrictionWallVC), 
+		SplitFrictionWallVC_Type, 
+		_SplitFrictionWallVC_Delete, 
+		_SplitFrictionWallVC_Print, 
+		_SplitFrictionWallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SplitFrictionWallVC_DefaultNew,
+		_SplitFrictionWallVC_Construct,	
+		_SplitFrictionWallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_SplitFrictionWallVC_BuildSelf, 
+		_SplitFrictionWallVC_PrintConcise,
+		_SplitFrictionWallVC_ReadDictionary,
+		_SplitFrictionWallVC_GetSet, 
+		_SplitFrictionWallVC_GetVariableCount, 
+		_SplitFrictionWallVC_GetVariableIndex, 
+		_SplitFrictionWallVC_GetValueIndex, 
+		_SplitFrictionWallVC_GetValueCount, 
+		_SplitFrictionWallVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		_mesh );
+}
+
+
+void SplitFrictionWallVC_Init(
+	SplitFrictionWallVC*						self,
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	/* General info */
+	self->type = SplitFrictionWallVC_Type;
+	self->_sizeOfSelf = sizeof(SplitFrictionWallVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _SplitFrictionWallVC_Delete;
+	self->_print = _SplitFrictionWallVC_Print;
+	self->_copy = _SplitFrictionWallVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)SplitFrictionWallVC_DefaultNew;
+	self->_construct = _SplitFrictionWallVC_Construct;
+	self->_build = _SplitFrictionWallVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _SplitFrictionWallVC_BuildSelf;
+	self->_printConcise = _SplitFrictionWallVC_PrintConcise;
+	self->_readDictionary = _SplitFrictionWallVC_ReadDictionary;
+	self->_getSet = _SplitFrictionWallVC_GetSet;
+	self->_getVariableCount = _SplitFrictionWallVC_GetVariableCount;
+	self->_getVariableIndex = _SplitFrictionWallVC_GetVariableIndex;
+	self->_getValueIndex = _SplitFrictionWallVC_GetValueIndex;
+	self->_getValueCount = _SplitFrictionWallVC_GetValueCount;
+	self->_getValue = _SplitFrictionWallVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_SplitFrictionWallVC_Init( self, _dictionaryEntryName, _mesh );
+}
+
+
+SplitFrictionWallVC* _SplitFrictionWallVC_New( 
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*			_build,
+	Stg_Component_InitialiseFunction*			_initialise,
+	Stg_Component_ExecuteFunction*			_execute,
+	Stg_Component_DestroyFunction*			_destroy,
+	Name								name, 
+	Bool								initFlag,
+	VariableCondition_BuildSelfFunc*		_buildSelf, 
+	VariableCondition_PrintConciseFunc*		_printConcise,
+	VariableCondition_ReadDictionaryFunc*		_readDictionary,
+	VariableCondition_GetSetFunc*			_getSet,
+	VariableCondition_GetVariableCountFunc*		_getVariableCount,
+	VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+	VariableCondition_GetValueIndexFunc*		_getValueIndex,
+	VariableCondition_GetValueCountFunc*		_getValueCount,
+	VariableCondition_GetValueFunc*			_getValue,
+	VariableCondition_ApplyFunc*			_apply, 
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh)
+{
+	SplitFrictionWallVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(SplitFrictionWallVC));
+	self = (SplitFrictionWallVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_SplitFrictionWallVC_Init( self, _dictionaryEntryName, _mesh );
+	}
+	
+	return self;
+}
+
+
+void _SplitFrictionWallVC_Init(
+	void*						wallVC, 
+	Name						_dictionaryEntryName, 
+	void*						_mesh )
+{
+	SplitFrictionWallVC*			self = (SplitFrictionWallVC*)wallVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_mesh = (Mesh*)_mesh;
+	self->_wall = SplitFrictionWallVC_Wall_Size;
+	self->_entryTbl = 0;
+	self->_entryCount = 0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _SplitFrictionWallVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	SplitFrictionWallVC*			self = (SplitFrictionWallVC*)variableCondition;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	SplitFrictionWallVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+	
+	if (vcDictVal)
+	{
+		char*	wallStr;
+		
+		/* Obtain which wall */
+		wallStr = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "wall" ));
+		if (!strcasecmp(wallStr, "back"))
+			self->_wall = SplitFrictionWallVC_Wall_Back;
+		else if (!strcasecmp(wallStr, "left"))
+			self->_wall = SplitFrictionWallVC_Wall_Left;
+		else if (!strcasecmp(wallStr, "bottom"))
+			self->_wall = SplitFrictionWallVC_Wall_Bottom;
+		else if (!strcasecmp(wallStr, "right"))
+			self->_wall = SplitFrictionWallVC_Wall_Right;
+		else if (!strcasecmp(wallStr, "top"))
+			self->_wall = SplitFrictionWallVC_Wall_Top;
+		else if (!strcasecmp(wallStr, "front"))
+			self->_wall = SplitFrictionWallVC_Wall_Front;
+		else {
+			assert( 0 );
+			self->_wall = SplitFrictionWallVC_Wall_Size; /* invalid entry */
+		}
+		
+		/* Obtain the variable entries */
+/* 		self->_entryCount = 0; */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( SplitFrictionWallVC_Entry, self->_entryCount, "SplitFrictionWallVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+							"definition of wallVC \"%s\" (applies to wall \"%s\"), the cond. func. applied to "
+							"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+							__func__, self->_dictionaryEntryName, SplitFrictionWallVC_WallEnumToStr[self->_wall],
+							self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+													self->_entryTbl[entry_I].value.as.typeArray.size, "SplitFrictionWallVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				 0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_wall = SplitFrictionWallVC_Wall_Size;
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _SplitFrictionWallVC_Delete(void* wallVC)
+{
+	SplitFrictionWallVC*	self = (SplitFrictionWallVC*)wallVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _SplitFrictionWallVC_Print(void* wallVC, Stream* stream)
+{
+	SplitFrictionWallVC*				self = (SplitFrictionWallVC*)wallVC;
+	SplitFrictionWallVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "SplitFrictionWallVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_wall: %s\n", self->_wall == SplitFrictionWallVC_Wall_Front ? "Front" :
+			self->_wall == SplitFrictionWallVC_Wall_Back ? "Back" : self->_wall == SplitFrictionWallVC_Wall_Left ? "Left" :
+			self->_wall == SplitFrictionWallVC_Wall_Right ? "Right" : self->_wall == SplitFrictionWallVC_Wall_Top ? "Top" :
+			self->_wall == SplitFrictionWallVC_Wall_Bottom ? "Bottom" : "None");
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+			case VC_ValueType_Double:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+				Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+				break;
+					
+			case VC_ValueType_Int:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+				Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+				break;
+					
+			case VC_ValueType_Short:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+				Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+				break;
+					
+			case VC_ValueType_Char:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+				Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+				break;
+					
+			case VC_ValueType_Ptr:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+				Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+				break;
+					
+			case VC_ValueType_DoubleArray:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+				Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+				Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+				if (self->_entryTbl[entry_I].value.as.typeArray.array)
+					for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+						Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+				break;
+					
+			case VC_ValueType_CFIndex:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+				Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+				break;
+			}
+		}
+	Journal_Printf( info, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _SplitFrictionWallVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	SplitFrictionWallVC*		self = (SplitFrictionWallVC*)wallVC;
+	SplitFrictionWallVC*		newSplitFrictionWallVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSplitFrictionWallVC = (SplitFrictionWallVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newSplitFrictionWallVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newSplitFrictionWallVC->_wall = self->_wall;
+	newSplitFrictionWallVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newSplitFrictionWallVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newSplitFrictionWallVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newSplitFrictionWallVC->_entryTbl = Memory_Alloc_Array( SplitFrictionWallVC_Entry, newSplitFrictionWallVC->_entryCount, "SplitFrictionWallVC->_entryTbl");
+			memcpy( newSplitFrictionWallVC->_entryTbl, self->_entryTbl, sizeof(SplitFrictionWallVC_Entry) * newSplitFrictionWallVC->_entryCount );
+			PtrMap_Append( map, newSplitFrictionWallVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newSplitFrictionWallVC->_mesh = self->_mesh;
+		newSplitFrictionWallVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSplitFrictionWallVC;
+}
+
+
+void _SplitFrictionWallVC_Build(  void* wallVC, void* data ) {
+	SplitFrictionWallVC*			self = (SplitFrictionWallVC*)wallVC;
+	
+	_SplitFrictionWallVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+	
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _SplitFrictionWallVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _SplitFrictionWallVC_BuildSelf(  void* wallVC, void* data ) {
+	SplitFrictionWallVC*			self = (SplitFrictionWallVC*)wallVC;
+	
+	if( self->_mesh ) {
+		Stg_Component_Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _SplitFrictionWallVC_GetSet(void* variableCondition)
+{
+	SplitFrictionWallVC*		self = (SplitFrictionWallVC*)variableCondition;
+	IndexSet	*set = NULL;
+	Stream*     warningStr = Journal_Register( Error_Type, self->type );
+	unsigned	nDims;
+	unsigned*	gSize;
+
+	nDims = Mesh_GetDimSize( self->_mesh );
+	gSize = (unsigned*)ExtensionManager_Get( self->_mesh->info, self->_mesh, 
+						 ExtensionManager_GetHandle( self->_mesh->info, 
+									     "cartesianGlobalSize" ) );
+	switch (self->_wall) {
+	case SplitFrictionWallVC_Wall_Front:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalFrontSet(self->_mesh);
+		}
+		break;
+			
+	case SplitFrictionWallVC_Wall_Back:
+		if ( nDims < 3 || !gSize[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBackSet(self->_mesh);
+		}	
+		break;
+			
+	case SplitFrictionWallVC_Wall_Top:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+		}	
+		break;
+			
+	case SplitFrictionWallVC_Wall_Bottom:
+		if ( nDims < 2 || !gSize[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+		}	
+		break;
+			
+	case SplitFrictionWallVC_Wall_Left:
+		if ( !gSize[0] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+		}	
+		break;
+			
+	case SplitFrictionWallVC_Wall_Right:
+		if ( !gSize[0] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					SplitFrictionWallVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New(Mesh_GetDomainSize( self->_mesh, MT_VERTEX ));	
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalRightSet(self->_mesh);
+		}
+		break;
+			
+	case SplitFrictionWallVC_Wall_Size:
+	default:
+		assert(0);
+		break;
+	}
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _SplitFrictionWallVC_GetVariableCount(void* variableCondition, Index globalIndex)
+{
+	SplitFrictionWallVC*	self = (SplitFrictionWallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _SplitFrictionWallVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex)
+{
+	SplitFrictionWallVC*		self = (SplitFrictionWallVC*)variableCondition;
+	Variable_Index	searchedIndex = 0;
+	Stream*		errorStr = Journal_Register( Error_Type, self->type );
+	Name		varName;
+	
+	varName = self->_entryTbl[varIndex].varName;
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+	Journal_Firewall( ( searchedIndex < self->variable_Register->count ), errorStr, "Error- in %s: searching for index of "
+			  "varIndex %u (\"%s\") at global node number %u failed - register returned index %u, greater than "
+			  "count %u.\n", __func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _SplitFrictionWallVC_GetValueIndex(
+	void*				variableCondition, 
+	Index				globalIndex, 
+	VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _SplitFrictionWallVC_GetValueCount(void* variableCondition)
+{
+	SplitFrictionWallVC*	self = (SplitFrictionWallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _SplitFrictionWallVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex)
+{
+	SplitFrictionWallVC*	self = (SplitFrictionWallVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _SplitFrictionWallVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	SplitFrictionWallVC*		self = (SplitFrictionWallVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: ", self->type );
+	Journal_Printf( stream, "%s\n", 
+			self->_wall == SplitFrictionWallVC_Wall_Front ? "Front" :
+			self->_wall == SplitFrictionWallVC_Wall_Back ? "Back" : 
+			self->_wall == SplitFrictionWallVC_Wall_Left ? "Left" :
+			self->_wall == SplitFrictionWallVC_Wall_Right ? "Right" : 
+			self->_wall == SplitFrictionWallVC_Wall_Top ? "Top" :
+			self->_wall == SplitFrictionWallVC_Wall_Bottom ? "Bottom" : "None" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SplitFrictionWallVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SplitFrictionWallVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,193 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This file may be distributed under the terms of the VPAC Public License
+** as defined by VPAC of Australia and appearing in the file
+** LICENSE.VPL included in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: SplitFrictionWallVC.h 3291 2005-10-18 00:05:33Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Modified 2006 Walter Landry to implement Split Friction Wall VC's */
+
+#ifndef __Gale_BoundaryConditions_SplitFrictionWallVC_h__
+#define __Gale_BoundaryConditions_SplitFrictionWallVC_h__
+	
+
+	extern const Type SplitFrictionWallVC_Type;
+	
+	extern const char* SplitFrictionWallVC_WallEnumToStr[SplitFrictionWallVC_Wall_Size];
+	
+	#define __SplitFrictionWallVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _SplitFrictionWallVC_Entry { __SplitFrictionWallVC_Entry };
+	
+	
+	#define __SplitFrictionWallVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		SplitFrictionWallVC_Wall			_wall; \
+		SplitFrictionWallVC_Entry_Index		_entryCount; \
+		SplitFrictionWallVC_Entry*			_entryTbl; \
+		Mesh*				_mesh;
+
+	struct SplitFrictionWallVC { __SplitFrictionWallVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*	SplitFrictionWallVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	SplitFrictionWallVC*				SplitFrictionWallVC_DefaultNew( Name name );
+
+	SplitFrictionWallVC*				SplitFrictionWallVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				SplitFrictionWallVC_Init(
+						SplitFrictionWallVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	SplitFrictionWallVC*				_SplitFrictionWallVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy,
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*			_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name						name, 
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				_SplitFrictionWallVC_Init(
+						void*						wallVC, 
+						Name						_dictionaryEntryName, 
+						void*						_mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_SplitFrictionWallVC_Delete( void* wallVC );
+	
+	void				_SplitFrictionWallVC_Print( void* wallVC, Stream* stream );
+	
+	/* Copy */
+	#define SplitFrictionWallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SplitFrictionWallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _SplitFrictionWallVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_SplitFrictionWallVC_Build(  void* wallVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_SplitFrictionWallVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_SplitFrictionWallVC_BuildSelf( void* wallVC, void* data );
+	
+	void				_SplitFrictionWallVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_SplitFrictionWallVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_SplitFrictionWallVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_SplitFrictionWallVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_SplitFrictionWallVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_SplitFrictionWallVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_SplitFrictionWallVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_SplitFrictionWallVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_SplitFrictionWallVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/SplitFrictionWallVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/SplitFrictionWallVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SplitFrictionWallVC</param>
+<param name="Author">...</param>
+<param name="Organisation">CIG</param>
+<param name="Project">Gale</param>
+<param name="Location">./Gale/BoundaryConditions/src/</param>
+<param name="Project Web">http://geodynamics.org</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC. Copyright (c) 2006 California Institute of Technology</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+<!-- 	<struct> -->
+<!-- 		<param name="Essential">True</param> -->
+<!-- 		<param name="Name">vx_left</param> -->
+<!-- 		<param name="Type">double</param> -->
+<!-- 		<param name="Description">Velocity of the the left part</param> -->
+<!-- 	</struct> -->
+<!-- 	<struct> -->
+<!-- 		<param name="Essential">True</param> -->
+<!-- 		<param name="Name">vx_right</param> -->
+<!-- 		<param name="Type"></param> -->
+<!-- 		<param name="Description">Velocity of the right part</param> -->
+<!-- 	</struct> -->
+<!-- 	<struct> -->
+<!-- 		<param name="Essential">True</param> -->
+<!-- 		<param name="Name">middle</param> -->
+<!-- 		<param name="Type">double</param> -->
+<!-- 		<param name="Description">Where the two parts join.</param> -->
+<!-- 	</struct> -->
+
+</list>
+
+<!-- <list name="Dependencies"> -->
+<!-- 	<struct> -->
+<!-- 		<param name="Essential">True</param> -->
+<!-- 		<param name="Type">RheologyMaterial</param> -->
+<!-- 		<param name="Description">Determines the frictional parameters of the wall.</param> -->
+<!-- 	</struct> -->
+
+	<!--/list-->
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/StripRemesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/StripRemesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,346 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: StripRemesher.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "Remesher.h"
+#include "SemiRegDeform.h"
+#include "StripRemesher.h"
+
+
+/* Textual name of this class */
+const Type StripRemesher_Type = "StripRemesher";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+#define REMESHER_DEFARGS				\
+	sizeof(StripRemesher),				\
+	StripRemesher_Type,				\
+	_StripRemesher_Delete,				\
+	_StripRemesher_Print,				\
+	NULL,						\
+	(void*(*)(Name))_StripRemesher_DefaultNew,	\
+	_StripRemesher_Construct,			\
+	_StripRemesher_Build,				\
+	_StripRemesher_Initialise,			\
+	_StripRemesher_Execute,				\
+	_StripRemesher_Destroy,				\
+	name,						\
+	False,						\
+	_StripRemesher_SetMesh
+
+
+StripRemesher* StripRemesher_New( Name name ) {
+	return _StripRemesher_New( REMESHER_DEFARGS );
+}
+
+
+StripRemesher* _StripRemesher_New( CLASS_ARGS, 
+				   COMPONENT_ARGS, 
+				   REMESHER_ARGS )
+{
+	StripRemesher*	self;
+
+	/* Allocate memory. */
+	self = (StripRemesher*)_Remesher_New( _sizeOfSelf,
+					    type,
+					    _delete,
+					    _print, 
+					    _copy, 
+					    _defaultConstructor, 
+					    _construct, 
+					    _build, 
+					    _initialise, 
+					    _execute, 
+					    _destroy, 
+					    name, 
+					      initFlag, 
+					      setMeshFunc );
+
+	/* StripRemesher info */
+	if( initFlag ) {
+		_StripRemesher_Init( self );
+	}
+
+	return self;
+}
+
+
+void StripRemesher_Init( StripRemesher* self ) {
+	assert( 0 ); /* TODO */
+#if 0
+	/* General info */
+	self->type = StripRemesher_Type;
+	self->_sizeOfSelf = sizeof(StripRemesher);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _StripRemesher_Delete;
+	self->_print = _StripRemesher_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* StripRemesher info */
+	_StripRemesher_Init( self );
+#endif
+}
+
+
+void _StripRemesher_Init( StripRemesher* self ) {
+	/* StripRemesher info */
+	memset( &self->nDims, 
+		0, 
+		(size_t)&self->srd - (size_t)&self->nDims + sizeof(SemiRegDeform*) );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _StripRemesher_Delete( void* stripRemesher ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	/* Delete the class itself */
+	_StripRemesher_Free( self );
+
+	/* Delete parent */
+	_Stg_Component_Delete( stripRemesher );
+}
+
+
+void _StripRemesher_Print( void* stripRemesher, Stream* stream ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+	Stream*		myStream;
+	
+	/* Set the Journal for printing informations */
+	myStream = Journal_Register( InfoStream_Type, "StripRemesherStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+
+	/* General info */
+	Journal_Printf( myStream, "StripRemesher (ptr): (%p)\n", self );
+
+	/* Virtual info */
+
+	/* StripRemesher info */
+}
+
+
+StripRemesher* _StripRemesher_DefaultNew( Name name ) {
+	return _StripRemesher_New( REMESHER_DEFARGS );
+}
+
+
+void _StripRemesher_Construct( void* stripRemesher, Stg_ComponentFactory* cf, void* data ) {
+	StripRemesher*		self = (StripRemesher*)stripRemesher;
+	Dictionary_Entry_Value*	dimLst;
+
+	assert( self );
+	assert( cf );
+	assert( cf->componentDict );
+
+	_Remesher_Construct( self, cf, data );
+
+	/* Extract enabled dimensions. */
+	dimLst = Dictionary_Entry_Value_GetMember( Dictionary_Get( cf->componentDict, self->name ), "dims" );
+	if( dimLst ) {
+		unsigned	dim_i;
+
+		self->nDims = Dictionary_Entry_Value_GetCount( dimLst );
+		self->deformDims = Memory_Alloc_Array_Unnamed( unsigned, self->nDims );
+		for( dim_i = 0; dim_i < self->nDims; dim_i++ ) {
+			self->deformDims[dim_i] = Dictionary_Entry_Value_AsBool( Dictionary_Entry_Value_GetElement( dimLst, dim_i ) );
+		}
+	}
+}
+
+
+void _StripRemesher_Build( void* stripRemesher, void* data ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	assert( self );
+
+	if( !self->meshType ) {
+		return;
+	}
+
+	assert( self->mesh );
+
+	/* Build parent. */
+	_Remesher_Build( self, data );
+
+	/* Build the SRD. */
+	StripRemesher_SetDims( self, self->deformDims );
+}
+
+
+void _StripRemesher_Initialise( void* stripRemesher, void* data ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	assert( self );
+
+	/* Initialise parent. */
+	_Remesher_Initialise( self, data );
+}
+
+
+void _StripRemesher_Execute( void* stripRemesher, void* data ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	assert( self );
+	assert( self->mesh );
+	/* TODO: remaining asserts */
+
+	SemiRegDeform_Deform( self->srd );
+}
+
+
+void _StripRemesher_Destroy( void* stripRemesher, void* data ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	assert( self );
+
+	/* TODO: If delete deletes, what does destroy do? */
+}
+
+
+void _StripRemesher_SetMesh( void* stripRemesher, Mesh* mesh ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+
+	assert( self );
+
+	/* Kill all internals. */
+	_StripRemesher_Free( self );
+
+	/* Store the mesh. */
+	self->mesh = mesh;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void StripRemesher_SetDims( void* stripRemesher, Bool* dims ) {
+	StripRemesher*	self = (StripRemesher*)stripRemesher;
+	unsigned	d_i;
+
+	assert( self );
+	assert( self->mesh );
+	assert( dims );
+
+	if( self->srd ) {
+		Stg_Class_Delete( self->srd );
+	}
+
+	self->srd = SemiRegDeform_New( "" );
+	SemiRegDeform_SetMesh( self->srd, self->mesh );
+
+	for( d_i = 0; d_i < Mesh_GetDimSize( self->srd->mesh ); d_i++ ) {
+		IJK	ijkLow;
+		IJK	ijkUpp;
+
+		if( !dims[d_i] ) {
+			continue;
+		}
+
+		_StripRemesher_BuildStrips( self->srd, 0, d_i, 
+					    ijkLow, ijkUpp );
+	}
+
+	/* Build and initialise the SRD. */
+	Build( self->srd, NULL, False );
+	Initialise( self->srd, NULL, False );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _StripRemesher_Free( StripRemesher* self ) {
+	assert( self );
+
+	if( self->srd ) {
+		Stg_Class_Delete( self->srd );
+		self->srd = NULL;
+	}
+}
+
+
+void _StripRemesher_BuildStrips( SemiRegDeform* srd, unsigned dim, unsigned deformDim, 
+				 IJK ijkLow, IJK ijkUpp )
+{
+	unsigned	n_i;
+	Grid*		vertGrid;
+
+	vertGrid = *(Grid**)ExtensionManager_Get( srd->mesh->info, srd->mesh, 
+						  ExtensionManager_GetHandle( srd->mesh->info, "vertexGrid" ) );
+
+	if( dim < Mesh_GetDimSize( srd->mesh ) ) {
+		if( dim != deformDim ) {
+			for( n_i = 0; n_i < vertGrid->sizes[dim]; n_i++ ) {
+				ijkLow[dim] = n_i;
+				ijkUpp[dim] = n_i;
+				_StripRemesher_BuildStrips( srd, dim + 1, deformDim, 
+							    ijkLow, ijkUpp );
+			}
+		}
+		else {
+			ijkLow[dim] = 0;
+			ijkUpp[dim] = vertGrid->sizes[dim] - 1;
+			_StripRemesher_BuildStrips( srd, dim + 1, deformDim, 
+						    ijkLow, ijkUpp );
+		}
+	}
+	else {
+		unsigned	low, upp;
+
+		low = Grid_Project( vertGrid, ijkLow );
+		upp = Grid_Project( vertGrid, ijkUpp );
+		SemiRegDeform_AddStrip( srd, low, upp );
+	}
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/StripRemesher.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/StripRemesher.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,114 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: StripRemesher.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Domain_Utils_StripRemesher_h__
+#define __StGermain_Domain_Utils_StripRemesher_h__
+
+	/* Textual name of this class. */
+	extern const Type StripRemesher_Type;
+
+	/* Virtual function types. */
+
+	/* Class contents. */
+	#define __StripRemesher					\
+		/* General info */				\
+		__Remesher					\
+								\
+		/* Virtual info */				\
+								\
+		/* StripRemesher info ... */			\
+		unsigned			nDims;		\
+		Bool*				deformDims;	\
+		SemiRegDeform*			srd;
+
+	struct StripRemesher { __StripRemesher };
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create a StripRemesher */
+	StripRemesher* StripRemesher_New( Name name );
+
+	/* Creation implementation */
+	StripRemesher* _StripRemesher_New( CLASS_ARGS, 
+					   COMPONENT_ARGS, 
+					   REMESHER_ARGS );
+
+	/* Initialise a StripRemesher */
+	void StripRemesher_Init( StripRemesher* self );
+
+	/* Initialisation implementation functions */
+	void _StripRemesher_Init( StripRemesher* self );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _StripRemesher_Delete( void* stripRemesher );
+	void _StripRemesher_Print( void* stripRemesher, Stream* stream );
+	StripRemesher* _StripRemesher_DefaultNew( Name name );
+	void _StripRemesher_Construct( void* stripRemesher, Stg_ComponentFactory* cf, void* data );
+	void _StripRemesher_Build( void* stripRemesher, void* data );
+	void _StripRemesher_Initialise( void* stripRemesher, void* data );
+	void _StripRemesher_Execute( void* stripRemesher, void* data );
+	void _StripRemesher_Destroy( void* stripRemesher, void* data );
+
+	void _StripRemesher_SetMesh( void* stripRemesher, Mesh* mesh );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void StripRemesher_SetDims( void* stripRemesher, Bool* dims );
+
+
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void _StripRemesher_Free( StripRemesher* self );
+	void _StripRemesher_BuildStrips( SemiRegDeform* srd, unsigned dim, unsigned deformDim, 
+					 IJK ijkLow, IJK ijkUpp );
+
+#endif
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/StripRemesher.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/StripRemesher.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">StripRemesher</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StgFEM</param>
+<param name="Location">./StgFEM/SLE/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgfem/WebHome</param>
+<param name="Copyright">Copyright (C) 2004-2005 VPAC.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense</param>
+<param name="Parent"></param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegratee.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegratee.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,626 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student Monash University, VPAC. (davidm at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TimeIntegratee.c 4137 2007-06-07 05:46:46Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "TimeIntegrator.h"
+#include "TimeIntegratee.h"
+#include "FieldVariable.h"
+
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type TimeIntegratee_Type = "TimeIntegratee";
+
+TimeIntegratee* TimeIntegratee_New( 
+		Name                                       name,
+		TimeIntegrator*                            timeIntegrator, 
+		Variable*                                  variable,
+		Index                                      dataCount, 
+		Stg_Component**                            data,
+		Bool                                       allowFallbackToFirstOrder )
+{
+	TimeIntegratee*	self;
+
+	self = (TimeIntegratee*) _TimeIntegratee_DefaultNew( name );
+	_TimeIntegratee_Init( self, timeIntegrator, variable, dataCount, data, allowFallbackToFirstOrder );
+	return self;
+}
+
+TimeIntegratee* _TimeIntegratee_New( 
+		SizeT                                      _sizeOfSelf,
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print,
+		Stg_Class_CopyFunction*                    _copy, 
+		Stg_Component_DefaultConstructorFunction*  _defaultConstructor,
+		Stg_Component_ConstructFunction*           _construct,
+		Stg_Component_BuildFunction*               _build,
+		Stg_Component_InitialiseFunction*          _initialise,
+		Stg_Component_ExecuteFunction*             _execute,
+		Stg_Component_DestroyFunction*             _destroy,
+		TimeIntegratee_CalculateTimeDerivFunction* _calculateTimeDeriv,
+		TimeIntegratee_IntermediateFunction*       _intermediate,
+		Name                                       name )
+{
+	TimeIntegratee*	self;
+	
+	assert( _sizeOfSelf >= sizeof(TimeIntegratee) );
+	
+	/* General info */
+	self = (TimeIntegratee*)_Stg_Component_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute, 
+			_destroy,
+			name, 
+			NON_GLOBAL );
+
+	/* virtual info */
+	self->_calculateTimeDeriv = _calculateTimeDeriv;
+	self->_intermediate = _intermediate;
+	
+	return self;
+}
+
+void _TimeIntegratee_Init( 
+		void*                                      timeIntegratee, 
+		TimeIntegrator*                            timeIntegrator, 
+		Variable*                                  variable, 
+		Index                                      dataCount, 
+		Stg_Component**                            data,
+		Bool                                       allowFallbackToFirstOrder )
+{
+	TimeIntegratee* self = (TimeIntegratee*)timeIntegratee;
+	
+	self->debug          = Journal_Register( Debug_Type, self->type );
+	self->variable       = variable;
+	self->dataCount      = dataCount;
+	self->timeIntegrator = timeIntegrator;
+	self->data           = Memory_Alloc_Array( Stg_Component*, dataCount, "data" );
+	self->allowFallbackToFirstOrder = allowFallbackToFirstOrder;
+	memcpy( self->data, data, dataCount * sizeof(Stg_Component*) );
+
+	TimeIntegrator_Add( timeIntegrator, self );
+}
+
+void _TimeIntegratee_Delete( void* timeIntegratee ) {
+	TimeIntegratee* self = (TimeIntegratee*)timeIntegratee;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+	
+	Memory_Free( self->data );
+
+	/* Stg_Class_Delete parent*/
+	_Stg_Component_Delete( self );
+}
+
+void _TimeIntegratee_Print( void* timeIntegratee, Stream* stream ) {
+	TimeIntegratee* self = (TimeIntegratee*)timeIntegratee;
+
+	/* General info */
+	Journal_DPrintf( self->debug, "TimeIntegratee - '%s'\n", self->name );
+	Journal_PrintPointer( stream, self );
+	Stream_Indent( stream );
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* Virtual info */
+
+	/* Regular Info */
+	
+	Stream_UnIndent( stream );
+}
+
+void* _TimeIntegratee_Copy( void* timeIntegratee, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	TimeIntegratee*	self = (TimeIntegratee*)timeIntegratee;
+	TimeIntegratee*	newTimeIntegratee;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+	/* TODO */ abort();
+
+	return (void*)newTimeIntegratee;
+}
+
+void* _TimeIntegratee_DefaultNew( Name name ) {
+	return (void*) _TimeIntegratee_New( 
+		sizeof(TimeIntegratee), 
+		TimeIntegratee_Type, 
+		_TimeIntegratee_Delete,
+		_TimeIntegratee_Print, 
+		_TimeIntegratee_Copy, 
+		_TimeIntegratee_DefaultNew, 
+		_TimeIntegratee_Construct, 
+		_TimeIntegratee_Build, 
+		_TimeIntegratee_Initialise,
+		_TimeIntegratee_Execute,
+		_TimeIntegratee_Destroy, 
+		_TimeIntegratee_AdvectionTimeDeriv,
+		_TimeIntegratee_Intermediate,
+		name );
+}
+
+void _TimeIntegratee_Construct( void* timeIntegratee, Stg_ComponentFactory* cf, void* data ) {
+	TimeIntegratee*         self                    = (TimeIntegratee*)timeIntegratee;
+	Index                   dataCount               = 0;
+	Stg_Component**         initData                = NULL;
+	Variable*               variable                = NULL;
+	TimeIntegrator*         timeIntegrator          = NULL;
+	Bool                    allowFallbackToFirstOrder = False;
+	
+	variable       =  Stg_ComponentFactory_ConstructByKey( cf, self->name, Variable_Type,       Variable,       False, data ) ;
+	timeIntegrator =  Stg_ComponentFactory_ConstructByKey( cf, self->name, TimeIntegrator_Type, TimeIntegrator, True, data ) ;
+	initData = Stg_ComponentFactory_ConstructByList( 
+		cf, 
+		self->name, 
+		"data", 
+		Stg_ComponentFactory_Unlimited, 
+		Stg_Component, 
+		False, 
+		&dataCount, 
+		data );
+	allowFallbackToFirstOrder = Stg_ComponentFactory_GetBool( cf, self->name, "allowFallbackToFirstOrder", False );	
+
+	_TimeIntegratee_Init( self, timeIntegrator, variable, dataCount, initData, allowFallbackToFirstOrder );
+
+	if( initData != NULL )
+		Memory_Free( initData );
+}
+
+void _TimeIntegratee_Build( void* timeIntegratee, void* data ) {
+	TimeIntegratee* self = (TimeIntegratee*)timeIntegratee;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	Stg_Component_Build( self->variable, NULL, False );
+}
+
+void _TimeIntegratee_Initialise( void* timeIntegratee, void* data ) {
+	TimeIntegratee* self = (TimeIntegratee*)timeIntegratee;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+	Stg_Component_Initialise( self->variable, NULL, False );
+}
+
+void _TimeIntegratee_Execute( void* timeIntegratee, void* data ) {
+	TimeIntegratee*	self = (TimeIntegratee*)timeIntegratee;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+}
+	
+void _TimeIntegratee_Destroy( void* timeIntegratee, void* data ) {
+}
+
+/* +++ Virtual Functions +++ */
+void TimeIntegratee_FirstOrder( void* timeIntegratee, Variable* startValue, double dt ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	Variable*       variable       = self->variable;
+	double*         arrayDataPtr;
+	double*         startDataPtr;
+	double**        timeDeriv;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Index           array_I; 
+	Index           arrayCount;
+	Bool            successFlag = False;
+	Stream*         errorStream = Journal_Register( Error_Type, self->type );
+
+	Journal_DPrintf( self->debug, "In func %s for %s '%s'\n", __func__, self->type, self->name );
+
+	/* Update Variables */
+	Variable_Update( variable );
+	Variable_Update( startValue );
+	arrayCount     = variable->arraySize;
+
+	timeDeriv = Memory_Alloc_2DArray( double, arrayCount, componentCount, "Time Deriv" );
+	for( array_I = 0; array_I < arrayCount; array_I++ ) {
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv[array_I] );
+		Journal_Firewall( True == successFlag, errorStream,
+			"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+			"deriv for item %u in step %u, *failed*.\n",
+			__func__, self->name, self->type, array_I, 1 );
+	}
+
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		arrayDataPtr = Variable_GetPtrDouble( variable, array_I );
+		startDataPtr = Variable_GetPtrDouble( startValue, array_I );
+		
+		for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+			arrayDataPtr[ component_I ] = startDataPtr[ component_I ] + dt * timeDeriv[array_I][ component_I ];
+		}
+	
+		TimeIntegratee_Intermediate( self, array_I );
+	}
+
+	Memory_Free( timeDeriv );
+}
+
+void TimeIntegratee_SecondOrder( void* timeIntegratee, Variable* startValue, double dt ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	Variable*       variable       = self->variable;
+	double*         arrayDataPtr;
+	double*         startDataPtr;
+	double*         timeDeriv;
+	double*         startData;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Index           array_I; 
+	Index           arrayCount;
+	double          startTime      = TimeIntegrator_GetTime( self->timeIntegrator );
+	Bool            successFlag = False;
+	Stream*         errorStream = Journal_Register( Error_Type, self->type );
+
+	timeDeriv = Memory_Alloc_Array( double, componentCount, "Time Deriv" );
+	startData = Memory_Alloc_Array( double, componentCount, "StartData" );
+	memset( timeDeriv, 0, componentCount * sizeof( double ) );
+	memset( startData, 0, componentCount * sizeof( double ) );
+	
+	/* Update Variables */
+	Variable_Update( variable );
+	Variable_Update( startValue );
+	arrayCount     = variable->arraySize;
+	
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		arrayDataPtr = Variable_GetPtrDouble( variable, array_I );
+		startDataPtr = Variable_GetPtrDouble( startValue, array_I );
+
+		TimeIntegrator_SetTime( self->timeIntegrator, startTime );
+
+		/* Store Original Value in case startValue == self->variable */
+		memcpy( startData, startDataPtr, sizeof( double ) * componentCount );
+
+		/* Do Predictor Step */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+		Journal_Firewall( True == successFlag, errorStream,
+			"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+			"deriv for item %u in step %u, *failed*.\n",
+			__func__, self->name, self->type, array_I, 1 );
+		
+		for ( component_I = 0 ; component_I < componentCount ; component_I++ ) 
+			arrayDataPtr[ component_I ] = startData[ component_I ] + 0.5 * dt * timeDeriv[ component_I ];
+		TimeIntegratee_Intermediate( self, array_I );
+
+		TimeIntegrator_SetTime( self->timeIntegrator, startTime + 0.5 * dt );
+
+		/* Do Corrector Step */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+
+		if ( True == successFlag ) {
+			for ( component_I = 0 ; component_I < componentCount ; component_I++ ) 
+				arrayDataPtr[ component_I ] = startData[ component_I ] + dt * timeDeriv[ component_I ];
+			
+			TimeIntegratee_Intermediate( self, array_I );
+		}
+		else {
+			Journal_Firewall( True == self->allowFallbackToFirstOrder, errorStream,
+				"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+				"deriv for item %u in step %u, *failed*, and self->allowFallbackToFirstOrder "
+				"not enabled.\n", __func__, self->name, self->type, array_I, 2 );
+				
+			_TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( self,
+				arrayDataPtr, startData, startTime, dt,
+				timeDeriv, array_I );
+		}
+	}
+
+	Memory_Free( timeDeriv );
+	Memory_Free( startData );
+}
+
+void TimeIntegratee_FourthOrder( void* timeIntegratee, Variable* startValue, double dt ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	Variable*       variable       = self->variable;
+	double*         arrayDataPtr;
+	double*         startDataPtr;
+	double*         timeDeriv;
+	double*         finalTimeDeriv;
+	double*         startData;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Index           array_I; 
+	Index           arrayCount;
+	double          startTime      = TimeIntegrator_GetTime( self->timeIntegrator );
+	Bool            successFlag = False;
+	Stream*         errorStream = Journal_Register( Error_Type, self->type );
+
+	timeDeriv      = Memory_Alloc_Array( double, componentCount, "Time Deriv" );
+	startData      = Memory_Alloc_Array( double, componentCount, "StartData" );
+	finalTimeDeriv = Memory_Alloc_Array( double, componentCount, "StartData" );
+	memset( timeDeriv,      0, componentCount * sizeof( double ) );
+	memset( startData,      0, componentCount * sizeof( double ) );
+	memset( finalTimeDeriv, 0, componentCount * sizeof( double ) );
+	
+	/* Update Variables */
+	Variable_Update( variable );
+	Variable_Update( startValue );
+	arrayCount     = variable->arraySize;
+	
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		arrayDataPtr = Variable_GetPtrDouble( variable, array_I );
+		startDataPtr = Variable_GetPtrDouble( startValue, array_I );
+		
+		TimeIntegrator_SetTime( self->timeIntegrator, startTime );
+
+		/* Store Original Value in case startValue == self->variable */
+		memcpy( startData, startDataPtr, sizeof( double ) * componentCount );
+
+		/* Do first Step - store K1 in finalTimeDeriv and update for next step */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, finalTimeDeriv );
+		Journal_Firewall( True == successFlag, errorStream,
+			"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+			"deriv for item %u in step %u, *failed*.\n",
+			__func__, self->name, self->type, array_I, 1 );
+
+		for ( component_I = 0 ; component_I < componentCount ; component_I++ ) 
+			arrayDataPtr[ component_I ] = startData[ component_I ] + 0.5 * dt * finalTimeDeriv[ component_I ];
+		TimeIntegratee_Intermediate( self, array_I );
+
+		TimeIntegrator_SetTime( self->timeIntegrator, startTime + 0.5 * dt );
+
+		/* Do Second Step - add 2xK2 value to finalTimeDeriv and update for next step */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+		if ( True == successFlag ) {
+			for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+				arrayDataPtr[ component_I ] = startData[ component_I ] + 0.5 * dt * timeDeriv[ component_I ];
+				finalTimeDeriv[ component_I ] += 2.0 * timeDeriv[ component_I ];
+			}
+			TimeIntegratee_Intermediate( self, array_I );
+		}
+		else {
+			Journal_Firewall( True == self->allowFallbackToFirstOrder, errorStream,
+				"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+				"deriv for item %u in step %u, *failed*, and self->allowFallbackToFirstOrder "
+				"not enabled.\n", __func__, self->name, self->type, array_I, 2 );
+				
+			_TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( self,
+				arrayDataPtr, startData, startTime, dt,
+				timeDeriv, array_I );
+		}
+
+		/* Do Third Step - add 2xK3 value to finalTimeDeriv and update for next step */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+		if ( True == successFlag ) {
+			for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+				arrayDataPtr[ component_I ] = startData[ component_I ] + dt * timeDeriv[ component_I ];
+				finalTimeDeriv[ component_I ] += 2.0 * timeDeriv[ component_I ];
+			}
+			TimeIntegratee_Intermediate( self, array_I );
+		}
+		else {
+			Journal_Firewall( True == self->allowFallbackToFirstOrder, errorStream,
+				"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+				"deriv for item %u in step %u, *failed*, and self->allowFallbackToFirstOrder "
+				"not enabled.\n", __func__, self->name, self->type, array_I, 3 );
+				
+			_TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( self,
+				arrayDataPtr, startData, startTime, dt,
+				timeDeriv, array_I );
+		}
+
+		TimeIntegrator_SetTime( self->timeIntegrator, startTime + dt );
+
+		/* Do Fourth Step - 'K1 + 2K2 + 2K3' and K4 finalTimeDeriv to find final value */
+		successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+		if ( True == successFlag ) {
+			for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+				arrayDataPtr[ component_I ] = startData[ component_I ] + 
+					dt/6.0 * (timeDeriv[ component_I ] + finalTimeDeriv[ component_I ] );
+			}		
+			TimeIntegratee_Intermediate( self, array_I );
+		}
+		else {
+			Journal_Firewall( True == self->allowFallbackToFirstOrder, errorStream,
+				"Error - in %s(), for TimeIntegratee \"%s\" of type %s: When trying to find time "
+				"deriv for item %u in step %u, *failed*, and self->allowFallbackToFirstOrder "
+				"not enabled.\n", __func__, self->name, self->type, array_I, 4 );
+				
+			_TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( self,
+				arrayDataPtr, startData, startTime, dt,
+				timeDeriv, array_I );
+		}
+	}
+
+	Memory_Free( timeDeriv );
+	Memory_Free( startData );
+	Memory_Free( finalTimeDeriv );
+}
+
+
+/* Note : this function is used to apply to just one item/particle - see the array_I parameter */
+void _TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( 
+		TimeIntegratee* self,
+		double*         arrayDataPtr,
+		double*         startData,
+		double          startTime,
+		double          dt,
+		double*         timeDeriv,
+		Index           array_I )
+{
+	Variable*       variable       = self->variable;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Bool            successFlag = False;
+
+	/* First, go back to initial positions, so we can re-calculate the time derivative there */
+	for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+		arrayDataPtr[ component_I ] = startData[ component_I ];
+	}	
+	TimeIntegratee_Intermediate( self, array_I );
+
+	/* Now recalculate time deriv at start positions, then do a full dt first order update from
+	 * there */
+	TimeIntegrator_SetTime( self->timeIntegrator, startTime );
+	successFlag = TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+	for ( component_I = 0 ; component_I < componentCount ; component_I++ ) 
+		arrayDataPtr[ component_I ] = startData[ component_I ] + dt * timeDeriv[ component_I ];
+	TimeIntegratee_Intermediate( self, array_I );
+}
+
+
+/** +++ Sample Time Deriv Functions +++ **/
+
+
+/** This function assumes that
+ *            the ODE that we are solving is \dot \phi = u(x,y) 
+ *            the velocity Field Variable is stored in data[0]
+ *            the variable being updated is the global coordinate of the object */
+Bool _TimeIntegratee_AdvectionTimeDeriv( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	TimeIntegratee*	     self          = (TimeIntegratee*) timeIntegratee;
+	FieldVariable*       velocityField = (FieldVariable*)  self->data[0];
+	double*              coord;
+	InterpolationResult  result;
+
+	/* Get Coordinate of Object using Variable */
+	coord = Variable_GetPtrDouble( self->variable, array_I );
+
+	result = FieldVariable_InterpolateValueAt( velocityField, coord, timeDeriv );
+
+	if ( result == OTHER_PROC || result == OUTSIDE_GLOBAL || isinf(timeDeriv[0]) || isinf(timeDeriv[1]) || 
+			( velocityField->dim == 3 && isinf(timeDeriv[2]) ) ) 
+	{
+		#if 0
+		Journal_Printf( Journal_Register( Error_Type, self->type ),
+			"Error in func '%s' for particle with index %u.\n\tPosition (%g, %g, %g)\n\tVelocity here is (%g, %g, %g)."
+			"\n\tInterpolation result is %s.\n",
+			__func__, array_I, coord[0], coord[1], coord[2], 
+			timeDeriv[0], timeDeriv[1], ( velocityField->dim == 3 ? timeDeriv[2] : 0.0 ),
+			InterpolationResultToStringMap[result]  );
+		return False;	
+		#endif
+	}
+
+	return True;
+}
+
+
+void _TimeIntegratee_Intermediate( void* timeIntegratee, Index array_I ) {}
+
+/* +++ Public Functions +++ */
+void TimeIntegratee_StoreTimeDeriv( void* timeIntegratee, Variable* timeDeriv ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	double*         arrayDataPtr;
+	Index           array_I; 
+	Index           arrayCount;
+
+	/* Update Variable */
+	Variable_Update( timeDeriv );
+	arrayCount = timeDeriv->arraySize;
+
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		arrayDataPtr = Variable_GetPtrDouble( timeDeriv, array_I );
+		TimeIntegratee_CalculateTimeDeriv( self, array_I, arrayDataPtr );
+	}
+}
+
+void TimeIntegratee_Add2TimesTimeDeriv( void* timeIntegratee, Variable* timeDerivVariable ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	Variable*       variable       = self->variable;
+	double*         timeDerivPtr;
+	double*         timeDeriv;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Index           array_I; 
+	Index           arrayCount;
+
+	timeDeriv = Memory_Alloc_Array( double, componentCount, "Time Deriv" );
+	memset( timeDeriv,      0, componentCount * sizeof( double ) );
+	
+	/* Update Variables */
+	Variable_Update( variable );
+	Variable_Update( timeDerivVariable );
+	arrayCount = variable->arraySize;
+	
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		TimeIntegratee_CalculateTimeDeriv( self, array_I, timeDeriv );
+		timeDerivPtr = Variable_GetPtrDouble( timeDerivVariable, array_I );
+		
+		for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+			timeDerivPtr[ component_I ] += 2.0 * timeDeriv[ component_I ];
+		}
+	}
+
+	Memory_Free( timeDeriv );
+}
+	
+
+void TimeIntegratee_FourthOrderFinalStep( void* timeIntegratee, Variable* startData, Variable* timeDerivVariable, double dt ) {
+	TimeIntegratee*	self           = (TimeIntegratee*)timeIntegratee;
+	Variable*       variable       = self->variable;
+	double*         k4;
+	double*         k1_2k2_2k3;
+	double*         startPtr;
+	double*         arrayPtr;
+	Index           component_I; 
+	Index           componentCount = *variable->dataTypeCounts;
+	Index           array_I; 
+	Index           arrayCount;
+
+	k4 = Memory_Alloc_Array( double, componentCount, "k4 Time Deriv" );
+	memset( k4, 0, componentCount * sizeof( double ) );
+	
+	/* Update Variables */
+	Variable_Update( variable );
+	Variable_Update( startData );
+	Variable_Update( timeDerivVariable );
+	arrayCount     = variable->arraySize;
+	
+	for ( array_I = 0 ; array_I < arrayCount ; array_I++ ) {
+		TimeIntegratee_CalculateTimeDeriv( self, array_I, k4 );
+
+		k1_2k2_2k3 = Variable_GetPtrDouble( timeDerivVariable, array_I );
+		arrayPtr = Variable_GetPtrDouble( variable, array_I );
+		startPtr = Variable_GetPtrDouble( startData, array_I );
+		
+		for ( component_I = 0 ; component_I < componentCount ; component_I++ ) {
+			arrayPtr[ component_I ] = startPtr[ component_I ] + dt/6.0 * ( k4[ component_I ] + k1_2k2_2k3[ component_I ] );
+		}
+		TimeIntegratee_Intermediate( self, array_I );
+	}
+
+	Memory_Free( k4 );
+}
+
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegratee.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegratee.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,147 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student Monash University, VPAC. (davidm at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Finite Element Constitutive Matrix object.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: TimeIntegratee.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_TimeIntegratee_h__
+#define __Domain_Utils_TimeIntegratee_h__
+	
+	typedef Bool (TimeIntegratee_CalculateTimeDerivFunction) ( void* timeIntegrator, Index array_I, double* timeDeriv );
+	typedef void (TimeIntegratee_IntermediateFunction) ( void* timeIntegrator, Index array_I );
+
+	extern const Type TimeIntegratee_Type;
+	
+	/* TimeIntegratee information */
+	#define __TimeIntegratee  \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		TimeIntegratee_CalculateTimeDerivFunction* _calculateTimeDeriv;  \
+		TimeIntegratee_IntermediateFunction*       _intermediate;  \
+		/* Other info */ \
+		TimeIntegrator*                            timeIntegrator;       \
+		Variable*                                  variable;             \
+		Index                                      dataCount;            \
+		Stg_Component**                            data;                 \
+		Bool                                       allowFallbackToFirstOrder; \
+		Stream*                                    debug;                \
+		
+	struct TimeIntegratee { __TimeIntegratee };
+	
+	/* Creation implementation / Virtual constructor */
+	TimeIntegratee* TimeIntegratee_New( 
+		Name                                   name, 
+		TimeIntegrator*                        timeIntegrator, 
+		Variable*                              variable, 
+		Index                                  dataCount, 
+		Stg_Component**                        data,
+		Bool                                   allowFallbackToFirstOrder );
+
+	TimeIntegratee* _TimeIntegratee_New( 
+		SizeT                                      _sizeOfSelf,
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print,
+		Stg_Class_CopyFunction*                    _copy, 
+		Stg_Component_DefaultConstructorFunction*  _defaultConstructor,
+		Stg_Component_ConstructFunction*           _construct,
+		Stg_Component_BuildFunction*               _build,
+		Stg_Component_InitialiseFunction*          _initialise,
+		Stg_Component_ExecuteFunction*             _execute,
+		Stg_Component_DestroyFunction*             _destroy,
+		TimeIntegratee_CalculateTimeDerivFunction* _calculateTimeDeriv,
+		TimeIntegratee_IntermediateFunction*       _intermediate,
+		Name                                       name );
+
+	void _TimeIntegratee_Init( 
+		void*                                      timeIntegratee, 
+		TimeIntegrator*                            timeIntegrator, 
+		Variable*                                  variable, 
+		Index                                      dataCount, 
+		Stg_Component**                            data,
+		Bool                                       allowFallbackToFirstOrder );
+		
+	/* 'Class' Virtual Functions */
+	void _TimeIntegratee_Delete( void* timeIntegrator );
+	void _TimeIntegratee_Print( void* timeIntegrator, Stream* stream );
+	#define TimeIntegratee_Copy( self ) \
+		(TimeIntegratee*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define TimeIntegratee_DeepCopy( self ) \
+		(TimeIntegratee*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _TimeIntegratee_Copy( void* timeIntegrator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Virtual Functions */
+	void* _TimeIntegratee_DefaultNew( Name name ) ;
+	void _TimeIntegratee_Construct( void* timeIntegratee, Stg_ComponentFactory* cf, void* data ) ;
+	void _TimeIntegratee_Build( void* timeIntegrator, void* data );
+	void _TimeIntegratee_Initialise( void* timeIntegrator, void* data );
+	void _TimeIntegratee_Execute( void* timeIntegrator, void* data );
+	void _TimeIntegratee_Destroy( void* timeIntegratee, void* data );
+
+	/* +++ Virtual Functions +++ */
+	#define TimeIntegratee_CalculateTimeDeriv( timeIntegratee, array_I, timeDeriv ) \
+		( ((TimeIntegratee*) timeIntegratee )->_calculateTimeDeriv( timeIntegratee, array_I, timeDeriv ) )
+	#define TimeIntegratee_Intermediate( timeIntegratee, array_I ) \
+		( ((TimeIntegratee*) timeIntegratee )->_intermediate( timeIntegratee, array_I ) )
+
+	/* +++ Private Functions +++ */
+	Bool _TimeIntegratee_AdvectionTimeDeriv( void* timeIntegratee, Index array_I, double* timeDeriv ) ;
+	void _TimeIntegratee_Intermediate( void* timeIntegratee, Index array_I );
+	void _TimeIntegratee_RewindToStartAndApplyFirstOrderUpdate( 
+		TimeIntegratee* self,
+		double*         arrayDataPtr,
+		double*         startData,
+		double          startTime,
+		double          dt,
+		double*         timeDeriv,
+		Index           array_I );
+
+	/* +++ Public Functions +++ */
+	void TimeIntegratee_FirstOrder( void* timeIntegrator, Variable* startValue, double dt );
+	void TimeIntegratee_SecondOrder( void* timeIntegrator, Variable* startValue, double dt );
+	void TimeIntegratee_FourthOrder( void* timeIntegrator, Variable* startValue, double dt );
+
+	void TimeIntegratee_StoreTimeDeriv( void* timeIntegratee, Variable* timeDeriv ) ;
+	void TimeIntegratee_Add2TimesTimeDeriv( void* timeIntegratee, Variable* timeDerivVariable ) ;
+	void TimeIntegratee_FourthOrderFinalStep( void* timeIntegratee, Variable* startData, Variable* timeDerivVariable, double dt ) ;
+
+	#define TimeIntegratee_GetTime( timeIntegratee ) \
+		TimeIntegrator_GetTime( ((TimeIntegratee*) timeIntegratee)->timeIntegrator ) 
+
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegratee.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegratee.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">TimeIntegratee</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">A general class which integrates each element in a Variable through time. It does this through a TimeDerivative method which it calls for each element in the Variable. This happens every time the TimeIntegrator that this object is attached to executes (This should happen on the AbstractContext_EP_Step EntryPoint.</param>
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">No</param>
+		<param name="Name">Variable</param>
+		<param name="Type">Variable</param>
+		<param name="Description">This is a variable containing all the elements that the TimeIntegrator is integrating through time.</param>
+	</struct>
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">TimeIntegrator</param>
+		<param name="Type">TimeIntegrator</param>
+		<param name="Description">This is the TimeIntegrator that this object will attach itself to. When this TimeIntegrator gets run, it will integrate this object through time.</param>
+	</struct>
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">dataName</param>
+		<param name="Type">Stg_Component</param>
+		<param name="Description">This is a list of Components that this class stores pointers to. This is so that you can get extra information in the TimeDerivative function if the user wants to.</param>
+	</struct>
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegrator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegrator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,676 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student Monash University, VPAC. (davidm at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: TimeIntegrator.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "TimeIntegrator.h"
+#include "TimeIntegratee.h"
+
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type TimeIntegrator_Type = "TimeIntegrator";
+
+TimeIntegrator* TimeIntegrator_New( 
+		Name                                       name,
+		unsigned int                               order, 
+		Bool                                       simultaneous, 
+		EntryPoint_Register*                       entryPoint_Register,
+		AbstractContext*                           context )
+{
+	TimeIntegrator* self;
+
+	self = _TimeIntegrator_DefaultNew( name );
+	_TimeIntegrator_Init( self, order, simultaneous, entryPoint_Register, context );
+
+	return self;
+}
+
+
+TimeIntegrator* _TimeIntegrator_New( 
+		SizeT                                     _sizeOfSelf,
+		Type                                      type,
+		Stg_Class_DeleteFunction*                 _delete,
+		Stg_Class_PrintFunction*                  _print,
+		Stg_Class_CopyFunction*                   _copy, 
+		Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+		Stg_Component_ConstructFunction*          _construct,
+		Stg_Component_BuildFunction*              _build,
+		Stg_Component_InitialiseFunction*         _initialise,
+		Stg_Component_ExecuteFunction*            _execute,
+		Stg_Component_DestroyFunction*            _destroy,
+		Name 							          name )
+{
+	TimeIntegrator*	self;
+	
+	assert( _sizeOfSelf >= sizeof(TimeIntegrator) );
+	
+	/* General info */
+	self = (TimeIntegrator*)_Stg_Component_New( 
+			_sizeOfSelf, 
+			type, 
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute, 
+			_destroy,
+			name, 
+			NON_GLOBAL );
+	
+	return self;
+}
+
+void _TimeIntegrator_Init( 
+		void*                                      timeIntegrator, 
+		unsigned int                               order, 
+		Bool                                       simultaneous, 
+		EntryPoint_Register*                       entryPoint_Register,
+		AbstractContext*                           context )
+{
+	TimeIntegrator* self = (TimeIntegrator*)timeIntegrator;
+
+	self->debug              = Journal_Register( Debug_Type, self->type );
+	self->info               = Journal_Register( Info_Type, self->type );
+		
+	self->integrateeRegister = NamedObject_Register_New();
+	self->order              = order;
+	self->simultaneous       = simultaneous;
+
+	/* Entry Point Stuff */
+	Stg_asprintf( &self->_setupEPName, "%s-Setup", self->name );
+	Stg_asprintf( &self->_finishEPName, "%s-Finish", self->name );
+	self->setupEP  = EntryPoint_New( self->_setupEPName,  EntryPoint_VoidPtr_CastType );
+	self->finishEP = EntryPoint_New( self->_finishEPName, EntryPoint_VoidPtr_CastType );
+
+	if ( entryPoint_Register ) {
+		EntryPoint_Register_Add( entryPoint_Register, self->setupEP );
+		EntryPoint_Register_Add( entryPoint_Register, self->finishEP );
+	}
+
+	self->setupData = Stg_ObjectList_New();
+	self->finishData = Stg_ObjectList_New();
+
+	if ( context ) {
+		EP_AppendClassHook( Context_GetEntryPoint( context, AbstractContext_EP_UpdateClass ), 
+				TimeIntegrator_UpdateClass, self );
+	}
+}
+
+void _TimeIntegrator_Delete( void* timeIntegrator ) {
+	TimeIntegrator* self = (TimeIntegrator*)timeIntegrator;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+	Memory_Free( self->_setupEPName );
+	Memory_Free( self->_finishEPName );
+	
+	Stg_Class_Delete( self->setupData );
+	Stg_Class_Delete( self->finishData );
+	
+	/* Stg_Class_Delete parent*/
+	_Stg_Component_Delete( self );
+}
+
+void _TimeIntegrator_Print( void* timeIntegrator, Stream* stream ) {
+	TimeIntegrator* self = (TimeIntegrator*)timeIntegrator;
+
+	/* General info */
+	Journal_DPrintf( self->debug, "TimeIntegrator - '%s'\n", self->name );
+	Journal_PrintPointer( stream, self );
+	Stream_Indent( stream );
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* Virtual info */
+
+	/* Regular Info */
+	Stg_Class_Print( self->integrateeRegister, stream );
+	
+	Stream_UnIndent( stream );
+}
+
+void* _TimeIntegrator_Copy( void* timeIntegrator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	TimeIntegrator*	self = (TimeIntegrator*)timeIntegrator;
+	TimeIntegrator*	newTimeIntegrator;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+	/* TODO */ abort();
+
+	return (void*)newTimeIntegrator;
+}
+
+
+void* _TimeIntegrator_DefaultNew( Name name ) {
+	return (void*) _TimeIntegrator_New( 
+		sizeof(TimeIntegrator), 
+		TimeIntegrator_Type, 
+		_TimeIntegrator_Delete,
+		_TimeIntegrator_Print, 
+		_TimeIntegrator_Copy, 
+		_TimeIntegrator_DefaultNew, 
+		_TimeIntegrator_Construct, 
+		_TimeIntegrator_Build, 
+		_TimeIntegrator_Initialise,
+		_TimeIntegrator_Execute,
+		_TimeIntegrator_Destroy, 
+		name );
+}
+
+void _TimeIntegrator_Construct( void* timeIntegrator, Stg_ComponentFactory* cf, void* data ) {
+	TimeIntegrator*          self        = (TimeIntegrator*)timeIntegrator;
+	unsigned int             order;
+	Bool                     simultaneous;
+	EntryPoint_Register*     entryPoint_Register;
+	AbstractContext*         context;
+
+	/** Default for order changed to 2nd order (was 1st order) by Pat Sunter, 10 May 2006 */
+	order          = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "order", 2 );
+	simultaneous   = Stg_ComponentFactory_GetBool( cf, self->name, "simultaneous", False );
+	
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", AbstractContext, True, data );
+
+	entryPoint_Register = Stg_ObjectList_Get( cf->registerRegister, "EntryPoint_Register" );
+	assert( entryPoint_Register );
+
+	_TimeIntegrator_Init( self, order, simultaneous, entryPoint_Register, context );
+}
+
+void _TimeIntegrator_Build( void* timeIntegrator, void* data ) {
+	TimeIntegrator* self = (TimeIntegrator*)timeIntegrator;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+}
+
+void _TimeIntegrator_Initialise( void* timeIntegrator, void* data ) {
+	TimeIntegrator* self = (TimeIntegrator*)timeIntegrator;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+}
+
+void _TimeIntegrator_Execute( void* timeIntegrator, void* data ) {
+	TimeIntegrator*	self = (TimeIntegrator*)timeIntegrator;
+	double wallTime;
+
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	wallTime = MPI_Wtime();
+
+	/* Set function pointer */
+	switch (self->order) {
+		case 1:
+			self->_execute = _TimeIntegrator_ExecuteEuler; 
+			break;
+		case 2:
+			if (self->simultaneous) 
+				self->_execute = _TimeIntegrator_ExecuteRK2Simultaneous; 
+			else
+				self->_execute = _TimeIntegrator_ExecuteRK2; 
+			break;
+		case 4:
+			if (self->simultaneous) 
+				self->_execute = _TimeIntegrator_ExecuteRK4Simultaneous; 
+			else
+				self->_execute = _TimeIntegrator_ExecuteRK4; 
+			break;
+		default:
+			Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"%s '%s' cannot handle order %u\n", self->type, self->name, self->order );
+	}
+
+	/* Call real function */
+	
+	Journal_Printf( self->info, "Time Integration\n" );
+	self->_execute( self, data );
+	Journal_Printf(self->info,"Time Integration - %.6g (secs)\n", MPI_Wtime()-wallTime);
+	
+}
+
+void _TimeIntegrator_Destroy( void* timeIntegrator, void* data ) {
+	TimeIntegrator*	self = (TimeIntegrator*)timeIntegrator;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+}
+
+void TimeIntegrator_UpdateClass( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*) timeIntegrator;
+	double wallTime;
+	
+	wallTime = MPI_Wtime();
+	Journal_Printf(self->info,"Time Integration\n");
+	self->_execute( self, data );
+	Journal_Printf(self->info,"Time Integration - %.4g (secs)\n", MPI_Wtime()-wallTime);	
+}
+
+/* +++ Private Functions +++ */
+void _TimeIntegrator_ExecuteEuler( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*) timeIntegrator;
+	AbstractContext*       context         = (AbstractContext*) data;
+	Index                  integratee_I;   
+	Index                  integrateeCount = TimeIntegrator_GetCount( self );
+	double                 dt              = AbstractContext_Dt( context );
+	TimeIntegratee*        integratee;
+	double wallTime;
+	
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime );
+	
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+	
+		wallTime = MPI_Wtime();
+		TimeIntegratee_FirstOrder( integratee, integratee->variable, dt );
+		Journal_Printf(self->info,"\t1st order: %35s - %9.4f (secs)\n", integratee->name, MPI_Wtime()-wallTime);
+	}
+	TimeIntegrator_Finalise( self );
+}
+
+void _TimeIntegrator_ExecuteRK2( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*) timeIntegrator;
+	AbstractContext*       context         = (AbstractContext*) data;
+	Index                  integratee_I;   
+	Index                  integrateeCount = TimeIntegrator_GetCount( self );
+	double                 dt              = AbstractContext_Dt( context );
+	TimeIntegratee*        integratee;
+	double wallTime;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	
+	wallTime = MPI_Wtime();
+	TimeIntegrator_Setup( self );
+	
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+				
+		TimeIntegrator_SetTime( self, context->currentTime );
+		
+		wallTime = MPI_Wtime();
+		TimeIntegratee_SecondOrder( integratee, integratee->variable, dt );
+		Journal_Printf(self->info,"\t2nd order: %35s - %9.4f (secs)\n", integratee->name, MPI_Wtime()-wallTime);
+		
+	}
+	
+	TimeIntegrator_Finalise( self );
+	
+}
+
+
+void _TimeIntegrator_ExecuteRK4( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*) timeIntegrator;
+	AbstractContext*       context         = (AbstractContext*) data;
+	Index                  integratee_I;   
+	Index                  integrateeCount = TimeIntegrator_GetCount( self );
+	double                 dt              = AbstractContext_Dt( context );
+	TimeIntegratee*        integratee;
+	double wallTime;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+
+		TimeIntegrator_SetTime( self, context->currentTime );
+		wallTime = MPI_Wtime();
+		TimeIntegratee_FourthOrder( integratee, integratee->variable, dt );
+		Journal_Printf(self->info,"\t4th order: %35s - %9.4f (secs)\n", integratee->name, MPI_Wtime()-wallTime);
+	}
+	TimeIntegrator_Finalise( self );
+}
+
+
+void _TimeIntegrator_ExecuteRK2Simultaneous( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+	AbstractContext*       context         = (AbstractContext*) data;
+	Index                  integratee_I;   
+	Index                  integrateeCount = TimeIntegrator_GetCount( self );
+	double                 dt              = AbstractContext_Dt( context );
+	TimeIntegratee*        integratee;
+	Variable**             originalVariableList;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	Journal_Firewall( 
+			False,
+			Journal_MyStream( Error_Type, self ),
+			"Error in %s '%s' - This function is temporarily unavailable \n"
+			"Please only use non-simultaneous update or only first order update.\n", 
+			self->type, self->name );
+
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime );
+
+	originalVariableList = Memory_Alloc_Array( Variable*, integrateeCount, "originalVariableList" );
+	
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+		Journal_Printf(self->info,"\t2nd order (simultaneous): %s\n", integratee->name);
+		
+		/* Store Original */
+		originalVariableList[ integratee_I ] = Variable_NewFromOld( integratee->variable, "Original", True );
+
+		/* Predictor Step */
+		TimeIntegratee_FirstOrder( integratee, integratee->variable, 0.5 * dt );
+	}
+	TimeIntegrator_Finalise( self );
+	
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime + 0.5 * dt );
+
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+
+		/* Corrector Step */
+		TimeIntegratee_FirstOrder( integratee, originalVariableList[ integratee_I ], dt );
+
+		/* Free Original */
+		Stg_Class_Delete( originalVariableList[ integratee_I ] );
+	}
+	TimeIntegrator_Finalise( self );
+	Memory_Free( originalVariableList );
+}
+
+void _TimeIntegrator_ExecuteRK4Simultaneous( void* timeIntegrator, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+	AbstractContext*       context         = (AbstractContext*) data;
+	Index                  integratee_I;   
+	Index                  integrateeCount = TimeIntegrator_GetCount( self );
+	double                 dt              = AbstractContext_Dt( context );
+	TimeIntegratee*        integratee;
+	Variable**             originalVariableList;
+	Variable**             timeDerivVariableList;
+
+	Journal_DPrintf( self->debug, "In %s for %s '%s'\n", __func__, self->type, self->name );
+
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime );
+	
+	originalVariableList  = Memory_Alloc_Array( Variable*, integrateeCount, "originalVariableList" );
+	timeDerivVariableList = Memory_Alloc_Array( Variable*, integrateeCount, "timeDerivVariableList" );
+
+	/* First Step */
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+		Journal_Printf(self->info,"\t2nd order (simultaneous): %s\n", integratee->name);
+
+		/* Store Original Position Variable */
+		originalVariableList[ integratee_I ]  = Variable_NewFromOld( integratee->variable, "Original", True );
+		timeDerivVariableList[ integratee_I ] = Variable_NewFromOld( integratee->variable, "k1+2k2+2k3", False );
+
+		/* Store k1 */
+		TimeIntegratee_StoreTimeDeriv( integratee, timeDerivVariableList[ integratee_I ] );
+
+		/* 1st Step */
+		TimeIntegratee_FirstOrder( integratee, integratee->variable, 0.5 * dt );
+	}
+	TimeIntegrator_Finalise( self );
+	
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime + 0.5 * dt );
+	
+	/* Second Step */
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+
+		/* Add k2 */
+		TimeIntegratee_Add2TimesTimeDeriv( integratee, timeDerivVariableList[ integratee_I ] );
+
+		TimeIntegratee_FirstOrder( integratee, originalVariableList[ integratee_I ], 0.5 * dt );
+	}
+	TimeIntegrator_Finalise( self );
+
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+		
+		/* Add k3 */
+		TimeIntegratee_Add2TimesTimeDeriv( integratee, timeDerivVariableList[ integratee_I ] );
+
+		/* 3rd Step */
+		TimeIntegratee_FirstOrder( integratee, originalVariableList[ integratee_I ], dt );
+	}
+	TimeIntegrator_Finalise( self );
+	
+	/* Set Time */
+	TimeIntegrator_SetTime( self, context->currentTime + dt );
+	
+	TimeIntegrator_Setup( self );
+	for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+		integratee = TimeIntegrator_GetByIndex( self, integratee_I );
+
+		TimeIntegratee_FourthOrderFinalStep( integratee, originalVariableList[ integratee_I ], timeDerivVariableList[ integratee_I ], dt );
+
+		/* Free Original */
+		Stg_Class_Delete( timeDerivVariableList[ integratee_I ] );
+		Stg_Class_Delete( originalVariableList[ integratee_I ] );
+	}
+	TimeIntegrator_Finalise( self );
+
+	Memory_Free( originalVariableList );
+	Memory_Free( timeDerivVariableList );
+}
+
+
+
+/* +++ Public Functions +++ */
+
+void TimeIntegrator_Add( void* timeIntegrator, void* _timeIntegratee ) {
+	TimeIntegrator*	self           = (TimeIntegrator*) timeIntegrator;
+	TimeIntegratee*	timeIntegratee = (TimeIntegratee*)_timeIntegratee;
+
+	NamedObject_Register_Add( self->integrateeRegister, timeIntegratee );
+}
+
+void TimeIntegrator_Setup( void* timeIntegrator ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+	EntryPoint*            entryPoint      = self->setupEP;
+	Hook_Index             hookIndex;
+	double wallTime;
+	
+	/* Shouldn't this be using a call to a run function of the entry point class ? */ 
+	for( hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+		wallTime = MPI_Wtime();
+		
+		((EntryPoint_2VoidPtr_Cast*)((Hook*)entryPoint->hooks->data[hookIndex])->funcPtr)(
+			self, Stg_ObjectList_At( self->setupData, hookIndex ) );
+			
+		Journal_Printf(self->info,"\t       EP: %35s - %9.4f (secs)\n",(entryPoint->hooks->data[hookIndex])->name,
+			MPI_Wtime()-wallTime);	
+	}		
+}
+
+void TimeIntegrator_AppendSetupEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	EntryPoint_Append( self->setupEP, name, funcPtr, addedBy );
+	Stg_ObjectList_Append( self->setupData, data );
+}
+
+void TimeIntegrator_PrependSetupEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	EntryPoint_Prepend( self->setupEP, name, funcPtr, addedBy );
+	Stg_ObjectList_Prepend( self->setupData, data );
+}
+	
+
+void TimeIntegrator_Finalise( void* timeIntegrator ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+	EntryPoint*            entryPoint      = self->finishEP;
+	Hook_Index             hookIndex;
+	double 				  wallTime;
+	
+	for( hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+		wallTime = MPI_Wtime();
+		
+		((EntryPoint_2VoidPtr_Cast*)((Hook*)entryPoint->hooks->data[hookIndex])->funcPtr)(
+			self, Stg_ObjectList_At( self->finishData, hookIndex ) );
+		
+		Journal_Printf(self->info,"\t       EP: %35s - %9.4f (secs)\n",(entryPoint->hooks->data[hookIndex])->name,
+				MPI_Wtime()-wallTime);	
+
+
+	}
+}
+
+
+void TimeIntegrator_AppendFinishEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	EntryPoint_Append( self->finishEP, name, funcPtr, addedBy );
+	Stg_ObjectList_Append( self->finishData, data );
+}
+
+void TimeIntegrator_PrependFinishEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	EntryPoint_Prepend( self->finishEP, name, funcPtr, addedBy );
+	Stg_ObjectList_Prepend( self->finishData, data );
+}
+
+void TimeIntegrator_InsertBeforeFinishEP( 
+	void* timeIntegrator, 
+	Name hookToInsertBefore,
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* data ) 
+{
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	if ( Stg_ObjectList_GetIndex( self->finishEP->hooks, hookToInsertBefore ) != (unsigned int)-1 ) {
+		EntryPoint_InsertBefore( self->finishEP, hookToInsertBefore, name, funcPtr, addedBy );
+		_Stg_ObjectList_InsertAtIndex( 
+				self->finishData,
+				Stg_ObjectList_GetIndex( self->finishEP->hooks, name ),
+				data );
+	}
+	else {
+		TimeIntegrator_AppendFinishEP( self, name, funcPtr, addedBy, data );
+	}
+}
+
+void TimeIntegrator_InsertAfterFinishEP( 
+	void* timeIntegrator, 
+	Name hookToInsertAfter, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* data ) 
+{
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	if ( Stg_ObjectList_GetIndex( self->finishEP->hooks, hookToInsertAfter ) != (unsigned int)-1 ) {
+		EntryPoint_InsertAfter( self->finishEP, hookToInsertAfter, name, funcPtr, addedBy );
+		_Stg_ObjectList_InsertAtIndex(
+				self->finishData,
+				Stg_ObjectList_GetIndex( self->finishEP->hooks, name ),
+				data );
+	}
+	else {
+		TimeIntegrator_AppendFinishEP( self, name, funcPtr, addedBy, data );
+	}
+}
+
+void TimeIntegrator_SetTime( void* timeIntegrator, double time ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+
+	self->time = time;
+}
+
+double TimeIntegrator_GetTime( void* timeIntegrator ) {
+	TimeIntegrator*        self            = (TimeIntegrator*)timeIntegrator;
+	return self->time;
+}
+
+Variable* Variable_NewFromOld( Variable* oldVariable, Name name, Bool copyValues ) {
+	Variable*         self;
+	Index             array_I;
+	SizeT             dataOffsets[] = { 0 };
+	void*             myPtr;
+	void*             oldPtr;
+
+	Variable_Update( oldVariable );
+
+	self = Variable_New(  
+			name,
+			1,
+			dataOffsets,
+			oldVariable->dataTypes,
+			oldVariable->dataTypeCounts,
+			NULL,
+			0,
+			oldVariable->arraySizePtr,
+			oldVariable->arraySizeFunc,
+			NULL,
+			NULL );
+
+	self->allocateSelf = True;
+	self->arrayPtrPtr = &self->arrayPtr;
+	if ( oldVariable->isBuilt )
+		Stg_Component_Build( self, NULL, True );
+	if ( oldVariable->isInitialised )
+		Stg_Component_Initialise( self, NULL, True );
+
+	assert(self->offsetCount == 1);
+
+	if ( copyValues ) {
+		for ( array_I = 0 ; array_I < self->arraySize ; array_I++ ) {
+			myPtr = Variable_GetStructPtr( self, array_I );
+			oldPtr = Variable_GetStructPtr( oldVariable, array_I );
+			memcpy( myPtr, oldPtr, self->dataSizes[0] ); 
+		}
+	}
+
+	return self;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegrator.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegrator.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,157 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student Monash University, VPAC. (davidm at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: TimeIntegrator.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_TimeIntegrator_h__
+#define __Domain_Utils_TimeIntegrator_h__
+	
+	/* typedefs for virtual functions: */
+	extern const Type TimeIntegrator_Type;
+	
+	/* TimeIntegrator information */
+	#define __TimeIntegrator  \
+		/* General info */ \
+		__Stg_Component \
+		\
+		Stream*                                debug;                   \
+		Stream*                                info;                   \
+		NamedObject_Register*                  integrateeRegister;      \
+		unsigned int                           order;                   \
+		Bool                                   simultaneous;            \
+		Name                                   _setupEPName;            \
+		Name                                   _finishEPName;           \
+		EntryPoint*                            setupEP;                 \
+		Stg_ObjectList*                        setupData;               \
+		EntryPoint*                            finishEP;                \
+		Stg_ObjectList*                        finishData;              \
+		double                                 time;
+		  
+	struct TimeIntegrator { __TimeIntegrator };
+	
+	/* Creation implementation / Virtual constructor */
+	TimeIntegrator* TimeIntegrator_New( 
+		Name                                       name,
+		unsigned int                               order, 
+		Bool                                       simultaneous, 
+		EntryPoint_Register*                       entryPoint_Register,
+		AbstractContext*                           context );
+
+	TimeIntegrator* _TimeIntegrator_New(
+		SizeT                                      _sizeOfSelf,
+		Type                                       type,
+		Stg_Class_DeleteFunction*                  _delete,
+		Stg_Class_PrintFunction*                   _print,
+		Stg_Class_CopyFunction*                    _copy, 
+		Stg_Component_DefaultConstructorFunction*  _defaultConstructor,
+		Stg_Component_ConstructFunction*           _construct,
+		Stg_Component_BuildFunction*               _build,
+		Stg_Component_InitialiseFunction*          _initialise,
+		Stg_Component_ExecuteFunction*             _execute,
+		Stg_Component_DestroyFunction*             _destroy,
+		Name 							           name );
+		
+	void _TimeIntegrator_Init(	
+		void*                                      timeIntegrator, 
+		unsigned int                               order, 
+		Bool                                       simultaneous, 
+		EntryPoint_Register*                       entryPoint_Register,
+		AbstractContext*                           context );
+
+	/* 'Class' Virtual Functions */
+	void _TimeIntegrator_Delete( void* timeIntegrator );
+	void _TimeIntegrator_Print( void* timeIntegrator, Stream* stream );
+	#define TimeIntegrator_Copy( self ) \
+		(TimeIntegrator*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define TimeIntegrator_DeepCopy( self ) \
+		(TimeIntegrator*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _TimeIntegrator_Copy( void* timeIntegrator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* 'Stg_Component' Virtual Functions */
+	void* _TimeIntegrator_DefaultNew( Name name ) ;
+	void _TimeIntegrator_Construct( void* timeIntegrator, Stg_ComponentFactory* cf, void* data ) ;
+	void _TimeIntegrator_Build( void* timeIntegrator, void* data );
+	void _TimeIntegrator_Initialise( void* timeIntegrator, void* data );
+	void _TimeIntegrator_Execute( void* timeIntegrator, void* data );
+	void _TimeIntegrator_Destroy( void* timeIntegrator, void* data ) ;
+
+	/* +++ Private Functions +++ */
+	void TimeIntegrator_UpdateClass( void* timeIntegrator, void* data ) ;
+	void _TimeIntegrator_ExecuteEuler( void* timeIntegrator, void* data ) ;
+	void _TimeIntegrator_ExecuteRK2( void* timeIntegrator, void* data ) ;
+	void _TimeIntegrator_ExecuteRK4( void* timeIntegrator, void* data ) ;
+
+	void _TimeIntegrator_ExecuteRK2Simultaneous( void* timeIntegrator, void* data ) ;
+	void _TimeIntegrator_ExecuteRK4Simultaneous( void* timeIntegrator, void* data ) ;
+
+	/* +++ Public Functions +++ */
+	void TimeIntegrator_Add( void* timeIntegrator, void* _timeIntegratee ) ;
+	#define TimeIntegrator_GetCount( self ) \
+		((TimeIntegrator*)self)->integrateeRegister->objects->count
+	#define TimeIntegrator_GetByIndex( self, index ) \
+		( (TimeIntegratee*) NamedObject_Register_GetByIndex( ((TimeIntegrator*)self)->integrateeRegister, index ) )
+
+	void TimeIntegrator_Setup( void* timeIntegrator ) ;
+	void TimeIntegrator_AppendSetupEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) ;
+	void TimeIntegrator_PrependSetupEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) ;
+
+	void TimeIntegrator_Finalise( void* timeIntegrator ) ;
+	void TimeIntegrator_AppendFinishEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) ;
+	void TimeIntegrator_PrependFinishEP( void* timeIntegrator, Name name, Func_Ptr funcPtr, char* addedBy, void* data ) ;
+
+	void TimeIntegrator_InsertBeforeFinishEP( 
+			void* timeIntegrator, 
+			Name hookToInsertBefore,
+			Name name, 
+			Func_Ptr funcPtr, 
+			char* addedBy, 
+			void* data );
+
+	void TimeIntegrator_InsertAfterFinishEP( 
+			void* timeIntegrator, 
+			Name hookToInsertAfter, 
+			Name name, 
+			Func_Ptr funcPtr, 
+			char* addedBy, 
+			void* data );
+	
+	void TimeIntegrator_SetTime( void* timeIntegrator, double time ) ;
+	double TimeIntegrator_GetTime( void* timeIntegrator ) ;
+
+	Variable* Variable_NewFromOld( Variable* oldVariable, Name name, Bool copyValues ) ;
+
+#endif 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/TimeIntegrator.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/TimeIntegrator.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">TimeIntegrator</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">This is a general class designed to integrate several TimeIntegratee objects through time. When one of these is created, it puts a Hook on the AbstractContext_EP_StepClass EntryPoint so that the Execute function for this class runs at the end of every timestep. This execute function then integrates every TimeIntegratee that has been registered to it through time.</param>
+
+<!--Now the interesting stuff-->
+<list name="Params">
+	<struct>
+		<param name="Name">order</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">1</param>
+		<param name="Description">The order of the integration. Possible values here are 1, 2 or 4. If 1 is given then it integrates using an Euler method. If 2 or 4 are given then the schemes are Runge Kutta 2 (RK2) or Runge Kutta 4 (RK4) respectively.</param>
+	</struct>
+	<struct>
+		<param name="Name">simultaneous</param>
+		<param name="Type">Bool</param>
+		<param name="Default">False</param>
+		<param name="Description">...</param>
+	</struct>
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">context</param>
+		<param name="Type">AbstractContext</param>
+		<param name="Description">This is the context which will run the Step entry point, on which the TimeIntegrator will add itself.</param>
+	</struct>
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">PICellerator/Apps/StgFEM_Components/TimeIntegrator.xml</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/Utils.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Utils.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,83 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Utils.h 4160 2007-07-30 06:17:06Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_h__
+#define __Domain_Utils_h__
+
+	#include <assert.h>
+	#include "types.h"
+	#include "RegularMeshUtils.h"
+	#include "AllElementsVC.h"
+	#include "AllNodesVC.h"
+	#include "WallVC.h"
+	#include "CornerVC.h"
+	#include "InnerWallVC.h"
+	#include "MeshShapeVC.h"
+	#include "FrictionVC.h"
+	#include "SplitFrictionWallVC.h"
+	#include "DofLayout.h"
+	#include "Operator.h"
+	#include "FieldVariable_Register.h"
+	#include "FieldVariable.h"
+	#include "OperatorFieldVariable.h"
+	#include "DomainContext.h"
+	#include "LinearRegression.h"
+	#include "SobolGenerator.h"
+	#include "NewRemesher.h"
+	#include "Remesher.h"
+	#include "RegularRemesher.h"
+	#include "RegularRemesherCmpt.h"
+/*
+	#include "StripRemesher.h"
+	#include "CellRemesher.h"
+*/
+	
+	#include "TimeIntegratee.h"
+	#include "TimeIntegrator.h"
+	#include "ShapeAdvector.h"
+
+/*
+	#include "SemiRegDeform.h"
+*/
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Domain_Utils_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/WallVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/WallVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,752 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: WallVC.c 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "types.h"
+#include "WallVC.h"
+#include "RegularMeshUtils.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type WallVC_Type = "WallVC";
+const Name defaultWallVCName = "defaultWallVCName";
+
+const char* WallVC_WallEnumToStr[WallVC_Wall_Size] = {
+	"back",
+	"left",
+	"bottom",
+	"right",
+	"top",
+	"front" };
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* WallVC_Factory(
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						data )
+{
+	return (VariableCondition*)WallVC_New( defaultWallVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+
+WallVC*	WallVC_DefaultNew( Name name )
+{
+	return _WallVC_New(
+		sizeof(WallVC), 
+		WallVC_Type, 
+		_WallVC_Delete, 
+		_WallVC_Print, 
+		_WallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)WallVC_DefaultNew,
+		_WallVC_Construct,	
+		_WallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_WallVC_BuildSelf, 
+		_WallVC_PrintConcise,
+		_WallVC_ReadDictionary,
+		_WallVC_GetSet, 
+		_WallVC_GetVariableCount, 
+		_WallVC_GetVariableIndex, 
+		_WallVC_GetValueIndex, 
+		_WallVC_GetValueCount, 
+		_WallVC_GetValue,
+		_VariableCondition_Apply, 
+		NULL,
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL);
+}
+
+WallVC*	WallVC_New(
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	return _WallVC_New(
+		sizeof(WallVC), 
+		WallVC_Type, 
+		_WallVC_Delete, 
+		_WallVC_Print, 
+		_WallVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)WallVC_DefaultNew,
+		_WallVC_Construct,	
+		_WallVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		_WallVC_BuildSelf, 
+		_WallVC_PrintConcise,
+		_WallVC_ReadDictionary,
+		_WallVC_GetSet, 
+		_WallVC_GetVariableCount, 
+		_WallVC_GetVariableIndex, 
+		_WallVC_GetValueIndex, 
+		_WallVC_GetValueCount, 
+		_WallVC_GetValue,
+		_VariableCondition_Apply, 
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		_mesh );
+}
+
+
+void WallVC_Init(
+	WallVC*						self,
+	Name						name,
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh )
+{
+	/* General info */
+	self->type = WallVC_Type;
+	self->_sizeOfSelf = sizeof(WallVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _WallVC_Delete;
+	self->_print = _WallVC_Print;
+	self->_copy = _WallVC_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)WallVC_DefaultNew;
+	self->_construct = _WallVC_Construct;
+	self->_build = _WallVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_destroy = _VariableCondition_Destroy;
+	self->_buildSelf = _WallVC_BuildSelf;
+	self->_printConcise = _WallVC_PrintConcise;
+	self->_readDictionary = _WallVC_ReadDictionary;
+	self->_getSet = _WallVC_GetSet;
+	self->_getVariableCount = _WallVC_GetVariableCount;
+	self->_getVariableIndex = _WallVC_GetVariableIndex;
+	self->_getValueIndex = _WallVC_GetValueIndex;
+	self->_getValueCount = _WallVC_GetValueCount;
+	self->_getValue = _WallVC_GetValue;
+	self->_apply = _VariableCondition_Apply;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_WallVC_Init( self, _dictionaryEntryName, _mesh );
+}
+
+
+WallVC* _WallVC_New( 
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+	Stg_Component_ConstructFunction*			_construct,
+	Stg_Component_BuildFunction*			_build,
+	Stg_Component_InitialiseFunction*			_initialise,
+	Stg_Component_ExecuteFunction*			_execute,
+	Stg_Component_DestroyFunction*			_destroy,
+	Name								name, 
+	Bool								initFlag,
+	VariableCondition_BuildSelfFunc*		_buildSelf, 
+	VariableCondition_PrintConciseFunc*		_printConcise,
+	VariableCondition_ReadDictionaryFunc*		_readDictionary,
+	VariableCondition_GetSetFunc*			_getSet,
+	VariableCondition_GetVariableCountFunc*		_getVariableCount,
+	VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+	VariableCondition_GetValueIndexFunc*		_getValueIndex,
+	VariableCondition_GetValueCountFunc*		_getValueCount,
+	VariableCondition_GetValueFunc*			_getValue,
+	VariableCondition_ApplyFunc*			_apply, 
+	Name						_dictionaryEntryName, 
+	Variable_Register*				variable_Register, 
+	ConditionFunction_Register*			conFunc_Register, 
+	Dictionary*					dictionary,
+	void*						_mesh)
+{
+	WallVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(WallVC));
+	self = (WallVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		_apply, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_WallVC_Init( self, _dictionaryEntryName, _mesh );
+	}
+	
+	return self;
+}
+
+
+void _WallVC_Init(
+	void*						wallVC, 
+	Name						_dictionaryEntryName, 
+	void*						_mesh )
+{
+	WallVC*			self = (WallVC*)wallVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->_mesh = (Mesh*)_mesh;
+	self->_wall = WallVC_Wall_Size;
+	self->_entryTbl = 0;
+	self->_entryCount = 0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _WallVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	WallVC*			self = (WallVC*)variableCondition;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	WallVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get(dictionary, self->_dictionaryEntryName);
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct(vcDictVal, dictionary);
+	}
+	
+	if (vcDictVal)
+	{
+		char*	wallStr;
+		
+		/* Obtain which wall */
+		wallStr = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcDictVal, "wall" ));
+		if (!strcasecmp(wallStr, "back"))
+			self->_wall = WallVC_Wall_Back;
+		else if (!strcasecmp(wallStr, "left"))
+			self->_wall = WallVC_Wall_Left;
+		else if (!strcasecmp(wallStr, "bottom"))
+			self->_wall = WallVC_Wall_Bottom;
+		else if (!strcasecmp(wallStr, "right"))
+			self->_wall = WallVC_Wall_Right;
+		else if (!strcasecmp(wallStr, "top"))
+			self->_wall = WallVC_Wall_Top;
+		else if (!strcasecmp(wallStr, "front"))
+			self->_wall = WallVC_Wall_Front;
+		else {
+			assert( 0 );
+			self->_wall = WallVC_Wall_Size; /* invalid entry */
+		}
+		
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( WallVC_Entry, self->_entryCount, "WallVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (0 == strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				Index	cfIndex;
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				cfIndex = ConditionFunction_Register_GetIndex( self->conFunc_Register, funcName);
+				if ( cfIndex == (unsigned)-1 ) {	
+					Stream*	errorStr = Journal_Register( Error_Type, self->type );
+
+					Journal_Printf( errorStr, "Error- in %s: While parsing "
+							"definition of wallVC \"%s\" (applies to wall \"%s\"), the cond. func. applied to "
+							"variable \"%s\" - \"%s\" - wasn't found in the c.f. register.\n",
+							__func__, self->_dictionaryEntryName, WallVC_WallEnumToStr[self->_wall],
+							self->_entryTbl[entry_I].varName, funcName );
+					Journal_Printf( errorStr, "(Available functions in the C.F. register are: ");	
+					ConditionFunction_Register_PrintNameOfEachFunc( self->conFunc_Register, errorStr );
+					Journal_Printf( errorStr, ")\n");	
+					assert(0);
+				}	
+				self->_entryTbl[entry_I].value.as.typeCFIndex = cfIndex;
+			}
+			else if (0 == strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+													self->_entryTbl[entry_I].value.as.typeArray.size, "WallVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( 0 == strcasecmp( valType, "double" ) || 0 == strcasecmp( valType, "d" ) ||
+				 0 == strcasecmp( valType, "float" ) || 0 == strcasecmp( valType, "f" ) )
+			{
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "integer" ) || 0 == strcasecmp( valType, "int" ) || 0 == strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "short" ) || 0 == strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "char" ) || 0 == strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( 0 == strcasecmp( valType, "pointer" ) || 0 == strcasecmp( valType, "ptr" ) || 0 == strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer)Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_wall = WallVC_Wall_Size;
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _WallVC_Delete(void* wallVC)
+{
+	WallVC*	self = (WallVC*)wallVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _WallVC_Print(void* wallVC, Stream* stream)
+{
+	WallVC*				self = (WallVC*)wallVC;
+	WallVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "WallVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_wall: %s\n", self->_wall == WallVC_Wall_Front ? "Front" :
+			self->_wall == WallVC_Wall_Back ? "Back" : self->_wall == WallVC_Wall_Left ? "Left" :
+			self->_wall == WallVC_Wall_Right ? "Right" : self->_wall == WallVC_Wall_Top ? "Top" :
+			self->_wall == WallVC_Wall_Bottom ? "Bottom" : "None");
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+			case VC_ValueType_Double:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+				Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+				break;
+					
+			case VC_ValueType_Int:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+				Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+				break;
+					
+			case VC_ValueType_Short:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+				Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+				break;
+					
+			case VC_ValueType_Char:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+				Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+				break;
+					
+			case VC_ValueType_Ptr:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+				Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+				break;
+					
+			case VC_ValueType_DoubleArray:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+				Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+				Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+				if (self->_entryTbl[entry_I].value.as.typeArray.array)
+					for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+						Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+				break;
+					
+			case VC_ValueType_CFIndex:
+				Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+				Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+				break;
+			}
+		}
+	Journal_Printf( info, "\t_mesh (ptr): %p\n", self->_mesh);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _WallVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	WallVC*		self = (WallVC*)wallVC;
+	WallVC*		newWallVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newWallVC = (WallVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newWallVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newWallVC->_wall = self->_wall;
+	newWallVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newWallVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newWallVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newWallVC->_entryTbl = Memory_Alloc_Array( WallVC_Entry, newWallVC->_entryCount, "WallVC->_entryTbl");
+			memcpy( newWallVC->_entryTbl, self->_entryTbl, sizeof(WallVC_Entry) * newWallVC->_entryCount );
+			PtrMap_Append( map, newWallVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newWallVC->_mesh = self->_mesh;
+		newWallVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newWallVC;
+}
+
+
+void _WallVC_Build(  void* wallVC, void* data ) {
+	WallVC*			self = (WallVC*)wallVC;
+	
+	_WallVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+	
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _WallVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _WallVC_BuildSelf(  void* wallVC, void* data ) {
+	WallVC*			self = (WallVC*)wallVC;
+	
+	if( self->_mesh ) {
+		Stg_Component_Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _WallVC_GetSet(void* variableCondition)
+{
+	WallVC*		self = (WallVC*)variableCondition;
+	IndexSet*	set = NULL;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+	unsigned	nDims;
+	Grid*		vertGrid;
+
+	nDims = Mesh_GetDimSize( self->_mesh );
+	vertGrid = *(Grid**)ExtensionManager_Get( self->_mesh->info, self->_mesh, 
+						  ExtensionManager_GetHandle( self->_mesh->info, 
+									      "vertexGrid" ) );
+	
+	switch (self->_wall) {
+	case WallVC_Wall_Front:
+		if ( nDims < 3 || !vertGrid->sizes[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalFrontSet( self->_mesh );
+		}
+		break;
+			
+	case WallVC_Wall_Back:
+		if ( nDims < 3 || !vertGrid->sizes[2] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "K" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBackSet( self->_mesh );
+		}	
+		break;
+			
+	case WallVC_Wall_Top:
+		if ( nDims < 2 || !vertGrid->sizes[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+		}	
+		break;
+			
+	case WallVC_Wall_Bottom:
+		if ( nDims < 2 || !vertGrid->sizes[1] ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "J" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+		}	
+		break;
+			
+	case WallVC_Wall_Left:
+		if ( nDims < 1 ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+		}	
+		break;
+			
+	case WallVC_Wall_Right:
+		if( nDims < 1 ) {
+			Journal_Printf( warningStr, "Warning - in %s: Can't build a %s wall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					WallVC_WallEnumToStr[self->_wall], "I" );
+			set = IndexSet_New( Mesh_GetDomainSize( self->_mesh, MT_VERTEX ) );
+		}
+		else {
+			set = RegularMeshUtils_CreateGlobalRightSet(self->_mesh);
+		}
+		break;
+			
+	case WallVC_Wall_Size:
+	default:
+		assert(0);
+		break;
+	}
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _WallVC_GetVariableCount(void* variableCondition, Index globalIndex)
+{
+	WallVC*	self = (WallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _WallVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex)
+{
+	WallVC*		self = (WallVC*)variableCondition;
+	Variable_Index	searchedIndex = 0;
+	Stream*		errorStr = Journal_Register( Error_Type, self->type );
+	Name		varName;
+	
+	varName = self->_entryTbl[varIndex].varName;
+	searchedIndex = Variable_Register_GetIndex(self->variable_Register, varName );
+	
+	Journal_Firewall( ( searchedIndex < self->variable_Register->count ), errorStr, "Error- in %s: searching for index of "
+			  "varIndex %u (\"%s\") at global node number %u failed - register returned index %u, greater than "
+			  "count %u.\n", __func__, varIndex, varName, globalIndex, searchedIndex, self->variable_Register->count );
+
+	return searchedIndex; 
+}
+
+
+VariableCondition_ValueIndex _WallVC_GetValueIndex(
+	void*				variableCondition, 
+	Index				globalIndex, 
+	VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _WallVC_GetValueCount(void* variableCondition)
+{
+	WallVC*	self = (WallVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _WallVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex)
+{
+	WallVC*	self = (WallVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _WallVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	WallVC*		self = (WallVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: ", self->type );
+	Journal_Printf( stream, "%s\n", 
+			self->_wall == WallVC_Wall_Front ? "Front" :
+			self->_wall == WallVC_Wall_Back ? "Back" : 
+			self->_wall == WallVC_Wall_Left ? "Left" :
+			self->_wall == WallVC_Wall_Right ? "Right" : 
+			self->_wall == WallVC_Wall_Top ? "Top" :
+			self->_wall == WallVC_Wall_Bottom ? "Bottom" : "None" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/WallVC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/WallVC.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,199 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role: Allows variable conditions to be defined on the walls of a regular mesh.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: WallVC.h 4153 2007-07-26 02:25:22Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_WallVC_h__
+#define __Domain_Utils_WallVC_h__
+	
+
+	extern const Type WallVC_Type;
+	
+	extern const char* WallVC_WallEnumToStr[WallVC_Wall_Size];
+	
+	#define __WallVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _WallVC_Entry { __WallVC_Entry };
+	
+	
+	#define __WallVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		WallVC_Wall			_wall; \
+		WallVC_Entry_Index		_entryCount; \
+		WallVC_Entry*			_entryTbl; \
+		Mesh*				_mesh;
+
+	struct _WallVC { __WallVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*	WallVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	WallVC*				WallVC_DefaultNew( Name name );
+
+	WallVC*				WallVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				WallVC_Init(
+						WallVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	WallVC*				_WallVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy,
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*			_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name						name, 
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						VariableCondition_ApplyFunc*			_apply, 
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						_mesh );
+	
+	void				_WallVC_Init(
+						void*						wallVC, 
+						Name						_dictionaryEntryName, 
+						void*						_mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_WallVC_Delete( void* wallVC );
+	
+	void				_WallVC_Print( void* wallVC, Stream* stream );
+	
+	/* Copy */
+	#define WallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define WallVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _WallVC_Copy( void* wallVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_WallVC_Build(  void* wallVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_WallVC_Construct( void* wallVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_WallVC_BuildSelf( void* wallVC, void* data );
+	
+	void				_WallVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_WallVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_WallVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_WallVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_WallVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+						
+	VariableCondition_ValueIndex	_WallVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_WallVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_WallVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Domain_Utils_WallVC_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/WallVC.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/WallVC.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">WallVC</param>
+<param name="Author">...</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Discretisation/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Reference">...</param>
+<param name="Summary">...</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,123 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+
+lib = StgDomainUtils
+libstatic = yes
+libdynamic = yes
+includes = StgDomain/Utils
+
+SRCS = \
+	AllElementsVC.c \
+	AllNodesVC.c \
+	CornerVC.c \
+	DomainContext.c \
+	DofLayout.c \
+	FieldVariable.c \
+	FieldVariable_Register.c \
+	Finalise.c \
+	FrictionVC.c \
+	Init.c \
+	InnerWallVC.c \
+	LinearRegression.c \
+	MeshShapeVC.c \
+	NewRemesher.c \
+	Operator.c \
+	OperatorFieldVariable.c \
+	RegularMeshUtils.c \
+	RegularRemesher.c \
+	RegularRemesherCmpt.c \
+	Remesher.c \
+	ShapeAdvector.c \
+	SobolGenerator.c \
+	SplitFrictionWallVC.c \
+	TimeIntegratee.c \
+	TimeIntegrator.c \
+	WallVC.c
+#	CellRemesher.c \
+#	EmbeddedSurface.c \
+#	SemiRegDeform.c \
+#	StripRemesher.c \
+#
+
+HDRS = \
+	AllElementsVC.h \
+	AllNodesVC.h \
+	CornerVC.h \
+	DomainContext.h \
+	DofLayout.h \
+	FieldVariable.h \
+	FieldVariable_Register.h \
+	Finalise.h \
+	FrictionVC.h \
+	Init.h \
+	InnerWallVC.h \
+	LinearRegression.h \
+	MeshShapeVC.h \
+	NewRemesher.def \
+	NewRemesher.h \
+	Operator.h \
+	OperatorFieldVariable.h \
+	RegularMeshUtils.h \
+	RegularRemesher.def \
+	RegularRemesher.h \
+	RegularRemesherCmpt.h \
+	Remesher.h \
+	ShapeAdvector.h \
+	SobolGenerator.h \
+	SplitFrictionWallVC.h \
+	TimeIntegratee.h \
+	TimeIntegrator.h \
+	Utils.h \
+	WallVC.h \
+	types.h
+#	CellRemesher.h \
+#	EmbeddedSurface.h \
+#	SemiRegDeform.h \
+#	StripRemesher.h \
+#
+
+
+EXTERNAL_INCLUDES = 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainMesh -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/src/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/types.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,168 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 4160 2007-07-30 06:17:06Z DavidLee $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Utils_types_h__
+#define __Domain_Utils_types_h__
+
+typedef struct NewRemesher NewRemesher;
+typedef struct RegularRemesher RegularRemesher;
+typedef struct RegularRemesherCmpt RegularRemesherCmpt;
+	
+	/* Classes */
+	typedef struct _AllElementsVC			AllElementsVC;
+	typedef struct _AllNodesVC			AllNodesVC;
+	typedef struct _WallVC				WallVC;
+	typedef struct _InnerWallVC			InnerWallVC;
+	typedef struct _CornerVC			CornerVC;
+	typedef struct MeshShapeVC				MeshShapeVC;
+	typedef struct _FrictionVC			FrictionVC;
+	typedef struct SplitFrictionWallVC		SplitFrictionWallVC;
+	typedef struct _DofLayout			DofLayout;
+	typedef struct _EmbeddedSurface			EmbeddedSurface;
+	typedef struct Operator      		Operator;
+	typedef struct FieldVariable			FieldVariable;
+	typedef struct FieldVariable_Register		FieldVariable_Register;
+	typedef struct OperatorFieldVariable		OperatorFieldVariable;
+	typedef struct DomainContext		DomainContext;
+	typedef struct LinearRegression     	LinearRegression;
+	typedef struct SemiRegDeform		SemiRegDeform;
+	typedef struct SobolGenerator            SobolGenerator;
+	typedef struct TimeIntegratee            TimeIntegratee;
+	typedef struct TimeIntegrator            TimeIntegrator;
+	typedef struct ShapeAdvector             ShapeAdvector;
+	typedef struct Remesher			Remesher;
+	typedef struct StripRemesher		StripRemesher;
+	typedef struct CellRemesher		CellRemesher;
+
+	/* Degrees of Freedom */
+	typedef unsigned int				Dof;
+	typedef Index                       Bit_Index;
+
+	/* FrictionVC types */
+	typedef enum
+	{
+		FrictionVC_Wall_Back,
+		FrictionVC_Wall_Left,
+		FrictionVC_Wall_Bottom,
+		FrictionVC_Wall_Right,
+		FrictionVC_Wall_Top,
+		FrictionVC_Wall_Front,
+		FrictionVC_Wall_Size
+	} FrictionVC_Wall;
+	
+	typedef struct _FrictionVC_Entry	FrictionVC_Entry;
+	typedef Index		       	        FrictionVC_Entry_Index;
+	/* SplitFrictionWallVC types */
+	typedef enum
+	{
+		SplitFrictionWallVC_Wall_Back,
+		SplitFrictionWallVC_Wall_Left,
+		SplitFrictionWallVC_Wall_Bottom,
+		SplitFrictionWallVC_Wall_Right,
+		SplitFrictionWallVC_Wall_Top,
+		SplitFrictionWallVC_Wall_Front,
+		SplitFrictionWallVC_Wall_Size
+	} SplitFrictionWallVC_Wall;
+	
+	typedef struct _SplitFrictionWallVC_Entry   SplitFrictionWallVC_Entry;
+	typedef Index			      SplitFrictionWallVC_Entry_Index;
+	
+	/* WallVC types */
+	typedef enum
+	{
+		WallVC_Wall_Back,
+		WallVC_Wall_Left,
+		WallVC_Wall_Bottom,
+		WallVC_Wall_Right,
+		WallVC_Wall_Top,
+		WallVC_Wall_Front,
+		WallVC_Wall_Size
+	} WallVC_Wall;
+
+	/* CornerVC types */
+	typedef enum
+	{
+		CornerVC_Corner_BottomLeftFront,
+		CornerVC_Corner_BottomRightFront,
+		CornerVC_Corner_TopLeftFront,
+		CornerVC_Corner_TopRightFront,
+		CornerVC_Corner_BottomLeftBack,
+		CornerVC_Corner_BottomRightBack,
+		CornerVC_Corner_TopLeftBack,
+		CornerVC_Corner_TopRightBack,
+		CornerVC_Corner_Size
+	} CornerVC_Corner;
+
+	/* InnerWallVC types */
+	typedef enum
+	{
+		InnerWallVC_InnerWall_Back,
+		InnerWallVC_InnerWall_Left,
+		InnerWallVC_InnerWall_Bottom,
+		InnerWallVC_InnerWall_Right,
+		InnerWallVC_InnerWall_Top,
+		InnerWallVC_InnerWall_Front,
+		InnerWallVC_InnerWall_Size
+	} InnerWallVC_InnerWall;
+
+
+	typedef struct _WallVC_Entry			WallVC_Entry;
+	typedef Index					WallVC_Entry_Index;
+	typedef Index					MeshShapeVC_Entry_Index;
+
+	typedef struct _CornerVC_Entry			CornerVC_Entry;
+	typedef Index					CornerVC_Entry_Index;
+
+	typedef struct _InnerWallVC_Entry		InnerWallVC_Entry;
+	typedef Index					InnerWallVC_Entry_Index;
+	
+	typedef struct _AllElementsVC_Entry		AllElementsVC_Entry;
+	typedef Index					AllElementsVC_Entry_Index;
+	
+	typedef struct _AllNodesVC_Entry		AllNodesVC_Entry;
+	typedef Index					AllNodesVC_Entry_Index;
+	
+	typedef struct _AllVC_Entry			AllVC_Entry;
+	typedef Index					AllVC_Entry_Index;
+	
+	typedef Index					FieldVariable_Index;
+	
+#endif /* __Domain_Utils_types_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,87 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 4137 2007-06-07 05:46:46Z LukeHodkinson $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainDiscretisationUtils
+
+def_srcs = \
+	testRegularMeshUtils.c \
+	testFieldVariable_Register.c \
+	testOperatorFieldVariable.c \
+	testAllNodesVC.c \
+	testWallVC.c \
+	testCompositeVC.c \
+	testCompositeVC-dictionary.c \
+	testDofLayout.c \
+	testDofLayout-remap.c \
+	testDofLayout-saveAndLoad.c \
+	testSobolGenerator.c \
+	testTimeIntegration.c \
+	testCornerVC.c \
+	testRegularRemesher.c
+#	testSemiRegDeform.c \
+
+def_checks = \
+	testFieldVariable_Register.0of1.sh \
+	testOperatorFieldVariable.0of1.sh \
+	testAllNodesVC.0of1.sh \
+	testAllNodesVC.0of2.sh \
+	testAllNodesVC.1of2.sh \
+	testAllNodesVC.0of3.sh \
+	testAllNodesVC.1of3.sh \
+	testAllNodesVC.2of3.sh \
+	testWallVC.0of1.sh \
+	testWallVC.0of2.sh \
+	testWallVC.1of2.sh \
+	testWallVC.0of3.sh \
+	testWallVC.1of3.sh \
+	testWallVC.2of3.sh \
+	testCompositeVC.0of1.sh \
+	testCompositeVC.0of2.sh \
+	testCompositeVC.1of2.sh \
+	testCompositeVC.0of3.sh \
+	testCompositeVC.1of3.sh \
+	testCompositeVC.2of3.sh \
+	testCompositeVC-dictionary.0of1.sh \
+	testDofLayout.0of1.sh \
+	testDofLayout-remap.0of1.sh \
+	testDofLayout-saveAndLoad.0of1.sh \
+	testTimeIntegrationEuler.0of1.sh \
+	testTimeIntegrationRK2.0of1.sh \
+	testTimeIntegrationRK4.0of1.sh \
+	testSobolGenerator.0of1.sh \
+	testRegularMeshUtils.0of1.sh \
+	testRegularMeshUtils.0of2.sh \
+	testRegularMeshUtils.1of2.sh \
+	testCornerVC.0of1.sh \
+	testCornerVC.0of2.sh \
+	testCornerVC.1of2.sh \
+	testCornerVC.0of3.sh \
+	testCornerVC.1of3.sh \
+	testCornerVC.2of3.sh
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/data/allVC.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/data/allVC.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<struct name="AllNodesVC">
+		<param name="type">AllNodesVC</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/data/compositeVC.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/data/compositeVC.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,139 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="vcList">
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC1</param>
+		<param name="wall">front</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC2</param>
+		<param name="wall">back</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC3</param>
+		<param name="wall">left</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC4</param>
+		<param name="wall">right</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC5</param>
+		<param name="wall">top</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct>
+		<param name="type">WallVC</param>
+		<param name="name">WallVC6</param>
+		<param name="wall">bottom</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+
+	</list>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/data/cornerVC.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/data/cornerVC.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,171 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<struct name="CornerVC_BottomRightFront">
+		<param name="type">CornerVC</param>
+		<param name="corner">bottomRightFront</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="CornerVC_BottomLeftFront">
+		<param name="type">CornerVC</param>
+		<param name="corner">bottomLeftFront</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="CornerVC_TopRightFront">
+		<param name="type">CornerVC</param>
+		<param name="corner">topRightFront</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>	
+	<struct name="CornerVC_TopLeftFront">
+		<param name="type">CornerVC</param>
+		<param name="corner">topLeftFront</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>	
+	
+	<struct name="CornerVC_BottomLeftBack">
+		<param name="type">CornerVC</param>
+		<param name="corner">bottomLeftBack</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+		</list>
+	</struct>
+
+	<struct name="CornerVC_BottomRightBack">
+		<param name="type">CornerVC</param>
+		<param name="corner">bottomRightBack</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+		</list>
+	</struct>
+
+	<struct name="CornerVC_TopRightBack">
+		<param name="type">CornerVC</param>
+		<param name="corner">topRightBack</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+		</list>
+	</struct>
+	<struct name="CornerVC_TopLeftBack">
+		<param name="type">CornerVC</param>
+		<param name="corner">topLeftBack</param>
+		<list name="variables">
+					<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">double</param>
+				<param name="value" type="double">6</param>
+			</struct>
+		</list>
+	</struct>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/data/wallVC.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/data/wallVC.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<struct name="WallVC_Front">
+		<param name="type">WallVC</param>
+		<param name="wall">front</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="WallVC_Back">
+		<param name="type">WallVC</param>
+		<param name="wall">back</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="WallVC_Top">
+		<param name="type">WallVC</param>
+		<param name="wall">top</param>
+		<list name="variables">
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="WallVC_Bottom">
+		<param name="type">WallVC</param>
+		<param name="wall">bottom</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">double</param>
+				<param name="value" type="double">3</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="WallVC_Left">
+		<param name="type">WallVC</param>
+		<param name="wall">left</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+		</list>
+	</struct>
+	
+	<struct name="WallVC_Right">
+		<param name="type">WallVC</param>
+		<param name="wall">right</param>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">func</param>
+				<param name="value">exponential</param>
+			</struct>
+		</list>
+	</struct>
+	
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,31 @@
+ *********************** Testing _SobolGenerator_FindRightmostZeroBit *******************
+0000000000000000 number 0: 0
+0000000000000001 number 1: 1
+0000000000000010 number 2: 0
+0000000000000011 number 3: 2
+0000000000000100 number 4: 0
+0000000000000101 number 5: 1
+0000000000000110 number 6: 0
+0000000000000111 number 7: 3
+0000000000001000 number 8: 0
+0000000000001001 number 9: 1
+0000000000001010 number 10: 0
+0000000000001011 number 11: 2
+0000000000001100 number 12: 0
+0000000000001101 number 13: 1
+0000000000001110 number 14: 0
+0000000000001111 number 15: 4
+0000000000010000 number 16: 0
+0000000000010001 number 17: 1
+0000000000010010 number 18: 0
+0000000000010011 number 19: 2
+0000000000010100 number 20: 0
+0000000000010101 number 21: 1
+0000000000010110 number 22: 0
+0000000000010111 number 23: 3
+0000000000011000 number 24: 0
+0000000000011001 number 25: 1
+0000000000011010 number 26: 0
+0000000000011011 number 27: 2
+0000000000011100 number 28: 0
+0000000000011101 number 29: 1
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,327 @@
+Sobol Generator: 'testGenerator0'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator0
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 1
+	self->polynomialCoefficient = 0
+	This leads to polynomial: x^1 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator0'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator0
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 1
+	self->polynomialCoefficient = 0
+	This leads to polynomial: x^1 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 3
+		Directional Number 2 = 5
+		Directional Number 3 = 15
+		Directional Number 4 = 17
+		Directional Number 5 = 51
+		Directional Number 6 = 85
+		Directional Number 7 = 255
+		Directional Number 8 = 257
+		Directional Number 9 = 771
+		Directional Number 10 = 1285
+		Directional Number 11 = 3855
+		Directional Number 12 = 4369
+		Directional Number 13 = 13107
+		Directional Number 14 = 21845
+		Directional Number 15 = 65535
+		Directional Number 16 = 65537
+		Directional Number 17 = 196611
+		Directional Number 18 = 327685
+		Directional Number 19 = 983055
+		Directional Number 20 = 1114129
+		Directional Number 21 = 3342387
+		Directional Number 22 = 5570645
+		Directional Number 23 = 16711935
+		Directional Number 24 = 16843009
+		Directional Number 25 = 50529027
+		Directional Number 26 = 84215045
+		Directional Number 27 = 252645135
+		Directional Number 28 = 286331153
+		Directional Number 29 = 858993459
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.375
+0.9365
+0.313
+0.593
+0.09448
+0.781
+0.2352
+0.514
+0.36
+0.6715
+0.07825
+0.5928
+0.2584
+0.6168
+0.1341
+0.617
+0.2587
+0.8046
+0.4457
+0.945
+0.4924
+0.632
+0.235
+0.5138
+0.3602
+0.8631
+0.3871
+0.643
+0.3261
+0.5498
+0.1994
+0.5495
+0.3247
+0.8628
+0.3867
+0.6443
+0.1682
+0.9563
+0.4106
+0.8388
+0.03531
+0.9953
+0.2545
+0.9447
+0.2586
+0.617
+0.1339
+0.6168
+0.2585
+0.8044
+0.4455
+0.9892
+0.1977
+0.6292
+0.08913
+0.9109
+0.4639
+0.895
+0.48
+0.9889
+0.2912
+0.8954
+0.1679
+0.8324
+0.2918
+0.8958
+0.4788
+0.9888
+0.1973
+0.8957
+0.08806
+0.9118
+0.4633
+0.6308
+0.245
+0.9891
+0.2406
+0.5709
+0.3668
+0.6329
+0.2405
+0.572
+0.05345
+0.8052
+0.006821
+0.8711
+0.4111
+0.5893
+0.03588
+0.9875
+0.387
+0.8937
+0.3258
+0.9877
+0.1996
+0.8007
+0.3251
+0.9877
+0.3871
+0.8932
+0.1681
+0.9874
+0.3892
+0.7359
+0.3899
+0.9549
+0.2562
+0.8061
+0.4911
+0.5714
+0.4909
+0.6344
+0.4907
+0.5703
+0.491
+0.658
+0.1546
+0.9546
+0.3896
+0.7363
+0.3899
+0.6892
+0.1549
+0.6578
+0.3731
+0.6893
+0.3734
+0.5013
+0.3747
+0.6886
+0.3749
+0.6571
+0.1557
+0.6888
+0.3894
+0.7361
+0.3897
+0.9546
+0.156
+0.657
+0.4914
+0.5713
+0.4917
+0.6333
+0.4916
+0.5721
+0.4913
+0.8048
+0.2574
+0.9543
+0.3894
+0.736
+0.3901
+0.7373
+0.4188
+0.7689
+0.07453
+0.7369
+0.07429
+0.5021
+0.07533
+0.7369
+0.07557
+0.7684
+0.4198
+0.7371
+0.2854
+0.9009
+0.2866
+0.6191
+0.005863
+0.6812
+0.2407
+0.5706
+0.241
+0.9159
+0.2411
+0.5717
+0.2408
+0.6144
+0.1974
+0.629
+0.4634
+0.848
+0.4642
+0.8953
+0.1982
+0.6147
+0.2914
+0.8952
+0.2912
+0.7477
+0.2916
+0.8956
+0.2918
+0.6146
+0.1976
+0.896
+0.4648
+0.8489
+0.4631
+0.6306
+0.1978
+0.6143
+0.1971
+0.9285
+0.009068
+0.5854
+0.3837
+0.9296
+0.008945
+0.82
+0.005207
+0.8695
+0.2869
+0.6505
+0.1617
+0.9869
+0.4196
+0.5188
+0.1386
+0.9873
+0.07564
+0.7522
+0.4509
+0.9871
+0.07424
+0.5181
+0.1383
+0.987
+0.1105
+0.952
+0.4857
+0.5453
+0.2439
+0.8196
+0.1968
+0.9283
+0.008839
+0.5851
+0.3835
+0.9294
+0.009205
+0.7187
+0.3299
+0.5458
+0.1107
+0.9518
+0.4855
+0.8107
+0.345
+0.7185
+0.06395
+0.811
+0.1269
+0.748
+0.2505
+0.7488
+0.1267
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,328 @@
+Sobol Generator: 'testGenerator1'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator1
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 2
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^2 + x^1 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator1'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator1
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 2
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^2 + x^1 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+		Directional Number 2 = 7
+		Directional Number 3 = 11
+		Directional Number 4 = 13
+		Directional Number 5 = 61
+		Directional Number 6 = 67
+		Directional Number 7 = 79
+		Directional Number 8 = 465
+		Directional Number 9 = 721
+		Directional Number 10 = 823
+		Directional Number 11 = 4091
+		Directional Number 12 = 4125
+		Directional Number 13 = 4141
+		Directional Number 14 = 28723
+		Directional Number 15 = 45311
+		Directional Number 16 = 53505
+		Directional Number 17 = 250113
+		Directional Number 18 = 276231
+		Directional Number 19 = 326411
+		Directional Number 20 = 1907981
+		Directional Number 21 = 2960701
+		Directional Number 22 = 3355459
+		Directional Number 23 = 16777039
+		Directional Number 24 = 16777425
+		Directional Number 25 = 16778193
+		Directional Number 26 = 117441591
+		Directional Number 27 = 184550651
+		Directional Number 28 = 218111261
+		Directional Number 29 = 1023421741
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.625
+0.1689
+0.7437
+0.6516
+0.7654
+0.09644
+0.4984
+0.4628
+0.5392
+0.8488
+0.2985
+0.2026
+0.3788
+0.7333
+0.9055
+0.9304
+0.7071
+0.2432
+0.6695
+0.1868
+0.2928
+0.5692
+0.03934
+0.01541
+0.9981
+0.5459
+0.1206
+0.6291
+0.11
+0.779
+0.6059
+0.5741
+0.5842
+0.1203
+0.5466
+0.5757
+0.9629
+0.1767
+0.2191
+0.1952
+0.8028
+0.6202
+0.04648
+0.516
+0.6454
+0.494
+0.1329
+0.1715
+0.4404
+0.9824
+0.4321
+0.6653
+0.5769
+0.878
+0.4512
+0.151
+0.5238
+0.7782
+0.8612
+0.2475
+0.8701
+0.07344
+0.3498
+0.04951
+0.5226
+0.5036
+0.6081
+0.8744
+0.8993
+0.3323
+0.3528
+0.06035
+0.6866
+0.4488
+0.4126
+0.2923
+0.5477
+0.2511
+0.04308
+0.3678
+0.3508
+0.363
+0.28
+0.6245
+0.6494
+0.9902
+0.4307
+0.2309
+0.6081
+0.6584
+0.7024
+0.316
+0.6915
+0.4901
+0.2118
+0.3871
+0.2212
+0.2403
+0.1514
+0.3856
+0.3567
+0.9081
+0.4604
+0.6821
+0.3239
+0.8244
+0.7526
+0.2966
+0.4172
+0.9785
+0.2475
+0.8911
+0.7469
+0.9017
+0.9166
+0.3433
+0.1983
+0.115
+0.001244
+0.8557
+0.1538
+0.2285
+0.2877
+0.7614
+0.4992
+0.9354
+0.1654
+0.9418
+0.7389
+0.8937
+0.909
+0.7342
+0.8705
+0.1924
+0.688
+0.4194
+0.5906
+0.08909
+0.6474
+0.1835
+0.4916
+0.9274
+0.1574
+0.9494
+0.6568
+0.9444
+0.991
+0.199
+0.3431
+0.8465
+0.7718
+0.1204
+0.8853
+0.7462
+0.5661
+0.5852
+0.6506
+0.4179
+0.9497
+0.5016
+0.1842
+0.1642
+0.4794
+0.6547
+0.3002
+0.9998
+0.3128
+0.6108
+0.4653
+0.6641
+0.9424
+0.9546
+0.356
+0.5911
+0.05738
+0.7406
+0.558
+0.5468
+0.8566
+0.1305
+0.7897
+0.7241
+0.9716
+0.2062
+0.8732
+0.6198
+0.6925
+0.7047
+0.5279
+0.2943
+0.8231
+0.004192
+0.8606
+0.8494
+0.5381
+0.3316
+0.7486
+0.04899
+0.818
+0.1137
+0.9623
+0.1698
+0.7688
+0.7575
+0.395
+0.7436
+0.4824
+0.5804
+0.1629
+0.6366
+0.6817
+0.7008
+0.001369
+0.8559
+0.7743
+0.338
+0.2018
+0.5583
+0.9912
+0.6411
+0.5012
+0.3557
+0.6179
+0.6934
+0.565
+0.109
+0.09213
+0.5877
+0.08346
+0.8051
+0.9541
+0.3928
+0.006557
+0.3239
+0.2551
+0.09637
+0.6284
+0.4828
+0.7451
+0.3177
+0.9236
+0.4031
+0.419
+0.01812
+0.2806
+0.6117
+0.5067
+0.06652
+0.4537
+0.7321
+0.7825
+0.5691
+0.7104
+0.4321
+0.6709
+0.6728
+0.5688
+0.05443
+0.08861
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,329 @@
+Sobol Generator: 'testGenerator2'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator2
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 3
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^3 + x^1 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 3
+		Directional Number 2 = 7
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator2'
+	Stg_Object (ptr): 0x805e5ec
+		Stg_Class (ptr): 0x805e5ec
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fdb459
+			_print (func ptr): 0xb7fdb49e
+			_copy (func ptr): 0xb7fdb6db
+		name: testGenerator2
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 3
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^3 + x^1 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 3
+		Directional Number 2 = 7
+		Directional Number 3 = 5
+		Directional Number 4 = 7
+		Directional Number 5 = 43
+		Directional Number 6 = 49
+		Directional Number 7 = 147
+		Directional Number 8 = 439
+		Directional Number 9 = 1013
+		Directional Number 10 = 727
+		Directional Number 11 = 987
+		Directional Number 12 = 5889
+		Directional Number 13 = 6915
+		Directional Number 14 = 16647
+		Directional Number 15 = 49925
+		Directional Number 16 = 116487
+		Directional Number 17 = 83243
+		Directional Number 18 = 116529
+		Directional Number 19 = 715667
+		Directional Number 20 = 815287
+		Directional Number 21 = 2380021
+		Directional Number 22 = 7108055
+		Directional Number 23 = 16692955
+		Directional Number 24 = 11993089
+		Directional Number 25 = 16056323
+		Directional Number 26 = 97976327
+		Directional Number 27 = 115015685
+		Directional Number 28 = 268500999
+		Directional Number 29 = 805503019
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.125
+0.3682
+0.3179
+0.5305
+0.09741
+0.8386
+0.4667
+0.1195
+0.902
+0.9401
+0.9982
+0.06451
+0.7408
+0.4527
+0.6702
+0.7596
+0.8427
+0.664
+0.6518
+0.8923
+0.4816
+0.7072
+0.7295
+0.8247
+0.1692
+0.5862
+0.5984
+0.6337
+0.3324
+0.6068
+0.2624
+0.1671
+0.4962
+0.004974
+0.05624
+0.847
+0.2811
+0.5379
+0.9004
+0.561
+0.4685
+0.3816
+0.4319
+0.1818
+0.3034
+0.5153
+0.3578
+0.1972
+0.1551
+0.3514
+0.3392
+0.2701
+0.9874
+0.5198
+0.8254
+0.6111
+0.2612
+0.2578
+0.8115
+0.8221
+0.01402
+0.1715
+0.08458
+0.3536
+0.03725
+0.9635
+0.4723
+0.5336
+0.1933
+0.6121
+0.3709
+0.0696
+0.8101
+0.3447
+0.836
+0.1242
+0.3952
+0.3022
+0.4497
+0.2353
+0.0594
+0.9378
+0.4935
+0.1021
+0.6397
+0.3341
+0.01475
+0.3004
+0.5716
+0.3729
+0.8172
+0.8008
+0.1137
+0.2087
+0.04368
+0.2658
+0.2149
+0.7818
+0.2749
+0.7112
+0.06229
+0.6337
+0.5883
+0.3471
+0.6276
+0.06754
+0.7755
+0.7217
+0.859
+0.8333
+0.4158
+0.6414
+0.6953
+0.4067
+0.001656
+0.2976
+0.8244
+0.5469
+0.356
+0.5835
+0.426
+0.2849
+0.6454
+0.8573
+0.1732
+0.1364
+0.6163
+0.3263
+0.5871
+0.3112
+0.1557
+0.1938
+0.6826
+0.1473
+0.4007
+0.6595
+0.315
+0.88
+0.8458
+0.6515
+0.04653
+0.0209
+0.7284
+0.454
+0.3826
+0.719
+0.814
+0.3208
+0.8008
+0.4846
+0.6687
+0.3962
+0.6138
+0.9131
+0.1356
+0.8656
+0.6713
+0.5143
+0.1027
+0.3888
+0.507
+0.4958
+0.1889
+0.6542
+0.7236
+0.08184
+0.7464
+0.5914
+0.5357
+0.1172
+0.2355
+0.7633
+0.1295
+0.03652
+0.5653
+0.24
+0.2937
+0.7034
+0.979
+0.7754
+0.8467
+0.6291
+0.3161
+0.4711
+0.4018
+0.3984
+0.6834
+0.3197
+0.1546
+0.06209
+0.586
+0.007008
+0.1779
+0.8229
+0.6098
+0.04387
+0.08391
+0.7215
+0.8646
+0.9576
+0.9195
+0.4854
+0.3879
+0.6111
+0.936
+0.1323
+0.6211
+0.0858
+0.8861
+0.6117
+0.9567
+0.8165
+0.8428
+0.09964
+0.8072
+0.7503
+0.3719
+0.07596
+0.995
+0.1537
+0.7155
+0.4743
+0.7746
+0.5987
+0.9781
+0.5162
+0.9232
+0.3661
+0.1269
+0.9306
+0.5708
+0.612
+0.01389
+0.08518
+0.7578
+0.1089
+0.1233
+0.8196
+0.4334
+0.8983
+0.07361
+0.4242
+0.01917
+0.9337
+0.2764
+0.5333
+0.3736
+0.3167
+0.8055
+0.2986
+0.6318
+0.4702
+0.9069
+0.1501
+0.5988
+0.2883
+0.365
+0.77
+0.2944
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,329 @@
+Sobol Generator: 'testGenerator3'
+	Stg_Object (ptr): 0x805e610
+		Stg_Class (ptr): 0x805e610
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator3
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 3
+	self->polynomialCoefficient = 2
+	This leads to polynomial: x^3 + x^2 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+		Directional Number 2 = 5
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator3'
+	Stg_Object (ptr): 0x805e610
+		Stg_Class (ptr): 0x805e610
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator3
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 3
+	self->polynomialCoefficient = 2
+	This leads to polynomial: x^3 + x^2 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+		Directional Number 2 = 5
+		Directional Number 3 = 3
+		Directional Number 4 = 15
+		Directional Number 5 = 51
+		Directional Number 6 = 125
+		Directional Number 7 = 141
+		Directional Number 8 = 177
+		Directional Number 9 = 759
+		Directional Number 10 = 267
+		Directional Number 11 = 1839
+		Directional Number 12 = 6929
+		Directional Number 13 = 16241
+		Directional Number 14 = 16565
+		Directional Number 15 = 17139
+		Directional Number 16 = 82207
+		Directional Number 17 = 50979
+		Directional Number 18 = 252717
+		Directional Number 19 = 851901
+		Directional Number 20 = 2031937
+		Directional Number 21 = 2293959
+		Directional Number 22 = 2950107
+		Directional Number 23 = 12389631
+		Directional Number 24 = 4267777
+		Directional Number 25 = 29827841
+		Directional Number 26 = 115027205
+		Directional Number 27 = 268418307
+		Directional Number 28 = 268517647
+		Directional Number 29 = 268486451
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.875
+0.1279
+0.7886
+0.5549
+0.09058
+0.281
+0.2313
+0.9662
+0.2418
+0.7076
+0.3595
+0.8625
+0.5622
+0.8718
+0.9594
+0.2265
+0.0672
+0.8201
+0.222
+0.7935
+0.3204
+0.0108
+0.5779
+0.3733
+0.583
+0.9101
+0.007294
+0.6419
+0.4588
+0.1473
+0.05869
+0.7633
+0.48
+0.7271
+0.3242
+0.08182
+0.554
+0.8636
+0.5932
+0.3583
+0.5666
+0.1007
+0.9411
+0.809
+0.6649
+0.9804
+0.8136
+0.11
+0.2066
+0.9536
+0.1133
+0.6218
+0.888
+0.08919
+0.3675
+0.4657
+0.3468
+0.1168
+0.5513
+0.8044
+0.9748
+0.5126
+0.5156
+0.6674
+0.7372
+0.02184
+0.5834
+0.2184
+0.295
+0.6067
+0.4045
+0.3074
+0.3804
+0.5644
+0.002914
+0.3954
+0.642
+0.8708
+0.8678
+0.965
+0.2286
+0.5142
+0.07573
+0.02275
+0.4754
+0.8183
+0.6005
+0.6899
+0.6227
+0.923
+0.4865
+0.2354
+0.03181
+0.4476
+0.4466
+0.3572
+0.03004
+0.7444
+0.1809
+0.5503
+0.9395
+0.1261
+0.195
+0.3795
+0.6703
+0.7499
+0.9641
+0.2112
+0.325
+0.7998
+0.7105
+0.8951
+0.8044
+0.5685
+0.1689
+0.1327
+0.7221
+0.6567
+0.5986
+0.789
+0.01292
+0.6374
+0.7027
+0.4498
+0.6329
+0.242
+0.2689
+0.07847
+0.3267
+0.06161
+0.7088
+0.2411
+0.6429
+0.5669
+0.07906
+0.2695
+0.5559
+0.6023
+0.6862
+0.4352
+0.2355
+0.6395
+0.8539
+0.5404
+0.635
+0.9959
+0.2666
+0.4707
+0.8814
+0.5539
+0.738
+0.9225
+0.1508
+0.9658
+0.01055
+0.7327
+0.07549
+0.4136
+0.959
+0.0001144
+0.1124
+0.6481
+0.9769
+0.04382
+0.9217
+0.2314
+0.4272
+0.0935
+0.9656
+0.02367
+0.1046
+0.6402
+0.7467
+0.7718
+0.3514
+0.5361
+0.1328
+0.5972
+0.7781
+0.762
+0.1399
+0.8371
+0.008472
+0.4711
+0.5951
+0.8652
+0.16
+0.5696
+0.2229
+0.2642
+0.8741
+0.3395
+0.485
+0.7697
+0.6054
+0.4213
+0.5434
+0.3587
+0.2332
+0.2539
+0.6319
+0.3159
+0.5006
+0.2227
+0.6063
+0.7967
+0.6986
+0.5288
+0.3378
+0.5888
+0.1721
+0.5485
+0.4643
+0.1489
+0.09079
+0.5344
+0.07004
+0.1062
+0.04648
+0.3419
+0.8329
+0.5233
+0.9876
+0.9222
+0.5359
+0.2889
+0.9502
+0.9029
+0.5309
+0.8405
+0.07438
+0.5507
+0.08536
+0.6137
+0.8289
+0.5325
+0.7456
+0.9302
+0.5898
+0.6349
+0.4518
+0.7008
+0.03846
+0.6239
+0.8525
+0.5429
+0.7338
+0.1413
+0.7385
+0.507
+0.5665
+0.8023
+0.3118
+0.1214
+0.3992
+0.1708
+0.852
+0.1901
+0.6266
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,330 @@
+Sobol Generator: 'testGenerator4'
+	Stg_Object (ptr): 0x805e7f0
+		Stg_Class (ptr): 0x805e7f0
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator4
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 4
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^4 + x^1 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 3
+		Directional Number 2 = 1
+		Directional Number 3 = 1
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator4'
+	Stg_Object (ptr): 0x805e7f0
+		Stg_Class (ptr): 0x805e7f0
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator4
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 4
+	self->polynomialCoefficient = 1
+	This leads to polynomial: x^4 + x^1 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 3
+		Directional Number 2 = 1
+		Directional Number 3 = 1
+		Directional Number 4 = 9
+		Directional Number 5 = 59
+		Directional Number 6 = 25
+		Directional Number 7 = 89
+		Directional Number 8 = 321
+		Directional Number 9 = 835
+		Directional Number 10 = 833
+		Directional Number 11 = 4033
+		Directional Number 12 = 3913
+		Directional Number 13 = 11643
+		Directional Number 14 = 18777
+		Directional Number 15 = 35225
+		Directional Number 16 = 102401
+		Directional Number 17 = 45059
+		Directional Number 18 = 36865
+		Directional Number 19 = 299009
+		Directional Number 20 = 1904649
+		Directional Number 21 = 995387
+		Directional Number 22 = 2953241
+		Directional Number 23 = 10817625
+		Directional Number 24 = 28676417
+		Directional Number 25 = 26522435
+		Directional Number 26 = 131371841
+		Directional Number 27 = 123248577
+		Directional Number 28 = 373890889
+		Directional Number 29 = 645602683
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.875
+0.2256
+0.3462
+0.9597
+0.2688
+0.676
+0.07068
+0.2626
+0.4
+0.9049
+0.5265
+0.2271
+0.6612
+0.252
+0.5228
+0.8318
+0.1874
+0.9619
+0.5912
+0.6183
+0.1843
+0.777
+0.2075
+0.3916
+0.2556
+0.8191
+0.6906
+0.7638
+0.1676
+0.7623
+0.02524
+0.3412
+0.7812
+0.1181
+0.4975
+0.8214
+0.3874
+0.5426
+0.9214
+0.7295
+0.6233
+0.1184
+0.4969
+0.9987
+0.6984
+0.3556
+0.6186
+0.8105
+0.2049
+0.9285
+0.5501
+0.7227
+0.4693
+0.5178
+0.2707
+0.3913
+0.1924
+0.8608
+0.4595
+0.4632
+0.9364
+0.3551
+0.7623
+0.8839
+0.9842
+0.9163
+0.263
+0.6173
+0.3717
+0.4226
+0.03877
+0.1584
+0.4907
+0.207
+0.6142
+0.3186
+0.8504
+0.4253
+0.9575
+0.8291
+0.3712
+0.3063
+0.9049
+0.621
+0.3744
+0.8695
+0.1225
+0.2431
+0.4186
+0.3449
+0.9435
+0.9473
+0.4204
+0.8709
+0.2781
+0.3997
+0.5263
+0.5932
+0.2426
+0.8879
+0.1345
+0.06796
+0.9395
+0.09872
+0.2347
+0.02035
+0.6202
+0.2775
+0.04064
+0.8104
+0.6175
+0.4681
+0.5503
+0.9297
+0.09643
+0.8884
+0.3205
+0.8707
+0.8419
+0.2432
+0.1058
+0.5242
+0.9579
+0.1757
+0.7719
+0.002129
+0.32
+0.7194
+0.6326
+0.7532
+0.209
+0.7041
+0.02006
+0.2751
+0.9181
+0.0109
+0.1547
+0.12
+0.6332
+0.4837
+0.909
+0.1783
+0.4874
+0.5821
+0.4299
+0.0593
+0.9785
+0.874
+0.4331
+0.7712
+0.7971
+0.1477
+0.002388
+0.6308
+0.6336
+0.7005
+0.5726
+0.1553
+0.02692
+0.9777
+0.4982
+0.4332
+0.9218
+0.6351
+0.8568
+0.9075
+0.9197
+0.3677
+0.1558
+0.4316
+0.2324
+0.1675
+0.6841
+0.1033
+0.2317
+0.0326
+0.1625
+0.2225
+0.7418
+0.8966
+0.6105
+0.3785
+0.1007
+0.6741
+0.8333
+0.2195
+0.2324
+0.1645
+0.04633
+0.7443
+0.6237
+0.2671
+0.1235
+0.05857
+0.5466
+0.76
+0.7317
+0.5323
+0.3336
+0.8758
+0.6014
+0.8148
+0.1112
+0.05118
+0.5968
+0.4416
+0.1266
+0.3872
+0.5401
+0.3262
+0.6516
+0.2342
+0.4186
+0.5114
+0.5451
+0.3071
+0.9999
+0.01653
+0.4656
+0.08623
+0.419
+0.5098
+0.8277
+0.3713
+0.07201
+0.7956
+0.2461
+0.03075
+0.6439
+0.3011
+0.3339
+0.5641
+0.129
+0.628
+0.2313
+0.3519
+0.5128
+0.4161
+0.234
+0.4714
+0.5695
+0.2815
+0.7397
+0.9941
+0.5735
+0.4807
+0.447
+0.7163
+0.02346
+0.1397
+0.3156
+0.195
+0.2997
+0.6464
+0.9535
+0.01992
+0.01944
+0.5065
+0.1579
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,330 @@
+Sobol Generator: 'testGenerator5'
+	Stg_Object (ptr): 0x805e9d0
+		Stg_Class (ptr): 0x805e9d0
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator5
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 4
+	self->polynomialCoefficient = 4
+	This leads to polynomial: x^4 + x^3 + 1
+	self->directionalNumbersAlloced = 20
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+		Directional Number 2 = 3
+		Directional Number 3 = 7
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+ ****************** Testing SobolGenerator_GetDirectionalNumber ***************
+Sobol Generator: 'testGenerator5'
+	Stg_Object (ptr): 0x805e9d0
+		Stg_Class (ptr): 0x805e9d0
+			sizeOfSelf: 60
+			_deleteSelf: Yes
+			type: SobolGenerator
+			_delete (func ptr): 0xb7fca9eb
+			_print (func ptr): 0xb7fcaa30
+			_copy (func ptr): 0xb7fcac6d
+		name: testGenerator5
+		nameAllocationType: NON_GLOBAL
+	self->polynomialDegree = 4
+	self->polynomialCoefficient = 4
+	This leads to polynomial: x^4 + x^3 + 1
+	self->directionalNumbersAlloced = 30
+	Directional Numbers Calculated:
+		Directional Number 0 = 1
+		Directional Number 1 = 1
+		Directional Number 2 = 3
+		Directional Number 3 = 7
+		Directional Number 4 = 31
+		Directional Number 5 = 47
+		Directional Number 6 = 109
+		Directional Number 7 = 173
+		Directional Number 8 = 181
+		Directional Number 9 = 949
+		Directional Number 10 = 471
+		Directional Number 11 = 2515
+		Directional Number 12 = 6211
+		Directional Number 13 = 2147
+		Directional Number 14 = 3169
+		Directional Number 15 = 35873
+		Directional Number 16 = 33841
+		Directional Number 17 = 99889
+		Directional Number 18 = 247315
+		Directional Number 19 = 1032727
+		Directional Number 20 = 1524495
+		Directional Number 21 = 3629887
+		Directional Number 22 = 5333341
+		Directional Number 23 = 5317085
+		Directional Number 24 = 29438021
+		Directional Number 25 = 12791877
+		Directional Number 26 = 79762439
+		Directional Number 27 = 213980163
+		Directional Number 28 = 72358931
+		Directional Number 29 = 72354867
+	self->lastCalculated_I = 0
+	self->lastCalculatedNumber = 0
+0.125
+0.8135
+0.564
+0.595
+0.908
+0.03198
+0.4254
+0.3556
+0.5507
+0.9559
+0.7054
+0.5316
+0.3211
+0.6971
+0.2715
+0.4468
+0.4482
+0.5117
+0.7612
+0.5583
+0.9953
+0.1193
+0.8928
+0.8259
+0.01804
+0.1635
+0.414
+0.7144
+0.3077
+0.6817
+0.3495
+0.432
+0.7885
+0.225
+0.4755
+0.4435
+0.0065
+0.8825
+0.8875
+0.8313
+0.01224
+0.482
+0.2315
+0.6656
+0.08696
+0.961
+0.007614
+0.2112
+0.214
+0.7756
+0.526
+0.6088
+0.3603
+0.7792
+0.4969
+0.9964
+0.6217
+0.7618
+0.8878
+0.5454
+0.7676
+0.8889
+0.8274
+0.3279
+0.1101
+0.5471
+0.673
+0.0771
+0.8295
+0.6739
+0.3155
+0.816
+0.6908
+0.66
+0.534
+0.01552
+0.09804
+0.2457
+0.05727
+0.5568
+0.2249
+0.6629
+0.5388
+0.4453
+0.7105
+0.3017
+0.9589
+0.4584
+0.08364
+0.1847
+0.05874
+0.4055
+0.157
+0.06155
+0.2481
+0.7486
+0.6843
+0.2463
+0.1223
+0.6279
+0.4038
+0.1231
+0.3951
+0.5211
+0.3226
+0.9901
+0.6229
+0.4344
+0.8246
+0.2623
+0.07433
+0.9503
+0.9517
+0.8301
+0.2014
+0.4133
+0.1013
+0.2085
+0.9268
+0.05083
+0.8553
+0.1917
+0.5383
+0.4748
+0.5065
+0.06878
+0.2568
+0.6327
+0.727
+0.6171
+0.4767
+0.008949
+0.4469
+0.74
+0.1302
+0.7542
+0.08939
+0.7227
+0.884
+0.07053
+0.782
+0.3442
+0.0322
+0.9082
+0.9088
+0.8097
+0.159
+0.08189
+0.3939
+0.4417
+0.661
+0.2869
+0.6192
+0.1412
+0.1689
+0.7309
+0.1381
+0.01826
+0.8879
+0.4688
+0.6416
+0.2046
+0.3919
+0.4861
+0.4226
+0.08167
+0.3478
+0.496
+0.4325
+0.4633
+0.8519
+0.2899
+0.5877
+0.6934
+0.3375
+0.1826
+0.7148
+0.1518
+0.4646
+0.2336
+0.1701
+0.6904
+0.8716
+0.9719
+0.9085
+0.7058
+0.733
+0.1701
+0.7023
+0.579
+0.4525
+0.8197
+0.4203
+0.9833
+0.6701
+0.7018
+0.6403
+0.8562
+0.9407
+0.8404
+0.7789
+0.8721
+0.2024
+0.6404
+0.3696
+0.7456
+0.9336
+0.1324
+0.8507
+0.1622
+0.8065
+0.1468
+0.8885
+0.01257
+0.8558
+0.2936
+0.2306
+0.38
+0.8501
+0.9941
+0.6311
+0.2571
+0.07006
+0.2398
+0.5049
+0.4415
+0.5897
+0.223
+0.6945
+0.3185
+0.862
+0.2993
+0.2372
+0.2695
+0.1522
+0.004299
+0.1051
+0.9792
+0.6662
+0.3968
+0.616
+0.4295
+0.5391
+0.03079
+0.4245
+0.5505
+0.3313
+0.7695
+0.7065
+0.5337
+0.1886
+0.09237
+0.2826
+0.6566
+0.9696
+0.7155
+0.9279
+0.8535
+0.9775
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,112 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+tests = lib${PROJECT}_Utils
+
+SRCS = \
+	testRegularMeshUtils.c \
+	testFieldVariable_Register.c \
+	testOperatorFieldVariable.c \
+	testAllNodesVC.c \
+	testWallVC.c \
+	testCompositeVC.c \
+	testCompositeVC-dictionary.c \
+	testDofLayout.c \
+	testDofLayout-remap.c \
+	testDofLayout-saveAndLoad.c \
+	testSobolGenerator.c \
+	testTimeIntegration.c \
+	testCornerVC.c \
+	testRegularRemesher.c
+#	testSemiRegDeform.c \
+
+checks = \
+	testFieldVariable_Register.0of1.sh \
+	testOperatorFieldVariable.0of1.sh \
+	testAllNodesVC.0of1.sh \
+	testAllNodesVC.0of2.sh \
+	testAllNodesVC.1of2.sh \
+	testAllNodesVC.0of3.sh \
+	testAllNodesVC.1of3.sh \
+	testAllNodesVC.2of3.sh \
+	testWallVC.0of1.sh \
+	testWallVC.0of2.sh \
+	testWallVC.1of2.sh \
+	testWallVC.0of3.sh \
+	testWallVC.1of3.sh \
+	testWallVC.2of3.sh \
+	testCompositeVC.0of1.sh \
+	testCompositeVC.0of2.sh \
+	testCompositeVC.1of2.sh \
+	testCompositeVC.0of3.sh \
+	testCompositeVC.1of3.sh \
+	testCompositeVC.2of3.sh \
+	testCompositeVC-dictionary.0of1.sh \
+	testDofLayout.0of1.sh \
+	testDofLayout-remap.0of1.sh \
+	testDofLayout-saveAndLoad.0of1.sh \
+	testTimeIntegrationEuler.0of1.sh \
+	testTimeIntegrationRK2.0of1.sh \
+	testTimeIntegrationRK4.0of1.sh \
+	testSobolGenerator.0of1.sh \
+	testRegularMeshUtils.0of1.sh \
+	testRegularMeshUtils.0of2.sh \
+	testRegularMeshUtils.1of2.sh \
+	testCornerVC.0of1.sh \
+	testCornerVC.0of2.sh \
+	testCornerVC.1of2.sh \
+	testCornerVC.0of3.sh \
+	testCornerVC.1of3.sh \
+	testCornerVC.2of3.sh
+
+PROJ_LIBS = 
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomainUtils -lStgDomainMesh -lStgDomainShape -lStgDomainGeometry ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+        ifneq (Darwin,${SYSTEM})
+	       EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/input-2007.10.10-15.21.36.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/output/input-2007.10.10-15.21.36.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="outputPath">./output</param>
+  <param name="DerivName0">Cubic</param>
+  <param name="DerivName1">Cubic2</param>
+  <param name="order">4</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/input-2007.10.10-17.13.05.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/output/input-2007.10.10-17.13.05.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="outputPath">./output</param>
+  <param name="DerivName0">Cubic</param>
+  <param name="DerivName1">Cubic2</param>
+  <param name="order">4</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/input-2007.10.10-17.14.06.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/output/input-2007.10.10-17.14.06.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="outputPath">./output</param>
+  <param name="DerivName0">Cubic</param>
+  <param name="DerivName1">Cubic2</param>
+  <param name="order">4</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/input.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/output/input.xml	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="outputPath">./output</param>
+  <param name="DerivName0">Cubic</param>
+  <param name="DerivName1">Cubic2</param>
+  <param name="order">4</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">10</param>
+  <param name="checkpointEvery">0</param>
+  <param name="experimentName">experiment</param>
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.vx.dat.0000
Binary file Utils/tests/output/testDofSave.vx.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.vy.dat.0000
Binary file Utils/tests/output/testDofSave.vy.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.vz.dat.0000
Binary file Utils/tests/output/testDofSave.vz.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.x.dat.0000
Binary file Utils/tests/output/testDofSave.x.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.y.dat.0000
Binary file Utils/tests/output/testDofSave.y.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/output/testDofSave.z.dat.0000
Binary file Utils/tests/output/testDofSave.z.dat.0000 has changed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1021 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8060520
+	dictionary (ptr): 0x805d4c0
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x8061258
+		_entryTbl[0]:
+			varName (ptr): 0x8066d68
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805da08
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066e58
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805dd38
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8067720
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8060520
+Stg_Component (ptr): 0x8060520
+Stg_Object (ptr): 0x8060520
+	Stg_Class (ptr): 0x8060520
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7f749ba
+		_print (func ptr): 0xb7f74a00
+		_copy (func ptr): 0xb7f74ebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73de0
+	_construct (func ptr): 0xb7f750c1
+	_build (func ptr): 0xb7f7507f
+	_initialise (func ptr): 0xb7ed9de2
+	_execute (func ptr): 0xb7ed9ea6
+	_destroy (func ptr): 0xb7ed9ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7f75110
+	_getVariableCount (func ptr): 0xb7f7515c
+	_getVariableIndex (func ptr): 0xb7f75173
+	_getValueIndex (func ptr): 0xb7f751ba
+	_getValueCount (func ptr): 0xb7f751c2
+	_getValue (func ptr): 0xb7f751d9
+	variable_Register (ptr): 0x8068cf8
+	conFunc_Register (ptr): 0x805a9c0
+	_set (ptr): 0x80612a8
+	indexCount: 64
+	indexTbl (ptr): 0x80612f8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+		indexTbl[32]: 32
+		indexTbl[33]: 33
+		indexTbl[34]: 34
+		indexTbl[35]: 35
+		indexTbl[36]: 36
+		indexTbl[37]: 37
+		indexTbl[38]: 38
+		indexTbl[39]: 39
+		indexTbl[40]: 40
+		indexTbl[41]: 41
+		indexTbl[42]: 42
+		indexTbl[43]: 43
+		indexTbl[44]: 44
+		indexTbl[45]: 45
+		indexTbl[46]: 46
+		indexTbl[47]: 47
+		indexTbl[48]: 48
+		indexTbl[49]: 49
+		indexTbl[50]: 50
+		indexTbl[51]: 51
+		indexTbl[52]: 52
+		indexTbl[53]: 53
+		indexTbl[54]: 54
+		indexTbl[55]: 55
+		indexTbl[56]: 56
+		indexTbl[57]: 57
+		indexTbl[58]: 58
+		indexTbl[59]: 59
+		indexTbl[60]: 60
+		indexTbl[61]: 61
+		indexTbl[62]: 62
+		indexTbl[63]: 63
+	vcVarCountTbl (ptr): 0x8061408
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+		vcVarCountTbl[32]: 4
+		vcVarCountTbl[33]: 4
+		vcVarCountTbl[34]: 4
+		vcVarCountTbl[35]: 4
+		vcVarCountTbl[36]: 4
+		vcVarCountTbl[37]: 4
+		vcVarCountTbl[38]: 4
+		vcVarCountTbl[39]: 4
+		vcVarCountTbl[40]: 4
+		vcVarCountTbl[41]: 4
+		vcVarCountTbl[42]: 4
+		vcVarCountTbl[43]: 4
+		vcVarCountTbl[44]: 4
+		vcVarCountTbl[45]: 4
+		vcVarCountTbl[46]: 4
+		vcVarCountTbl[47]: 4
+		vcVarCountTbl[48]: 4
+		vcVarCountTbl[49]: 4
+		vcVarCountTbl[50]: 4
+		vcVarCountTbl[51]: 4
+		vcVarCountTbl[52]: 4
+		vcVarCountTbl[53]: 4
+		vcVarCountTbl[54]: 4
+		vcVarCountTbl[55]: 4
+		vcVarCountTbl[56]: 4
+		vcVarCountTbl[57]: 4
+		vcVarCountTbl[58]: 4
+		vcVarCountTbl[59]: 4
+		vcVarCountTbl[60]: 4
+		vcVarCountTbl[61]: 4
+		vcVarCountTbl[62]: 4
+		vcVarCountTbl[63]: 4
+	vcTbl (ptr): 0x8061518
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[32][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[32][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[32][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[32][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[33][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[33][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[33][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[33][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[34][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[34][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[34][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[34][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[35][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[35][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[35][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[35][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[36][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[36][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[36][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[36][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[37][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[37][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[37][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[37][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[38][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[38][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[38][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[38][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[39][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[39][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[39][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[39][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[40][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[40][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[40][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[40][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[41][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[41][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[41][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[41][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[42][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[42][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[42][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[42][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[43][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[43][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[43][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[43][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[44][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[44][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[44][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[44][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[45][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[45][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[45][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[45][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[46][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[46][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[46][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[46][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[47][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[47][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[47][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[47][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[48][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[48][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[48][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[48][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[49][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[49][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[49][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[49][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[50][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[50][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[50][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[50][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[51][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[51][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[51][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[51][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[52][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[52][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[52][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[52][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[53][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[53][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[53][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[53][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[54][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[54][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[54][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[54][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[55][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[55][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[55][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[55][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[56][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[56][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[56][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[56][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[57][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[57][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[57][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[57][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[58][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[58][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[58][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[58][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[59][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[59][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[59][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[59][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[60][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[60][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[60][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[60][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[61][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[61][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[61][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[61][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[62][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[62][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[62][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[62][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[63][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[63][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[63][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[63][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8067208
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8067720
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,797 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8068138
+	dictionary (ptr): 0x805d578
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x8068890
+		_entryTbl[0]:
+			varName (ptr): 0x8066e70
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805dae0
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066f60
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805de80
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8068a18
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8068138
+Stg_Component (ptr): 0x8068138
+Stg_Object (ptr): 0x8068138
+	Stg_Class (ptr): 0x8068138
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7f139ba
+		_print (func ptr): 0xb7f13a00
+		_copy (func ptr): 0xb7f13ebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f12de0
+	_construct (func ptr): 0xb7f140c1
+	_build (func ptr): 0xb7f1407f
+	_initialise (func ptr): 0xb7e78de2
+	_execute (func ptr): 0xb7e78ea6
+	_destroy (func ptr): 0xb7e78ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7f14110
+	_getVariableCount (func ptr): 0xb7f1415c
+	_getVariableIndex (func ptr): 0xb7f14173
+	_getValueIndex (func ptr): 0xb7f141ba
+	_getValueCount (func ptr): 0xb7f141c2
+	_getValue (func ptr): 0xb7f141d9
+	variable_Register (ptr): 0x8068dc0
+	conFunc_Register (ptr): 0x805aa18
+	_set (ptr): 0x8068f40
+	indexCount: 48
+	indexTbl (ptr): 0x8060fa8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+		indexTbl[32]: 32
+		indexTbl[33]: 33
+		indexTbl[34]: 34
+		indexTbl[35]: 35
+		indexTbl[36]: 36
+		indexTbl[37]: 37
+		indexTbl[38]: 38
+		indexTbl[39]: 39
+		indexTbl[40]: 40
+		indexTbl[41]: 41
+		indexTbl[42]: 42
+		indexTbl[43]: 43
+		indexTbl[44]: 44
+		indexTbl[45]: 45
+		indexTbl[46]: 46
+		indexTbl[47]: 47
+	vcVarCountTbl (ptr): 0x8061078
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+		vcVarCountTbl[32]: 4
+		vcVarCountTbl[33]: 4
+		vcVarCountTbl[34]: 4
+		vcVarCountTbl[35]: 4
+		vcVarCountTbl[36]: 4
+		vcVarCountTbl[37]: 4
+		vcVarCountTbl[38]: 4
+		vcVarCountTbl[39]: 4
+		vcVarCountTbl[40]: 4
+		vcVarCountTbl[41]: 4
+		vcVarCountTbl[42]: 4
+		vcVarCountTbl[43]: 4
+		vcVarCountTbl[44]: 4
+		vcVarCountTbl[45]: 4
+		vcVarCountTbl[46]: 4
+		vcVarCountTbl[47]: 4
+	vcTbl (ptr): 0x8061148
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[32][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[32][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[32][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[32][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[33][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[33][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[33][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[33][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[34][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[34][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[34][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[34][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[35][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[35][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[35][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[35][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[36][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[36][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[36][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[36][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[37][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[37][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[37][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[37][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[38][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[38][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[38][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[38][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[39][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[39][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[39][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[39][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[40][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[40][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[40][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[40][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[41][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[41][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[41][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[41][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[42][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[42][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[42][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[42][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[43][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[43][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[43][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[43][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[44][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[44][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[44][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[44][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[45][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[45][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[45][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[45][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[46][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[46][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[46][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[46][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[47][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[47][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[47][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[47][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8068f90
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8068a18
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,573 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8067eb0
+	dictionary (ptr): 0x805d580
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x8068898
+		_entryTbl[0]:
+			varName (ptr): 0x8066e78
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805dae8
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066f68
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805de88
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8068f98
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8067eb0
+Stg_Component (ptr): 0x8067eb0
+Stg_Object (ptr): 0x8067eb0
+	Stg_Class (ptr): 0x8067eb0
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7f8e9ba
+		_print (func ptr): 0xb7f8ea00
+		_copy (func ptr): 0xb7f8eebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8dde0
+	_construct (func ptr): 0xb7f8f0c1
+	_build (func ptr): 0xb7f8f07f
+	_initialise (func ptr): 0xb7ef3de2
+	_execute (func ptr): 0xb7ef3ea6
+	_destroy (func ptr): 0xb7ef3ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7f8f110
+	_getVariableCount (func ptr): 0xb7f8f15c
+	_getVariableIndex (func ptr): 0xb7f8f173
+	_getValueIndex (func ptr): 0xb7f8f1ba
+	_getValueCount (func ptr): 0xb7f8f1c2
+	_getValue (func ptr): 0xb7f8f1d9
+	variable_Register (ptr): 0x8068dc8
+	conFunc_Register (ptr): 0x805aa20
+	_set (ptr): 0x8068d78
+	indexCount: 32
+	indexTbl (ptr): 0x80683b8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+	vcVarCountTbl (ptr): 0x8068448
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+	vcTbl (ptr): 0x8060a30
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8068e10
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8068f98
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,573 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8067ea8
+	dictionary (ptr): 0x805d558
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x8068870
+		_entryTbl[0]:
+			varName (ptr): 0x8066e50
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805dac0
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066f40
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805de60
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8068f20
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8067ea8
+Stg_Component (ptr): 0x8067ea8
+Stg_Object (ptr): 0x8067ea8
+	Stg_Class (ptr): 0x8067ea8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7f929ba
+		_print (func ptr): 0xb7f92a00
+		_copy (func ptr): 0xb7f92ebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f91de0
+	_construct (func ptr): 0xb7f930c1
+	_build (func ptr): 0xb7f9307f
+	_initialise (func ptr): 0xb7ef7de2
+	_execute (func ptr): 0xb7ef7ea6
+	_destroy (func ptr): 0xb7ef7ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7f93110
+	_getVariableCount (func ptr): 0xb7f9315c
+	_getVariableIndex (func ptr): 0xb7f93173
+	_getValueIndex (func ptr): 0xb7f931ba
+	_getValueCount (func ptr): 0xb7f931c2
+	_getValue (func ptr): 0xb7f931d9
+	variable_Register (ptr): 0x8068da0
+	conFunc_Register (ptr): 0x805a9f8
+	_set (ptr): 0x8068f70
+	indexCount: 32
+	indexTbl (ptr): 0x80683b0
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+	vcVarCountTbl (ptr): 0x8068440
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+	vcTbl (ptr): 0x8060a08
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8068d50
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8068f20
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.1of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.1of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,573 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8067e98
+	dictionary (ptr): 0x805d558
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x80672a0
+		_entryTbl[0]:
+			varName (ptr): 0x8066e50
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805dac0
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066f40
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805de60
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8068de8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8067e98
+Stg_Component (ptr): 0x8067e98
+Stg_Object (ptr): 0x8067e98
+	Stg_Class (ptr): 0x8067e98
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7ed49ba
+		_print (func ptr): 0xb7ed4a00
+		_copy (func ptr): 0xb7ed4ebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed3de0
+	_construct (func ptr): 0xb7ed50c1
+	_build (func ptr): 0xb7ed507f
+	_initialise (func ptr): 0xb7e39de2
+	_execute (func ptr): 0xb7e39ea6
+	_destroy (func ptr): 0xb7e39ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7ed5110
+	_getVariableCount (func ptr): 0xb7ed515c
+	_getVariableIndex (func ptr): 0xb7ed5173
+	_getValueIndex (func ptr): 0xb7ed51ba
+	_getValueCount (func ptr): 0xb7ed51c2
+	_getValue (func ptr): 0xb7ed51d9
+	variable_Register (ptr): 0x8068da0
+	conFunc_Register (ptr): 0x805a9f8
+	_set (ptr): 0x8068e38
+	indexCount: 32
+	indexTbl (ptr): 0x80683a0
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+	vcVarCountTbl (ptr): 0x8068430
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+	vcTbl (ptr): 0x8060a10
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8068c18
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8068de8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.1of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.1of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.2of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.2of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,573 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for AllNodesVC
+AllNodesVC (ptr): 0x8067e88
+	dictionary (ptr): 0x805d558
+	_dictionaryEntryName (ptr): 0x8049db0
+		_dictionaryEntryName: AllNodesVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x8068870
+		_entryTbl[0]:
+			varName (ptr): 0x8066e50
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805dac0
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066f40
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805de60
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8068f70
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8067e88
+Stg_Component (ptr): 0x8067e88
+Stg_Object (ptr): 0x8067e88
+	Stg_Class (ptr): 0x8067e88
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: AllNodesVC
+		_delete (func ptr): 0xb7fa19ba
+		_print (func ptr): 0xb7fa1a00
+		_copy (func ptr): 0xb7fa1ebe
+	name: AllNodesVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fa0de0
+	_construct (func ptr): 0xb7fa20c1
+	_build (func ptr): 0xb7fa207f
+	_initialise (func ptr): 0xb7f06de2
+	_execute (func ptr): 0xb7f06ea6
+	_destroy (func ptr): 0xb7f06ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: AllNodesVC-Construct
+	build function name: AllNodesVC-Build
+	initialise function name: AllNodesVC-Initialise
+	execute function name: AllNodesVC-Execute
+	destroy function name: AllNodesVC-Destroy
+	_getSet (func ptr): 0xb7fa2110
+	_getVariableCount (func ptr): 0xb7fa215c
+	_getVariableIndex (func ptr): 0xb7fa2173
+	_getValueIndex (func ptr): 0xb7fa21ba
+	_getValueCount (func ptr): 0xb7fa21c2
+	_getValue (func ptr): 0xb7fa21d9
+	variable_Register (ptr): 0x8068da0
+	conFunc_Register (ptr): 0x805a9f8
+	_set (ptr): 0x8068d50
+	indexCount: 32
+	indexTbl (ptr): 0x8068390
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 21
+		indexTbl[22]: 22
+		indexTbl[23]: 23
+		indexTbl[24]: 24
+		indexTbl[25]: 25
+		indexTbl[26]: 26
+		indexTbl[27]: 27
+		indexTbl[28]: 28
+		indexTbl[29]: 29
+		indexTbl[30]: 30
+		indexTbl[31]: 31
+	vcVarCountTbl (ptr): 0x8068420
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 4
+		vcVarCountTbl[20]: 4
+		vcVarCountTbl[21]: 4
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 4
+		vcVarCountTbl[29]: 4
+		vcVarCountTbl[30]: 4
+		vcVarCountTbl[31]: 4
+	vcTbl (ptr): 0x8060a08
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[21][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[28][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[29][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[30][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[31][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8068de8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8068f70
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00, 20.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.2of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.2of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testAllNodesVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testAllNodesVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testAllNodesVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,232 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testAllNodesVC.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	gen->shadowDepth = 0;
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm	CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {3, 3, 3};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	VariableCondition*		vc;
+	ConditionFunction*		quadCF;
+	ConditionFunction_Register*	conFunc_Register;
+	ExtensionManager_Register*		extensionMgr_Register;
+	
+	double*		array[7];
+	char*		vcKey = "AllNodesVC";
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+	unsigned	nDomains;
+	Index	i, j, k;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromFile(io_handler, "data/allVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	/* Create a mesh. */
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	nDomains = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	
+	/* Create CF stuff */
+	quadCF = ConditionFunction_New(quadratic, "quadratic");
+	conFunc_Register = ConditionFunction_Register_New();
+	ConditionFunction_Register_Add(conFunc_Register, quadCF);
+	
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	
+	/* Create variables */
+	for (i = 0; i < 6; i++) {
+		array[i] = Memory_Alloc_Array( double, nDomains, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &nDomains, NULL, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, nDomains*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &nDomains, NULL, (void**)&array[6], 0 );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create AllVC */
+	vc = (VariableCondition*)AllNodesVC_New( "AllNodesVC", vcKey, variable_Register, conFunc_Register, dictionary, mesh );
+	Stg_Component_Build( vc, 0, False );
+		
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*nDomains);
+	memset(array[6], 0, sizeof(double)*nDomains*5);
+	VariableCondition_Apply(vc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		printf("Testing for %s\n", vcKey);
+		Stg_Class_Print(vc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2lf", j, array[j][0]);
+			for (k = 1; k < nDomains; k++)
+				printf(", %.2lf", array[j][k]);
+		}
+		printf("\nvar[6]: %.2lf", array[6][0]);
+		for (j = 1; j < nDomains*5; j++)
+			printf(", %.2lf", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < nDomains; k++)
+				printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < nDomains; k++)
+			{
+				VariableCondition_ValueIndex	valIndex;
+			
+				valIndex = VariableCondition_GetValueIndex(vc, k, j);
+				if (valIndex != (unsigned)-1)
+					printf("%03u ", valIndex);
+				else
+					printf("XXX ");
+			}
+			printf("\n");
+		}
+		printf("\n");
+	}
+	
+	Stg_Class_Delete(vc);
+		
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(dictionary);
+	FreeObject( mesh );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC-dictionary.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC-dictionary.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,447 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806c7a8
+	dictionary (ptr): 0x805d4c0
+	itemCount: 6
+	itemTbl (ptr): 0x806cab0
+		itemTbl[0] (ptr): 0x80623a8
+		itemTbl[1] (ptr): 0x80626c8
+		itemTbl[2] (ptr): 0x8062a08
+		itemTbl[3] (ptr): 0x8062d28
+		itemTbl[4] (ptr): 0x8063048
+		itemTbl[5] (ptr): 0x80633c0
+	iOwnTbl (ptr): 0x806cae0
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806c7a8
+Stg_Component (ptr): 0x806c7a8
+Stg_Object (ptr): 0x806c7a8
+	Stg_Class (ptr): 0x806c7a8
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7e7bf88
+		_print (func ptr): 0xb7e7c057
+		_copy (func ptr): 0xb7e7c244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7e7b81d
+	_construct (func ptr): 0xb7e7bde9
+	_build (func ptr): 0xb7e7c615
+	_initialise (func ptr): 0xb7e79de2
+	_execute (func ptr): 0xb7e79ea6
+	_destroy (func ptr): 0xb7e79ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0xb7e7c783
+	_getVariableCount (func ptr): 0xb7e7c88a
+	_getVariableIndex (func ptr): 0xb7e7ca1e
+	_getValueIndex (func ptr): 0xb7e7cbda
+	_getValueCount (func ptr): 0xb7e7cde4
+	_getValue (func ptr): 0xb7e7ce58
+	variable_Register (ptr): 0x806d730
+	conFunc_Register (ptr): 0x805a9c0
+	_set (ptr): 0x806d640
+	indexCount: 26
+	indexTbl (ptr): 0x8063dc0
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 14
+		indexTbl[14]: 15
+		indexTbl[15]: 16
+		indexTbl[16]: 17
+		indexTbl[17]: 18
+		indexTbl[18]: 19
+		indexTbl[19]: 20
+		indexTbl[20]: 21
+		indexTbl[21]: 22
+		indexTbl[22]: 23
+		indexTbl[23]: 24
+		indexTbl[24]: 25
+		indexTbl[25]: 26
+	vcVarCountTbl (ptr): 0x8063e38
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 4
+		vcVarCountTbl[15]: 1
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 3
+		vcVarCountTbl[19]: 3
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 4
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 4
+	vcTbl (ptr): 0x8063eb0
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[3][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[3][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[5][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[5][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[6][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[6][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[6][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[8][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[8][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[14][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[15][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[16][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x80641c8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806d3d8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8063388
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 2.00, 2.00, 2.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 2.00, 2.00, 2.00, 20.00, 2.00, 30.00, 20.00, 2.00, 30.00
+var[4]: 3.00, 3.00, 3.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 3.00, 3.00, 3.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 3.00, 3.00, 3.00, 20.00, 3.00, 30.00, 20.00, 3.00, 30.00
+var[5]: 1.00, 1.00, 1.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 1.00, 1.00, 1.00, 20.00, 0.00, 30.00, 20.00, 0.00, 30.00, 1.00, 1.00, 1.00, 20.00, 1.00, 30.00, 20.00, 1.00, 30.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False True  True  False True  True  True  True  True  False True  True  False True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  False True  True  False True  True  True  True  True  False True  True  False True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  False True  True  False True  True  True  True  True  False True  True  False True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  False False False False False False True  True  True  False False False False False False True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 011 011 004 XXX 007 004 XXX 007 011 011 011 004 XXX 007 004 XXX 007 011 011 011 004 000 007 004 000 007 
+012 012 012 005 XXX 008 005 XXX 008 012 012 012 005 XXX 008 005 XXX 008 012 012 012 005 001 008 005 001 008 
+013 013 013 006 XXX 009 006 XXX 009 013 013 013 006 XXX 009 006 XXX 009 013 013 013 006 002 009 006 002 009 
+003 003 003 003 003 003 010 010 010 XXX XXX XXX XXX XXX XXX 010 010 010 XXX XXX XXX XXX XXX XXX 010 010 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC-dictionary.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC-dictionary.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC-dictionary " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC-dictionary.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC-dictionary.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,241 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testCompositeVC-dictionary.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+void exponential(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 30.0;
+}
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {0, 1, 1};
+
+	gen = CartesianGenerator_New( "" );
+	gen->shadowDepth = 0;
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {2, 2, 2};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	CompositeVC*			cvc;
+	ConditionFunction*		quadCF;
+	ConditionFunction*		expCF;
+	ConditionFunction_Register*	conFunc_Register;
+	ExtensionManager_Register*		extensionMgr_Register;
+	
+	double*		array[7];
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+
+	unsigned	nDomains;
+	
+	Index	i, j, k;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromFile(io_handler, "data/compositeVC.xml", dictionary);
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	/* Create a mesh. */
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	nDomains = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	
+	/* Create CF stuff */
+	quadCF = ConditionFunction_New(quadratic, "quadratic");
+	expCF = ConditionFunction_New(exponential, "exponential");
+	conFunc_Register = ConditionFunction_Register_New();
+	ConditionFunction_Register_Add(conFunc_Register, quadCF);
+	ConditionFunction_Register_Add(conFunc_Register, expCF);
+	
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	
+	/* Create variables */
+	for (i = 0; i < 6; i++) {
+		array[i] = Memory_Alloc_Array( double, 3*3*3, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &nDomains, NULL, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, 3*3*3*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &nDomains, NULL, (void**)&array[6], 0 );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create CompositeVC */
+	cvc = CompositeVC_New( "CompositeVC", variable_Register, conFunc_Register, dictionary, mesh );
+	Stg_Component_Build( cvc, 0, False );
+	
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*3*3*3);
+	memset(array[6], 0, sizeof(double)*3*3*3*5);
+	VariableCondition_Apply(cvc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		Stg_Class_Print(cvc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2lf", j, array[j][0]);
+			for (k = 1; k < 3*3*3; k++)
+				printf(", %.2lf", array[j][k]);
+		}
+		printf("\nvar[7]: %.2lf", array[6][0]);
+		for (j = 1; j < 3*3*3*5; j++)
+			printf(", %.2lf", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 27; k++)
+				printf("%s ", VariableCondition_IsCondition(cvc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 27; k++)
+			{
+				VariableCondition_ValueIndex	valIndex;
+				
+				valIndex = VariableCondition_GetValueIndex(cvc, k, j);
+				if (valIndex != (unsigned)-1)
+					printf("%03u ", valIndex);
+				else
+					printf("XXX ");
+			}
+			printf("\n");
+		}
+		printf("\n");
+	}
+
+	Stg_Class_Delete(cvc);
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(quadCF);
+	Stg_Class_Delete(expCF);
+	Stg_Class_Delete(dictionary);
+	FreeObject( mesh );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,753 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	itemCount: 6
+	itemTbl (ptr): 0x8068518
+		itemTbl[0] (ptr): 0x8068ad0
+		itemTbl[1] (ptr): 0x8069c70
+		itemTbl[2] (ptr): 0x806a1b0
+		itemTbl[3] (ptr): 0x806a808
+		itemTbl[4] (ptr): 0x806ae60
+		itemTbl[5] (ptr): 0x8061a00
+	iOwnTbl (ptr): 0x8068aa0
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7ee0f88
+		_print (func ptr): 0xb7ee1057
+		_copy (func ptr): 0xb7ee1244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ee081d
+	_construct (func ptr): 0xb7ee0de9
+	_build (func ptr): 0xb7ee1615
+	_initialise (func ptr): 0xb7edede2
+	_execute (func ptr): 0xb7edeea6
+	_destroy (func ptr): 0xb7edeed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0xb7ee1783
+	_getVariableCount (func ptr): 0xb7ee188a
+	_getVariableIndex (func ptr): 0xb7ee1a1e
+	_getValueIndex (func ptr): 0xb7ee1bda
+	_getValueCount (func ptr): 0xb7ee1de4
+	_getValue (func ptr): 0xb7ee1e58
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8062048
+	indexCount: 56
+	indexTbl (ptr): 0x8062258
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 23
+		indexTbl[22]: 24
+		indexTbl[23]: 27
+		indexTbl[24]: 28
+		indexTbl[25]: 29
+		indexTbl[26]: 30
+		indexTbl[27]: 31
+		indexTbl[28]: 32
+		indexTbl[29]: 33
+		indexTbl[30]: 34
+		indexTbl[31]: 35
+		indexTbl[32]: 36
+		indexTbl[33]: 39
+		indexTbl[34]: 40
+		indexTbl[35]: 43
+		indexTbl[36]: 44
+		indexTbl[37]: 45
+		indexTbl[38]: 46
+		indexTbl[39]: 47
+		indexTbl[40]: 48
+		indexTbl[41]: 49
+		indexTbl[42]: 50
+		indexTbl[43]: 51
+		indexTbl[44]: 52
+		indexTbl[45]: 53
+		indexTbl[46]: 54
+		indexTbl[47]: 55
+		indexTbl[48]: 56
+		indexTbl[49]: 57
+		indexTbl[50]: 58
+		indexTbl[51]: 59
+		indexTbl[52]: 60
+		indexTbl[53]: 61
+		indexTbl[54]: 62
+		indexTbl[55]: 63
+	vcVarCountTbl (ptr): 0x8062348
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 1
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 1
+		vcVarCountTbl[14]: 1
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 3
+		vcVarCountTbl[19]: 3
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 3
+		vcVarCountTbl[24]: 4
+		vcVarCountTbl[25]: 1
+		vcVarCountTbl[26]: 1
+		vcVarCountTbl[27]: 4
+		vcVarCountTbl[28]: 3
+		vcVarCountTbl[29]: 3
+		vcVarCountTbl[30]: 3
+		vcVarCountTbl[31]: 3
+		vcVarCountTbl[32]: 3
+		vcVarCountTbl[33]: 3
+		vcVarCountTbl[34]: 3
+		vcVarCountTbl[35]: 3
+		vcVarCountTbl[36]: 4
+		vcVarCountTbl[37]: 1
+		vcVarCountTbl[38]: 1
+		vcVarCountTbl[39]: 4
+		vcVarCountTbl[40]: 3
+		vcVarCountTbl[41]: 3
+		vcVarCountTbl[42]: 3
+		vcVarCountTbl[43]: 3
+		vcVarCountTbl[44]: 3
+		vcVarCountTbl[45]: 3
+		vcVarCountTbl[46]: 3
+		vcVarCountTbl[47]: 3
+		vcVarCountTbl[48]: 3
+		vcVarCountTbl[49]: 3
+		vcVarCountTbl[50]: 3
+		vcVarCountTbl[51]: 3
+		vcVarCountTbl[52]: 4
+		vcVarCountTbl[53]: 4
+		vcVarCountTbl[54]: 4
+		vcVarCountTbl[55]: 4
+	vcTbl (ptr): 0x8062438
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[3][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[3][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[4][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[4][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[7][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[7][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[8][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[8][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[11][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[11][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[12][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[12][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[12][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[12][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[13][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[14][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[15][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[15][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[15][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[15][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[24][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[25][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[26][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[32][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[32][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[32][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[33][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[33][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[33][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[34][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[34][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[34][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[35][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[35][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[35][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[36][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[36][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[36][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[36][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[37][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[38][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[39][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[39][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[39][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[39][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[40][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[40][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[40][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[41][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[41][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[41][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[42][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[42][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[42][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[43][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[43][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[43][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[44][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[44][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[44][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[45][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[45][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[45][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[46][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[46][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[46][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[47][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[47][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[47][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[48][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[48][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[48][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[49][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[49][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[49][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[50][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[50][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[50][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[51][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[51][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[51][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[52][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[52][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[52][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[52][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[53][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[53][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[53][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[53][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[54][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[54][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[54][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[54][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[55][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[55][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[55][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[55][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x8062a58
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806d9e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806b1a0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 2.00, 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 2.00, 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 2.00, 2.00, 2.00, 2.00, 20.00, 2.00, 2.00, 30.00, 20.00, 2.00, 2.00, 30.00, 20.00, 2.00, 2.00, 30.00
+var[4]: 3.00, 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 3.00, 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 3.00, 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 3.00, 3.00, 3.00, 3.00, 20.00, 3.00, 3.00, 30.00, 20.00, 3.00, 3.00, 30.00, 20.00, 3.00, 3.00, 30.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 1.00, 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 1.00, 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 20.00, 0.00, 0.00, 30.00, 1.00, 1.00, 1.00, 1.00, 20.00, 1.00, 1.00, 30.00, 20.00, 1.00, 1.00, 30.00, 20.00, 1.00, 1.00, 30.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  False False True  True  False False True  True  False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 011 011 011 004 XXX XXX 007 004 XXX XXX 007 004 XXX XXX 007 011 011 011 011 004 XXX XXX 007 004 XXX XXX 007 004 XXX XXX 007 011 011 011 011 004 XXX XXX 007 004 XXX XXX 007 004 XXX XXX 007 011 011 011 011 004 000 000 007 004 000 000 007 004 000 000 007 
+012 012 012 012 005 XXX XXX 008 005 XXX XXX 008 005 XXX XXX 008 012 012 012 012 005 XXX XXX 008 005 XXX XXX 008 005 XXX XXX 008 012 012 012 012 005 XXX XXX 008 005 XXX XXX 008 005 XXX XXX 008 012 012 012 012 005 001 001 008 005 001 001 008 005 001 001 008 
+013 013 013 013 006 XXX XXX 009 006 XXX XXX 009 006 XXX XXX 009 013 013 013 013 006 XXX XXX 009 006 XXX XXX 009 006 XXX XXX 009 013 013 013 013 006 XXX XXX 009 006 XXX XXX 009 006 XXX XXX 009 013 013 013 013 006 002 002 009 006 002 002 009 006 002 002 009 
+003 003 003 003 003 003 003 003 003 003 003 003 010 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,556 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	itemCount: 6
+	itemTbl (ptr): 0x806deb8
+		itemTbl[0] (ptr): 0x806bc78
+		itemTbl[1] (ptr): 0x806cb00
+		itemTbl[2] (ptr): 0x806cf30
+		itemTbl[3] (ptr): 0x806d4b8
+		itemTbl[4] (ptr): 0x8063980
+		itemTbl[5] (ptr): 0x8063dc8
+	iOwnTbl (ptr): 0x806d900
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7f0ef88
+		_print (func ptr): 0xb7f0f057
+		_copy (func ptr): 0xb7f0f244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0e81d
+	_construct (func ptr): 0xb7f0ede9
+	_build (func ptr): 0xb7f0f615
+	_initialise (func ptr): 0xb7f0cde2
+	_execute (func ptr): 0xb7f0cea6
+	_destroy (func ptr): 0xb7f0ced6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0xb7f0f783
+	_getVariableCount (func ptr): 0xb7f0f88a
+	_getVariableIndex (func ptr): 0xb7f0fa1e
+	_getValueIndex (func ptr): 0xb7f0fbda
+	_getValueCount (func ptr): 0xb7f0fde4
+	_getValue (func ptr): 0xb7f0fe58
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x8064310
+	indexCount: 40
+	indexTbl (ptr): 0x8064520
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 18
+		indexTbl[17]: 21
+		indexTbl[18]: 22
+		indexTbl[19]: 23
+		indexTbl[20]: 24
+		indexTbl[21]: 25
+		indexTbl[22]: 26
+		indexTbl[23]: 27
+		indexTbl[24]: 30
+		indexTbl[25]: 33
+		indexTbl[26]: 34
+		indexTbl[27]: 35
+		indexTbl[28]: 36
+		indexTbl[29]: 37
+		indexTbl[30]: 38
+		indexTbl[31]: 39
+		indexTbl[32]: 40
+		indexTbl[33]: 41
+		indexTbl[34]: 42
+		indexTbl[35]: 43
+		indexTbl[36]: 44
+		indexTbl[37]: 45
+		indexTbl[38]: 46
+		indexTbl[39]: 47
+	vcVarCountTbl (ptr): 0x80645d0
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 1
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 4
+		vcVarCountTbl[18]: 1
+		vcVarCountTbl[19]: 1
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 3
+		vcVarCountTbl[24]: 3
+		vcVarCountTbl[25]: 4
+		vcVarCountTbl[26]: 1
+		vcVarCountTbl[27]: 1
+		vcVarCountTbl[28]: 3
+		vcVarCountTbl[29]: 3
+		vcVarCountTbl[30]: 3
+		vcVarCountTbl[31]: 3
+		vcVarCountTbl[32]: 3
+		vcVarCountTbl[33]: 3
+		vcVarCountTbl[34]: 3
+		vcVarCountTbl[35]: 3
+		vcVarCountTbl[36]: 3
+		vcVarCountTbl[37]: 4
+		vcVarCountTbl[38]: 4
+		vcVarCountTbl[39]: 4
+	vcTbl (ptr): 0x8064680
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[3][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[3][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[6][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[6][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[9][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[9][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[9][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[17][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[18][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[19][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[25][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[26][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[27][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[28][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[28][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[28][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[29][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[29][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[29][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[30][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[30][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[30][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[31][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[31][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[31][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[32][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[32][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[32][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[33][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[33][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[33][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[34][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[34][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[34][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[35][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[35][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[35][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[36][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[36][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[36][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[37][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[37][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[37][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[37][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[38][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[38][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[38][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[38][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[39][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[39][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[39][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[39][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x8064aa8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806c7f8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8063cc0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 2.00, 2.00, 2.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 2.00, 2.00, 2.00, 20.00, 2.00, 2.00, 20.00, 2.00, 2.00, 20.00, 2.00, 2.00
+var[4]: 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 3.00, 3.00, 3.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 3.00, 3.00, 3.00, 20.00, 3.00, 3.00, 20.00, 3.00, 3.00, 20.00, 3.00, 3.00
+var[5]: 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 1.00, 1.00, 1.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 1.00, 1.00, 1.00, 20.00, 1.00, 1.00, 20.00, 1.00, 1.00, 20.00, 1.00, 1.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  False False True  False False True  False False True  True  True  True  True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 011 011 004 XXX XXX 004 XXX XXX 004 XXX XXX 011 011 011 004 XXX XXX 004 XXX XXX 004 XXX XXX 011 011 011 004 XXX XXX 004 XXX XXX 004 XXX XXX 011 011 011 004 000 000 004 000 000 004 000 000 
+012 012 012 005 XXX XXX 005 XXX XXX 005 XXX XXX 012 012 012 005 XXX XXX 005 XXX XXX 005 XXX XXX 012 012 012 005 XXX XXX 005 XXX XXX 005 XXX XXX 012 012 012 005 001 001 005 001 001 005 001 001 
+013 013 013 006 XXX XXX 006 XXX XXX 006 XXX XXX 013 013 013 006 XXX XXX 006 XXX XXX 006 XXX XXX 013 013 013 006 XXX XXX 006 XXX XXX 006 XXX XXX 013 013 013 006 002 002 006 002 002 006 002 002 
+003 003 003 003 003 003 003 003 003 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 XXX XXX XXX XXX XXX XXX XXX XXX XXX 010 010 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,448 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	itemCount: 6
+	itemTbl (ptr): 0x806dec0
+		itemTbl[0] (ptr): 0x806ba00
+		itemTbl[1] (ptr): 0x806c530
+		itemTbl[2] (ptr): 0x806c9c0
+		itemTbl[3] (ptr): 0x806cf40
+		itemTbl[4] (ptr): 0x806d2a0
+		itemTbl[5] (ptr): 0x80634b8
+	iOwnTbl (ptr): 0x806e3a0
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7f03f88
+		_print (func ptr): 0xb7f04057
+		_copy (func ptr): 0xb7f04244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0381d
+	_construct (func ptr): 0xb7f03de9
+	_build (func ptr): 0xb7f04615
+	_initialise (func ptr): 0xb7f01de2
+	_execute (func ptr): 0xb7f01ea6
+	_destroy (func ptr): 0xb7f01ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0xb7f04783
+	_getVariableCount (func ptr): 0xb7f0488a
+	_getVariableIndex (func ptr): 0xb7f04a1e
+	_getValueIndex (func ptr): 0xb7f04bda
+	_getValueCount (func ptr): 0xb7f04de4
+	_getValue (func ptr): 0xb7f04e58
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x80639a8
+	indexCount: 28
+	indexTbl (ptr): 0x8063b88
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 12
+		indexTbl[12]: 14
+		indexTbl[13]: 15
+		indexTbl[14]: 16
+		indexTbl[15]: 17
+		indexTbl[16]: 18
+		indexTbl[17]: 20
+		indexTbl[18]: 22
+		indexTbl[19]: 23
+		indexTbl[20]: 24
+		indexTbl[21]: 25
+		indexTbl[22]: 26
+		indexTbl[23]: 27
+		indexTbl[24]: 28
+		indexTbl[25]: 29
+		indexTbl[26]: 30
+		indexTbl[27]: 31
+	vcVarCountTbl (ptr): 0x8063c08
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 1
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 4
+		vcVarCountTbl[19]: 1
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 3
+		vcVarCountTbl[24]: 3
+		vcVarCountTbl[25]: 3
+		vcVarCountTbl[26]: 4
+		vcVarCountTbl[27]: 4
+	vcTbl (ptr): 0x8063c88
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[4][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[4][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[6][1]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[6][2]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[6][3]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[13][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[18][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[19][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 4
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 5
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 6
+		vcTbl[26][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x8063fa0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806c890
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806e090
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 2.00, 2.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 2.00, 2.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 2.00, 2.00, 20.00, 2.00, 20.00, 2.00, 20.00, 2.00
+var[4]: 3.00, 3.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 3.00, 3.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 3.00, 3.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 3.00, 3.00, 20.00, 3.00, 20.00, 3.00, 20.00, 3.00
+var[5]: 1.00, 1.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 1.00, 1.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 1.00, 1.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 1.00, 1.00, 20.00, 1.00, 20.00, 1.00, 20.00, 1.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  True  True  True  True  True  
+True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  True  True  True  True  True  
+True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  False True  False True  False True  True  True  True  True  True  True  True  
+True  True  True  True  True  True  True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 011 004 XXX 004 XXX 004 XXX 011 011 004 XXX 004 XXX 004 XXX 011 011 004 XXX 004 XXX 004 XXX 011 011 004 000 004 000 004 000 
+012 012 005 XXX 005 XXX 005 XXX 012 012 005 XXX 005 XXX 005 XXX 012 012 005 XXX 005 XXX 005 XXX 012 012 005 001 005 001 005 001 
+013 013 006 XXX 006 XXX 006 XXX 013 013 006 XXX 006 XXX 006 XXX 013 013 006 XXX 006 XXX 006 XXX 013 013 006 002 006 002 006 002 
+003 003 003 003 003 003 010 010 XXX XXX XXX XXX XXX XXX 010 010 XXX XXX XXX XXX XXX XXX 010 010 XXX XXX XXX XXX XXX XXX 010 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,448 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x112bf88
+	dictionary (ptr): 0x111df68
+	itemCount: 6
+	itemTbl (ptr): 0x112c298
+		itemTbl[0] (ptr): 0x112c2f8
+		itemTbl[1] (ptr): 0x112cda8
+		itemTbl[2] (ptr): 0x112d228
+		itemTbl[3] (ptr): 0x112d618
+		itemTbl[4] (ptr): 0x112dc78
+		itemTbl[5] (ptr): 0x112e108
+	iOwnTbl (ptr): 0x112c2c8
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x112bf88
+Stg_Component (ptr): 0x112bf88
+Stg_Object (ptr): 0x112bf88
+	Stg_Class (ptr): 0x112bf88
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0x571970
+		_print (func ptr): 0x571a78
+		_copy (func ptr): 0x571c80
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x571088
+	_construct (func ptr): 0x571778
+	_build (func ptr): 0x572090
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0x572250
+	_getVariableCount (func ptr): 0x5723ac
+	_getVariableIndex (func ptr): 0x5725d4
+	_getValueIndex (func ptr): 0x572838
+	_getValueCount (func ptr): 0x572b2c
+	_getValue (func ptr): 0x572bf0
+	variable_Register (ptr): 0x111ec28
+	conFunc_Register (ptr): 0x111ed18
+	_set (ptr): 0x112e6b8
+	indexCount: 28
+	indexTbl (ptr): 0x112e898
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 23
+		indexTbl[22]: 24
+		indexTbl[23]: 27
+		indexTbl[24]: 28
+		indexTbl[25]: 29
+		indexTbl[26]: 30
+		indexTbl[27]: 31
+	vcVarCountTbl (ptr): 0x112e918
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 1
+		vcVarCountTbl[18]: 1
+		vcVarCountTbl[19]: 1
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 1
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 1
+		vcVarCountTbl[24]: 3
+		vcVarCountTbl[25]: 3
+		vcVarCountTbl[26]: 3
+		vcVarCountTbl[27]: 4
+	vcTbl (ptr): 0x3016608
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[3][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[3][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[3][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[16][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[16][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[16][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[17][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[21][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[23][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x112e9d8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112d0c8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112dfb8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 007 007 007 011 007 007 007 011 007 007 007 011 007 007 007 011 XXX XXX XXX 011 XXX XXX XXX 011 XXX XXX XXX 011 000 000 000 
+012 008 008 008 012 008 008 008 012 008 008 008 012 008 008 008 012 XXX XXX XXX 012 XXX XXX XXX 012 XXX XXX XXX 012 001 001 001 
+013 009 009 009 013 009 009 009 013 009 009 009 013 009 009 009 013 XXX XXX XXX 013 XXX XXX XXX 013 XXX XXX XXX 013 002 002 002 
+003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.1of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.1of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,359 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x112ddb8
+	dictionary (ptr): 0x111e978
+	itemCount: 6
+	itemTbl (ptr): 0x112e0c8
+		itemTbl[0] (ptr): 0x112e128
+		itemTbl[1] (ptr): 0x112ebd8
+		itemTbl[2] (ptr): 0x112f058
+		itemTbl[3] (ptr): 0x112f448
+		itemTbl[4] (ptr): 0x112f828
+		itemTbl[5] (ptr): 0x112fcc8
+	iOwnTbl (ptr): 0x112e0f8
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x112ddb8
+Stg_Component (ptr): 0x112ddb8
+Stg_Object (ptr): 0x112ddb8
+	Stg_Class (ptr): 0x112ddb8
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0x571970
+		_print (func ptr): 0x571a78
+		_copy (func ptr): 0x571c80
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x571088
+	_construct (func ptr): 0x571778
+	_build (func ptr): 0x572090
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0x572250
+	_getVariableCount (func ptr): 0x5723ac
+	_getVariableIndex (func ptr): 0x5725d4
+	_getValueIndex (func ptr): 0x572838
+	_getValueCount (func ptr): 0x572b2c
+	_getValue (func ptr): 0x572bf0
+	variable_Register (ptr): 0x111f638
+	conFunc_Register (ptr): 0x111f728
+	_set (ptr): 0x1130278
+	indexCount: 24
+	indexTbl (ptr): 0x1130458
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 7
+		indexTbl[6]: 8
+		indexTbl[7]: 11
+		indexTbl[8]: 12
+		indexTbl[9]: 13
+		indexTbl[10]: 14
+		indexTbl[11]: 15
+		indexTbl[12]: 16
+		indexTbl[13]: 17
+		indexTbl[14]: 18
+		indexTbl[15]: 19
+		indexTbl[16]: 20
+		indexTbl[17]: 23
+		indexTbl[18]: 24
+		indexTbl[19]: 27
+		indexTbl[20]: 28
+		indexTbl[21]: 29
+		indexTbl[22]: 30
+		indexTbl[23]: 31
+	vcVarCountTbl (ptr): 0x11304c8
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 1
+		vcVarCountTbl[14]: 1
+		vcVarCountTbl[15]: 1
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 1
+		vcVarCountTbl[18]: 3
+		vcVarCountTbl[19]: 1
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 4
+	vcTbl (ptr): 0x301ac08
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[12][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[12][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[12][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[13][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[14][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[15][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[16][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[17][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[19][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[21][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[21][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[21][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[23][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[23][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[23][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x1130578
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112eef8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112fb68
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 XXX XXX XXX 011 XXX XXX XXX 011 XXX XXX XXX 011 000 000 000 011 XXX XXX XXX 011 XXX XXX XXX 011 XXX XXX XXX 011 000 000 000 
+012 XXX XXX XXX 012 XXX XXX XXX 012 XXX XXX XXX 012 001 001 001 012 XXX XXX XXX 012 XXX XXX XXX 012 XXX XXX XXX 012 001 001 001 
+013 XXX XXX XXX 013 XXX XXX XXX 013 XXX XXX XXX 013 002 002 002 013 XXX XXX XXX 013 XXX XXX XXX 013 XXX XXX XXX 013 002 002 002 
+003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.1of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.1of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.2of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.2of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,448 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x112ced8
+	dictionary (ptr): 0x111e978
+	itemCount: 6
+	itemTbl (ptr): 0x112d1e8
+		itemTbl[0] (ptr): 0x112d248
+		itemTbl[1] (ptr): 0x112dcf8
+		itemTbl[2] (ptr): 0x112e178
+		itemTbl[3] (ptr): 0x112e568
+		itemTbl[4] (ptr): 0x112ebc8
+		itemTbl[5] (ptr): 0x112f058
+	iOwnTbl (ptr): 0x112d218
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x112ced8
+Stg_Component (ptr): 0x112ced8
+Stg_Object (ptr): 0x112ced8
+	Stg_Class (ptr): 0x112ced8
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0x571970
+		_print (func ptr): 0x571a78
+		_copy (func ptr): 0x571c80
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x571088
+	_construct (func ptr): 0x571778
+	_build (func ptr): 0x572090
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CompositeVC-Construct
+	build function name: CompositeVC-Build
+	initialise function name: CompositeVC-Initialise
+	execute function name: CompositeVC-Execute
+	destroy function name: CompositeVC-Destroy
+	_getSet (func ptr): 0x572250
+	_getVariableCount (func ptr): 0x5723ac
+	_getVariableIndex (func ptr): 0x5725d4
+	_getValueIndex (func ptr): 0x572838
+	_getValueCount (func ptr): 0x572b2c
+	_getValue (func ptr): 0x572bf0
+	variable_Register (ptr): 0x111f638
+	conFunc_Register (ptr): 0x111f728
+	_set (ptr): 0x112f608
+	indexCount: 28
+	indexTbl (ptr): 0x112f7e8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+		indexTbl[16]: 16
+		indexTbl[17]: 17
+		indexTbl[18]: 18
+		indexTbl[19]: 19
+		indexTbl[20]: 20
+		indexTbl[21]: 23
+		indexTbl[22]: 24
+		indexTbl[23]: 27
+		indexTbl[24]: 28
+		indexTbl[25]: 29
+		indexTbl[26]: 30
+		indexTbl[27]: 31
+	vcVarCountTbl (ptr): 0x112f868
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 4
+		vcVarCountTbl[16]: 4
+		vcVarCountTbl[17]: 1
+		vcVarCountTbl[18]: 1
+		vcVarCountTbl[19]: 1
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 1
+		vcVarCountTbl[22]: 3
+		vcVarCountTbl[23]: 1
+		vcVarCountTbl[24]: 3
+		vcVarCountTbl[25]: 3
+		vcVarCountTbl[26]: 3
+		vcVarCountTbl[27]: 4
+	vcTbl (ptr): 0x301ac08
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[0][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[0][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[0][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[1][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[1][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[2][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[2][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[3][1]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[3][2]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[3][3]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[15][3]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[16][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[16][1]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[16][2]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[16][3]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[17][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[18][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[19][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[21][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[22][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[23][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[24][0]:
+			varIndex: 3
+			valIndex: 11
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[26][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[26][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[26][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[27][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[27][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[27][3]:
+			varIndex: 6
+			valIndex: 10
+	valueCount: 14
+	valueTbl (ptr): 0x112f928
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112e018
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[4]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[5]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[6]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[7]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[8]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[9]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[10]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112ef08
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+		valueTbl[11]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[12]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[13]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 30.00, 30.00, 30.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 30.00, 30.00, 30.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 30.00, 30.00, 30.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[7]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False True  False False False True  False False False True  True  True  True  
+True  True  True  True  False False False True  False False False True  False False False True  True  True  True  True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+011 007 007 007 011 007 007 007 011 007 007 007 011 007 007 007 011 XXX XXX XXX 011 XXX XXX XXX 011 XXX XXX XXX 011 000 000 000 
+012 008 008 008 012 008 008 008 012 008 008 008 012 008 008 008 012 XXX XXX XXX 012 XXX XXX XXX 012 XXX XXX XXX 012 001 001 001 
+013 009 009 009 013 009 009 009 013 009 009 009 013 009 009 009 013 XXX XXX XXX 013 XXX XXX XXX 013 XXX XXX XXX 013 002 002 002 
+003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 003 003 003 010 XXX XXX XXX 010 XXX XXX XXX 010 XXX XXX XXX 010 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.2of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.2of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCompositeVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCompositeVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCompositeVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,254 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testCompositeVC.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+void exponential(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 30.0;
+}
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {0, 1, 1};
+
+	gen = CartesianGenerator_New( "" );
+	gen->shadowDepth = 0;
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {3, 3, 3};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	WallVC*				vc;
+	CompositeVC*			cvc;
+	ConditionFunction*		quadCF;
+	ConditionFunction*		expCF;
+	ConditionFunction_Register*	conFunc_Register;
+	ExtensionManager_Register*		extensionMgr_Register;
+	
+	double*		array[7];
+	char*		vcKey[] = {"WallVC_Front", "WallVC_Back", "WallVC_Left", "WallVC_Right",
+				"WallVC_Top", "WallVC_Bottom"};
+	char*		vcKeyName[] = {"WallVC_FrontName", "WallVC_BackName", "WallVC_LeftName", "WallVC_RightName",
+				"WallVC_TopName", "WallVC_BottomName"};
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+
+	unsigned	nDomains;
+	
+	Index	i, j, k;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	io_handler = XML_IO_Handler_New();
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromFile(io_handler, "data/wallVC.xml", dictionary);
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	/* Create a mesh. */
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	nDomains = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	
+	/* Create CF stuff */
+	quadCF = ConditionFunction_New(quadratic, "quadratic");
+	expCF = ConditionFunction_New(exponential, "exponential");
+	conFunc_Register = ConditionFunction_Register_New();
+	ConditionFunction_Register_Add(conFunc_Register, quadCF);
+	ConditionFunction_Register_Add(conFunc_Register, expCF);
+	
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	
+	/* Create variables */
+	for (i = 0; i < 6; i++) {
+		array[i] = Memory_Alloc_Array( double, nDomains, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &nDomains, NULL, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, nDomains*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &nDomains, NULL, (void**)&array[6], 0 );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create CompositeVC */
+	cvc = CompositeVC_New( "CompositeVC", variable_Register, conFunc_Register, dictionary, mesh );
+	
+	for (i = 0; i < 6; i++)
+	{
+		vc = WallVC_New( vcKeyName[i], vcKey[i], variable_Register, conFunc_Register, dictionary, mesh );
+		Stg_Component_Build( vc, 0, False );
+		CompositeVC_Add(cvc, vc, True);
+	}
+	
+	Stg_Component_Build( cvc, 0, False );
+	
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*nDomains);
+	memset(array[6], 0, sizeof(double)*nDomains*5);
+	VariableCondition_Apply(cvc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		Stg_Class_Print(cvc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2lf", j, array[j][0]);
+			for (k = 1; k < nDomains; k++)
+				printf(", %.2lf", array[j][k]);
+		}
+		printf("\nvar[7]: %.2lf", array[6][0]);
+		for (j = 1; j < nDomains*5; j++)
+			printf(", %.2lf", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < nDomains; k++)
+				printf("%s ", VariableCondition_IsCondition(cvc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < nDomains; k++)
+			{
+				VariableCondition_ValueIndex	valIndex;
+				
+				valIndex = VariableCondition_GetValueIndex(cvc, k, j);
+				if (valIndex != (unsigned)-1)
+					printf("%03u ", valIndex);
+				else
+					printf("XXX ");
+			}
+			printf("\n");
+		}
+		printf("\n");
+	}
+
+	Stg_Class_Delete(cvc);
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(quadCF);
+	Stg_Class_Delete(expCF);
+	Stg_Class_Delete(dictionary);
+	FreeObject( mesh );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,889 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8068840
+		_entryTbl[0]:
+			varName (ptr): 0x8068560
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068590
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f1a0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x806c580
+	indexCount: 1
+	indexTbl (ptr): 0x806c5c0
+		indexTbl[0]: 48
+	vcVarCountTbl (ptr): 0x806c5d0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x8070970
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c5e0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d31
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8070f48
+		_entryTbl[0]:
+			varName (ptr): 0x80684a0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x80682c0
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8068b40
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x806a060
+	indexCount: 1
+	indexTbl (ptr): 0x806c5d0
+		indexTbl[0]: 51
+	vcVarCountTbl (ptr): 0x806c5c0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x805f010
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c5e0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x806f5d8
+		_entryTbl[0]:
+			varName (ptr): 0x80662c8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x80666b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066878
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x8068e58
+	indexCount: 1
+	indexTbl (ptr): 0x806c5c0
+		indexTbl[0]: 60
+	vcVarCountTbl (ptr): 0x806c5d0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x806c478
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806b288
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x806f5d8
+		_entryTbl[0]:
+			varName (ptr): 0x805f360
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f750
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f910
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x8071100
+	indexCount: 1
+	indexTbl (ptr): 0x806c5d0
+		indexTbl[0]: 63
+	vcVarCountTbl (ptr): 0x806c5c0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x806c1d0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806b288
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x8071140
+		_entryTbl[0]:
+			varName (ptr): 0x80674e0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x8071100
+	indexCount: 1
+	indexTbl (ptr): 0x806c5c0
+		indexTbl[0]: 0
+	vcVarCountTbl (ptr): 0x806c5d0
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x806c178
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806c6b0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049d90
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806df28
+		_entryTbl[0]:
+			varName (ptr): 0x8066fe8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068490
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066a38
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x8067e18
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x8071100
+	indexCount: 1
+	indexTbl (ptr): 0x806c5d0
+		indexTbl[0]: 3
+	vcVarCountTbl (ptr): 0x806c5c0
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x806c5e0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x806f5d8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806c7d8
+		_entryTbl[0]:
+			varName (ptr): 0x80671a8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8067990
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067b50
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x80603d0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x806f5d8
+	indexCount: 1
+	indexTbl (ptr): 0x806c5c0
+		indexTbl[0]: 12
+	vcVarCountTbl (ptr): 0x806c5d0
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x806b288
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8071100
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x8070670
+	dictionary (ptr): 0x805e900
+	_dictionaryEntryName (ptr): 0x8049dbe
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x806c7d8
+		_entryTbl[0]:
+			varName (ptr): 0x8068210
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062578
+VariableCondition (ptr): 0x8070670
+Stg_Component (ptr): 0x8070670
+Stg_Object (ptr): 0x8070670
+	Stg_Class (ptr): 0x8070670
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f5cbed
+		_print (func ptr): 0xb7f5cc33
+		_copy (func ptr): 0xb7f5d228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f5be38
+	_construct (func ptr): 0xb7f5d43d
+	_build (func ptr): 0xb7f5d3fb
+	_initialise (func ptr): 0xb7e5b502
+	_execute (func ptr): 0xb7e5b5c9
+	_destroy (func ptr): 0xb7e5b5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0xb7f5d48c
+	_getVariableCount (func ptr): 0xb7f5daaf
+	_getVariableIndex (func ptr): 0xb7f5dac6
+	_getValueIndex (func ptr): 0xb7f5dba1
+	_getValueCount (func ptr): 0xb7f5dba9
+	_getValue (func ptr): 0xb7f5dbc0
+	variable_Register (ptr): 0x8070f90
+	conFunc_Register (ptr): 0x805b608
+	_set (ptr): 0x8071100
+	indexCount: 1
+	indexTbl (ptr): 0x806c5d0
+		indexTbl[0]: 15
+	vcVarCountTbl (ptr): 0x806c5c0
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x8070a10
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806d640
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,848 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x8065640
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710a8
+		_entryTbl[0]:
+			varName (ptr): 0x8068638
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068668
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x80687f0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x8065640
+Stg_Component (ptr): 0x8065640
+Stg_Object (ptr): 0x8065640
+	Stg_Class (ptr): 0x8065640
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070ed8
+	indexCount: 1
+	indexTbl (ptr): 0x8061bd8
+		indexTbl[0]: 36
+	vcVarCountTbl (ptr): 0x8068a80
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x8065940
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806b248
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x806c310
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d31
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710a8
+		_entryTbl[0]:
+			varName (ptr): 0x8068578
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f1b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f1c8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806c310
+Stg_Component (ptr): 0x806c310
+Stg_Object (ptr): 0x806c310
+	Stg_Class (ptr): 0x806c310
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070fc0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806b248
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x806d518
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710a8
+		_entryTbl[0]:
+			varName (ptr): 0x80663a0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8066790
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066950
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806d518
+Stg_Component (ptr): 0x806d518
+Stg_Object (ptr): 0x806d518
+	Stg_Class (ptr): 0x806d518
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x80709f8
+	indexCount: 1
+	indexTbl (ptr): 0x8068a80
+		indexTbl[0]: 45
+	vcVarCountTbl (ptr): 0x8061bd8
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x806c3f0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068c20
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x806c310
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710a8
+		_entryTbl[0]:
+			varName (ptr): 0x805f438
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f828
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f9e8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806c310
+Stg_Component (ptr): 0x806c310
+Stg_Object (ptr): 0x806c310
+	Stg_Class (ptr): 0x806c310
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070cb8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x8068c20
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x806d518
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x806d6b0
+		_entryTbl[0]:
+			varName (ptr): 0x80675b8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806d518
+Stg_Component (ptr): 0x806d518
+Stg_Object (ptr): 0x806d518
+	Stg_Class (ptr): 0x806d518
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070cb8
+	indexCount: 1
+	indexTbl (ptr): 0x8061bd8
+		indexTbl[0]: 0
+	vcVarCountTbl (ptr): 0x8068a80
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x806b1a0
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806b2f0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x806c310
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049d90
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806c500
+		_entryTbl[0]:
+			varName (ptr): 0x80670c0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068568
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066b10
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x8067ef0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806c310
+Stg_Component (ptr): 0x806c310
+Stg_Object (ptr): 0x806c310
+	Stg_Class (ptr): 0x806c310
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070cb8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x80710a8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x806d518
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806de00
+		_entryTbl[0]:
+			varName (ptr): 0x8067280
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8067a68
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067c28
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x80604b0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806d518
+Stg_Component (ptr): 0x806d518
+Stg_Object (ptr): 0x806d518
+	Stg_Class (ptr): 0x806d518
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x80710a8
+	indexCount: 1
+	indexTbl (ptr): 0x8068a80
+		indexTbl[0]: 9
+	vcVarCountTbl (ptr): 0x8061bd8
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x8068c20
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8070cb8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x806d518
+	dictionary (ptr): 0x805e9b0
+	_dictionaryEntryName (ptr): 0x8049dbe
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x806c3d0
+		_entryTbl[0]:
+			varName (ptr): 0x80682e8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x80626f0
+VariableCondition (ptr): 0x806d518
+Stg_Component (ptr): 0x806d518
+Stg_Object (ptr): 0x806d518
+	Stg_Class (ptr): 0x806d518
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f3bbed
+		_print (func ptr): 0xb7f3bc33
+		_copy (func ptr): 0xb7f3c228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3ae38
+	_construct (func ptr): 0xb7f3c43d
+	_build (func ptr): 0xb7f3c3fb
+	_initialise (func ptr): 0xb7e3a502
+	_execute (func ptr): 0xb7e3a5c9
+	_destroy (func ptr): 0xb7e3a5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0xb7f3c48c
+	_getVariableCount (func ptr): 0xb7f3caaf
+	_getVariableIndex (func ptr): 0xb7f3cac6
+	_getValueIndex (func ptr): 0xb7f3cba1
+	_getValueCount (func ptr): 0xb7f3cba9
+	_getValue (func ptr): 0xb7f3cbc0
+	variable_Register (ptr): 0x8071060
+	conFunc_Register (ptr): 0x805b678
+	_set (ptr): 0x8070cb8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8063b08
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,848 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x80652d8
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710b0
+		_entryTbl[0]:
+			varName (ptr): 0x8068640
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068670
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x80687f8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x80652d8
+Stg_Component (ptr): 0x80652d8
+Stg_Object (ptr): 0x80652d8
+	Stg_Class (ptr): 0x80652d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070ee0
+	indexCount: 1
+	indexTbl (ptr): 0x80683c8
+		indexTbl[0]: 24
+	vcVarCountTbl (ptr): 0x8068398
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x80655d8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8070500
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False True  False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d31
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710b0
+		_entryTbl[0]:
+			varName (ptr): 0x8068580
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f1c0
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f1d0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070fc8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c548
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710b0
+		_entryTbl[0]:
+			varName (ptr): 0x80663a8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8066798
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066958
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070a00
+	indexCount: 1
+	indexTbl (ptr): 0x80683c8
+		indexTbl[0]: 30
+	vcVarCountTbl (ptr): 0x8068a88
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x8070880
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068c28
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x80710b0
+		_entryTbl[0]:
+			varName (ptr): 0x805f440
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f830
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f9f0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070cc0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x8068c28
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x8070df0
+		_entryTbl[0]:
+			varName (ptr): 0x80675c0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070cc0
+	indexCount: 1
+	indexTbl (ptr): 0x80683c8
+		indexTbl[0]: 0
+	vcVarCountTbl (ptr): 0x8068398
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x8063aa0
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x8068f68
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049d90
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x8070558
+		_entryTbl[0]:
+			varName (ptr): 0x80670c8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068570
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066b18
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x8067ef8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070cc0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x80710b0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806b338
+		_entryTbl[0]:
+			varName (ptr): 0x8067288
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8067a70
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067c30
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x80604b8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x80710b0
+	indexCount: 1
+	indexTbl (ptr): 0x80683c8
+		indexTbl[0]: 6
+	vcVarCountTbl (ptr): 0x8068a88
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x8068c28
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8070cc0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False True  False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x806b268
+	dictionary (ptr): 0x805e9b8
+	_dictionaryEntryName (ptr): 0x8049dbe
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x8070e10
+		_entryTbl[0]:
+			varName (ptr): 0x80682f0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062738
+VariableCondition (ptr): 0x806b268
+Stg_Component (ptr): 0x806b268
+Stg_Object (ptr): 0x806b268
+	Stg_Class (ptr): 0x806b268
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f74bed
+		_print (func ptr): 0xb7f74c33
+		_copy (func ptr): 0xb7f75228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f73e38
+	_construct (func ptr): 0xb7f7543d
+	_build (func ptr): 0xb7f753fb
+	_initialise (func ptr): 0xb7e73502
+	_execute (func ptr): 0xb7e735c9
+	_destroy (func ptr): 0xb7e735f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0xb7f7548c
+	_getVariableCount (func ptr): 0xb7f75aaf
+	_getVariableIndex (func ptr): 0xb7f75ac6
+	_getValueIndex (func ptr): 0xb7f75ba1
+	_getValueCount (func ptr): 0xb7f75ba9
+	_getValue (func ptr): 0xb7f75bc0
+	variable_Register (ptr): 0x8071068
+	conFunc_Register (ptr): 0x805b680
+	_set (ptr): 0x8070cc0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8068f68
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,848 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e1c
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d638
+		_entryTbl[0]:
+			varName (ptr): 0x1127878
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1127a28
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1127bd8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112d678
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112d848
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e38
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d388
+		_entryTbl[0]:
+			varName (ptr): 0x111e978
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x11272c8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1127478
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112dc48
+	indexCount: 1
+	indexTbl (ptr): 0x112d428
+		indexTbl[0]: 12
+	vcVarCountTbl (ptr): 0x112d3c8
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x112dc88
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112dcb8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e54
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d848
+		_entryTbl[0]:
+			varName (ptr): 0x1128708
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x11288b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1128a68
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112d388
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112dce8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e6c
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d388
+		_entryTbl[0]:
+			varName (ptr): 0x1127fb8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1128168
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1128318
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112dd18
+	indexCount: 1
+	indexTbl (ptr): 0x112d428
+		indexTbl[0]: 15
+	vcVarCountTbl (ptr): 0x112d3c8
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x112dd58
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112dd88
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e84
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x111ed48
+		_entryTbl[0]:
+			varName (ptr): 0x1128e58
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112d388
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 1
+	valueTbl (ptr): 0x112d848
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3e9c
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x112d388
+		_entryTbl[0]:
+			varName (ptr): 0x1129268
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1129418
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x11295c8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x1129778
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112dcf8
+	indexCount: 1
+	indexTbl (ptr): 0x112d6a8
+		indexTbl[0]: 0
+	vcVarCountTbl (ptr): 0x112d428
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x112ddb8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x112dde8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3eb8
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x112d388
+		_entryTbl[0]:
+			varName (ptr): 0x1129f48
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x112a0f8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x112a2a8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x112a458
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112dde8
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 4
+	valueTbl (ptr): 0x112de28
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x112d0b8
+	dictionary (ptr): 0x111df48
+	_dictionaryEntryName (ptr): 0x3ed0
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x112d388
+		_entryTbl[0]:
+			varName (ptr): 0x1129b58
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x111eeb8
+VariableCondition (ptr): 0x112d0b8
+Stg_Component (ptr): 0x112d0b8
+Stg_Object (ptr): 0x112d0b8
+	Stg_Class (ptr): 0x112d0b8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20ec58
+		_print (func ptr): 0x20ecb4
+		_copy (func ptr): 0x20f330
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20dc84
+	_construct (func ptr): 0x20f574
+	_build (func ptr): 0x20f524
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0x20f5f4
+	_getVariableCount (func ptr): 0x210220
+	_getVariableIndex (func ptr): 0x210254
+	_getValueIndex (func ptr): 0x210360
+	_getValueCount (func ptr): 0x21038c
+	_getValue (func ptr): 0x2103bc
+	variable_Register (ptr): 0x111ec48
+	conFunc_Register (ptr): 0x111dfa8
+	_set (ptr): 0x112d2d8
+	indexCount: 1
+	indexTbl (ptr): 0x112d6a8
+		indexTbl[0]: 3
+	vcVarCountTbl (ptr): 0x112dd48
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x112d3a8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112d3c8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.1of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.1of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,807 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x80652c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8070eb8
+		_entryTbl[0]:
+			varName (ptr): 0x8068618
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068648
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x80687d0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x80652c8
+Stg_Component (ptr): 0x80652c8
+Stg_Object (ptr): 0x80652c8
+	Stg_Class (ptr): 0x80652c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070fa0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x80704d8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d31
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8070eb8
+		_entryTbl[0]:
+			varName (ptr): 0x8068558
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f198
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f1a8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x80704d8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8070eb8
+		_entryTbl[0]:
+			varName (ptr): 0x8066380
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8066770
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066930
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070dc8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x8068c00
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x806c2f0
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8070eb8
+		_entryTbl[0]:
+			varName (ptr): 0x805f418
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805f808
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805f9c8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806c2f0
+Stg_Component (ptr): 0x806c2f0
+Stg_Object (ptr): 0x806c2f0
+	Stg_Class (ptr): 0x806c2f0
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070d30
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x8068c00
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x806c2f0
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x806b338
+		_entryTbl[0]:
+			varName (ptr): 0x8067598
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806c2f0
+Stg_Component (ptr): 0x806c2f0
+Stg_Object (ptr): 0x806c2f0
+	Stg_Class (ptr): 0x806c2f0
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070d30
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8063a90
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d90
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806d548
+		_entryTbl[0]:
+			varName (ptr): 0x80670a0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068548
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8066af0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x8067ed0
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070d30
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x8070eb8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x806c2f0
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806d598
+		_entryTbl[0]:
+			varName (ptr): 0x8067260
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8067a48
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067c08
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x8060490
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806c2f0
+Stg_Component (ptr): 0x806c2f0
+Stg_Object (ptr): 0x806c2f0
+	Stg_Class (ptr): 0x806c2f0
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070eb8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x8070d30
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049dbe
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x80708f0
+		_entryTbl[0]:
+			varName (ptr): 0x80682c8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062728
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7fb0bed
+		_print (func ptr): 0xb7fb0c33
+		_copy (func ptr): 0xb7fb1228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fafe38
+	_construct (func ptr): 0xb7fb143d
+	_build (func ptr): 0xb7fb13fb
+	_initialise (func ptr): 0xb7eaf502
+	_execute (func ptr): 0xb7eaf5c9
+	_destroy (func ptr): 0xb7eaf5f9
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0xb7fb148c
+	_getVariableCount (func ptr): 0xb7fb1aaf
+	_getVariableIndex (func ptr): 0xb7fb1ac6
+	_getValueIndex (func ptr): 0xb7fb1ba1
+	_getValueCount (func ptr): 0xb7fb1ba9
+	_getValue (func ptr): 0xb7fb1bc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070d30
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8063a90
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.1of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.1of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.2of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.2of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,848 @@
+StGermain Framework revision 3900. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3e3c
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x12303b8
+		_entryTbl[0]:
+			varName (ptr): 0x12280f8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x12282a8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1228458
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftFrontName-Construct
+	build function name: CornerVC_BottomLeftFrontName-Build
+	initialise function name: CornerVC_BottomLeftFrontName-Initialise
+	execute function name: CornerVC_BottomLeftFrontName-Execute
+	destroy function name: CornerVC_BottomLeftFrontName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x12303f8
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x12305c8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightFront
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3e58
+		_dictionaryEntryName: CornerVC_BottomRightFront
+	_corner: BottomRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x1230108
+		_entryTbl[0]:
+			varName (ptr): 0x121f1f8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1227b48
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1227cf8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightFrontName-Construct
+	build function name: CornerVC_BottomRightFrontName-Build
+	initialise function name: CornerVC_BottomRightFrontName-Initialise
+	execute function name: CornerVC_BottomRightFrontName-Execute
+	destroy function name: CornerVC_BottomRightFrontName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x12309c8
+	indexCount: 1
+	indexTbl (ptr): 0x12301a8
+		indexTbl[0]: 12
+	vcVarCountTbl (ptr): 0x1230148
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x1230a08
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x1230a38
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3e74
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x12305c8
+		_entryTbl[0]:
+			varName (ptr): 0x1228f88
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1229138
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x12292e8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftFrontName-Construct
+	build function name: CornerVC_TopLeftFrontName-Build
+	initialise function name: CornerVC_TopLeftFrontName-Initialise
+	execute function name: CornerVC_TopLeftFrontName-Execute
+	destroy function name: CornerVC_TopLeftFrontName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230108
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x1230a68
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightFront
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3e8c
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x1230108
+		_entryTbl[0]:
+			varName (ptr): 0x1228838
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x12289e8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1228b98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightFrontName-Construct
+	build function name: CornerVC_TopRightFrontName-Build
+	initialise function name: CornerVC_TopRightFrontName-Initialise
+	execute function name: CornerVC_TopRightFrontName-Execute
+	destroy function name: CornerVC_TopRightFrontName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230a98
+	indexCount: 1
+	indexTbl (ptr): 0x12301a8
+		indexTbl[0]: 15
+	vcVarCountTbl (ptr): 0x1230148
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x1230ad8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x1230b08
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False True  False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3ea4
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x121ee98
+		_entryTbl[0]:
+			varName (ptr): 0x12296d8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomLeftBackName-Construct
+	build function name: CornerVC_BottomLeftBackName-Build
+	initialise function name: CornerVC_BottomLeftBackName-Initialise
+	execute function name: CornerVC_BottomLeftBackName-Execute
+	destroy function name: CornerVC_BottomLeftBackName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230108
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 1
+	valueTbl (ptr): 0x12305c8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_BottomRightBack
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3ebc
+		_dictionaryEntryName: CornerVC_BottomRightBack
+	_corner: BottomRightBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x1230108
+		_entryTbl[0]:
+			varName (ptr): 0x1229ae8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1229c98
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1229e48
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x1229ff8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_BottomRightBackName-Construct
+	build function name: CornerVC_BottomRightBackName-Build
+	initialise function name: CornerVC_BottomRightBackName-Initialise
+	execute function name: CornerVC_BottomRightBackName-Execute
+	destroy function name: CornerVC_BottomRightBackName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230a78
+	indexCount: 1
+	indexTbl (ptr): 0x1230428
+		indexTbl[0]: 0
+	vcVarCountTbl (ptr): 0x12301a8
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x1230b38
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x1230b68
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3ed8
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x1230108
+		_entryTbl[0]:
+			varName (ptr): 0x122a7c8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x122a978
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x122ab28
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x122acd8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 6
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopLeftBackName-Construct
+	build function name: CornerVC_TopLeftBackName-Build
+	initialise function name: CornerVC_TopLeftBackName-Initialise
+	execute function name: CornerVC_TopLeftBackName-Execute
+	destroy function name: CornerVC_TopLeftBackName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230b68
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 4
+	valueTbl (ptr): 0x1230ba8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_Double
+			asDouble: 6
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for CornerVC_TopRightBack
+CornerVC (ptr): 0x122fe38
+	dictionary (ptr): 0x121e928
+	_dictionaryEntryName (ptr): 0x3ef0
+		_dictionaryEntryName: CornerVC_TopRightBack
+	_corner: TopRightBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x1230108
+		_entryTbl[0]:
+			varName (ptr): 0x122a3d8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x121f778
+VariableCondition (ptr): 0x122fe38
+Stg_Component (ptr): 0x122fe38
+Stg_Object (ptr): 0x122fe38
+	Stg_Class (ptr): 0x122fe38
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0x20e1f4
+		_print (func ptr): 0x20e250
+		_copy (func ptr): 0x20e8cc
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x20d250
+	_construct (func ptr): 0x20eb10
+	_build (func ptr): 0x20eac0
+	_initialise (func ptr): 0x58aa10
+	_execute (func ptr): 0x58ab04
+	_destroy (func ptr): 0x58ab48
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: CornerVC_TopRightBackName-Construct
+	build function name: CornerVC_TopRightBackName-Build
+	initialise function name: CornerVC_TopRightBackName-Initialise
+	execute function name: CornerVC_TopRightBackName-Execute
+	destroy function name: CornerVC_TopRightBackName-Destroy
+	_getSet (func ptr): 0x20eb94
+	_getVariableCount (func ptr): 0x20f7c0
+	_getVariableIndex (func ptr): 0x20f7f4
+	_getValueIndex (func ptr): 0x20f900
+	_getValueCount (func ptr): 0x20f92c
+	_getValue (func ptr): 0x20f95c
+	variable_Register (ptr): 0x122e228
+	conFunc_Register (ptr): 0x121f5a8
+	_set (ptr): 0x1230058
+	indexCount: 1
+	indexTbl (ptr): 0x1230428
+		indexTbl[0]: 3
+	vcVarCountTbl (ptr): 0x1230ac8
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x1230128
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x1230148
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 3
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.2of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.2of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testCornerVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testCornerVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testCornerVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,261 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testCornerVC.c 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* set up condition functions */
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+void exponential(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 30.0;
+}
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		 double* minCrds, double* maxCrds, 
+		 ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {0, 1, 1};
+
+	gen = CartesianGenerator_New( "" );
+	gen->shadowDepth = 0;
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         procCount;
+	int                         procToWatch;
+	Stream*                     stream;
+	
+	Dictionary*                 dictionary;
+	XML_IO_Handler*             io_handler;
+	
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {3, 3, 3};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*           mesh;
+	unsigned	nDomains;
+	
+	Variable*                   var[9];
+	Variable_Register*          variable_Register;
+	CornerVC*                   vc;
+	ConditionFunction_Register* conFunc_Register;
+
+	ExtensionManager_Register*  extensionMgr_Register;
+
+	double*                     array[7];
+	char*                       vcKey[] = {	"CornerVC_BottomLeftFront",
+						"CornerVC_BottomRightFront",
+						"CornerVC_TopLeftFront",
+						"CornerVC_TopRightFront",
+						"CornerVC_BottomLeftBack",
+						"CornerVC_BottomRightBack",
+						"CornerVC_TopLeftBack",
+						"CornerVC_TopRightBack" };
+	char*                       vcKeyName[] = {	"CornerVC_BottomLeftFrontName",
+							"CornerVC_BottomRightFrontName",
+							"CornerVC_TopLeftFrontName",
+							"CornerVC_TopRightFrontName",
+							"CornerVC_BottomLeftBackName",
+							"CornerVC_BottomRightBackName",
+							"CornerVC_TopLeftBackName",
+							"CornerVC_TopRightBackName" };
+	char*                       varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+	
+	Index                       i;
+
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromFile(io_handler, "data/cornerVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+
+	extensionMgr_Register = ExtensionManager_Register_New();	
+	
+	/* Create a mesh. */
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	nDomains = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	
+	/* Create CF stuff */
+	conFunc_Register = ConditionFunction_Register_New();
+
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	/* Create variables */
+	for (i = 0; i < 7; i++) {
+		array[i] = Memory_Alloc_Array(  double, 
+						nDomains, 
+						"array[i]" );
+		
+		var[i] =   Variable_NewScalar(  varName[i], 
+						Variable_DataType_Double, 
+						&nDomains, 
+						NULL,
+						(void**)&array[i], 
+						0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	
+	Variable_Register_BuildAll(variable_Register);
+	/* Create CornerVC */
+	for (i = 0; i < 8; i++)
+	{
+		Index	j, k;
+		
+		vc = CornerVC_New( vcKeyName[i], vcKey[i], variable_Register, conFunc_Register, dictionary, mesh );
+		_CornerVC_ReadDictionary(vc, dictionary);
+		Stg_Component_Build( vc, 0, False );
+		for (j = 0; j < 7; j++) {
+			memset(array[j], 0, sizeof(double)* nDomains );
+		}
+		VariableCondition_Apply(vc, NULL);
+		
+		if (rank == procToWatch)
+		{
+			printf("Testing for %s\n", vcKey[i]);
+			Stg_Class_Print(vc, stream);
+			printf("\n");
+			for (j = 0; j < 7; j++)
+			{
+				printf("\nvar[%u]: %.2lf", j, array[j][0]);
+				for (k = 1; k < nDomains; k++)
+					printf(", %.2lf", array[j][k]);
+			}
+
+			printf("\n\n");
+			
+			for (j = 0; j < 6; j++)
+			{
+				for (k = 0; k < nDomains; k++)
+					printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+				printf("\n");
+			}
+			printf("\n");
+			
+			for (j = 0; j < 6; j++)
+			{
+				for (k = 0; k < nDomains; k++)
+				{
+					VariableCondition_ValueIndex	valIndex;
+					
+					valIndex = VariableCondition_GetValueIndex(vc, k, j);
+					if (valIndex != (unsigned)-1)
+						printf("%03u ", valIndex);
+					else
+						printf("XXX ");
+				}
+				printf("\n");
+			}
+			printf("\n");
+		}
+		
+		Stg_Class_Delete(vc);
+	}
+		
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(dictionary);
+	FreeObject( mesh );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-remap.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-remap.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,16 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Simple test:
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-remap.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-remap.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDofLayout-remap " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-remap.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-remap.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,137 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDofLayout-remap.c 2421 2004-12-14 02:09:26Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main( int argc, char *argv[] ) {
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &procCount );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		DofLayout*		dof;
+		double			dummyVar;
+		double*			dummyPtr = &dummyVar;
+		Variable_Register*	variableRegister;
+		Variable*		var[6];
+		char*			varName[] = {"x", "y", "z", "vx", "vy", "vz"};
+		Index			i, j;
+		Index			arraySize = 1;
+		IndexMap*		map;
+
+		/* Create variable register */
+		variableRegister = Variable_Register_New();
+
+		/* Create variables */
+		for (i = 0; i < 6; i++) {
+			var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &arraySize, NULL, (void**)&dummyPtr, 0 );
+			Variable_Register_Add(variableRegister, var[i]);
+		}
+
+		/* Simple test */
+		dof = DofLayout_New( "dofLayout", variableRegister, 27, NULL );
+		for (i = 0; i < 6; i++) {
+			for (j = 0; j < 27; j++) {
+				DofLayout_AddDof_ByVarName(dof, varName[i], j);
+			}
+		}
+		
+		/* Build the IndexMap */
+		map = IndexMap_New();
+		for( i = 0; i < 27; i++ ) {
+			if( i % 2 == 0 ) {
+				IndexMap_Append( map, i, i / 2 );
+			}
+			else {
+				IndexMap_Append( map, i, 27 );
+			}
+		}
+		
+		/* Perform remap */
+		DofLayout_Remap( dof, 14, map );
+		Stg_Class_Delete( map );
+
+		Stg_Component_Build(dof, 0, False);
+
+		printf("Simple test:\n");
+		for (i = 0; i < 14; i++)
+			printf("\t%u\n", dof->dofCounts[i]);
+
+		Stg_Class_Delete(dof);
+
+		Stg_Class_Delete(variableRegister);
+		for (i = 0; i < 6; i++)
+			if (var[i]) Stg_Class_Delete(var[i]);
+	}
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-saveAndLoad.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-saveAndLoad.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,28 @@
+StGermain Framework revision 3385. Copyright (C) 2003-2005 VPAC.
+	Index 0 -  0, 1, 2, 3, 4, 5
+	Index 1 - 10,11,12,13,14,15
+	Index 2 - 20,21,22,23,24,25
+	Index 3 - 30,31,32,33,34,35
+	Index 4 - 40,41,42,43,44,45
+	Index 5 - 50,51,52,53,54,55
+	Index 6 - 60,61,62,63,64,65
+	Index 7 - 70,71,72,73,74,75
+	Index 8 - 80,81,82,83,84,85
+	Index 9 - 90,91,92,93,94,95
+	Index 10 - 100,101,102,103,104,105
+	Index 11 - 110,111,112,113,114,115
+	Index 12 - 120,121,122,123,124,125
+	Index 13 - 130,131,132,133,134,135
+	Index 14 - 140,141,142,143,144,145
+	Index 15 - 150,151,152,153,154,155
+	Index 16 - 160,161,162,163,164,165
+	Index 17 - 170,171,172,173,174,175
+	Index 18 - 180,181,182,183,184,185
+	Index 19 - 190,191,192,193,194,195
+	Index 20 - 200,201,202,203,204,205
+	Index 21 - 210,211,212,213,214,215
+	Index 22 - 220,221,222,223,224,225
+	Index 23 - 230,231,232,233,234,235
+	Index 24 - 240,241,242,243,244,245
+	Index 25 - 250,251,252,253,254,255
+	Index 26 - 260,261,262,263,264,265
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-saveAndLoad.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-saveAndLoad.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDofLayout-saveAndLoad " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout-saveAndLoad.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout-saveAndLoad.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,144 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDofLayout-saveAndLoad.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main( int argc, char *argv[] ) {
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		DofLayout*		dof;
+		Variable_Register*	variableRegister;
+		Variable*		var[6];
+		char*			varName[] = {"x", "y", "z", "vx", "vy", "vz"};
+		Index			ii, var_I;
+		Index			arraySize = 27;
+		double*			varArrays[6];
+
+		/* Create variable register */
+		variableRegister = Variable_Register_New();
+
+		/* Create variables */
+		for (var_I = 0; var_I < 6; var_I++) {
+			varArrays[var_I] = Memory_Alloc_Array_Unnamed( double, arraySize );
+			var[var_I] = Variable_NewScalar( varName[var_I], Variable_DataType_Double, &arraySize, 
+				NULL, (void**)&(varArrays[var_I]), variableRegister );
+			Stg_Component_Build( var[var_I], 0, False );	
+			Stg_Component_Initialise( var[var_I], 0, False );	
+		}
+			
+		for (ii = 0; ii < arraySize; ii++) {
+			for (var_I = 0; var_I < 6; var_I++) {
+				Variable_SetValueDouble( var[var_I], ii, (ii*10 + var_I) );
+			}
+		}	
+
+		/* Simple test */
+		dof = DofLayout_New( "dofLayout", variableRegister, arraySize, NULL );
+		for (ii = 0; ii < arraySize; ii++) {
+			for (var_I = 0; var_I < 6; var_I++) {
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+			}
+		}	
+		Stg_Component_Build(dof, 0, False);
+
+		DofLayout_SaveAllVariablesToFiles( dof, "output/testDofSave", rank );
+
+		DofLayout_SetAllToZero( dof );
+
+		DofLayout_LoadAllVariablesFromFiles( dof, "output/testDofSave", rank );
+
+		for (ii = 0; ii < arraySize; ii++) {
+			printf("\tIndex %d - %2g,%2g,%2g,%2g,%2g,%2g\n", ii,
+				DofLayout_GetValueDouble( dof, ii, 0 ),
+				DofLayout_GetValueDouble( dof, ii, 1 ),
+				DofLayout_GetValueDouble( dof, ii, 2 ),
+				DofLayout_GetValueDouble( dof, ii, 3 ),
+				DofLayout_GetValueDouble( dof, ii, 4 ),
+				DofLayout_GetValueDouble( dof, ii, 5 ) );
+		}	
+
+
+		/* Cleanup */
+		Stg_Class_Delete(dof);
+
+		Stg_Class_Delete(variableRegister);
+		for (var_I = 0; var_I < 6; var_I++) {
+			if (var[var_I]) Stg_Class_Delete(var[var_I]);
+			Memory_Free( varArrays[var_I] );
+		}
+	}
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,142 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Simple test:
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+	6
+
+Advanced test:
+	2
+	2
+	2
+	2
+	2
+	2
+	2
+	2
+	2
+	6
+	6
+	6
+	4
+	4
+	4
+	4
+	4
+	4
+	4
+	4
+	0
+	0
+	0
+	0
+	0
+	0
+	0
+Copy Test: pre copy:
+	Index 0 - src  0, 0, 0 - dest  0,  0,  0
+	Index 1 - src 10,10,10 - dest  0,  0,  0
+	Index 2 - src 20,20,20 - dest  0,  0,  0
+	Index 3 - src 30,30,30 - dest  0,  0,  0
+	Index 4 - src 40,40,40 - dest  0,  0,  0
+	Index 5 - src 50,50,50 - dest  0,  0,  0
+	Index 6 - src 60,60,60 - dest  0,  0,  0
+	Index 7 - src 70,70,70 - dest  0,  0,  0
+	Index 8 - src 80,80,80 - dest  0,  0,  0
+	Index 9 - src 90,90,90 - dest  0,  0,  0
+	Index 10 - src 100,100,100 - dest  0,  0,  0
+	Index 11 - src 110,110,110 - dest  0,  0,  0
+	Index 12 - src 120,120,120 - dest  0,  0,  0
+	Index 13 - src 130,130,130 - dest  0,  0,  0
+	Index 14 - src 140,140,140 - dest  0,  0,  0
+	Index 15 - src 150,150,150 - dest  0,  0,  0
+	Index 16 - src 160,160,160 - dest  0,  0,  0
+	Index 17 - src 170,170,170 - dest  0,  0,  0
+	Index 18 - src 180,180,180 - dest  0,  0,  0
+	Index 19 - src 190,190,190 - dest  0,  0,  0
+	Index 20 - src 200,200,200 - dest  0,  0,  0
+	Index 21 - src 210,210,210 - dest  0,  0,  0
+	Index 22 - src 220,220,220 - dest  0,  0,  0
+	Index 23 - src 230,230,230 - dest  0,  0,  0
+	Index 24 - src 240,240,240 - dest  0,  0,  0
+	Index 25 - src 250,250,250 - dest  0,  0,  0
+	Index 26 - src 260,260,260 - dest  0,  0,  0
+Copy Test: post copy:
+	Index 0 - src  0, 0, 0 - dest  0,  0,  0
+	Index 1 - src 10,10,10 - dest 10, 10, 10
+	Index 2 - src 20,20,20 - dest 20, 20, 20
+	Index 3 - src 30,30,30 - dest 30, 30, 30
+	Index 4 - src 40,40,40 - dest 40, 40, 40
+	Index 5 - src 50,50,50 - dest 50, 50, 50
+	Index 6 - src 60,60,60 - dest 60, 60, 60
+	Index 7 - src 70,70,70 - dest 70, 70, 70
+	Index 8 - src 80,80,80 - dest 80, 80, 80
+	Index 9 - src 90,90,90 - dest 90, 90, 90
+	Index 10 - src 100,100,100 - dest 100, 100, 100
+	Index 11 - src 110,110,110 - dest 110, 110, 110
+	Index 12 - src 120,120,120 - dest 120, 120, 120
+	Index 13 - src 130,130,130 - dest 130, 130, 130
+	Index 14 - src 140,140,140 - dest 140, 140, 140
+	Index 15 - src 150,150,150 - dest 150, 150, 150
+	Index 16 - src 160,160,160 - dest 160, 160, 160
+	Index 17 - src 170,170,170 - dest 170, 170, 170
+	Index 18 - src 180,180,180 - dest 180, 180, 180
+	Index 19 - src 190,190,190 - dest 190, 190, 190
+	Index 20 - src 200,200,200 - dest 200, 200, 200
+	Index 21 - src 210,210,210 - dest 210, 210, 210
+	Index 22 - src 220,220,220 - dest 220, 220, 220
+	Index 23 - src 230,230,230 - dest 230, 230, 230
+	Index 24 - src 240,240,240 - dest 240, 240, 240
+	Index 25 - src 250,250,250 - dest 250, 250, 250
+	Index 26 - src 260,260,260 - dest 260, 260, 260
+Zero Test: all values in src dof should be zero again
+	Index 0 - src  0, 0, 0
+	Index 1 - src  0, 0, 0
+	Index 2 - src  0, 0, 0
+	Index 3 - src  0, 0, 0
+	Index 4 - src  0, 0, 0
+	Index 5 - src  0, 0, 0
+	Index 6 - src  0, 0, 0
+	Index 7 - src  0, 0, 0
+	Index 8 - src  0, 0, 0
+	Index 9 - src  0, 0, 0
+	Index 10 - src  0, 0, 0
+	Index 11 - src  0, 0, 0
+	Index 12 - src  0, 0, 0
+	Index 13 - src  0, 0, 0
+	Index 14 - src  0, 0, 0
+	Index 15 - src  0, 0, 0
+	Index 16 - src  0, 0, 0
+	Index 17 - src  0, 0, 0
+	Index 18 - src  0, 0, 0
+	Index 19 - src  0, 0, 0
+	Index 20 - src  0, 0, 0
+	Index 21 - src  0, 0, 0
+	Index 22 - src  0, 0, 0
+	Index 23 - src  0, 0, 0
+	Index 24 - src  0, 0, 0
+	Index 25 - src  0, 0, 0
+	Index 26 - src  0, 0, 0
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testDofLayout " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testDofLayout.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testDofLayout.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,209 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testDofLayout.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main( int argc, char *argv[] ) {
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		DofLayout*		dof;
+		DofLayout*		destDof;
+		Variable_Register*	variableRegister;
+		Variable*		var[6];
+		char*			varName[] = {"x", "y", "z", "vx", "vy", "vz"};
+		Index			ii, dof_I, var_I;
+		Index			arraySize = 27;
+		double*			varArrays[6];
+
+		/* Create variable register */
+		variableRegister = Variable_Register_New();
+
+		/* Create variables */
+		for (var_I = 0; var_I < 6; var_I++) {
+			varArrays[var_I] = Memory_Alloc_Array_Unnamed( double, arraySize );
+			var[var_I] = Variable_NewScalar( varName[var_I], Variable_DataType_Double, &arraySize, 
+				NULL, (void**)&(varArrays[var_I]), variableRegister );
+			Stg_Component_Build( var[var_I], 0, False );	
+			Stg_Component_Initialise( var[var_I], 0, False );	
+		}
+			
+		for (ii = 0; ii < arraySize; ii++) {
+			for (var_I = 0; var_I < 6; var_I++) {
+				Variable_SetValueDouble( var[var_I], ii, 0.0 );
+			}
+		}	
+
+		/* Simple test */
+		dof = DofLayout_New( "dofLayout", variableRegister, arraySize, NULL );
+		for (ii = 0; ii < arraySize; ii++)
+			for (var_I = 0; var_I < 6; var_I++)
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+
+		Stg_Component_Build(dof, 0, False);
+
+		printf("Simple test:\n");
+		for (ii = 0; ii < arraySize; ii++)
+			printf("\t%u\n", dof->dofCounts[ii]);
+
+		Stg_Class_Delete(dof);
+
+		/* Advanced test */
+		dof = DofLayout_New( "dofLayout1", variableRegister, arraySize, NULL );
+		for (ii = 0; ii < 12; ii++)
+			for (var_I = 0; var_I < 2; var_I++)
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+
+		for (ii = 9; ii < 20; ii++)
+			for (var_I = 2; var_I < 6; var_I++)
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+
+		Stg_Component_Build(dof, 0, False);
+
+		printf("\nAdvanced test:\n");
+		for (ii = 0; ii < arraySize; ii++)
+			printf("\t%u\n", dof->dofCounts[ii]);
+
+		Stg_Class_Delete(dof);
+
+		/* Copy test */
+
+		dof = DofLayout_New( "dofLayout2", variableRegister, arraySize, NULL );
+		destDof = DofLayout_New( "dofLayout3", variableRegister, arraySize, NULL );
+		for (ii = 0; ii < arraySize; ii++) {
+			for (var_I = 0; var_I < 3; var_I++) {
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+			}	
+			for (var_I = 3; var_I < 6; var_I++) {
+				DofLayout_AddDof_ByVarName(destDof, varName[var_I], ii);
+			}	
+		}		
+
+		Stg_Component_Build(dof, NULL, False);
+		Stg_Component_Build(destDof, NULL, False);
+
+		for (ii = 0; ii < arraySize; ii++) {
+			for (dof_I = 0; dof_I < 3; dof_I++) {
+				DofLayout_SetValueDouble( dof, ii, dof_I, ii*10 );
+				DofLayout_SetValueDouble( destDof, ii, dof_I, 0 );
+			}
+		}	
+
+		printf("Copy Test: pre copy:\n");
+		for (ii = 0; ii < arraySize; ii++)
+			printf("\tIndex %d - src %2g,%2g,%2g - dest %2g, %2g, %2g\n", ii,
+			DofLayout_GetValueDouble( dof, ii, 0 ),
+			DofLayout_GetValueDouble( dof, ii, 1 ),
+			DofLayout_GetValueDouble( dof, ii, 2 ),
+			DofLayout_GetValueDouble( destDof, ii, 0 ),
+			DofLayout_GetValueDouble( destDof, ii, 1 ),
+			DofLayout_GetValueDouble( destDof, ii, 2 ) );
+
+		DofLayout_CopyValues( dof, destDof );
+		
+		printf("Copy Test: post copy:\n");
+		for (ii = 0; ii < arraySize; ii++)
+			printf("\tIndex %d - src %2g,%2g,%2g - dest %2g, %2g, %2g\n", ii,
+			DofLayout_GetValueDouble( dof, ii, 0 ),
+			DofLayout_GetValueDouble( dof, ii, 1 ),
+			DofLayout_GetValueDouble( dof, ii, 2 ),
+			DofLayout_GetValueDouble( destDof, ii, 0 ),
+			DofLayout_GetValueDouble( destDof, ii, 1 ),
+			DofLayout_GetValueDouble( destDof, ii, 2 ) );
+
+		Stg_Class_Delete(destDof);
+
+		printf("Zero Test: all values in src dof should be zero again\n");
+
+		DofLayout_SetAllToZero( dof );
+		for (ii = 0; ii < arraySize; ii++) {
+			printf("\tIndex %d - src %2g,%2g,%2g\n", ii,
+				DofLayout_GetValueDouble( dof, ii, 0 ),
+				DofLayout_GetValueDouble( dof, ii, 1 ),
+				DofLayout_GetValueDouble( dof, ii, 2 ) );
+		}	
+
+		Stg_Class_Delete(dof);
+
+		/* Cleanup */
+		
+		Stg_Class_Delete(variableRegister);
+		for (var_I = 0; var_I < 6; var_I++) {
+			if (var[var_I]) Stg_Class_Delete(var[var_I]);
+			Memory_Free( varArrays[var_I] );
+		}
+	}
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testEmbeddedSurface.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testEmbeddedSurface.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,169 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testEmbeddedSurface.c 3995 2007-02-07 02:20:14Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+struct _Node {
+	struct { __Advectable };
+	double temp;
+};
+
+
+struct _Element {
+	struct { __Advectable };
+	double temp;
+};
+
+
+int main(int argc, char **argv)
+{
+	MPI_Comm		CommWorld;
+	XML_IO_Handler 		*io_handler = XML_IO_Handler_New();
+	int			rank, procCount, procToWatch;
+	Dictionary		*dictionary;
+	EmbeddedSurface		*surface;
+	MeshTopology		*rmt, *imt;
+	MeshGeometry		*rmg, *img;
+	MeshDecomp		*rmd, *imd;
+	MeshLayout		*rml, *isl;
+	ExtensionManager_Register	*extensionMgr_Register;
+	Mesh			*mesh;
+	Element_GlobalIndex	intersectCnt, *intersect;
+	Index			i;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &procCount );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	if( argc >= 2 )
+		procToWatch = atoi( argv[1] );
+	else
+		procToWatch = 0;
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	Dictionary_Add( dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( procCount ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnNode", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 0 ) );
+	IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+	
+	rmt = (MeshTopology *)HexaMeshTopology_New(dictionary);
+	rmg = (MeshGeometry *)HexaMeshGeometry_New(dictionary);
+	rmd = (MeshDecomp *)HexaMeshDecomp_New(dictionary, MPI_COMM_WORLD, (HexaMeshTopology *)rmt);
+	rml = MeshLayout_New(dictionary, rmt, rmg, rmd);
+	
+	imt = (MeshTopology *)TriSurfTopology_New(dictionary, "imElements");
+	img = (MeshGeometry *)TriSurfGeometry_New(dictionary, "imNodes");
+	imd = (MeshDecomp *)IrregularMeshDecomp_New1(dictionary, MPI_COMM_WORLD, imt, img, rml);
+	isl = MeshLayout_New(dictionary, imt, img, imd);
+	
+	extensionMgr_Register = ExtensionManager_Register_New( );
+	mesh = Mesh_New( isl, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	Mesh_Build( mesh );
+	Mesh_Initialise(mesh);
+	
+	surface = EmbeddedSurface_New(mesh);
+	
+	if (procToWatch == rank)
+	{
+		intersect = Memory_Alloc_Array( Element_GlobalIndex, isl->decomp->elementGlobalCount(isl->decomp), "intersect" );
+		intersectCnt = EmbeddedSurface_BuildIntersection(surface, intersect);
+	
+		printf("Intersects: %u\n", intersectCnt);
+		for (i = 0; i < intersectCnt; i++)
+			printf("\tinstersect[%u]: %u\n", i, intersect[i]);
+		printf("\n");
+	
+		if (intersect) Memory_Free(intersect);
+	
+		for (i = 0; i < isl->decomp->nodeGlobalCount(isl->decomp); i++)
+		{
+			Coord point;
+		
+			point[0] = ((TriSurfGeometry *)img)->node[i][0] + 1.0;
+			point[1] = ((TriSurfGeometry *)img)->node[i][1];
+			point[2] = ((TriSurfGeometry *)img)->node[i][2];
+
+			printf("Distance to point {%.3f, %.3f, %.3f}: ", point[0], point[1], point[2]);
+			printf("%.3f\n", EmbeddedSurface_DistanceToPoint(surface, point));
+		}
+	}
+	
+	Stg_Class_Delete(surface);
+	Stg_Class_Delete(isl);
+	Stg_Class_Delete(imd);
+	Stg_Class_Delete(img);
+	Stg_Class_Delete(imt);
+	Stg_Class_Delete(rml);
+	Stg_Class_Delete(rmd);
+	Stg_Class_Delete(rmg);
+	Stg_Class_Delete(rmt);
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testFieldVariable_Register.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testFieldVariable_Register.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,121 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+NamedObject_Register (ptr): 0x805ce00
+	Stg_Class (ptr): 0x805ce00
+		sizeOfSelf: 28
+		_deleteSelf: Yes
+		type: FieldVariable_Register_Type
+		_delete (func ptr): 0xb7ef2dfa
+		_print (func ptr): 0xb7ef2e31
+		_copy (func ptr): (nil)
+	Stg_ObjectList (ptr):0x805ce28
+		Stg_Class (ptr): 0x805ce28
+			sizeOfSelf: 96
+			_deleteSelf: Yes
+			type: Stg_ObjectList
+			_delete (func ptr): 0xb7ef0f3e
+			_print (func ptr): 0xb7ef0f75
+			_copy (func ptr): 0xb7ef1217
+		_append(func ptr): 0xb7ef1e7b
+		_prepend(func ptr): 0xb7ef1f41
+		_replaceAll(func ptr): 0xb7ef2005
+		_replace(func ptr): 0xb7ef20be
+		_insertBefore(func ptr): 0xb7ef225b
+		_insertAfter(func ptr): 0xb7ef2416
+		_remove(func ptr): 0xb7ef25d3
+		_getIndex(func ptr): 0xb7ef2679
+		_get(func ptr): 0xb7ef2727
+		_allocMoreMemory(func ptr): 0xb7ef28fa
+		_insertAtIndex(func ptr): 0xb7ef2980
+		_removeByIndex(func ptr): 0xb7ef29fe
+		_deleteAllObjects(func ptr): 0xb7ef287b
+		_size: 8
+		_delta: 8
+		_noJournalingInCopy: 0
+		count: 3
+		data[0-3]:
+		Stg_Component (ptr): 0x805cec8
+		Stg_Object (ptr): 0x805cec8
+			Stg_Class (ptr): 0x805cec8
+				sizeOfSelf: 136
+				_deleteSelf: Yes
+				type: FieldVariable
+				_delete (func ptr): 0x8048d88
+				_print (func ptr): 0x8048bd8
+				_copy (func ptr): (nil)
+			name: testFV1
+			nameAllocationType: NON_GLOBAL
+			_defaultConstructor (func ptr): 0x8048c58
+			_construct (func ptr): 0x8048cd8
+			_build (func ptr): 0x8048da8
+			_initialise (func ptr): 0x8048c38
+			_execute (func ptr): 0x8048d78
+			_destroy (func ptr): 0x8048d58
+			isConstructed: True
+			isBuilt: False
+			isInitialised: False
+			hasExecuted: False
+			isDestroyed: False
+			constructor function name: testFV1-Construct
+			build function name: testFV1-Build
+			initialise function name: testFV1-Initialise
+			execute function name: testFV1-Execute
+			destroy function name: testFV1-Destroy
+		Stg_Component (ptr): 0x805d2c0
+		Stg_Object (ptr): 0x805d2c0
+			Stg_Class (ptr): 0x805d2c0
+				sizeOfSelf: 136
+				_deleteSelf: Yes
+				type: FieldVariable
+				_delete (func ptr): 0x8048d88
+				_print (func ptr): 0x8048bd8
+				_copy (func ptr): (nil)
+			name: testFV2
+			nameAllocationType: NON_GLOBAL
+			_defaultConstructor (func ptr): 0x8048c58
+			_construct (func ptr): 0x8048cd8
+			_build (func ptr): 0x8048da8
+			_initialise (func ptr): 0x8048c38
+			_execute (func ptr): 0x8048d78
+			_destroy (func ptr): 0x8048d58
+			isConstructed: True
+			isBuilt: False
+			isInitialised: False
+			hasExecuted: False
+			isDestroyed: False
+			constructor function name: testFV2-Construct
+			build function name: testFV2-Build
+			initialise function name: testFV2-Initialise
+			execute function name: testFV2-Execute
+			destroy function name: testFV2-Destroy
+		Stg_Component (ptr): 0x805d6b8
+		Stg_Object (ptr): 0x805d6b8
+			Stg_Class (ptr): 0x805d6b8
+				sizeOfSelf: 136
+				_deleteSelf: Yes
+				type: FieldVariable
+				_delete (func ptr): 0x8048d88
+				_print (func ptr): 0x8048bd8
+				_copy (func ptr): (nil)
+			name: testFV3
+			nameAllocationType: NON_GLOBAL
+			_defaultConstructor (func ptr): 0x8048c58
+			_construct (func ptr): 0x8048cd8
+			_build (func ptr): 0x8048da8
+			_initialise (func ptr): 0x8048c38
+			_execute (func ptr): 0x8048d78
+			_destroy (func ptr): 0x8048d58
+			isConstructed: True
+			isBuilt: False
+			isInitialised: False
+			hasExecuted: False
+			isDestroyed: False
+			constructor function name: testFV3-Construct
+			build function name: testFV3-Build
+			initialise function name: testFV3-Initialise
+			execute function name: testFV3-Execute
+			destroy function name: testFV3-Destroy
+
+Index of fieldVar named "testFV2" = 1
+Index 1 -> fieldVar with name "testFV2"
+Searching directly using name "testFV2" -> fieldVar with name "testFV2"
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testFieldVariable_Register.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testFieldVariable_Register.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testFieldVariable_Register " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testFieldVariable_Register.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testFieldVariable_Register.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,119 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testFieldVariable_Register.c 4103 2007-05-16 01:09:50Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+InterpolationResult dummyInterpolateValueAt( void* sdVariable, Coord coord, double* value ) { return OUTSIDE_GLOBAL; }
+void dummyWithinElement( void* sdVariable, Element_DomainIndex dEl_I, Coord coord, double* value ) { return ; }
+double dummyGetMinGlobalValue( void* sdVariable ) { return 0; }
+double dummyGetMaxGlobalValue( void* sdVariable ) { return 1; }
+void dummyGetMinAndMaxLocalCoords( void* sdVariable, Coord min, Coord max ) { return ; }
+void dummyGetMinAndMaxGlobalCoords( void* sdVariable, Coord min, Coord max ) { return ; }
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	Stream*			stream;
+	FieldVariable_Register*	fV_Register;
+	FieldVariable*		testFVs[] = { NULL, NULL, NULL };
+	Name			fvNames[] = { "testFV1", "testFV2", "testFV3" };
+	Index			ii;
+	Index			fV_Index;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	fV_Register = FieldVariable_Register_New();
+
+	/* abstract class, so have to hack constructor  */
+	for (ii=0; ii < 3; ii++ ) {
+		testFVs[ii] = _FieldVariable_New( sizeof(FieldVariable), FieldVariable_Type, _Stg_Component_Delete,
+			_Stg_Component_Print, NULL, (Stg_Component_DefaultConstructorFunction*)FieldVariable_DefaultNew, _Variable_Construct, _Variable_Build, 
+			_Variable_Initialise, _Variable_Execute, _Variable_Destroy, fvNames[ii], True,
+			dummyInterpolateValueAt, 
+			dummyGetMinGlobalValue, dummyGetMaxGlobalValue,
+			dummyGetMinAndMaxLocalCoords, dummyGetMinAndMaxGlobalCoords, 
+			0, /* field components */
+			3, /* dim */
+			False,
+			MPI_COMM_WORLD,
+			fV_Register );
+	}	
+
+	Stg_Class_Print( fV_Register, stream );
+
+	/* test the get functions */
+	fV_Index = FieldVariable_Register_GetIndex( fV_Register, fvNames[1] );
+	Journal_Printf( stream, "\nIndex of fieldVar named \"%s\" = %d\n", fvNames[1], fV_Index );
+	Journal_Printf( stream, "Index %d -> fieldVar with name \"%s\"\n", fV_Index,
+		(FieldVariable_Register_GetByIndex( fV_Register, fV_Index ) )->name );
+	Journal_Printf( stream, "Searching directly using name \"%s\" -> fieldVar with name \"%s\"\n\n", fvNames[1],
+		(FieldVariable_Register_GetByName( fV_Register, fvNames[1] ) )->name );
+
+	Stg_Class_Delete(fV_Register);
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testMeshCoarsener_Hexa.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testMeshCoarsener_Hexa.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,4853 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f8a0)
+Stg_Component (ptr): 0x805f8a0
+Stg_Object (ptr): 0x805f8a0
+	Stg_Class (ptr): 0x805f8a0
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f031dd
+		_print (func ptr): 0xb7f03a6a
+		_copy (func ptr): 0xb7f04c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0251c
+	_construct (func ptr): 0xb7f0300e
+	_build (func ptr): 0xb7f05322
+	_initialise (func ptr): 0xb7f06214
+	_execute (func ptr): 0xb7f06219
+	_destroy (func ptr): 0xb7f031d8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Mesh-Construct
+	build function name: Mesh-Build
+	initialise function name: Mesh-Initialise
+	execute function name: Mesh-Execute
+	destroy function name: Mesh-Destroy
+	dictionary (ptr): 0x805c4b8
+	layout (ptr): 0x805f550
+Extension (ptr):0x805fc70
+Stg_Object (ptr): 0x805fc70
+	Stg_Class (ptr): 0x805fc70
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e7b018
+		_print (func ptr): 0xb7e7b066
+		_copy (func ptr): 0xb7e7b200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fcd0
+Stg_ObjectList (ptr):0x805fcd0
+	Stg_Class (ptr): 0x805fcd0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7eacf3e
+		_print (func ptr): 0xb7eacf75
+		_copy (func ptr): 0xb7ead217
+	_append(func ptr): 0xb7eade7b
+	_prepend(func ptr): 0xb7eadf41
+	_replaceAll(func ptr): 0xb7eae005
+	_replace(func ptr): 0xb7eae0be
+	_insertBefore(func ptr): 0xb7eae25b
+	_insertAfter(func ptr): 0xb7eae416
+	_remove(func ptr): 0xb7eae5d3
+	_getIndex(func ptr): 0xb7eae679
+	_get(func ptr): 0xb7eae727
+	_allocMoreMemory(func ptr): 0xb7eae8fa
+	_insertAtIndex(func ptr): 0xb7eae980
+	_removeByIndex(func ptr): 0xb7eae9fe
+	_deleteAllObjects(func ptr): 0xb7eae87b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+Extension (ptr):0x805fd70
+Stg_Object (ptr): 0x805fd70
+	Stg_Class (ptr): 0x805fd70
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e7b018
+		_print (func ptr): 0xb7e7b066
+		_copy (func ptr): 0xb7e7b200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fdd0
+Stg_ObjectList (ptr):0x805fdd0
+	Stg_Class (ptr): 0x805fdd0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7eacf3e
+		_print (func ptr): 0xb7eacf75
+		_copy (func ptr): 0xb7ead217
+	_append(func ptr): 0xb7eade7b
+	_prepend(func ptr): 0xb7eadf41
+	_replaceAll(func ptr): 0xb7eae005
+	_replace(func ptr): 0xb7eae0be
+	_insertBefore(func ptr): 0xb7eae25b
+	_insertAfter(func ptr): 0xb7eae416
+	_remove(func ptr): 0xb7eae5d3
+	_getIndex(func ptr): 0xb7eae679
+	_get(func ptr): 0xb7eae727
+	_allocMoreMemory(func ptr): 0xb7eae8fa
+	_insertAtIndex(func ptr): 0xb7eae980
+	_removeByIndex(func ptr): 0xb7eae9fe
+	_deleteAllObjects(func ptr): 0xb7eae87b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+	node (ptr): 0x8060fd8
+	nodeLocalCount: 1331
+	nodeDomainCount: 1331
+	nodeShadowCount: 0
+	nodeGlobalCount: 1331
+	nodeCoord (ptr): 0x8063980
+	nodeCoord[0-1331]:   (0.00,0.00,0.00), (0.10,0.00,0.00), (0.20,0.00,0.00), (0.30,0.00,0.00), (0.40,0.00,0.00), (0.50,0.00,0.00), (0.60,0.00,0.00), (0.70,0.00,0.00), (0.80,0.00,0.00), (0.90,0.00,0.00), (1.00,0.00,0.00), (0.00,0.10,0.00), (0.10,0.10,0.00), (0.20,0.10,0.00), (0.30,0.10,0.00), (0.40,0.10,0.00), (0.50,0.10,0.00), (0.60,0.10,0.00), (0.70,0.10,0.00), (0.80,0.10,0.00), (0.90,0.10,0.00), (1.00,0.10,0.00), (0.00,0.20,0.00), (0.10,0.20,0.00), (0.20,0.20,0.00), (0.30,0.20,0.00), (0.40,0.20,0.00), (0.50,0.20,0.00), (0.60,0.20,0.00), (0.70,0.20,0.00), (0.80,0.20,0.00), (0.90,0.20,0.00), (1.00,0.20,0.00), (0.00,0.30,0.00), (0.10,0.30,0.00), (0.20,0.30,0.00), (0.30,0.30,0.00), (0.40,0.30,0.00), (0.50,0.30,0.00), (0.60,0.30,0.00), (0.70,0.30,0.00), (0.80,0.30,0.00), (0.90,0.30,0.00), (1.00,0.30,0.00), (0.00,0.40,0.00), (0.10,0.40,0.00), (0.20,0.40,0.00), (0.30,0.40,0.00), (0.40,0.40,0.00), (0.50,0.40,0.00), (0.60,0.40,0.00), (0.70,0.40,0.00), (0.80,0.40,0.00), (0.90,0.40,0.00), (1.00,0.40,0.00), (0.00,0.50,0.00), (0.10,0.50,0.00), (0.20,0.50,0.00), (0.30,0.50,0.00), (0.40,0.50,0.00), (0.50,0.50,0.00), (0.60,0.50,0.00), (0.70,0.50,0.00), (0.80,0.50,0.00), (0.90,0.50,0.00), (1.00,0.50,0.00), (0.00,0.60,0.00), (0.10,0.60,0.00), (0.20,0.60,0.00), (0.30,0.60,0.00), (0.40,0.60,0.00), (0.50,0.60,0.00), (0.60,0.60,0.00), (0.70,0.60,0.00), (0.80,0.60,0.00), (0.90,0.60,0.00), (1.00,0.60,0.00), (0.00,0.70,0.00), (0.10,0.70,0.00), (0.20,0.70,0.00), (0.30,0.70,0.00), (0.40,0.70,0.00), (0.50,0.70,0.00), (0.60,0.70,0.00), (0.70,0.70,0.00), (0.80,0.70,0.00), (0.90,0.70,0.00), (1.00,0.70,0.00), (0.00,0.80,0.00), (0.10,0.80,0.00), (0.20,0.80,0.00), (0.30,0.80,0.00), (0.40,0.80,0.00), (0.50,0.80,0.00), (0.60,0.80,0.00), (0.70,0.80,0.00), (0.80,0.80,0.00), (0.90,0.80,0.00), (1.00,0.80,0.00), (0.00,0.90,0.00), (0.10,0.90,0.00), (0.20,0.90,0.00), (0.30,0.90,0.00), (0.40,0.90,0.00), (0.50,0.90,0.00), (0.60,0.90,0.00), (0.70,0.90,0.00), (0.80,0.90,0.00), (0.90,0.90,0.00), (1.00,0.90,0.00), (0.00,1.00,0.00), (0.10,1.00,0.00), (0.20,1.00,0.00), (0.30,1.00,0.00), (0.40,1.00,0.00), (0.50,1.00,0.00), (0.60,1.00,0.00), (0.70,1.00,0.00), (0.80,1.00,0.00), (0.90,1.00,0.00), (1.00,1.00,0.00), (0.00,0.00,0.10), (0.10,0.00,0.10), (0.20,0.00,0.10), (0.30,0.00,0.10), (0.40,0.00,0.10), (0.50,0.00,0.10), (0.60,0.00,0.10), (0.70,0.00,0.10), (0.80,0.00,0.10), (0.90,0.00,0.10), (1.00,0.00,0.10), (0.00,0.10,0.10), (0.10,0.10,0.10), (0.20,0.10,0.10), (0.30,0.10,0.10), (0.40,0.10,0.10), (0.50,0.10,0.10), (0.60,0.10,0.10), (0.70,0.10,0.10), (0.80,0.10,0.10), (0.90,0.10,0.10), (1.00,0.10,0.10), (0.00,0.20,0.10), (0.10,0.20,0.10), (0.20,0.20,0.10), (0.30,0.20,0.10), (0.40,0.20,0.10), (0.50,0.20,0.10), (0.60,0.20,0.10), (0.70,0.20,0.10), (0.80,0.20,0.10), (0.90,0.20,0.10), (1.00,0.20,0.10), (0.00,0.30,0.10), (0.10,0.30,0.10), (0.20,0.30,0.10), (0.30,0.30,0.10), (0.40,0.30,0.10), (0.50,0.30,0.10), (0.60,0.30,0.10), (0.70,0.30,0.10), (0.80,0.30,0.10), (0.90,0.30,0.10), (1.00,0.30,0.10), (0.00,0.40,0.10), (0.10,0.40,0.10), (0.20,0.40,0.10), (0.30,0.40,0.10), (0.40,0.40,0.10), (0.50,0.40,0.10), (0.60,0.40,0.10), (0.70,0.40,0.10), (0.80,0.40,0.10), (0.90,0.40,0.10), (1.00,0.40,0.10), (0.00,0.50,0.10), (0.10,0.50,0.10), (0.20,0.50,0.10), (0.30,0.50,0.10), (0.40,0.50,0.10), (0.50,0.50,0.10), (0.60,0.50,0.10), (0.70,0.50,0.10), (0.80,0.50,0.10), (0.90,0.50,0.10), (1.00,0.50,0.10), (0.00,0.60,0.10), (0.10,0.60,0.10), (0.20,0.60,0.10), (0.30,0.60,0.10), (0.40,0.60,0.10), (0.50,0.60,0.10), (0.60,0.60,0.10), (0.70,0.60,0.10), (0.80,0.60,0.10), (0.90,0.60,0.10), (1.00,0.60,0.10), (0.00,0.70,0.10), (0.10,0.70,0.10), (0.20,0.70,0.10), (0.30,0.70,0.10), (0.40,0.70,0.10), (0.50,0.70,0.10), (0.60,0.70,0.10), (0.70,0.70,0.10), (0.80,0.70,0.10), (0.90,0.70,0.10), (1.00,0.70,0.10), (0.00,0.80,0.10), (0.10,0.80,0.10), (0.20,0.80,0.10), (0.30,0.80,0.10), (0.40,0.80,0.10), (0.50,0.80,0.10), (0.60,0.80,0.10), (0.70,0.80,0.10), (0.80,0.80,0.10), (0.90,0.80,0.10), (1.00,0.80,0.10), (0.00,0.90,0.10), (0.10,0.90,0.10), (0.20,0.90,0.10), (0.30,0.90,0.10), (0.40,0.90,0.10), (0.50,0.90,0.10), (0.60,0.90,0.10), (0.70,0.90,0.10), (0.80,0.90,0.10), (0.90,0.90,0.10), (1.00,0.90,0.10), (0.00,1.00,0.10), (0.10,1.00,0.10), (0.20,1.00,0.10), (0.30,1.00,0.10), (0.40,1.00,0.10), (0.50,1.00,0.10), (0.60,1.00,0.10), (0.70,1.00,0.10), (0.80,1.00,0.10), (0.90,1.00,0.10), (1.00,1.00,0.10), (0.00,0.00,0.20), (0.10,0.00,0.20), (0.20,0.00,0.20), (0.30,0.00,0.20), (0.40,0.00,0.20), (0.50,0.00,0.20), (0.60,0.00,0.20), (0.70,0.00,0.20), (0.80,0.00,0.20), (0.90,0.00,0.20), (1.00,0.00,0.20), (0.00,0.10,0.20), (0.10,0.10,0.20), (0.20,0.10,0.20), (0.30,0.10,0.20), (0.40,0.10,0.20), (0.50,0.10,0.20), (0.60,0.10,0.20), (0.70,0.10,0.20), (0.80,0.10,0.20), (0.90,0.10,0.20), (1.00,0.10,0.20), (0.00,0.20,0.20), (0.10,0.20,0.20), (0.20,0.20,0.20), (0.30,0.20,0.20), (0.40,0.20,0.20), (0.50,0.20,0.20), (0.60,0.20,0.20), (0.70,0.20,0.20), (0.80,0.20,0.20), (0.90,0.20,0.20), (1.00,0.20,0.20), (0.00,0.30,0.20), (0.10,0.30,0.20), (0.20,0.30,0.20), (0.30,0.30,0.20), (0.40,0.30,0.20), (0.50,0.30,0.20), (0.60,0.30,0.20), (0.70,0.30,0.20), (0.80,0.30,0.20), (0.90,0.30,0.20), (1.00,0.30,0.20), (0.00,0.40,0.20), (0.10,0.40,0.20), (0.20,0.40,0.20), (0.30,0.40,0.20), (0.40,0.40,0.20), (0.50,0.40,0.20), (0.60,0.40,0.20), (0.70,0.40,0.20), (0.80,0.40,0.20), (0.90,0.40,0.20), (1.00,0.40,0.20), (0.00,0.50,0.20), (0.10,0.50,0.20), (0.20,0.50,0.20), (0.30,0.50,0.20), (0.40,0.50,0.20), (0.50,0.50,0.20), (0.60,0.50,0.20), (0.70,0.50,0.20), (0.80,0.50,0.20), (0.90,0.50,0.20), (1.00,0.50,0.20), (0.00,0.60,0.20), (0.10,0.60,0.20), (0.20,0.60,0.20), (0.30,0.60,0.20), (0.40,0.60,0.20), (0.50,0.60,0.20), (0.60,0.60,0.20), (0.70,0.60,0.20), (0.80,0.60,0.20), (0.90,0.60,0.20), (1.00,0.60,0.20), (0.00,0.70,0.20), (0.10,0.70,0.20), (0.20,0.70,0.20), (0.30,0.70,0.20), (0.40,0.70,0.20), (0.50,0.70,0.20), (0.60,0.70,0.20), (0.70,0.70,0.20), (0.80,0.70,0.20), (0.90,0.70,0.20), (1.00,0.70,0.20), (0.00,0.80,0.20), (0.10,0.80,0.20), (0.20,0.80,0.20), (0.30,0.80,0.20), (0.40,0.80,0.20), (0.50,0.80,0.20), (0.60,0.80,0.20), (0.70,0.80,0.20), (0.80,0.80,0.20), (0.90,0.80,0.20), (1.00,0.80,0.20), (0.00,0.90,0.20), (0.10,0.90,0.20), (0.20,0.90,0.20), (0.30,0.90,0.20), (0.40,0.90,0.20), (0.50,0.90,0.20), (0.60,0.90,0.20), (0.70,0.90,0.20), (0.80,0.90,0.20), (0.90,0.90,0.20), (1.00,0.90,0.20), (0.00,1.00,0.20), (0.10,1.00,0.20), (0.20,1.00,0.20), (0.30,1.00,0.20), (0.40,1.00,0.20), (0.50,1.00,0.20), (0.60,1.00,0.20), (0.70,1.00,0.20), (0.80,1.00,0.20), (0.90,1.00,0.20), (1.00,1.00,0.20), (0.00,0.00,0.30), (0.10,0.00,0.30), (0.20,0.00,0.30), (0.30,0.00,0.30), (0.40,0.00,0.30), (0.50,0.00,0.30), (0.60,0.00,0.30), (0.70,0.00,0.30), (0.80,0.00,0.30), (0.90,0.00,0.30), (1.00,0.00,0.30), (0.00,0.10,0.30), (0.10,0.10,0.30), (0.20,0.10,0.30), (0.30,0.10,0.30), (0.40,0.10,0.30), (0.50,0.10,0.30), (0.60,0.10,0.30), (0.70,0.10,0.30), (0.80,0.10,0.30), (0.90,0.10,0.30), (1.00,0.10,0.30), (0.00,0.20,0.30), (0.10,0.20,0.30), (0.20,0.20,0.30), (0.30,0.20,0.30), (0.40,0.20,0.30), (0.50,0.20,0.30), (0.60,0.20,0.30), (0.70,0.20,0.30), (0.80,0.20,0.30), (0.90,0.20,0.30), (1.00,0.20,0.30), (0.00,0.30,0.30), (0.10,0.30,0.30), (0.20,0.30,0.30), (0.30,0.30,0.30), (0.40,0.30,0.30), (0.50,0.30,0.30), (0.60,0.30,0.30), (0.70,0.30,0.30), (0.80,0.30,0.30), (0.90,0.30,0.30), (1.00,0.30,0.30), (0.00,0.40,0.30), (0.10,0.40,0.30), (0.20,0.40,0.30), (0.30,0.40,0.30), (0.40,0.40,0.30), (0.50,0.40,0.30), (0.60,0.40,0.30), (0.70,0.40,0.30), (0.80,0.40,0.30), (0.90,0.40,0.30), (1.00,0.40,0.30), (0.00,0.50,0.30), (0.10,0.50,0.30), (0.20,0.50,0.30), (0.30,0.50,0.30), (0.40,0.50,0.30), (0.50,0.50,0.30), (0.60,0.50,0.30), (0.70,0.50,0.30), (0.80,0.50,0.30), (0.90,0.50,0.30), (1.00,0.50,0.30), (0.00,0.60,0.30), (0.10,0.60,0.30), (0.20,0.60,0.30), (0.30,0.60,0.30), (0.40,0.60,0.30), (0.50,0.60,0.30), (0.60,0.60,0.30), (0.70,0.60,0.30), (0.80,0.60,0.30), (0.90,0.60,0.30), (1.00,0.60,0.30), (0.00,0.70,0.30), (0.10,0.70,0.30), (0.20,0.70,0.30), (0.30,0.70,0.30), (0.40,0.70,0.30), (0.50,0.70,0.30), (0.60,0.70,0.30), (0.70,0.70,0.30), (0.80,0.70,0.30), (0.90,0.70,0.30), (1.00,0.70,0.30), (0.00,0.80,0.30), (0.10,0.80,0.30), (0.20,0.80,0.30), (0.30,0.80,0.30), (0.40,0.80,0.30), (0.50,0.80,0.30), (0.60,0.80,0.30), (0.70,0.80,0.30), (0.80,0.80,0.30), (0.90,0.80,0.30), (1.00,0.80,0.30), (0.00,0.90,0.30), (0.10,0.90,0.30), (0.20,0.90,0.30), (0.30,0.90,0.30), (0.40,0.90,0.30), (0.50,0.90,0.30), (0.60,0.90,0.30), (0.70,0.90,0.30), (0.80,0.90,0.30), (0.90,0.90,0.30), (1.00,0.90,0.30), (0.00,1.00,0.30), (0.10,1.00,0.30), (0.20,1.00,0.30), (0.30,1.00,0.30), (0.40,1.00,0.30), (0.50,1.00,0.30), (0.60,1.00,0.30), (0.70,1.00,0.30), (0.80,1.00,0.30), (0.90,1.00,0.30), (1.00,1.00,0.30), (0.00,0.00,0.40), (0.10,0.00,0.40), (0.20,0.00,0.40), (0.30,0.00,0.40), (0.40,0.00,0.40), (0.50,0.00,0.40), (0.60,0.00,0.40), (0.70,0.00,0.40), (0.80,0.00,0.40), (0.90,0.00,0.40), (1.00,0.00,0.40), (0.00,0.10,0.40), (0.10,0.10,0.40), (0.20,0.10,0.40), (0.30,0.10,0.40), (0.40,0.10,0.40), (0.50,0.10,0.40), (0.60,0.10,0.40), (0.70,0.10,0.40), (0.80,0.10,0.40), (0.90,0.10,0.40), (1.00,0.10,0.40), (0.00,0.20,0.40), (0.10,0.20,0.40), (0.20,0.20,0.40), (0.30,0.20,0.40), (0.40,0.20,0.40), (0.50,0.20,0.40), (0.60,0.20,0.40), (0.70,0.20,0.40), (0.80,0.20,0.40), (0.90,0.20,0.40), (1.00,0.20,0.40), (0.00,0.30,0.40), (0.10,0.30,0.40), (0.20,0.30,0.40), (0.30,0.30,0.40), (0.40,0.30,0.40), (0.50,0.30,0.40), (0.60,0.30,0.40), (0.70,0.30,0.40), (0.80,0.30,0.40), (0.90,0.30,0.40), (1.00,0.30,0.40), (0.00,0.40,0.40), (0.10,0.40,0.40), (0.20,0.40,0.40), (0.30,0.40,0.40), (0.40,0.40,0.40), (0.50,0.40,0.40), (0.60,0.40,0.40), (0.70,0.40,0.40), (0.80,0.40,0.40), (0.90,0.40,0.40), (1.00,0.40,0.40), (0.00,0.50,0.40), (0.10,0.50,0.40), (0.20,0.50,0.40), (0.30,0.50,0.40), (0.40,0.50,0.40), (0.50,0.50,0.40), (0.60,0.50,0.40), (0.70,0.50,0.40), (0.80,0.50,0.40), (0.90,0.50,0.40), (1.00,0.50,0.40), (0.00,0.60,0.40), (0.10,0.60,0.40), (0.20,0.60,0.40), (0.30,0.60,0.40), (0.40,0.60,0.40), (0.50,0.60,0.40), (0.60,0.60,0.40), (0.70,0.60,0.40), (0.80,0.60,0.40), (0.90,0.60,0.40), (1.00,0.60,0.40), (0.00,0.70,0.40), (0.10,0.70,0.40), (0.20,0.70,0.40), (0.30,0.70,0.40), (0.40,0.70,0.40), (0.50,0.70,0.40), (0.60,0.70,0.40), (0.70,0.70,0.40), (0.80,0.70,0.40), (0.90,0.70,0.40), (1.00,0.70,0.40), (0.00,0.80,0.40), (0.10,0.80,0.40), (0.20,0.80,0.40), (0.30,0.80,0.40), (0.40,0.80,0.40), (0.50,0.80,0.40), (0.60,0.80,0.40), (0.70,0.80,0.40), (0.80,0.80,0.40), (0.90,0.80,0.40), (1.00,0.80,0.40), (0.00,0.90,0.40), (0.10,0.90,0.40), (0.20,0.90,0.40), (0.30,0.90,0.40), (0.40,0.90,0.40), (0.50,0.90,0.40), (0.60,0.90,0.40), (0.70,0.90,0.40), (0.80,0.90,0.40), (0.90,0.90,0.40), (1.00,0.90,0.40), (0.00,1.00,0.40), (0.10,1.00,0.40), (0.20,1.00,0.40), (0.30,1.00,0.40), (0.40,1.00,0.40), (0.50,1.00,0.40), (0.60,1.00,0.40), (0.70,1.00,0.40), (0.80,1.00,0.40), (0.90,1.00,0.40), (1.00,1.00,0.40), (0.00,0.00,0.50), (0.10,0.00,0.50), (0.20,0.00,0.50), (0.30,0.00,0.50), (0.40,0.00,0.50), (0.50,0.00,0.50), (0.60,0.00,0.50), (0.70,0.00,0.50), (0.80,0.00,0.50), (0.90,0.00,0.50), (1.00,0.00,0.50), (0.00,0.10,0.50), (0.10,0.10,0.50), (0.20,0.10,0.50), (0.30,0.10,0.50), (0.40,0.10,0.50), (0.50,0.10,0.50), (0.60,0.10,0.50), (0.70,0.10,0.50), (0.80,0.10,0.50), (0.90,0.10,0.50), (1.00,0.10,0.50), (0.00,0.20,0.50), (0.10,0.20,0.50), (0.20,0.20,0.50), (0.30,0.20,0.50), (0.40,0.20,0.50), (0.50,0.20,0.50), (0.60,0.20,0.50), (0.70,0.20,0.50), (0.80,0.20,0.50), (0.90,0.20,0.50), (1.00,0.20,0.50), (0.00,0.30,0.50), (0.10,0.30,0.50), (0.20,0.30,0.50), (0.30,0.30,0.50), (0.40,0.30,0.50), (0.50,0.30,0.50), (0.60,0.30,0.50), (0.70,0.30,0.50), (0.80,0.30,0.50), (0.90,0.30,0.50), (1.00,0.30,0.50), (0.00,0.40,0.50), (0.10,0.40,0.50), (0.20,0.40,0.50), (0.30,0.40,0.50), (0.40,0.40,0.50), (0.50,0.40,0.50), (0.60,0.40,0.50), (0.70,0.40,0.50), (0.80,0.40,0.50), (0.90,0.40,0.50), (1.00,0.40,0.50), (0.00,0.50,0.50), (0.10,0.50,0.50), (0.20,0.50,0.50), (0.30,0.50,0.50), (0.40,0.50,0.50), (0.50,0.50,0.50), (0.60,0.50,0.50), (0.70,0.50,0.50), (0.80,0.50,0.50), (0.90,0.50,0.50), (1.00,0.50,0.50), (0.00,0.60,0.50), (0.10,0.60,0.50), (0.20,0.60,0.50), (0.30,0.60,0.50), (0.40,0.60,0.50), (0.50,0.60,0.50), (0.60,0.60,0.50), (0.70,0.60,0.50), (0.80,0.60,0.50), (0.90,0.60,0.50), (1.00,0.60,0.50), (0.00,0.70,0.50), (0.10,0.70,0.50), (0.20,0.70,0.50), (0.30,0.70,0.50), (0.40,0.70,0.50), (0.50,0.70,0.50), (0.60,0.70,0.50), (0.70,0.70,0.50), (0.80,0.70,0.50), (0.90,0.70,0.50), (1.00,0.70,0.50), (0.00,0.80,0.50), (0.10,0.80,0.50), (0.20,0.80,0.50), (0.30,0.80,0.50), (0.40,0.80,0.50), (0.50,0.80,0.50), (0.60,0.80,0.50), (0.70,0.80,0.50), (0.80,0.80,0.50), (0.90,0.80,0.50), (1.00,0.80,0.50), (0.00,0.90,0.50), (0.10,0.90,0.50), (0.20,0.90,0.50), (0.30,0.90,0.50), (0.40,0.90,0.50), (0.50,0.90,0.50), (0.60,0.90,0.50), (0.70,0.90,0.50), (0.80,0.90,0.50), (0.90,0.90,0.50), (1.00,0.90,0.50), (0.00,1.00,0.50), (0.10,1.00,0.50), (0.20,1.00,0.50), (0.30,1.00,0.50), (0.40,1.00,0.50), (0.50,1.00,0.50), (0.60,1.00,0.50), (0.70,1.00,0.50), (0.80,1.00,0.50), (0.90,1.00,0.50), (1.00,1.00,0.50), (0.00,0.00,0.60), (0.10,0.00,0.60), (0.20,0.00,0.60), (0.30,0.00,0.60), (0.40,0.00,0.60), (0.50,0.00,0.60), (0.60,0.00,0.60), (0.70,0.00,0.60), (0.80,0.00,0.60), (0.90,0.00,0.60), (1.00,0.00,0.60), (0.00,0.10,0.60), (0.10,0.10,0.60), (0.20,0.10,0.60), (0.30,0.10,0.60), (0.40,0.10,0.60), (0.50,0.10,0.60), (0.60,0.10,0.60), (0.70,0.10,0.60), (0.80,0.10,0.60), (0.90,0.10,0.60), (1.00,0.10,0.60), (0.00,0.20,0.60), (0.10,0.20,0.60), (0.20,0.20,0.60), (0.30,0.20,0.60), (0.40,0.20,0.60), (0.50,0.20,0.60), (0.60,0.20,0.60), (0.70,0.20,0.60), (0.80,0.20,0.60), (0.90,0.20,0.60), (1.00,0.20,0.60), (0.00,0.30,0.60), (0.10,0.30,0.60), (0.20,0.30,0.60), (0.30,0.30,0.60), (0.40,0.30,0.60), (0.50,0.30,0.60), (0.60,0.30,0.60), (0.70,0.30,0.60), (0.80,0.30,0.60), (0.90,0.30,0.60), (1.00,0.30,0.60), (0.00,0.40,0.60), (0.10,0.40,0.60), (0.20,0.40,0.60), (0.30,0.40,0.60), (0.40,0.40,0.60), (0.50,0.40,0.60), (0.60,0.40,0.60), (0.70,0.40,0.60), (0.80,0.40,0.60), (0.90,0.40,0.60), (1.00,0.40,0.60), (0.00,0.50,0.60), (0.10,0.50,0.60), (0.20,0.50,0.60), (0.30,0.50,0.60), (0.40,0.50,0.60), (0.50,0.50,0.60), (0.60,0.50,0.60), (0.70,0.50,0.60), (0.80,0.50,0.60), (0.90,0.50,0.60), (1.00,0.50,0.60), (0.00,0.60,0.60), (0.10,0.60,0.60), (0.20,0.60,0.60), (0.30,0.60,0.60), (0.40,0.60,0.60), (0.50,0.60,0.60), (0.60,0.60,0.60), (0.70,0.60,0.60), (0.80,0.60,0.60), (0.90,0.60,0.60), (1.00,0.60,0.60), (0.00,0.70,0.60), (0.10,0.70,0.60), (0.20,0.70,0.60), (0.30,0.70,0.60), (0.40,0.70,0.60), (0.50,0.70,0.60), (0.60,0.70,0.60), (0.70,0.70,0.60), (0.80,0.70,0.60), (0.90,0.70,0.60), (1.00,0.70,0.60), (0.00,0.80,0.60), (0.10,0.80,0.60), (0.20,0.80,0.60), (0.30,0.80,0.60), (0.40,0.80,0.60), (0.50,0.80,0.60), (0.60,0.80,0.60), (0.70,0.80,0.60), (0.80,0.80,0.60), (0.90,0.80,0.60), (1.00,0.80,0.60), (0.00,0.90,0.60), (0.10,0.90,0.60), (0.20,0.90,0.60), (0.30,0.90,0.60), (0.40,0.90,0.60), (0.50,0.90,0.60), (0.60,0.90,0.60), (0.70,0.90,0.60), (0.80,0.90,0.60), (0.90,0.90,0.60), (1.00,0.90,0.60), (0.00,1.00,0.60), (0.10,1.00,0.60), (0.20,1.00,0.60), (0.30,1.00,0.60), (0.40,1.00,0.60), (0.50,1.00,0.60), (0.60,1.00,0.60), (0.70,1.00,0.60), (0.80,1.00,0.60), (0.90,1.00,0.60), (1.00,1.00,0.60), (0.00,0.00,0.70), (0.10,0.00,0.70), (0.20,0.00,0.70), (0.30,0.00,0.70), (0.40,0.00,0.70), (0.50,0.00,0.70), (0.60,0.00,0.70), (0.70,0.00,0.70), (0.80,0.00,0.70), (0.90,0.00,0.70), (1.00,0.00,0.70), (0.00,0.10,0.70), (0.10,0.10,0.70), (0.20,0.10,0.70), (0.30,0.10,0.70), (0.40,0.10,0.70), (0.50,0.10,0.70), (0.60,0.10,0.70), (0.70,0.10,0.70), (0.80,0.10,0.70), (0.90,0.10,0.70), (1.00,0.10,0.70), (0.00,0.20,0.70), (0.10,0.20,0.70), (0.20,0.20,0.70), (0.30,0.20,0.70), (0.40,0.20,0.70), (0.50,0.20,0.70), (0.60,0.20,0.70), (0.70,0.20,0.70), (0.80,0.20,0.70), (0.90,0.20,0.70), (1.00,0.20,0.70), (0.00,0.30,0.70), (0.10,0.30,0.70), (0.20,0.30,0.70), (0.30,0.30,0.70), (0.40,0.30,0.70), (0.50,0.30,0.70), (0.60,0.30,0.70), (0.70,0.30,0.70), (0.80,0.30,0.70), (0.90,0.30,0.70), (1.00,0.30,0.70), (0.00,0.40,0.70), (0.10,0.40,0.70), (0.20,0.40,0.70), (0.30,0.40,0.70), (0.40,0.40,0.70), (0.50,0.40,0.70), (0.60,0.40,0.70), (0.70,0.40,0.70), (0.80,0.40,0.70), (0.90,0.40,0.70), (1.00,0.40,0.70), (0.00,0.50,0.70), (0.10,0.50,0.70), (0.20,0.50,0.70), (0.30,0.50,0.70), (0.40,0.50,0.70), (0.50,0.50,0.70), (0.60,0.50,0.70), (0.70,0.50,0.70), (0.80,0.50,0.70), (0.90,0.50,0.70), (1.00,0.50,0.70), (0.00,0.60,0.70), (0.10,0.60,0.70), (0.20,0.60,0.70), (0.30,0.60,0.70), (0.40,0.60,0.70), (0.50,0.60,0.70), (0.60,0.60,0.70), (0.70,0.60,0.70), (0.80,0.60,0.70), (0.90,0.60,0.70), (1.00,0.60,0.70), (0.00,0.70,0.70), (0.10,0.70,0.70), (0.20,0.70,0.70), (0.30,0.70,0.70), (0.40,0.70,0.70), (0.50,0.70,0.70), (0.60,0.70,0.70), (0.70,0.70,0.70), (0.80,0.70,0.70), (0.90,0.70,0.70), (1.00,0.70,0.70), (0.00,0.80,0.70), (0.10,0.80,0.70), (0.20,0.80,0.70), (0.30,0.80,0.70), (0.40,0.80,0.70), (0.50,0.80,0.70), (0.60,0.80,0.70), (0.70,0.80,0.70), (0.80,0.80,0.70), (0.90,0.80,0.70), (1.00,0.80,0.70), (0.00,0.90,0.70), (0.10,0.90,0.70), (0.20,0.90,0.70), (0.30,0.90,0.70), (0.40,0.90,0.70), (0.50,0.90,0.70), (0.60,0.90,0.70), (0.70,0.90,0.70), (0.80,0.90,0.70), (0.90,0.90,0.70), (1.00,0.90,0.70), (0.00,1.00,0.70), (0.10,1.00,0.70), (0.20,1.00,0.70), (0.30,1.00,0.70), (0.40,1.00,0.70), (0.50,1.00,0.70), (0.60,1.00,0.70), (0.70,1.00,0.70), (0.80,1.00,0.70), (0.90,1.00,0.70), (1.00,1.00,0.70), (0.00,0.00,0.80), (0.10,0.00,0.80), (0.20,0.00,0.80), (0.30,0.00,0.80), (0.40,0.00,0.80), (0.50,0.00,0.80), (0.60,0.00,0.80), (0.70,0.00,0.80), (0.80,0.00,0.80), (0.90,0.00,0.80), (1.00,0.00,0.80), (0.00,0.10,0.80), (0.10,0.10,0.80), (0.20,0.10,0.80), (0.30,0.10,0.80), (0.40,0.10,0.80), (0.50,0.10,0.80), (0.60,0.10,0.80), (0.70,0.10,0.80), (0.80,0.10,0.80), (0.90,0.10,0.80), (1.00,0.10,0.80), (0.00,0.20,0.80), (0.10,0.20,0.80), (0.20,0.20,0.80), (0.30,0.20,0.80), (0.40,0.20,0.80), (0.50,0.20,0.80), (0.60,0.20,0.80), (0.70,0.20,0.80), (0.80,0.20,0.80), (0.90,0.20,0.80), (1.00,0.20,0.80), (0.00,0.30,0.80), (0.10,0.30,0.80), (0.20,0.30,0.80), (0.30,0.30,0.80), (0.40,0.30,0.80), (0.50,0.30,0.80), (0.60,0.30,0.80), (0.70,0.30,0.80), (0.80,0.30,0.80), (0.90,0.30,0.80), (1.00,0.30,0.80), (0.00,0.40,0.80), (0.10,0.40,0.80), (0.20,0.40,0.80), (0.30,0.40,0.80), (0.40,0.40,0.80), (0.50,0.40,0.80), (0.60,0.40,0.80), (0.70,0.40,0.80), (0.80,0.40,0.80), (0.90,0.40,0.80), (1.00,0.40,0.80), (0.00,0.50,0.80), (0.10,0.50,0.80), (0.20,0.50,0.80), (0.30,0.50,0.80), (0.40,0.50,0.80), (0.50,0.50,0.80), (0.60,0.50,0.80), (0.70,0.50,0.80), (0.80,0.50,0.80), (0.90,0.50,0.80), (1.00,0.50,0.80), (0.00,0.60,0.80), (0.10,0.60,0.80), (0.20,0.60,0.80), (0.30,0.60,0.80), (0.40,0.60,0.80), (0.50,0.60,0.80), (0.60,0.60,0.80), (0.70,0.60,0.80), (0.80,0.60,0.80), (0.90,0.60,0.80), (1.00,0.60,0.80), (0.00,0.70,0.80), (0.10,0.70,0.80), (0.20,0.70,0.80), (0.30,0.70,0.80), (0.40,0.70,0.80), (0.50,0.70,0.80), (0.60,0.70,0.80), (0.70,0.70,0.80), (0.80,0.70,0.80), (0.90,0.70,0.80), (1.00,0.70,0.80), (0.00,0.80,0.80), (0.10,0.80,0.80), (0.20,0.80,0.80), (0.30,0.80,0.80), (0.40,0.80,0.80), (0.50,0.80,0.80), (0.60,0.80,0.80), (0.70,0.80,0.80), (0.80,0.80,0.80), (0.90,0.80,0.80), (1.00,0.80,0.80), (0.00,0.90,0.80), (0.10,0.90,0.80), (0.20,0.90,0.80), (0.30,0.90,0.80), (0.40,0.90,0.80), (0.50,0.90,0.80), (0.60,0.90,0.80), (0.70,0.90,0.80), (0.80,0.90,0.80), (0.90,0.90,0.80), (1.00,0.90,0.80), (0.00,1.00,0.80), (0.10,1.00,0.80), (0.20,1.00,0.80), (0.30,1.00,0.80), (0.40,1.00,0.80), (0.50,1.00,0.80), (0.60,1.00,0.80), (0.70,1.00,0.80), (0.80,1.00,0.80), (0.90,1.00,0.80), (1.00,1.00,0.80), (0.00,0.00,0.90), (0.10,0.00,0.90), (0.20,0.00,0.90), (0.30,0.00,0.90), (0.40,0.00,0.90), (0.50,0.00,0.90), (0.60,0.00,0.90), (0.70,0.00,0.90), (0.80,0.00,0.90), (0.90,0.00,0.90), (1.00,0.00,0.90), (0.00,0.10,0.90), (0.10,0.10,0.90), (0.20,0.10,0.90), (0.30,0.10,0.90), (0.40,0.10,0.90), (0.50,0.10,0.90), (0.60,0.10,0.90), (0.70,0.10,0.90), (0.80,0.10,0.90), (0.90,0.10,0.90), (1.00,0.10,0.90), (0.00,0.20,0.90), (0.10,0.20,0.90), (0.20,0.20,0.90), (0.30,0.20,0.90), (0.40,0.20,0.90), (0.50,0.20,0.90), (0.60,0.20,0.90), (0.70,0.20,0.90), (0.80,0.20,0.90), (0.90,0.20,0.90), (1.00,0.20,0.90), (0.00,0.30,0.90), (0.10,0.30,0.90), (0.20,0.30,0.90), (0.30,0.30,0.90), (0.40,0.30,0.90), (0.50,0.30,0.90), (0.60,0.30,0.90), (0.70,0.30,0.90), (0.80,0.30,0.90), (0.90,0.30,0.90), (1.00,0.30,0.90), (0.00,0.40,0.90), (0.10,0.40,0.90), (0.20,0.40,0.90), (0.30,0.40,0.90), (0.40,0.40,0.90), (0.50,0.40,0.90), (0.60,0.40,0.90), (0.70,0.40,0.90), (0.80,0.40,0.90), (0.90,0.40,0.90), (1.00,0.40,0.90), (0.00,0.50,0.90), (0.10,0.50,0.90), (0.20,0.50,0.90), (0.30,0.50,0.90), (0.40,0.50,0.90), (0.50,0.50,0.90), (0.60,0.50,0.90), (0.70,0.50,0.90), (0.80,0.50,0.90), (0.90,0.50,0.90), (1.00,0.50,0.90), (0.00,0.60,0.90), (0.10,0.60,0.90), (0.20,0.60,0.90), (0.30,0.60,0.90), (0.40,0.60,0.90), (0.50,0.60,0.90), (0.60,0.60,0.90), (0.70,0.60,0.90), (0.80,0.60,0.90), (0.90,0.60,0.90), (1.00,0.60,0.90), (0.00,0.70,0.90), (0.10,0.70,0.90), (0.20,0.70,0.90), (0.30,0.70,0.90), (0.40,0.70,0.90), (0.50,0.70,0.90), (0.60,0.70,0.90), (0.70,0.70,0.90), (0.80,0.70,0.90), (0.90,0.70,0.90), (1.00,0.70,0.90), (0.00,0.80,0.90), (0.10,0.80,0.90), (0.20,0.80,0.90), (0.30,0.80,0.90), (0.40,0.80,0.90), (0.50,0.80,0.90), (0.60,0.80,0.90), (0.70,0.80,0.90), (0.80,0.80,0.90), (0.90,0.80,0.90), (1.00,0.80,0.90), (0.00,0.90,0.90), (0.10,0.90,0.90), (0.20,0.90,0.90), (0.30,0.90,0.90), (0.40,0.90,0.90), (0.50,0.90,0.90), (0.60,0.90,0.90), (0.70,0.90,0.90), (0.80,0.90,0.90), (0.90,0.90,0.90), (1.00,0.90,0.90), (0.00,1.00,0.90), (0.10,1.00,0.90), (0.20,1.00,0.90), (0.30,1.00,0.90), (0.40,1.00,0.90), (0.50,1.00,0.90), (0.60,1.00,0.90), (0.70,1.00,0.90), (0.80,1.00,0.90), (0.90,1.00,0.90), (1.00,1.00,0.90), (0.00,0.00,1.00), (0.10,0.00,1.00), (0.20,0.00,1.00), (0.30,0.00,1.00), (0.40,0.00,1.00), (0.50,0.00,1.00), (0.60,0.00,1.00), (0.70,0.00,1.00), (0.80,0.00,1.00), (0.90,0.00,1.00), (1.00,0.00,1.00), (0.00,0.10,1.00), (0.10,0.10,1.00), (0.20,0.10,1.00), (0.30,0.10,1.00), (0.40,0.10,1.00), (0.50,0.10,1.00), (0.60,0.10,1.00), (0.70,0.10,1.00), (0.80,0.10,1.00), (0.90,0.10,1.00), (1.00,0.10,1.00), (0.00,0.20,1.00), (0.10,0.20,1.00), (0.20,0.20,1.00), (0.30,0.20,1.00), (0.40,0.20,1.00), (0.50,0.20,1.00), (0.60,0.20,1.00), (0.70,0.20,1.00), (0.80,0.20,1.00), (0.90,0.20,1.00), (1.00,0.20,1.00), (0.00,0.30,1.00), (0.10,0.30,1.00), (0.20,0.30,1.00), (0.30,0.30,1.00), (0.40,0.30,1.00), (0.50,0.30,1.00), (0.60,0.30,1.00), (0.70,0.30,1.00), (0.80,0.30,1.00), (0.90,0.30,1.00), (1.00,0.30,1.00), (0.00,0.40,1.00), (0.10,0.40,1.00), (0.20,0.40,1.00), (0.30,0.40,1.00), (0.40,0.40,1.00), (0.50,0.40,1.00), (0.60,0.40,1.00), (0.70,0.40,1.00), (0.80,0.40,1.00), (0.90,0.40,1.00), (1.00,0.40,1.00), (0.00,0.50,1.00), (0.10,0.50,1.00), (0.20,0.50,1.00), (0.30,0.50,1.00), (0.40,0.50,1.00), (0.50,0.50,1.00), (0.60,0.50,1.00), (0.70,0.50,1.00), (0.80,0.50,1.00), (0.90,0.50,1.00), (1.00,0.50,1.00), (0.00,0.60,1.00), (0.10,0.60,1.00), (0.20,0.60,1.00), (0.30,0.60,1.00), (0.40,0.60,1.00), (0.50,0.60,1.00), (0.60,0.60,1.00), (0.70,0.60,1.00), (0.80,0.60,1.00), (0.90,0.60,1.00), (1.00,0.60,1.00), (0.00,0.70,1.00), (0.10,0.70,1.00), (0.20,0.70,1.00), (0.30,0.70,1.00), (0.40,0.70,1.00), (0.50,0.70,1.00), (0.60,0.70,1.00), (0.70,0.70,1.00), (0.80,0.70,1.00), (0.90,0.70,1.00), (1.00,0.70,1.00), (0.00,0.80,1.00), (0.10,0.80,1.00), (0.20,0.80,1.00), (0.30,0.80,1.00), (0.40,0.80,1.00), (0.50,0.80,1.00), (0.60,0.80,1.00), (0.70,0.80,1.00), (0.80,0.80,1.00), (0.90,0.80,1.00), (1.00,0.80,1.00), (0.00,0.90,1.00), (0.10,0.90,1.00), (0.20,0.90,1.00), (0.30,0.90,1.00), (0.40,0.90,1.00), (0.50,0.90,1.00), (0.60,0.90,1.00), (0.70,0.90,1.00), (0.80,0.90,1.00), (0.90,0.90,1.00), (1.00,0.90,1.00), (0.00,1.00,1.00), (0.10,1.00,1.00), (0.20,1.00,1.00), (0.30,1.00,1.00), (0.40,1.00,1.00), (0.50,1.00,1.00), (0.60,1.00,1.00), (0.70,1.00,1.00), (0.80,1.00,1.00), (0.90,1.00,1.00), (1.00,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x806b658
+	nodeL2G[0-1331]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x806b658
+	nodeD2G[0-1331]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x806cb30
+	nodeG2L[0-1331]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x806cb30
+	nodeG2D[0-1331]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x806e008
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x806f4e0
+	nodeNeighbourTbl[0-1331]:
+		nodeNeighbourTbl[0][0-6]: 001 011 121 1331 1331 1331 
+		nodeNeighbourTbl[1][0-6]: 002 012 122 000 1331 1331 
+		nodeNeighbourTbl[2][0-6]: 003 013 123 001 1331 1331 
+		nodeNeighbourTbl[3][0-6]: 004 014 124 002 1331 1331 
+		nodeNeighbourTbl[4][0-6]: 005 015 125 003 1331 1331 
+		nodeNeighbourTbl[5][0-6]: 006 016 126 004 1331 1331 
+		nodeNeighbourTbl[6][0-6]: 007 017 127 005 1331 1331 
+		nodeNeighbourTbl[7][0-6]: 008 018 128 006 1331 1331 
+		nodeNeighbourTbl[8][0-6]: 009 019 129 007 1331 1331 
+		nodeNeighbourTbl[9][0-6]: 010 020 130 008 1331 1331 
+		nodeNeighbourTbl[10][0-6]: 1331 021 131 009 1331 1331 
+		nodeNeighbourTbl[11][0-6]: 012 022 132 1331 000 1331 
+		nodeNeighbourTbl[12][0-6]: 013 023 133 011 001 1331 
+		nodeNeighbourTbl[13][0-6]: 014 024 134 012 002 1331 
+		nodeNeighbourTbl[14][0-6]: 015 025 135 013 003 1331 
+		nodeNeighbourTbl[15][0-6]: 016 026 136 014 004 1331 
+		nodeNeighbourTbl[16][0-6]: 017 027 137 015 005 1331 
+		nodeNeighbourTbl[17][0-6]: 018 028 138 016 006 1331 
+		nodeNeighbourTbl[18][0-6]: 019 029 139 017 007 1331 
+		nodeNeighbourTbl[19][0-6]: 020 030 140 018 008 1331 
+		nodeNeighbourTbl[20][0-6]: 021 031 141 019 009 1331 
+		nodeNeighbourTbl[21][0-6]: 1331 032 142 020 010 1331 
+		nodeNeighbourTbl[22][0-6]: 023 033 143 1331 011 1331 
+		nodeNeighbourTbl[23][0-6]: 024 034 144 022 012 1331 
+		nodeNeighbourTbl[24][0-6]: 025 035 145 023 013 1331 
+		nodeNeighbourTbl[25][0-6]: 026 036 146 024 014 1331 
+		nodeNeighbourTbl[26][0-6]: 027 037 147 025 015 1331 
+		nodeNeighbourTbl[27][0-6]: 028 038 148 026 016 1331 
+		nodeNeighbourTbl[28][0-6]: 029 039 149 027 017 1331 
+		nodeNeighbourTbl[29][0-6]: 030 040 150 028 018 1331 
+		nodeNeighbourTbl[30][0-6]: 031 041 151 029 019 1331 
+		nodeNeighbourTbl[31][0-6]: 032 042 152 030 020 1331 
+		nodeNeighbourTbl[32][0-6]: 1331 043 153 031 021 1331 
+		nodeNeighbourTbl[33][0-6]: 034 044 154 1331 022 1331 
+		nodeNeighbourTbl[34][0-6]: 035 045 155 033 023 1331 
+		nodeNeighbourTbl[35][0-6]: 036 046 156 034 024 1331 
+		nodeNeighbourTbl[36][0-6]: 037 047 157 035 025 1331 
+		nodeNeighbourTbl[37][0-6]: 038 048 158 036 026 1331 
+		nodeNeighbourTbl[38][0-6]: 039 049 159 037 027 1331 
+		nodeNeighbourTbl[39][0-6]: 040 050 160 038 028 1331 
+		nodeNeighbourTbl[40][0-6]: 041 051 161 039 029 1331 
+		nodeNeighbourTbl[41][0-6]: 042 052 162 040 030 1331 
+		nodeNeighbourTbl[42][0-6]: 043 053 163 041 031 1331 
+		nodeNeighbourTbl[43][0-6]: 1331 054 164 042 032 1331 
+		nodeNeighbourTbl[44][0-6]: 045 055 165 1331 033 1331 
+		nodeNeighbourTbl[45][0-6]: 046 056 166 044 034 1331 
+		nodeNeighbourTbl[46][0-6]: 047 057 167 045 035 1331 
+		nodeNeighbourTbl[47][0-6]: 048 058 168 046 036 1331 
+		nodeNeighbourTbl[48][0-6]: 049 059 169 047 037 1331 
+		nodeNeighbourTbl[49][0-6]: 050 060 170 048 038 1331 
+		nodeNeighbourTbl[50][0-6]: 051 061 171 049 039 1331 
+		nodeNeighbourTbl[51][0-6]: 052 062 172 050 040 1331 
+		nodeNeighbourTbl[52][0-6]: 053 063 173 051 041 1331 
+		nodeNeighbourTbl[53][0-6]: 054 064 174 052 042 1331 
+		nodeNeighbourTbl[54][0-6]: 1331 065 175 053 043 1331 
+		nodeNeighbourTbl[55][0-6]: 056 066 176 1331 044 1331 
+		nodeNeighbourTbl[56][0-6]: 057 067 177 055 045 1331 
+		nodeNeighbourTbl[57][0-6]: 058 068 178 056 046 1331 
+		nodeNeighbourTbl[58][0-6]: 059 069 179 057 047 1331 
+		nodeNeighbourTbl[59][0-6]: 060 070 180 058 048 1331 
+		nodeNeighbourTbl[60][0-6]: 061 071 181 059 049 1331 
+		nodeNeighbourTbl[61][0-6]: 062 072 182 060 050 1331 
+		nodeNeighbourTbl[62][0-6]: 063 073 183 061 051 1331 
+		nodeNeighbourTbl[63][0-6]: 064 074 184 062 052 1331 
+		nodeNeighbourTbl[64][0-6]: 065 075 185 063 053 1331 
+		nodeNeighbourTbl[65][0-6]: 1331 076 186 064 054 1331 
+		nodeNeighbourTbl[66][0-6]: 067 077 187 1331 055 1331 
+		nodeNeighbourTbl[67][0-6]: 068 078 188 066 056 1331 
+		nodeNeighbourTbl[68][0-6]: 069 079 189 067 057 1331 
+		nodeNeighbourTbl[69][0-6]: 070 080 190 068 058 1331 
+		nodeNeighbourTbl[70][0-6]: 071 081 191 069 059 1331 
+		nodeNeighbourTbl[71][0-6]: 072 082 192 070 060 1331 
+		nodeNeighbourTbl[72][0-6]: 073 083 193 071 061 1331 
+		nodeNeighbourTbl[73][0-6]: 074 084 194 072 062 1331 
+		nodeNeighbourTbl[74][0-6]: 075 085 195 073 063 1331 
+		nodeNeighbourTbl[75][0-6]: 076 086 196 074 064 1331 
+		nodeNeighbourTbl[76][0-6]: 1331 087 197 075 065 1331 
+		nodeNeighbourTbl[77][0-6]: 078 088 198 1331 066 1331 
+		nodeNeighbourTbl[78][0-6]: 079 089 199 077 067 1331 
+		nodeNeighbourTbl[79][0-6]: 080 090 200 078 068 1331 
+		nodeNeighbourTbl[80][0-6]: 081 091 201 079 069 1331 
+		nodeNeighbourTbl[81][0-6]: 082 092 202 080 070 1331 
+		nodeNeighbourTbl[82][0-6]: 083 093 203 081 071 1331 
+		nodeNeighbourTbl[83][0-6]: 084 094 204 082 072 1331 
+		nodeNeighbourTbl[84][0-6]: 085 095 205 083 073 1331 
+		nodeNeighbourTbl[85][0-6]: 086 096 206 084 074 1331 
+		nodeNeighbourTbl[86][0-6]: 087 097 207 085 075 1331 
+		nodeNeighbourTbl[87][0-6]: 1331 098 208 086 076 1331 
+		nodeNeighbourTbl[88][0-6]: 089 099 209 1331 077 1331 
+		nodeNeighbourTbl[89][0-6]: 090 100 210 088 078 1331 
+		nodeNeighbourTbl[90][0-6]: 091 101 211 089 079 1331 
+		nodeNeighbourTbl[91][0-6]: 092 102 212 090 080 1331 
+		nodeNeighbourTbl[92][0-6]: 093 103 213 091 081 1331 
+		nodeNeighbourTbl[93][0-6]: 094 104 214 092 082 1331 
+		nodeNeighbourTbl[94][0-6]: 095 105 215 093 083 1331 
+		nodeNeighbourTbl[95][0-6]: 096 106 216 094 084 1331 
+		nodeNeighbourTbl[96][0-6]: 097 107 217 095 085 1331 
+		nodeNeighbourTbl[97][0-6]: 098 108 218 096 086 1331 
+		nodeNeighbourTbl[98][0-6]: 1331 109 219 097 087 1331 
+		nodeNeighbourTbl[99][0-6]: 100 110 220 1331 088 1331 
+		nodeNeighbourTbl[100][0-6]: 101 111 221 099 089 1331 
+		nodeNeighbourTbl[101][0-6]: 102 112 222 100 090 1331 
+		nodeNeighbourTbl[102][0-6]: 103 113 223 101 091 1331 
+		nodeNeighbourTbl[103][0-6]: 104 114 224 102 092 1331 
+		nodeNeighbourTbl[104][0-6]: 105 115 225 103 093 1331 
+		nodeNeighbourTbl[105][0-6]: 106 116 226 104 094 1331 
+		nodeNeighbourTbl[106][0-6]: 107 117 227 105 095 1331 
+		nodeNeighbourTbl[107][0-6]: 108 118 228 106 096 1331 
+		nodeNeighbourTbl[108][0-6]: 109 119 229 107 097 1331 
+		nodeNeighbourTbl[109][0-6]: 1331 120 230 108 098 1331 
+		nodeNeighbourTbl[110][0-6]: 111 1331 231 1331 099 1331 
+		nodeNeighbourTbl[111][0-6]: 112 1331 232 110 100 1331 
+		nodeNeighbourTbl[112][0-6]: 113 1331 233 111 101 1331 
+		nodeNeighbourTbl[113][0-6]: 114 1331 234 112 102 1331 
+		nodeNeighbourTbl[114][0-6]: 115 1331 235 113 103 1331 
+		nodeNeighbourTbl[115][0-6]: 116 1331 236 114 104 1331 
+		nodeNeighbourTbl[116][0-6]: 117 1331 237 115 105 1331 
+		nodeNeighbourTbl[117][0-6]: 118 1331 238 116 106 1331 
+		nodeNeighbourTbl[118][0-6]: 119 1331 239 117 107 1331 
+		nodeNeighbourTbl[119][0-6]: 120 1331 240 118 108 1331 
+		nodeNeighbourTbl[120][0-6]: 1331 1331 241 119 109 1331 
+		nodeNeighbourTbl[121][0-6]: 122 132 242 1331 1331 000 
+		nodeNeighbourTbl[122][0-6]: 123 133 243 121 1331 001 
+		nodeNeighbourTbl[123][0-6]: 124 134 244 122 1331 002 
+		nodeNeighbourTbl[124][0-6]: 125 135 245 123 1331 003 
+		nodeNeighbourTbl[125][0-6]: 126 136 246 124 1331 004 
+		nodeNeighbourTbl[126][0-6]: 127 137 247 125 1331 005 
+		nodeNeighbourTbl[127][0-6]: 128 138 248 126 1331 006 
+		nodeNeighbourTbl[128][0-6]: 129 139 249 127 1331 007 
+		nodeNeighbourTbl[129][0-6]: 130 140 250 128 1331 008 
+		nodeNeighbourTbl[130][0-6]: 131 141 251 129 1331 009 
+		nodeNeighbourTbl[131][0-6]: 1331 142 252 130 1331 010 
+		nodeNeighbourTbl[132][0-6]: 133 143 253 1331 121 011 
+		nodeNeighbourTbl[133][0-6]: 134 144 254 132 122 012 
+		nodeNeighbourTbl[134][0-6]: 135 145 255 133 123 013 
+		nodeNeighbourTbl[135][0-6]: 136 146 256 134 124 014 
+		nodeNeighbourTbl[136][0-6]: 137 147 257 135 125 015 
+		nodeNeighbourTbl[137][0-6]: 138 148 258 136 126 016 
+		nodeNeighbourTbl[138][0-6]: 139 149 259 137 127 017 
+		nodeNeighbourTbl[139][0-6]: 140 150 260 138 128 018 
+		nodeNeighbourTbl[140][0-6]: 141 151 261 139 129 019 
+		nodeNeighbourTbl[141][0-6]: 142 152 262 140 130 020 
+		nodeNeighbourTbl[142][0-6]: 1331 153 263 141 131 021 
+		nodeNeighbourTbl[143][0-6]: 144 154 264 1331 132 022 
+		nodeNeighbourTbl[144][0-6]: 145 155 265 143 133 023 
+		nodeNeighbourTbl[145][0-6]: 146 156 266 144 134 024 
+		nodeNeighbourTbl[146][0-6]: 147 157 267 145 135 025 
+		nodeNeighbourTbl[147][0-6]: 148 158 268 146 136 026 
+		nodeNeighbourTbl[148][0-6]: 149 159 269 147 137 027 
+		nodeNeighbourTbl[149][0-6]: 150 160 270 148 138 028 
+		nodeNeighbourTbl[150][0-6]: 151 161 271 149 139 029 
+		nodeNeighbourTbl[151][0-6]: 152 162 272 150 140 030 
+		nodeNeighbourTbl[152][0-6]: 153 163 273 151 141 031 
+		nodeNeighbourTbl[153][0-6]: 1331 164 274 152 142 032 
+		nodeNeighbourTbl[154][0-6]: 155 165 275 1331 143 033 
+		nodeNeighbourTbl[155][0-6]: 156 166 276 154 144 034 
+		nodeNeighbourTbl[156][0-6]: 157 167 277 155 145 035 
+		nodeNeighbourTbl[157][0-6]: 158 168 278 156 146 036 
+		nodeNeighbourTbl[158][0-6]: 159 169 279 157 147 037 
+		nodeNeighbourTbl[159][0-6]: 160 170 280 158 148 038 
+		nodeNeighbourTbl[160][0-6]: 161 171 281 159 149 039 
+		nodeNeighbourTbl[161][0-6]: 162 172 282 160 150 040 
+		nodeNeighbourTbl[162][0-6]: 163 173 283 161 151 041 
+		nodeNeighbourTbl[163][0-6]: 164 174 284 162 152 042 
+		nodeNeighbourTbl[164][0-6]: 1331 175 285 163 153 043 
+		nodeNeighbourTbl[165][0-6]: 166 176 286 1331 154 044 
+		nodeNeighbourTbl[166][0-6]: 167 177 287 165 155 045 
+		nodeNeighbourTbl[167][0-6]: 168 178 288 166 156 046 
+		nodeNeighbourTbl[168][0-6]: 169 179 289 167 157 047 
+		nodeNeighbourTbl[169][0-6]: 170 180 290 168 158 048 
+		nodeNeighbourTbl[170][0-6]: 171 181 291 169 159 049 
+		nodeNeighbourTbl[171][0-6]: 172 182 292 170 160 050 
+		nodeNeighbourTbl[172][0-6]: 173 183 293 171 161 051 
+		nodeNeighbourTbl[173][0-6]: 174 184 294 172 162 052 
+		nodeNeighbourTbl[174][0-6]: 175 185 295 173 163 053 
+		nodeNeighbourTbl[175][0-6]: 1331 186 296 174 164 054 
+		nodeNeighbourTbl[176][0-6]: 177 187 297 1331 165 055 
+		nodeNeighbourTbl[177][0-6]: 178 188 298 176 166 056 
+		nodeNeighbourTbl[178][0-6]: 179 189 299 177 167 057 
+		nodeNeighbourTbl[179][0-6]: 180 190 300 178 168 058 
+		nodeNeighbourTbl[180][0-6]: 181 191 301 179 169 059 
+		nodeNeighbourTbl[181][0-6]: 182 192 302 180 170 060 
+		nodeNeighbourTbl[182][0-6]: 183 193 303 181 171 061 
+		nodeNeighbourTbl[183][0-6]: 184 194 304 182 172 062 
+		nodeNeighbourTbl[184][0-6]: 185 195 305 183 173 063 
+		nodeNeighbourTbl[185][0-6]: 186 196 306 184 174 064 
+		nodeNeighbourTbl[186][0-6]: 1331 197 307 185 175 065 
+		nodeNeighbourTbl[187][0-6]: 188 198 308 1331 176 066 
+		nodeNeighbourTbl[188][0-6]: 189 199 309 187 177 067 
+		nodeNeighbourTbl[189][0-6]: 190 200 310 188 178 068 
+		nodeNeighbourTbl[190][0-6]: 191 201 311 189 179 069 
+		nodeNeighbourTbl[191][0-6]: 192 202 312 190 180 070 
+		nodeNeighbourTbl[192][0-6]: 193 203 313 191 181 071 
+		nodeNeighbourTbl[193][0-6]: 194 204 314 192 182 072 
+		nodeNeighbourTbl[194][0-6]: 195 205 315 193 183 073 
+		nodeNeighbourTbl[195][0-6]: 196 206 316 194 184 074 
+		nodeNeighbourTbl[196][0-6]: 197 207 317 195 185 075 
+		nodeNeighbourTbl[197][0-6]: 1331 208 318 196 186 076 
+		nodeNeighbourTbl[198][0-6]: 199 209 319 1331 187 077 
+		nodeNeighbourTbl[199][0-6]: 200 210 320 198 188 078 
+		nodeNeighbourTbl[200][0-6]: 201 211 321 199 189 079 
+		nodeNeighbourTbl[201][0-6]: 202 212 322 200 190 080 
+		nodeNeighbourTbl[202][0-6]: 203 213 323 201 191 081 
+		nodeNeighbourTbl[203][0-6]: 204 214 324 202 192 082 
+		nodeNeighbourTbl[204][0-6]: 205 215 325 203 193 083 
+		nodeNeighbourTbl[205][0-6]: 206 216 326 204 194 084 
+		nodeNeighbourTbl[206][0-6]: 207 217 327 205 195 085 
+		nodeNeighbourTbl[207][0-6]: 208 218 328 206 196 086 
+		nodeNeighbourTbl[208][0-6]: 1331 219 329 207 197 087 
+		nodeNeighbourTbl[209][0-6]: 210 220 330 1331 198 088 
+		nodeNeighbourTbl[210][0-6]: 211 221 331 209 199 089 
+		nodeNeighbourTbl[211][0-6]: 212 222 332 210 200 090 
+		nodeNeighbourTbl[212][0-6]: 213 223 333 211 201 091 
+		nodeNeighbourTbl[213][0-6]: 214 224 334 212 202 092 
+		nodeNeighbourTbl[214][0-6]: 215 225 335 213 203 093 
+		nodeNeighbourTbl[215][0-6]: 216 226 336 214 204 094 
+		nodeNeighbourTbl[216][0-6]: 217 227 337 215 205 095 
+		nodeNeighbourTbl[217][0-6]: 218 228 338 216 206 096 
+		nodeNeighbourTbl[218][0-6]: 219 229 339 217 207 097 
+		nodeNeighbourTbl[219][0-6]: 1331 230 340 218 208 098 
+		nodeNeighbourTbl[220][0-6]: 221 231 341 1331 209 099 
+		nodeNeighbourTbl[221][0-6]: 222 232 342 220 210 100 
+		nodeNeighbourTbl[222][0-6]: 223 233 343 221 211 101 
+		nodeNeighbourTbl[223][0-6]: 224 234 344 222 212 102 
+		nodeNeighbourTbl[224][0-6]: 225 235 345 223 213 103 
+		nodeNeighbourTbl[225][0-6]: 226 236 346 224 214 104 
+		nodeNeighbourTbl[226][0-6]: 227 237 347 225 215 105 
+		nodeNeighbourTbl[227][0-6]: 228 238 348 226 216 106 
+		nodeNeighbourTbl[228][0-6]: 229 239 349 227 217 107 
+		nodeNeighbourTbl[229][0-6]: 230 240 350 228 218 108 
+		nodeNeighbourTbl[230][0-6]: 1331 241 351 229 219 109 
+		nodeNeighbourTbl[231][0-6]: 232 1331 352 1331 220 110 
+		nodeNeighbourTbl[232][0-6]: 233 1331 353 231 221 111 
+		nodeNeighbourTbl[233][0-6]: 234 1331 354 232 222 112 
+		nodeNeighbourTbl[234][0-6]: 235 1331 355 233 223 113 
+		nodeNeighbourTbl[235][0-6]: 236 1331 356 234 224 114 
+		nodeNeighbourTbl[236][0-6]: 237 1331 357 235 225 115 
+		nodeNeighbourTbl[237][0-6]: 238 1331 358 236 226 116 
+		nodeNeighbourTbl[238][0-6]: 239 1331 359 237 227 117 
+		nodeNeighbourTbl[239][0-6]: 240 1331 360 238 228 118 
+		nodeNeighbourTbl[240][0-6]: 241 1331 361 239 229 119 
+		nodeNeighbourTbl[241][0-6]: 1331 1331 362 240 230 120 
+		nodeNeighbourTbl[242][0-6]: 243 253 363 1331 1331 121 
+		nodeNeighbourTbl[243][0-6]: 244 254 364 242 1331 122 
+		nodeNeighbourTbl[244][0-6]: 245 255 365 243 1331 123 
+		nodeNeighbourTbl[245][0-6]: 246 256 366 244 1331 124 
+		nodeNeighbourTbl[246][0-6]: 247 257 367 245 1331 125 
+		nodeNeighbourTbl[247][0-6]: 248 258 368 246 1331 126 
+		nodeNeighbourTbl[248][0-6]: 249 259 369 247 1331 127 
+		nodeNeighbourTbl[249][0-6]: 250 260 370 248 1331 128 
+		nodeNeighbourTbl[250][0-6]: 251 261 371 249 1331 129 
+		nodeNeighbourTbl[251][0-6]: 252 262 372 250 1331 130 
+		nodeNeighbourTbl[252][0-6]: 1331 263 373 251 1331 131 
+		nodeNeighbourTbl[253][0-6]: 254 264 374 1331 242 132 
+		nodeNeighbourTbl[254][0-6]: 255 265 375 253 243 133 
+		nodeNeighbourTbl[255][0-6]: 256 266 376 254 244 134 
+		nodeNeighbourTbl[256][0-6]: 257 267 377 255 245 135 
+		nodeNeighbourTbl[257][0-6]: 258 268 378 256 246 136 
+		nodeNeighbourTbl[258][0-6]: 259 269 379 257 247 137 
+		nodeNeighbourTbl[259][0-6]: 260 270 380 258 248 138 
+		nodeNeighbourTbl[260][0-6]: 261 271 381 259 249 139 
+		nodeNeighbourTbl[261][0-6]: 262 272 382 260 250 140 
+		nodeNeighbourTbl[262][0-6]: 263 273 383 261 251 141 
+		nodeNeighbourTbl[263][0-6]: 1331 274 384 262 252 142 
+		nodeNeighbourTbl[264][0-6]: 265 275 385 1331 253 143 
+		nodeNeighbourTbl[265][0-6]: 266 276 386 264 254 144 
+		nodeNeighbourTbl[266][0-6]: 267 277 387 265 255 145 
+		nodeNeighbourTbl[267][0-6]: 268 278 388 266 256 146 
+		nodeNeighbourTbl[268][0-6]: 269 279 389 267 257 147 
+		nodeNeighbourTbl[269][0-6]: 270 280 390 268 258 148 
+		nodeNeighbourTbl[270][0-6]: 271 281 391 269 259 149 
+		nodeNeighbourTbl[271][0-6]: 272 282 392 270 260 150 
+		nodeNeighbourTbl[272][0-6]: 273 283 393 271 261 151 
+		nodeNeighbourTbl[273][0-6]: 274 284 394 272 262 152 
+		nodeNeighbourTbl[274][0-6]: 1331 285 395 273 263 153 
+		nodeNeighbourTbl[275][0-6]: 276 286 396 1331 264 154 
+		nodeNeighbourTbl[276][0-6]: 277 287 397 275 265 155 
+		nodeNeighbourTbl[277][0-6]: 278 288 398 276 266 156 
+		nodeNeighbourTbl[278][0-6]: 279 289 399 277 267 157 
+		nodeNeighbourTbl[279][0-6]: 280 290 400 278 268 158 
+		nodeNeighbourTbl[280][0-6]: 281 291 401 279 269 159 
+		nodeNeighbourTbl[281][0-6]: 282 292 402 280 270 160 
+		nodeNeighbourTbl[282][0-6]: 283 293 403 281 271 161 
+		nodeNeighbourTbl[283][0-6]: 284 294 404 282 272 162 
+		nodeNeighbourTbl[284][0-6]: 285 295 405 283 273 163 
+		nodeNeighbourTbl[285][0-6]: 1331 296 406 284 274 164 
+		nodeNeighbourTbl[286][0-6]: 287 297 407 1331 275 165 
+		nodeNeighbourTbl[287][0-6]: 288 298 408 286 276 166 
+		nodeNeighbourTbl[288][0-6]: 289 299 409 287 277 167 
+		nodeNeighbourTbl[289][0-6]: 290 300 410 288 278 168 
+		nodeNeighbourTbl[290][0-6]: 291 301 411 289 279 169 
+		nodeNeighbourTbl[291][0-6]: 292 302 412 290 280 170 
+		nodeNeighbourTbl[292][0-6]: 293 303 413 291 281 171 
+		nodeNeighbourTbl[293][0-6]: 294 304 414 292 282 172 
+		nodeNeighbourTbl[294][0-6]: 295 305 415 293 283 173 
+		nodeNeighbourTbl[295][0-6]: 296 306 416 294 284 174 
+		nodeNeighbourTbl[296][0-6]: 1331 307 417 295 285 175 
+		nodeNeighbourTbl[297][0-6]: 298 308 418 1331 286 176 
+		nodeNeighbourTbl[298][0-6]: 299 309 419 297 287 177 
+		nodeNeighbourTbl[299][0-6]: 300 310 420 298 288 178 
+		nodeNeighbourTbl[300][0-6]: 301 311 421 299 289 179 
+		nodeNeighbourTbl[301][0-6]: 302 312 422 300 290 180 
+		nodeNeighbourTbl[302][0-6]: 303 313 423 301 291 181 
+		nodeNeighbourTbl[303][0-6]: 304 314 424 302 292 182 
+		nodeNeighbourTbl[304][0-6]: 305 315 425 303 293 183 
+		nodeNeighbourTbl[305][0-6]: 306 316 426 304 294 184 
+		nodeNeighbourTbl[306][0-6]: 307 317 427 305 295 185 
+		nodeNeighbourTbl[307][0-6]: 1331 318 428 306 296 186 
+		nodeNeighbourTbl[308][0-6]: 309 319 429 1331 297 187 
+		nodeNeighbourTbl[309][0-6]: 310 320 430 308 298 188 
+		nodeNeighbourTbl[310][0-6]: 311 321 431 309 299 189 
+		nodeNeighbourTbl[311][0-6]: 312 322 432 310 300 190 
+		nodeNeighbourTbl[312][0-6]: 313 323 433 311 301 191 
+		nodeNeighbourTbl[313][0-6]: 314 324 434 312 302 192 
+		nodeNeighbourTbl[314][0-6]: 315 325 435 313 303 193 
+		nodeNeighbourTbl[315][0-6]: 316 326 436 314 304 194 
+		nodeNeighbourTbl[316][0-6]: 317 327 437 315 305 195 
+		nodeNeighbourTbl[317][0-6]: 318 328 438 316 306 196 
+		nodeNeighbourTbl[318][0-6]: 1331 329 439 317 307 197 
+		nodeNeighbourTbl[319][0-6]: 320 330 440 1331 308 198 
+		nodeNeighbourTbl[320][0-6]: 321 331 441 319 309 199 
+		nodeNeighbourTbl[321][0-6]: 322 332 442 320 310 200 
+		nodeNeighbourTbl[322][0-6]: 323 333 443 321 311 201 
+		nodeNeighbourTbl[323][0-6]: 324 334 444 322 312 202 
+		nodeNeighbourTbl[324][0-6]: 325 335 445 323 313 203 
+		nodeNeighbourTbl[325][0-6]: 326 336 446 324 314 204 
+		nodeNeighbourTbl[326][0-6]: 327 337 447 325 315 205 
+		nodeNeighbourTbl[327][0-6]: 328 338 448 326 316 206 
+		nodeNeighbourTbl[328][0-6]: 329 339 449 327 317 207 
+		nodeNeighbourTbl[329][0-6]: 1331 340 450 328 318 208 
+		nodeNeighbourTbl[330][0-6]: 331 341 451 1331 319 209 
+		nodeNeighbourTbl[331][0-6]: 332 342 452 330 320 210 
+		nodeNeighbourTbl[332][0-6]: 333 343 453 331 321 211 
+		nodeNeighbourTbl[333][0-6]: 334 344 454 332 322 212 
+		nodeNeighbourTbl[334][0-6]: 335 345 455 333 323 213 
+		nodeNeighbourTbl[335][0-6]: 336 346 456 334 324 214 
+		nodeNeighbourTbl[336][0-6]: 337 347 457 335 325 215 
+		nodeNeighbourTbl[337][0-6]: 338 348 458 336 326 216 
+		nodeNeighbourTbl[338][0-6]: 339 349 459 337 327 217 
+		nodeNeighbourTbl[339][0-6]: 340 350 460 338 328 218 
+		nodeNeighbourTbl[340][0-6]: 1331 351 461 339 329 219 
+		nodeNeighbourTbl[341][0-6]: 342 352 462 1331 330 220 
+		nodeNeighbourTbl[342][0-6]: 343 353 463 341 331 221 
+		nodeNeighbourTbl[343][0-6]: 344 354 464 342 332 222 
+		nodeNeighbourTbl[344][0-6]: 345 355 465 343 333 223 
+		nodeNeighbourTbl[345][0-6]: 346 356 466 344 334 224 
+		nodeNeighbourTbl[346][0-6]: 347 357 467 345 335 225 
+		nodeNeighbourTbl[347][0-6]: 348 358 468 346 336 226 
+		nodeNeighbourTbl[348][0-6]: 349 359 469 347 337 227 
+		nodeNeighbourTbl[349][0-6]: 350 360 470 348 338 228 
+		nodeNeighbourTbl[350][0-6]: 351 361 471 349 339 229 
+		nodeNeighbourTbl[351][0-6]: 1331 362 472 350 340 230 
+		nodeNeighbourTbl[352][0-6]: 353 1331 473 1331 341 231 
+		nodeNeighbourTbl[353][0-6]: 354 1331 474 352 342 232 
+		nodeNeighbourTbl[354][0-6]: 355 1331 475 353 343 233 
+		nodeNeighbourTbl[355][0-6]: 356 1331 476 354 344 234 
+		nodeNeighbourTbl[356][0-6]: 357 1331 477 355 345 235 
+		nodeNeighbourTbl[357][0-6]: 358 1331 478 356 346 236 
+		nodeNeighbourTbl[358][0-6]: 359 1331 479 357 347 237 
+		nodeNeighbourTbl[359][0-6]: 360 1331 480 358 348 238 
+		nodeNeighbourTbl[360][0-6]: 361 1331 481 359 349 239 
+		nodeNeighbourTbl[361][0-6]: 362 1331 482 360 350 240 
+		nodeNeighbourTbl[362][0-6]: 1331 1331 483 361 351 241 
+		nodeNeighbourTbl[363][0-6]: 364 374 484 1331 1331 242 
+		nodeNeighbourTbl[364][0-6]: 365 375 485 363 1331 243 
+		nodeNeighbourTbl[365][0-6]: 366 376 486 364 1331 244 
+		nodeNeighbourTbl[366][0-6]: 367 377 487 365 1331 245 
+		nodeNeighbourTbl[367][0-6]: 368 378 488 366 1331 246 
+		nodeNeighbourTbl[368][0-6]: 369 379 489 367 1331 247 
+		nodeNeighbourTbl[369][0-6]: 370 380 490 368 1331 248 
+		nodeNeighbourTbl[370][0-6]: 371 381 491 369 1331 249 
+		nodeNeighbourTbl[371][0-6]: 372 382 492 370 1331 250 
+		nodeNeighbourTbl[372][0-6]: 373 383 493 371 1331 251 
+		nodeNeighbourTbl[373][0-6]: 1331 384 494 372 1331 252 
+		nodeNeighbourTbl[374][0-6]: 375 385 495 1331 363 253 
+		nodeNeighbourTbl[375][0-6]: 376 386 496 374 364 254 
+		nodeNeighbourTbl[376][0-6]: 377 387 497 375 365 255 
+		nodeNeighbourTbl[377][0-6]: 378 388 498 376 366 256 
+		nodeNeighbourTbl[378][0-6]: 379 389 499 377 367 257 
+		nodeNeighbourTbl[379][0-6]: 380 390 500 378 368 258 
+		nodeNeighbourTbl[380][0-6]: 381 391 501 379 369 259 
+		nodeNeighbourTbl[381][0-6]: 382 392 502 380 370 260 
+		nodeNeighbourTbl[382][0-6]: 383 393 503 381 371 261 
+		nodeNeighbourTbl[383][0-6]: 384 394 504 382 372 262 
+		nodeNeighbourTbl[384][0-6]: 1331 395 505 383 373 263 
+		nodeNeighbourTbl[385][0-6]: 386 396 506 1331 374 264 
+		nodeNeighbourTbl[386][0-6]: 387 397 507 385 375 265 
+		nodeNeighbourTbl[387][0-6]: 388 398 508 386 376 266 
+		nodeNeighbourTbl[388][0-6]: 389 399 509 387 377 267 
+		nodeNeighbourTbl[389][0-6]: 390 400 510 388 378 268 
+		nodeNeighbourTbl[390][0-6]: 391 401 511 389 379 269 
+		nodeNeighbourTbl[391][0-6]: 392 402 512 390 380 270 
+		nodeNeighbourTbl[392][0-6]: 393 403 513 391 381 271 
+		nodeNeighbourTbl[393][0-6]: 394 404 514 392 382 272 
+		nodeNeighbourTbl[394][0-6]: 395 405 515 393 383 273 
+		nodeNeighbourTbl[395][0-6]: 1331 406 516 394 384 274 
+		nodeNeighbourTbl[396][0-6]: 397 407 517 1331 385 275 
+		nodeNeighbourTbl[397][0-6]: 398 408 518 396 386 276 
+		nodeNeighbourTbl[398][0-6]: 399 409 519 397 387 277 
+		nodeNeighbourTbl[399][0-6]: 400 410 520 398 388 278 
+		nodeNeighbourTbl[400][0-6]: 401 411 521 399 389 279 
+		nodeNeighbourTbl[401][0-6]: 402 412 522 400 390 280 
+		nodeNeighbourTbl[402][0-6]: 403 413 523 401 391 281 
+		nodeNeighbourTbl[403][0-6]: 404 414 524 402 392 282 
+		nodeNeighbourTbl[404][0-6]: 405 415 525 403 393 283 
+		nodeNeighbourTbl[405][0-6]: 406 416 526 404 394 284 
+		nodeNeighbourTbl[406][0-6]: 1331 417 527 405 395 285 
+		nodeNeighbourTbl[407][0-6]: 408 418 528 1331 396 286 
+		nodeNeighbourTbl[408][0-6]: 409 419 529 407 397 287 
+		nodeNeighbourTbl[409][0-6]: 410 420 530 408 398 288 
+		nodeNeighbourTbl[410][0-6]: 411 421 531 409 399 289 
+		nodeNeighbourTbl[411][0-6]: 412 422 532 410 400 290 
+		nodeNeighbourTbl[412][0-6]: 413 423 533 411 401 291 
+		nodeNeighbourTbl[413][0-6]: 414 424 534 412 402 292 
+		nodeNeighbourTbl[414][0-6]: 415 425 535 413 403 293 
+		nodeNeighbourTbl[415][0-6]: 416 426 536 414 404 294 
+		nodeNeighbourTbl[416][0-6]: 417 427 537 415 405 295 
+		nodeNeighbourTbl[417][0-6]: 1331 428 538 416 406 296 
+		nodeNeighbourTbl[418][0-6]: 419 429 539 1331 407 297 
+		nodeNeighbourTbl[419][0-6]: 420 430 540 418 408 298 
+		nodeNeighbourTbl[420][0-6]: 421 431 541 419 409 299 
+		nodeNeighbourTbl[421][0-6]: 422 432 542 420 410 300 
+		nodeNeighbourTbl[422][0-6]: 423 433 543 421 411 301 
+		nodeNeighbourTbl[423][0-6]: 424 434 544 422 412 302 
+		nodeNeighbourTbl[424][0-6]: 425 435 545 423 413 303 
+		nodeNeighbourTbl[425][0-6]: 426 436 546 424 414 304 
+		nodeNeighbourTbl[426][0-6]: 427 437 547 425 415 305 
+		nodeNeighbourTbl[427][0-6]: 428 438 548 426 416 306 
+		nodeNeighbourTbl[428][0-6]: 1331 439 549 427 417 307 
+		nodeNeighbourTbl[429][0-6]: 430 440 550 1331 418 308 
+		nodeNeighbourTbl[430][0-6]: 431 441 551 429 419 309 
+		nodeNeighbourTbl[431][0-6]: 432 442 552 430 420 310 
+		nodeNeighbourTbl[432][0-6]: 433 443 553 431 421 311 
+		nodeNeighbourTbl[433][0-6]: 434 444 554 432 422 312 
+		nodeNeighbourTbl[434][0-6]: 435 445 555 433 423 313 
+		nodeNeighbourTbl[435][0-6]: 436 446 556 434 424 314 
+		nodeNeighbourTbl[436][0-6]: 437 447 557 435 425 315 
+		nodeNeighbourTbl[437][0-6]: 438 448 558 436 426 316 
+		nodeNeighbourTbl[438][0-6]: 439 449 559 437 427 317 
+		nodeNeighbourTbl[439][0-6]: 1331 450 560 438 428 318 
+		nodeNeighbourTbl[440][0-6]: 441 451 561 1331 429 319 
+		nodeNeighbourTbl[441][0-6]: 442 452 562 440 430 320 
+		nodeNeighbourTbl[442][0-6]: 443 453 563 441 431 321 
+		nodeNeighbourTbl[443][0-6]: 444 454 564 442 432 322 
+		nodeNeighbourTbl[444][0-6]: 445 455 565 443 433 323 
+		nodeNeighbourTbl[445][0-6]: 446 456 566 444 434 324 
+		nodeNeighbourTbl[446][0-6]: 447 457 567 445 435 325 
+		nodeNeighbourTbl[447][0-6]: 448 458 568 446 436 326 
+		nodeNeighbourTbl[448][0-6]: 449 459 569 447 437 327 
+		nodeNeighbourTbl[449][0-6]: 450 460 570 448 438 328 
+		nodeNeighbourTbl[450][0-6]: 1331 461 571 449 439 329 
+		nodeNeighbourTbl[451][0-6]: 452 462 572 1331 440 330 
+		nodeNeighbourTbl[452][0-6]: 453 463 573 451 441 331 
+		nodeNeighbourTbl[453][0-6]: 454 464 574 452 442 332 
+		nodeNeighbourTbl[454][0-6]: 455 465 575 453 443 333 
+		nodeNeighbourTbl[455][0-6]: 456 466 576 454 444 334 
+		nodeNeighbourTbl[456][0-6]: 457 467 577 455 445 335 
+		nodeNeighbourTbl[457][0-6]: 458 468 578 456 446 336 
+		nodeNeighbourTbl[458][0-6]: 459 469 579 457 447 337 
+		nodeNeighbourTbl[459][0-6]: 460 470 580 458 448 338 
+		nodeNeighbourTbl[460][0-6]: 461 471 581 459 449 339 
+		nodeNeighbourTbl[461][0-6]: 1331 472 582 460 450 340 
+		nodeNeighbourTbl[462][0-6]: 463 473 583 1331 451 341 
+		nodeNeighbourTbl[463][0-6]: 464 474 584 462 452 342 
+		nodeNeighbourTbl[464][0-6]: 465 475 585 463 453 343 
+		nodeNeighbourTbl[465][0-6]: 466 476 586 464 454 344 
+		nodeNeighbourTbl[466][0-6]: 467 477 587 465 455 345 
+		nodeNeighbourTbl[467][0-6]: 468 478 588 466 456 346 
+		nodeNeighbourTbl[468][0-6]: 469 479 589 467 457 347 
+		nodeNeighbourTbl[469][0-6]: 470 480 590 468 458 348 
+		nodeNeighbourTbl[470][0-6]: 471 481 591 469 459 349 
+		nodeNeighbourTbl[471][0-6]: 472 482 592 470 460 350 
+		nodeNeighbourTbl[472][0-6]: 1331 483 593 471 461 351 
+		nodeNeighbourTbl[473][0-6]: 474 1331 594 1331 462 352 
+		nodeNeighbourTbl[474][0-6]: 475 1331 595 473 463 353 
+		nodeNeighbourTbl[475][0-6]: 476 1331 596 474 464 354 
+		nodeNeighbourTbl[476][0-6]: 477 1331 597 475 465 355 
+		nodeNeighbourTbl[477][0-6]: 478 1331 598 476 466 356 
+		nodeNeighbourTbl[478][0-6]: 479 1331 599 477 467 357 
+		nodeNeighbourTbl[479][0-6]: 480 1331 600 478 468 358 
+		nodeNeighbourTbl[480][0-6]: 481 1331 601 479 469 359 
+		nodeNeighbourTbl[481][0-6]: 482 1331 602 480 470 360 
+		nodeNeighbourTbl[482][0-6]: 483 1331 603 481 471 361 
+		nodeNeighbourTbl[483][0-6]: 1331 1331 604 482 472 362 
+		nodeNeighbourTbl[484][0-6]: 485 495 605 1331 1331 363 
+		nodeNeighbourTbl[485][0-6]: 486 496 606 484 1331 364 
+		nodeNeighbourTbl[486][0-6]: 487 497 607 485 1331 365 
+		nodeNeighbourTbl[487][0-6]: 488 498 608 486 1331 366 
+		nodeNeighbourTbl[488][0-6]: 489 499 609 487 1331 367 
+		nodeNeighbourTbl[489][0-6]: 490 500 610 488 1331 368 
+		nodeNeighbourTbl[490][0-6]: 491 501 611 489 1331 369 
+		nodeNeighbourTbl[491][0-6]: 492 502 612 490 1331 370 
+		nodeNeighbourTbl[492][0-6]: 493 503 613 491 1331 371 
+		nodeNeighbourTbl[493][0-6]: 494 504 614 492 1331 372 
+		nodeNeighbourTbl[494][0-6]: 1331 505 615 493 1331 373 
+		nodeNeighbourTbl[495][0-6]: 496 506 616 1331 484 374 
+		nodeNeighbourTbl[496][0-6]: 497 507 617 495 485 375 
+		nodeNeighbourTbl[497][0-6]: 498 508 618 496 486 376 
+		nodeNeighbourTbl[498][0-6]: 499 509 619 497 487 377 
+		nodeNeighbourTbl[499][0-6]: 500 510 620 498 488 378 
+		nodeNeighbourTbl[500][0-6]: 501 511 621 499 489 379 
+		nodeNeighbourTbl[501][0-6]: 502 512 622 500 490 380 
+		nodeNeighbourTbl[502][0-6]: 503 513 623 501 491 381 
+		nodeNeighbourTbl[503][0-6]: 504 514 624 502 492 382 
+		nodeNeighbourTbl[504][0-6]: 505 515 625 503 493 383 
+		nodeNeighbourTbl[505][0-6]: 1331 516 626 504 494 384 
+		nodeNeighbourTbl[506][0-6]: 507 517 627 1331 495 385 
+		nodeNeighbourTbl[507][0-6]: 508 518 628 506 496 386 
+		nodeNeighbourTbl[508][0-6]: 509 519 629 507 497 387 
+		nodeNeighbourTbl[509][0-6]: 510 520 630 508 498 388 
+		nodeNeighbourTbl[510][0-6]: 511 521 631 509 499 389 
+		nodeNeighbourTbl[511][0-6]: 512 522 632 510 500 390 
+		nodeNeighbourTbl[512][0-6]: 513 523 633 511 501 391 
+		nodeNeighbourTbl[513][0-6]: 514 524 634 512 502 392 
+		nodeNeighbourTbl[514][0-6]: 515 525 635 513 503 393 
+		nodeNeighbourTbl[515][0-6]: 516 526 636 514 504 394 
+		nodeNeighbourTbl[516][0-6]: 1331 527 637 515 505 395 
+		nodeNeighbourTbl[517][0-6]: 518 528 638 1331 506 396 
+		nodeNeighbourTbl[518][0-6]: 519 529 639 517 507 397 
+		nodeNeighbourTbl[519][0-6]: 520 530 640 518 508 398 
+		nodeNeighbourTbl[520][0-6]: 521 531 641 519 509 399 
+		nodeNeighbourTbl[521][0-6]: 522 532 642 520 510 400 
+		nodeNeighbourTbl[522][0-6]: 523 533 643 521 511 401 
+		nodeNeighbourTbl[523][0-6]: 524 534 644 522 512 402 
+		nodeNeighbourTbl[524][0-6]: 525 535 645 523 513 403 
+		nodeNeighbourTbl[525][0-6]: 526 536 646 524 514 404 
+		nodeNeighbourTbl[526][0-6]: 527 537 647 525 515 405 
+		nodeNeighbourTbl[527][0-6]: 1331 538 648 526 516 406 
+		nodeNeighbourTbl[528][0-6]: 529 539 649 1331 517 407 
+		nodeNeighbourTbl[529][0-6]: 530 540 650 528 518 408 
+		nodeNeighbourTbl[530][0-6]: 531 541 651 529 519 409 
+		nodeNeighbourTbl[531][0-6]: 532 542 652 530 520 410 
+		nodeNeighbourTbl[532][0-6]: 533 543 653 531 521 411 
+		nodeNeighbourTbl[533][0-6]: 534 544 654 532 522 412 
+		nodeNeighbourTbl[534][0-6]: 535 545 655 533 523 413 
+		nodeNeighbourTbl[535][0-6]: 536 546 656 534 524 414 
+		nodeNeighbourTbl[536][0-6]: 537 547 657 535 525 415 
+		nodeNeighbourTbl[537][0-6]: 538 548 658 536 526 416 
+		nodeNeighbourTbl[538][0-6]: 1331 549 659 537 527 417 
+		nodeNeighbourTbl[539][0-6]: 540 550 660 1331 528 418 
+		nodeNeighbourTbl[540][0-6]: 541 551 661 539 529 419 
+		nodeNeighbourTbl[541][0-6]: 542 552 662 540 530 420 
+		nodeNeighbourTbl[542][0-6]: 543 553 663 541 531 421 
+		nodeNeighbourTbl[543][0-6]: 544 554 664 542 532 422 
+		nodeNeighbourTbl[544][0-6]: 545 555 665 543 533 423 
+		nodeNeighbourTbl[545][0-6]: 546 556 666 544 534 424 
+		nodeNeighbourTbl[546][0-6]: 547 557 667 545 535 425 
+		nodeNeighbourTbl[547][0-6]: 548 558 668 546 536 426 
+		nodeNeighbourTbl[548][0-6]: 549 559 669 547 537 427 
+		nodeNeighbourTbl[549][0-6]: 1331 560 670 548 538 428 
+		nodeNeighbourTbl[550][0-6]: 551 561 671 1331 539 429 
+		nodeNeighbourTbl[551][0-6]: 552 562 672 550 540 430 
+		nodeNeighbourTbl[552][0-6]: 553 563 673 551 541 431 
+		nodeNeighbourTbl[553][0-6]: 554 564 674 552 542 432 
+		nodeNeighbourTbl[554][0-6]: 555 565 675 553 543 433 
+		nodeNeighbourTbl[555][0-6]: 556 566 676 554 544 434 
+		nodeNeighbourTbl[556][0-6]: 557 567 677 555 545 435 
+		nodeNeighbourTbl[557][0-6]: 558 568 678 556 546 436 
+		nodeNeighbourTbl[558][0-6]: 559 569 679 557 547 437 
+		nodeNeighbourTbl[559][0-6]: 560 570 680 558 548 438 
+		nodeNeighbourTbl[560][0-6]: 1331 571 681 559 549 439 
+		nodeNeighbourTbl[561][0-6]: 562 572 682 1331 550 440 
+		nodeNeighbourTbl[562][0-6]: 563 573 683 561 551 441 
+		nodeNeighbourTbl[563][0-6]: 564 574 684 562 552 442 
+		nodeNeighbourTbl[564][0-6]: 565 575 685 563 553 443 
+		nodeNeighbourTbl[565][0-6]: 566 576 686 564 554 444 
+		nodeNeighbourTbl[566][0-6]: 567 577 687 565 555 445 
+		nodeNeighbourTbl[567][0-6]: 568 578 688 566 556 446 
+		nodeNeighbourTbl[568][0-6]: 569 579 689 567 557 447 
+		nodeNeighbourTbl[569][0-6]: 570 580 690 568 558 448 
+		nodeNeighbourTbl[570][0-6]: 571 581 691 569 559 449 
+		nodeNeighbourTbl[571][0-6]: 1331 582 692 570 560 450 
+		nodeNeighbourTbl[572][0-6]: 573 583 693 1331 561 451 
+		nodeNeighbourTbl[573][0-6]: 574 584 694 572 562 452 
+		nodeNeighbourTbl[574][0-6]: 575 585 695 573 563 453 
+		nodeNeighbourTbl[575][0-6]: 576 586 696 574 564 454 
+		nodeNeighbourTbl[576][0-6]: 577 587 697 575 565 455 
+		nodeNeighbourTbl[577][0-6]: 578 588 698 576 566 456 
+		nodeNeighbourTbl[578][0-6]: 579 589 699 577 567 457 
+		nodeNeighbourTbl[579][0-6]: 580 590 700 578 568 458 
+		nodeNeighbourTbl[580][0-6]: 581 591 701 579 569 459 
+		nodeNeighbourTbl[581][0-6]: 582 592 702 580 570 460 
+		nodeNeighbourTbl[582][0-6]: 1331 593 703 581 571 461 
+		nodeNeighbourTbl[583][0-6]: 584 594 704 1331 572 462 
+		nodeNeighbourTbl[584][0-6]: 585 595 705 583 573 463 
+		nodeNeighbourTbl[585][0-6]: 586 596 706 584 574 464 
+		nodeNeighbourTbl[586][0-6]: 587 597 707 585 575 465 
+		nodeNeighbourTbl[587][0-6]: 588 598 708 586 576 466 
+		nodeNeighbourTbl[588][0-6]: 589 599 709 587 577 467 
+		nodeNeighbourTbl[589][0-6]: 590 600 710 588 578 468 
+		nodeNeighbourTbl[590][0-6]: 591 601 711 589 579 469 
+		nodeNeighbourTbl[591][0-6]: 592 602 712 590 580 470 
+		nodeNeighbourTbl[592][0-6]: 593 603 713 591 581 471 
+		nodeNeighbourTbl[593][0-6]: 1331 604 714 592 582 472 
+		nodeNeighbourTbl[594][0-6]: 595 1331 715 1331 583 473 
+		nodeNeighbourTbl[595][0-6]: 596 1331 716 594 584 474 
+		nodeNeighbourTbl[596][0-6]: 597 1331 717 595 585 475 
+		nodeNeighbourTbl[597][0-6]: 598 1331 718 596 586 476 
+		nodeNeighbourTbl[598][0-6]: 599 1331 719 597 587 477 
+		nodeNeighbourTbl[599][0-6]: 600 1331 720 598 588 478 
+		nodeNeighbourTbl[600][0-6]: 601 1331 721 599 589 479 
+		nodeNeighbourTbl[601][0-6]: 602 1331 722 600 590 480 
+		nodeNeighbourTbl[602][0-6]: 603 1331 723 601 591 481 
+		nodeNeighbourTbl[603][0-6]: 604 1331 724 602 592 482 
+		nodeNeighbourTbl[604][0-6]: 1331 1331 725 603 593 483 
+		nodeNeighbourTbl[605][0-6]: 606 616 726 1331 1331 484 
+		nodeNeighbourTbl[606][0-6]: 607 617 727 605 1331 485 
+		nodeNeighbourTbl[607][0-6]: 608 618 728 606 1331 486 
+		nodeNeighbourTbl[608][0-6]: 609 619 729 607 1331 487 
+		nodeNeighbourTbl[609][0-6]: 610 620 730 608 1331 488 
+		nodeNeighbourTbl[610][0-6]: 611 621 731 609 1331 489 
+		nodeNeighbourTbl[611][0-6]: 612 622 732 610 1331 490 
+		nodeNeighbourTbl[612][0-6]: 613 623 733 611 1331 491 
+		nodeNeighbourTbl[613][0-6]: 614 624 734 612 1331 492 
+		nodeNeighbourTbl[614][0-6]: 615 625 735 613 1331 493 
+		nodeNeighbourTbl[615][0-6]: 1331 626 736 614 1331 494 
+		nodeNeighbourTbl[616][0-6]: 617 627 737 1331 605 495 
+		nodeNeighbourTbl[617][0-6]: 618 628 738 616 606 496 
+		nodeNeighbourTbl[618][0-6]: 619 629 739 617 607 497 
+		nodeNeighbourTbl[619][0-6]: 620 630 740 618 608 498 
+		nodeNeighbourTbl[620][0-6]: 621 631 741 619 609 499 
+		nodeNeighbourTbl[621][0-6]: 622 632 742 620 610 500 
+		nodeNeighbourTbl[622][0-6]: 623 633 743 621 611 501 
+		nodeNeighbourTbl[623][0-6]: 624 634 744 622 612 502 
+		nodeNeighbourTbl[624][0-6]: 625 635 745 623 613 503 
+		nodeNeighbourTbl[625][0-6]: 626 636 746 624 614 504 
+		nodeNeighbourTbl[626][0-6]: 1331 637 747 625 615 505 
+		nodeNeighbourTbl[627][0-6]: 628 638 748 1331 616 506 
+		nodeNeighbourTbl[628][0-6]: 629 639 749 627 617 507 
+		nodeNeighbourTbl[629][0-6]: 630 640 750 628 618 508 
+		nodeNeighbourTbl[630][0-6]: 631 641 751 629 619 509 
+		nodeNeighbourTbl[631][0-6]: 632 642 752 630 620 510 
+		nodeNeighbourTbl[632][0-6]: 633 643 753 631 621 511 
+		nodeNeighbourTbl[633][0-6]: 634 644 754 632 622 512 
+		nodeNeighbourTbl[634][0-6]: 635 645 755 633 623 513 
+		nodeNeighbourTbl[635][0-6]: 636 646 756 634 624 514 
+		nodeNeighbourTbl[636][0-6]: 637 647 757 635 625 515 
+		nodeNeighbourTbl[637][0-6]: 1331 648 758 636 626 516 
+		nodeNeighbourTbl[638][0-6]: 639 649 759 1331 627 517 
+		nodeNeighbourTbl[639][0-6]: 640 650 760 638 628 518 
+		nodeNeighbourTbl[640][0-6]: 641 651 761 639 629 519 
+		nodeNeighbourTbl[641][0-6]: 642 652 762 640 630 520 
+		nodeNeighbourTbl[642][0-6]: 643 653 763 641 631 521 
+		nodeNeighbourTbl[643][0-6]: 644 654 764 642 632 522 
+		nodeNeighbourTbl[644][0-6]: 645 655 765 643 633 523 
+		nodeNeighbourTbl[645][0-6]: 646 656 766 644 634 524 
+		nodeNeighbourTbl[646][0-6]: 647 657 767 645 635 525 
+		nodeNeighbourTbl[647][0-6]: 648 658 768 646 636 526 
+		nodeNeighbourTbl[648][0-6]: 1331 659 769 647 637 527 
+		nodeNeighbourTbl[649][0-6]: 650 660 770 1331 638 528 
+		nodeNeighbourTbl[650][0-6]: 651 661 771 649 639 529 
+		nodeNeighbourTbl[651][0-6]: 652 662 772 650 640 530 
+		nodeNeighbourTbl[652][0-6]: 653 663 773 651 641 531 
+		nodeNeighbourTbl[653][0-6]: 654 664 774 652 642 532 
+		nodeNeighbourTbl[654][0-6]: 655 665 775 653 643 533 
+		nodeNeighbourTbl[655][0-6]: 656 666 776 654 644 534 
+		nodeNeighbourTbl[656][0-6]: 657 667 777 655 645 535 
+		nodeNeighbourTbl[657][0-6]: 658 668 778 656 646 536 
+		nodeNeighbourTbl[658][0-6]: 659 669 779 657 647 537 
+		nodeNeighbourTbl[659][0-6]: 1331 670 780 658 648 538 
+		nodeNeighbourTbl[660][0-6]: 661 671 781 1331 649 539 
+		nodeNeighbourTbl[661][0-6]: 662 672 782 660 650 540 
+		nodeNeighbourTbl[662][0-6]: 663 673 783 661 651 541 
+		nodeNeighbourTbl[663][0-6]: 664 674 784 662 652 542 
+		nodeNeighbourTbl[664][0-6]: 665 675 785 663 653 543 
+		nodeNeighbourTbl[665][0-6]: 666 676 786 664 654 544 
+		nodeNeighbourTbl[666][0-6]: 667 677 787 665 655 545 
+		nodeNeighbourTbl[667][0-6]: 668 678 788 666 656 546 
+		nodeNeighbourTbl[668][0-6]: 669 679 789 667 657 547 
+		nodeNeighbourTbl[669][0-6]: 670 680 790 668 658 548 
+		nodeNeighbourTbl[670][0-6]: 1331 681 791 669 659 549 
+		nodeNeighbourTbl[671][0-6]: 672 682 792 1331 660 550 
+		nodeNeighbourTbl[672][0-6]: 673 683 793 671 661 551 
+		nodeNeighbourTbl[673][0-6]: 674 684 794 672 662 552 
+		nodeNeighbourTbl[674][0-6]: 675 685 795 673 663 553 
+		nodeNeighbourTbl[675][0-6]: 676 686 796 674 664 554 
+		nodeNeighbourTbl[676][0-6]: 677 687 797 675 665 555 
+		nodeNeighbourTbl[677][0-6]: 678 688 798 676 666 556 
+		nodeNeighbourTbl[678][0-6]: 679 689 799 677 667 557 
+		nodeNeighbourTbl[679][0-6]: 680 690 800 678 668 558 
+		nodeNeighbourTbl[680][0-6]: 681 691 801 679 669 559 
+		nodeNeighbourTbl[681][0-6]: 1331 692 802 680 670 560 
+		nodeNeighbourTbl[682][0-6]: 683 693 803 1331 671 561 
+		nodeNeighbourTbl[683][0-6]: 684 694 804 682 672 562 
+		nodeNeighbourTbl[684][0-6]: 685 695 805 683 673 563 
+		nodeNeighbourTbl[685][0-6]: 686 696 806 684 674 564 
+		nodeNeighbourTbl[686][0-6]: 687 697 807 685 675 565 
+		nodeNeighbourTbl[687][0-6]: 688 698 808 686 676 566 
+		nodeNeighbourTbl[688][0-6]: 689 699 809 687 677 567 
+		nodeNeighbourTbl[689][0-6]: 690 700 810 688 678 568 
+		nodeNeighbourTbl[690][0-6]: 691 701 811 689 679 569 
+		nodeNeighbourTbl[691][0-6]: 692 702 812 690 680 570 
+		nodeNeighbourTbl[692][0-6]: 1331 703 813 691 681 571 
+		nodeNeighbourTbl[693][0-6]: 694 704 814 1331 682 572 
+		nodeNeighbourTbl[694][0-6]: 695 705 815 693 683 573 
+		nodeNeighbourTbl[695][0-6]: 696 706 816 694 684 574 
+		nodeNeighbourTbl[696][0-6]: 697 707 817 695 685 575 
+		nodeNeighbourTbl[697][0-6]: 698 708 818 696 686 576 
+		nodeNeighbourTbl[698][0-6]: 699 709 819 697 687 577 
+		nodeNeighbourTbl[699][0-6]: 700 710 820 698 688 578 
+		nodeNeighbourTbl[700][0-6]: 701 711 821 699 689 579 
+		nodeNeighbourTbl[701][0-6]: 702 712 822 700 690 580 
+		nodeNeighbourTbl[702][0-6]: 703 713 823 701 691 581 
+		nodeNeighbourTbl[703][0-6]: 1331 714 824 702 692 582 
+		nodeNeighbourTbl[704][0-6]: 705 715 825 1331 693 583 
+		nodeNeighbourTbl[705][0-6]: 706 716 826 704 694 584 
+		nodeNeighbourTbl[706][0-6]: 707 717 827 705 695 585 
+		nodeNeighbourTbl[707][0-6]: 708 718 828 706 696 586 
+		nodeNeighbourTbl[708][0-6]: 709 719 829 707 697 587 
+		nodeNeighbourTbl[709][0-6]: 710 720 830 708 698 588 
+		nodeNeighbourTbl[710][0-6]: 711 721 831 709 699 589 
+		nodeNeighbourTbl[711][0-6]: 712 722 832 710 700 590 
+		nodeNeighbourTbl[712][0-6]: 713 723 833 711 701 591 
+		nodeNeighbourTbl[713][0-6]: 714 724 834 712 702 592 
+		nodeNeighbourTbl[714][0-6]: 1331 725 835 713 703 593 
+		nodeNeighbourTbl[715][0-6]: 716 1331 836 1331 704 594 
+		nodeNeighbourTbl[716][0-6]: 717 1331 837 715 705 595 
+		nodeNeighbourTbl[717][0-6]: 718 1331 838 716 706 596 
+		nodeNeighbourTbl[718][0-6]: 719 1331 839 717 707 597 
+		nodeNeighbourTbl[719][0-6]: 720 1331 840 718 708 598 
+		nodeNeighbourTbl[720][0-6]: 721 1331 841 719 709 599 
+		nodeNeighbourTbl[721][0-6]: 722 1331 842 720 710 600 
+		nodeNeighbourTbl[722][0-6]: 723 1331 843 721 711 601 
+		nodeNeighbourTbl[723][0-6]: 724 1331 844 722 712 602 
+		nodeNeighbourTbl[724][0-6]: 725 1331 845 723 713 603 
+		nodeNeighbourTbl[725][0-6]: 1331 1331 846 724 714 604 
+		nodeNeighbourTbl[726][0-6]: 727 737 847 1331 1331 605 
+		nodeNeighbourTbl[727][0-6]: 728 738 848 726 1331 606 
+		nodeNeighbourTbl[728][0-6]: 729 739 849 727 1331 607 
+		nodeNeighbourTbl[729][0-6]: 730 740 850 728 1331 608 
+		nodeNeighbourTbl[730][0-6]: 731 741 851 729 1331 609 
+		nodeNeighbourTbl[731][0-6]: 732 742 852 730 1331 610 
+		nodeNeighbourTbl[732][0-6]: 733 743 853 731 1331 611 
+		nodeNeighbourTbl[733][0-6]: 734 744 854 732 1331 612 
+		nodeNeighbourTbl[734][0-6]: 735 745 855 733 1331 613 
+		nodeNeighbourTbl[735][0-6]: 736 746 856 734 1331 614 
+		nodeNeighbourTbl[736][0-6]: 1331 747 857 735 1331 615 
+		nodeNeighbourTbl[737][0-6]: 738 748 858 1331 726 616 
+		nodeNeighbourTbl[738][0-6]: 739 749 859 737 727 617 
+		nodeNeighbourTbl[739][0-6]: 740 750 860 738 728 618 
+		nodeNeighbourTbl[740][0-6]: 741 751 861 739 729 619 
+		nodeNeighbourTbl[741][0-6]: 742 752 862 740 730 620 
+		nodeNeighbourTbl[742][0-6]: 743 753 863 741 731 621 
+		nodeNeighbourTbl[743][0-6]: 744 754 864 742 732 622 
+		nodeNeighbourTbl[744][0-6]: 745 755 865 743 733 623 
+		nodeNeighbourTbl[745][0-6]: 746 756 866 744 734 624 
+		nodeNeighbourTbl[746][0-6]: 747 757 867 745 735 625 
+		nodeNeighbourTbl[747][0-6]: 1331 758 868 746 736 626 
+		nodeNeighbourTbl[748][0-6]: 749 759 869 1331 737 627 
+		nodeNeighbourTbl[749][0-6]: 750 760 870 748 738 628 
+		nodeNeighbourTbl[750][0-6]: 751 761 871 749 739 629 
+		nodeNeighbourTbl[751][0-6]: 752 762 872 750 740 630 
+		nodeNeighbourTbl[752][0-6]: 753 763 873 751 741 631 
+		nodeNeighbourTbl[753][0-6]: 754 764 874 752 742 632 
+		nodeNeighbourTbl[754][0-6]: 755 765 875 753 743 633 
+		nodeNeighbourTbl[755][0-6]: 756 766 876 754 744 634 
+		nodeNeighbourTbl[756][0-6]: 757 767 877 755 745 635 
+		nodeNeighbourTbl[757][0-6]: 758 768 878 756 746 636 
+		nodeNeighbourTbl[758][0-6]: 1331 769 879 757 747 637 
+		nodeNeighbourTbl[759][0-6]: 760 770 880 1331 748 638 
+		nodeNeighbourTbl[760][0-6]: 761 771 881 759 749 639 
+		nodeNeighbourTbl[761][0-6]: 762 772 882 760 750 640 
+		nodeNeighbourTbl[762][0-6]: 763 773 883 761 751 641 
+		nodeNeighbourTbl[763][0-6]: 764 774 884 762 752 642 
+		nodeNeighbourTbl[764][0-6]: 765 775 885 763 753 643 
+		nodeNeighbourTbl[765][0-6]: 766 776 886 764 754 644 
+		nodeNeighbourTbl[766][0-6]: 767 777 887 765 755 645 
+		nodeNeighbourTbl[767][0-6]: 768 778 888 766 756 646 
+		nodeNeighbourTbl[768][0-6]: 769 779 889 767 757 647 
+		nodeNeighbourTbl[769][0-6]: 1331 780 890 768 758 648 
+		nodeNeighbourTbl[770][0-6]: 771 781 891 1331 759 649 
+		nodeNeighbourTbl[771][0-6]: 772 782 892 770 760 650 
+		nodeNeighbourTbl[772][0-6]: 773 783 893 771 761 651 
+		nodeNeighbourTbl[773][0-6]: 774 784 894 772 762 652 
+		nodeNeighbourTbl[774][0-6]: 775 785 895 773 763 653 
+		nodeNeighbourTbl[775][0-6]: 776 786 896 774 764 654 
+		nodeNeighbourTbl[776][0-6]: 777 787 897 775 765 655 
+		nodeNeighbourTbl[777][0-6]: 778 788 898 776 766 656 
+		nodeNeighbourTbl[778][0-6]: 779 789 899 777 767 657 
+		nodeNeighbourTbl[779][0-6]: 780 790 900 778 768 658 
+		nodeNeighbourTbl[780][0-6]: 1331 791 901 779 769 659 
+		nodeNeighbourTbl[781][0-6]: 782 792 902 1331 770 660 
+		nodeNeighbourTbl[782][0-6]: 783 793 903 781 771 661 
+		nodeNeighbourTbl[783][0-6]: 784 794 904 782 772 662 
+		nodeNeighbourTbl[784][0-6]: 785 795 905 783 773 663 
+		nodeNeighbourTbl[785][0-6]: 786 796 906 784 774 664 
+		nodeNeighbourTbl[786][0-6]: 787 797 907 785 775 665 
+		nodeNeighbourTbl[787][0-6]: 788 798 908 786 776 666 
+		nodeNeighbourTbl[788][0-6]: 789 799 909 787 777 667 
+		nodeNeighbourTbl[789][0-6]: 790 800 910 788 778 668 
+		nodeNeighbourTbl[790][0-6]: 791 801 911 789 779 669 
+		nodeNeighbourTbl[791][0-6]: 1331 802 912 790 780 670 
+		nodeNeighbourTbl[792][0-6]: 793 803 913 1331 781 671 
+		nodeNeighbourTbl[793][0-6]: 794 804 914 792 782 672 
+		nodeNeighbourTbl[794][0-6]: 795 805 915 793 783 673 
+		nodeNeighbourTbl[795][0-6]: 796 806 916 794 784 674 
+		nodeNeighbourTbl[796][0-6]: 797 807 917 795 785 675 
+		nodeNeighbourTbl[797][0-6]: 798 808 918 796 786 676 
+		nodeNeighbourTbl[798][0-6]: 799 809 919 797 787 677 
+		nodeNeighbourTbl[799][0-6]: 800 810 920 798 788 678 
+		nodeNeighbourTbl[800][0-6]: 801 811 921 799 789 679 
+		nodeNeighbourTbl[801][0-6]: 802 812 922 800 790 680 
+		nodeNeighbourTbl[802][0-6]: 1331 813 923 801 791 681 
+		nodeNeighbourTbl[803][0-6]: 804 814 924 1331 792 682 
+		nodeNeighbourTbl[804][0-6]: 805 815 925 803 793 683 
+		nodeNeighbourTbl[805][0-6]: 806 816 926 804 794 684 
+		nodeNeighbourTbl[806][0-6]: 807 817 927 805 795 685 
+		nodeNeighbourTbl[807][0-6]: 808 818 928 806 796 686 
+		nodeNeighbourTbl[808][0-6]: 809 819 929 807 797 687 
+		nodeNeighbourTbl[809][0-6]: 810 820 930 808 798 688 
+		nodeNeighbourTbl[810][0-6]: 811 821 931 809 799 689 
+		nodeNeighbourTbl[811][0-6]: 812 822 932 810 800 690 
+		nodeNeighbourTbl[812][0-6]: 813 823 933 811 801 691 
+		nodeNeighbourTbl[813][0-6]: 1331 824 934 812 802 692 
+		nodeNeighbourTbl[814][0-6]: 815 825 935 1331 803 693 
+		nodeNeighbourTbl[815][0-6]: 816 826 936 814 804 694 
+		nodeNeighbourTbl[816][0-6]: 817 827 937 815 805 695 
+		nodeNeighbourTbl[817][0-6]: 818 828 938 816 806 696 
+		nodeNeighbourTbl[818][0-6]: 819 829 939 817 807 697 
+		nodeNeighbourTbl[819][0-6]: 820 830 940 818 808 698 
+		nodeNeighbourTbl[820][0-6]: 821 831 941 819 809 699 
+		nodeNeighbourTbl[821][0-6]: 822 832 942 820 810 700 
+		nodeNeighbourTbl[822][0-6]: 823 833 943 821 811 701 
+		nodeNeighbourTbl[823][0-6]: 824 834 944 822 812 702 
+		nodeNeighbourTbl[824][0-6]: 1331 835 945 823 813 703 
+		nodeNeighbourTbl[825][0-6]: 826 836 946 1331 814 704 
+		nodeNeighbourTbl[826][0-6]: 827 837 947 825 815 705 
+		nodeNeighbourTbl[827][0-6]: 828 838 948 826 816 706 
+		nodeNeighbourTbl[828][0-6]: 829 839 949 827 817 707 
+		nodeNeighbourTbl[829][0-6]: 830 840 950 828 818 708 
+		nodeNeighbourTbl[830][0-6]: 831 841 951 829 819 709 
+		nodeNeighbourTbl[831][0-6]: 832 842 952 830 820 710 
+		nodeNeighbourTbl[832][0-6]: 833 843 953 831 821 711 
+		nodeNeighbourTbl[833][0-6]: 834 844 954 832 822 712 
+		nodeNeighbourTbl[834][0-6]: 835 845 955 833 823 713 
+		nodeNeighbourTbl[835][0-6]: 1331 846 956 834 824 714 
+		nodeNeighbourTbl[836][0-6]: 837 1331 957 1331 825 715 
+		nodeNeighbourTbl[837][0-6]: 838 1331 958 836 826 716 
+		nodeNeighbourTbl[838][0-6]: 839 1331 959 837 827 717 
+		nodeNeighbourTbl[839][0-6]: 840 1331 960 838 828 718 
+		nodeNeighbourTbl[840][0-6]: 841 1331 961 839 829 719 
+		nodeNeighbourTbl[841][0-6]: 842 1331 962 840 830 720 
+		nodeNeighbourTbl[842][0-6]: 843 1331 963 841 831 721 
+		nodeNeighbourTbl[843][0-6]: 844 1331 964 842 832 722 
+		nodeNeighbourTbl[844][0-6]: 845 1331 965 843 833 723 
+		nodeNeighbourTbl[845][0-6]: 846 1331 966 844 834 724 
+		nodeNeighbourTbl[846][0-6]: 1331 1331 967 845 835 725 
+		nodeNeighbourTbl[847][0-6]: 848 858 968 1331 1331 726 
+		nodeNeighbourTbl[848][0-6]: 849 859 969 847 1331 727 
+		nodeNeighbourTbl[849][0-6]: 850 860 970 848 1331 728 
+		nodeNeighbourTbl[850][0-6]: 851 861 971 849 1331 729 
+		nodeNeighbourTbl[851][0-6]: 852 862 972 850 1331 730 
+		nodeNeighbourTbl[852][0-6]: 853 863 973 851 1331 731 
+		nodeNeighbourTbl[853][0-6]: 854 864 974 852 1331 732 
+		nodeNeighbourTbl[854][0-6]: 855 865 975 853 1331 733 
+		nodeNeighbourTbl[855][0-6]: 856 866 976 854 1331 734 
+		nodeNeighbourTbl[856][0-6]: 857 867 977 855 1331 735 
+		nodeNeighbourTbl[857][0-6]: 1331 868 978 856 1331 736 
+		nodeNeighbourTbl[858][0-6]: 859 869 979 1331 847 737 
+		nodeNeighbourTbl[859][0-6]: 860 870 980 858 848 738 
+		nodeNeighbourTbl[860][0-6]: 861 871 981 859 849 739 
+		nodeNeighbourTbl[861][0-6]: 862 872 982 860 850 740 
+		nodeNeighbourTbl[862][0-6]: 863 873 983 861 851 741 
+		nodeNeighbourTbl[863][0-6]: 864 874 984 862 852 742 
+		nodeNeighbourTbl[864][0-6]: 865 875 985 863 853 743 
+		nodeNeighbourTbl[865][0-6]: 866 876 986 864 854 744 
+		nodeNeighbourTbl[866][0-6]: 867 877 987 865 855 745 
+		nodeNeighbourTbl[867][0-6]: 868 878 988 866 856 746 
+		nodeNeighbourTbl[868][0-6]: 1331 879 989 867 857 747 
+		nodeNeighbourTbl[869][0-6]: 870 880 990 1331 858 748 
+		nodeNeighbourTbl[870][0-6]: 871 881 991 869 859 749 
+		nodeNeighbourTbl[871][0-6]: 872 882 992 870 860 750 
+		nodeNeighbourTbl[872][0-6]: 873 883 993 871 861 751 
+		nodeNeighbourTbl[873][0-6]: 874 884 994 872 862 752 
+		nodeNeighbourTbl[874][0-6]: 875 885 995 873 863 753 
+		nodeNeighbourTbl[875][0-6]: 876 886 996 874 864 754 
+		nodeNeighbourTbl[876][0-6]: 877 887 997 875 865 755 
+		nodeNeighbourTbl[877][0-6]: 878 888 998 876 866 756 
+		nodeNeighbourTbl[878][0-6]: 879 889 999 877 867 757 
+		nodeNeighbourTbl[879][0-6]: 1331 890 1000 878 868 758 
+		nodeNeighbourTbl[880][0-6]: 881 891 1001 1331 869 759 
+		nodeNeighbourTbl[881][0-6]: 882 892 1002 880 870 760 
+		nodeNeighbourTbl[882][0-6]: 883 893 1003 881 871 761 
+		nodeNeighbourTbl[883][0-6]: 884 894 1004 882 872 762 
+		nodeNeighbourTbl[884][0-6]: 885 895 1005 883 873 763 
+		nodeNeighbourTbl[885][0-6]: 886 896 1006 884 874 764 
+		nodeNeighbourTbl[886][0-6]: 887 897 1007 885 875 765 
+		nodeNeighbourTbl[887][0-6]: 888 898 1008 886 876 766 
+		nodeNeighbourTbl[888][0-6]: 889 899 1009 887 877 767 
+		nodeNeighbourTbl[889][0-6]: 890 900 1010 888 878 768 
+		nodeNeighbourTbl[890][0-6]: 1331 901 1011 889 879 769 
+		nodeNeighbourTbl[891][0-6]: 892 902 1012 1331 880 770 
+		nodeNeighbourTbl[892][0-6]: 893 903 1013 891 881 771 
+		nodeNeighbourTbl[893][0-6]: 894 904 1014 892 882 772 
+		nodeNeighbourTbl[894][0-6]: 895 905 1015 893 883 773 
+		nodeNeighbourTbl[895][0-6]: 896 906 1016 894 884 774 
+		nodeNeighbourTbl[896][0-6]: 897 907 1017 895 885 775 
+		nodeNeighbourTbl[897][0-6]: 898 908 1018 896 886 776 
+		nodeNeighbourTbl[898][0-6]: 899 909 1019 897 887 777 
+		nodeNeighbourTbl[899][0-6]: 900 910 1020 898 888 778 
+		nodeNeighbourTbl[900][0-6]: 901 911 1021 899 889 779 
+		nodeNeighbourTbl[901][0-6]: 1331 912 1022 900 890 780 
+		nodeNeighbourTbl[902][0-6]: 903 913 1023 1331 891 781 
+		nodeNeighbourTbl[903][0-6]: 904 914 1024 902 892 782 
+		nodeNeighbourTbl[904][0-6]: 905 915 1025 903 893 783 
+		nodeNeighbourTbl[905][0-6]: 906 916 1026 904 894 784 
+		nodeNeighbourTbl[906][0-6]: 907 917 1027 905 895 785 
+		nodeNeighbourTbl[907][0-6]: 908 918 1028 906 896 786 
+		nodeNeighbourTbl[908][0-6]: 909 919 1029 907 897 787 
+		nodeNeighbourTbl[909][0-6]: 910 920 1030 908 898 788 
+		nodeNeighbourTbl[910][0-6]: 911 921 1031 909 899 789 
+		nodeNeighbourTbl[911][0-6]: 912 922 1032 910 900 790 
+		nodeNeighbourTbl[912][0-6]: 1331 923 1033 911 901 791 
+		nodeNeighbourTbl[913][0-6]: 914 924 1034 1331 902 792 
+		nodeNeighbourTbl[914][0-6]: 915 925 1035 913 903 793 
+		nodeNeighbourTbl[915][0-6]: 916 926 1036 914 904 794 
+		nodeNeighbourTbl[916][0-6]: 917 927 1037 915 905 795 
+		nodeNeighbourTbl[917][0-6]: 918 928 1038 916 906 796 
+		nodeNeighbourTbl[918][0-6]: 919 929 1039 917 907 797 
+		nodeNeighbourTbl[919][0-6]: 920 930 1040 918 908 798 
+		nodeNeighbourTbl[920][0-6]: 921 931 1041 919 909 799 
+		nodeNeighbourTbl[921][0-6]: 922 932 1042 920 910 800 
+		nodeNeighbourTbl[922][0-6]: 923 933 1043 921 911 801 
+		nodeNeighbourTbl[923][0-6]: 1331 934 1044 922 912 802 
+		nodeNeighbourTbl[924][0-6]: 925 935 1045 1331 913 803 
+		nodeNeighbourTbl[925][0-6]: 926 936 1046 924 914 804 
+		nodeNeighbourTbl[926][0-6]: 927 937 1047 925 915 805 
+		nodeNeighbourTbl[927][0-6]: 928 938 1048 926 916 806 
+		nodeNeighbourTbl[928][0-6]: 929 939 1049 927 917 807 
+		nodeNeighbourTbl[929][0-6]: 930 940 1050 928 918 808 
+		nodeNeighbourTbl[930][0-6]: 931 941 1051 929 919 809 
+		nodeNeighbourTbl[931][0-6]: 932 942 1052 930 920 810 
+		nodeNeighbourTbl[932][0-6]: 933 943 1053 931 921 811 
+		nodeNeighbourTbl[933][0-6]: 934 944 1054 932 922 812 
+		nodeNeighbourTbl[934][0-6]: 1331 945 1055 933 923 813 
+		nodeNeighbourTbl[935][0-6]: 936 946 1056 1331 924 814 
+		nodeNeighbourTbl[936][0-6]: 937 947 1057 935 925 815 
+		nodeNeighbourTbl[937][0-6]: 938 948 1058 936 926 816 
+		nodeNeighbourTbl[938][0-6]: 939 949 1059 937 927 817 
+		nodeNeighbourTbl[939][0-6]: 940 950 1060 938 928 818 
+		nodeNeighbourTbl[940][0-6]: 941 951 1061 939 929 819 
+		nodeNeighbourTbl[941][0-6]: 942 952 1062 940 930 820 
+		nodeNeighbourTbl[942][0-6]: 943 953 1063 941 931 821 
+		nodeNeighbourTbl[943][0-6]: 944 954 1064 942 932 822 
+		nodeNeighbourTbl[944][0-6]: 945 955 1065 943 933 823 
+		nodeNeighbourTbl[945][0-6]: 1331 956 1066 944 934 824 
+		nodeNeighbourTbl[946][0-6]: 947 957 1067 1331 935 825 
+		nodeNeighbourTbl[947][0-6]: 948 958 1068 946 936 826 
+		nodeNeighbourTbl[948][0-6]: 949 959 1069 947 937 827 
+		nodeNeighbourTbl[949][0-6]: 950 960 1070 948 938 828 
+		nodeNeighbourTbl[950][0-6]: 951 961 1071 949 939 829 
+		nodeNeighbourTbl[951][0-6]: 952 962 1072 950 940 830 
+		nodeNeighbourTbl[952][0-6]: 953 963 1073 951 941 831 
+		nodeNeighbourTbl[953][0-6]: 954 964 1074 952 942 832 
+		nodeNeighbourTbl[954][0-6]: 955 965 1075 953 943 833 
+		nodeNeighbourTbl[955][0-6]: 956 966 1076 954 944 834 
+		nodeNeighbourTbl[956][0-6]: 1331 967 1077 955 945 835 
+		nodeNeighbourTbl[957][0-6]: 958 1331 1078 1331 946 836 
+		nodeNeighbourTbl[958][0-6]: 959 1331 1079 957 947 837 
+		nodeNeighbourTbl[959][0-6]: 960 1331 1080 958 948 838 
+		nodeNeighbourTbl[960][0-6]: 961 1331 1081 959 949 839 
+		nodeNeighbourTbl[961][0-6]: 962 1331 1082 960 950 840 
+		nodeNeighbourTbl[962][0-6]: 963 1331 1083 961 951 841 
+		nodeNeighbourTbl[963][0-6]: 964 1331 1084 962 952 842 
+		nodeNeighbourTbl[964][0-6]: 965 1331 1085 963 953 843 
+		nodeNeighbourTbl[965][0-6]: 966 1331 1086 964 954 844 
+		nodeNeighbourTbl[966][0-6]: 967 1331 1087 965 955 845 
+		nodeNeighbourTbl[967][0-6]: 1331 1331 1088 966 956 846 
+		nodeNeighbourTbl[968][0-6]: 969 979 1089 1331 1331 847 
+		nodeNeighbourTbl[969][0-6]: 970 980 1090 968 1331 848 
+		nodeNeighbourTbl[970][0-6]: 971 981 1091 969 1331 849 
+		nodeNeighbourTbl[971][0-6]: 972 982 1092 970 1331 850 
+		nodeNeighbourTbl[972][0-6]: 973 983 1093 971 1331 851 
+		nodeNeighbourTbl[973][0-6]: 974 984 1094 972 1331 852 
+		nodeNeighbourTbl[974][0-6]: 975 985 1095 973 1331 853 
+		nodeNeighbourTbl[975][0-6]: 976 986 1096 974 1331 854 
+		nodeNeighbourTbl[976][0-6]: 977 987 1097 975 1331 855 
+		nodeNeighbourTbl[977][0-6]: 978 988 1098 976 1331 856 
+		nodeNeighbourTbl[978][0-6]: 1331 989 1099 977 1331 857 
+		nodeNeighbourTbl[979][0-6]: 980 990 1100 1331 968 858 
+		nodeNeighbourTbl[980][0-6]: 981 991 1101 979 969 859 
+		nodeNeighbourTbl[981][0-6]: 982 992 1102 980 970 860 
+		nodeNeighbourTbl[982][0-6]: 983 993 1103 981 971 861 
+		nodeNeighbourTbl[983][0-6]: 984 994 1104 982 972 862 
+		nodeNeighbourTbl[984][0-6]: 985 995 1105 983 973 863 
+		nodeNeighbourTbl[985][0-6]: 986 996 1106 984 974 864 
+		nodeNeighbourTbl[986][0-6]: 987 997 1107 985 975 865 
+		nodeNeighbourTbl[987][0-6]: 988 998 1108 986 976 866 
+		nodeNeighbourTbl[988][0-6]: 989 999 1109 987 977 867 
+		nodeNeighbourTbl[989][0-6]: 1331 1000 1110 988 978 868 
+		nodeNeighbourTbl[990][0-6]: 991 1001 1111 1331 979 869 
+		nodeNeighbourTbl[991][0-6]: 992 1002 1112 990 980 870 
+		nodeNeighbourTbl[992][0-6]: 993 1003 1113 991 981 871 
+		nodeNeighbourTbl[993][0-6]: 994 1004 1114 992 982 872 
+		nodeNeighbourTbl[994][0-6]: 995 1005 1115 993 983 873 
+		nodeNeighbourTbl[995][0-6]: 996 1006 1116 994 984 874 
+		nodeNeighbourTbl[996][0-6]: 997 1007 1117 995 985 875 
+		nodeNeighbourTbl[997][0-6]: 998 1008 1118 996 986 876 
+		nodeNeighbourTbl[998][0-6]: 999 1009 1119 997 987 877 
+		nodeNeighbourTbl[999][0-6]: 1000 1010 1120 998 988 878 
+		nodeNeighbourTbl[1000][0-6]: 1331 1011 1121 999 989 879 
+		nodeNeighbourTbl[1001][0-6]: 1002 1012 1122 1331 990 880 
+		nodeNeighbourTbl[1002][0-6]: 1003 1013 1123 1001 991 881 
+		nodeNeighbourTbl[1003][0-6]: 1004 1014 1124 1002 992 882 
+		nodeNeighbourTbl[1004][0-6]: 1005 1015 1125 1003 993 883 
+		nodeNeighbourTbl[1005][0-6]: 1006 1016 1126 1004 994 884 
+		nodeNeighbourTbl[1006][0-6]: 1007 1017 1127 1005 995 885 
+		nodeNeighbourTbl[1007][0-6]: 1008 1018 1128 1006 996 886 
+		nodeNeighbourTbl[1008][0-6]: 1009 1019 1129 1007 997 887 
+		nodeNeighbourTbl[1009][0-6]: 1010 1020 1130 1008 998 888 
+		nodeNeighbourTbl[1010][0-6]: 1011 1021 1131 1009 999 889 
+		nodeNeighbourTbl[1011][0-6]: 1331 1022 1132 1010 1000 890 
+		nodeNeighbourTbl[1012][0-6]: 1013 1023 1133 1331 1001 891 
+		nodeNeighbourTbl[1013][0-6]: 1014 1024 1134 1012 1002 892 
+		nodeNeighbourTbl[1014][0-6]: 1015 1025 1135 1013 1003 893 
+		nodeNeighbourTbl[1015][0-6]: 1016 1026 1136 1014 1004 894 
+		nodeNeighbourTbl[1016][0-6]: 1017 1027 1137 1015 1005 895 
+		nodeNeighbourTbl[1017][0-6]: 1018 1028 1138 1016 1006 896 
+		nodeNeighbourTbl[1018][0-6]: 1019 1029 1139 1017 1007 897 
+		nodeNeighbourTbl[1019][0-6]: 1020 1030 1140 1018 1008 898 
+		nodeNeighbourTbl[1020][0-6]: 1021 1031 1141 1019 1009 899 
+		nodeNeighbourTbl[1021][0-6]: 1022 1032 1142 1020 1010 900 
+		nodeNeighbourTbl[1022][0-6]: 1331 1033 1143 1021 1011 901 
+		nodeNeighbourTbl[1023][0-6]: 1024 1034 1144 1331 1012 902 
+		nodeNeighbourTbl[1024][0-6]: 1025 1035 1145 1023 1013 903 
+		nodeNeighbourTbl[1025][0-6]: 1026 1036 1146 1024 1014 904 
+		nodeNeighbourTbl[1026][0-6]: 1027 1037 1147 1025 1015 905 
+		nodeNeighbourTbl[1027][0-6]: 1028 1038 1148 1026 1016 906 
+		nodeNeighbourTbl[1028][0-6]: 1029 1039 1149 1027 1017 907 
+		nodeNeighbourTbl[1029][0-6]: 1030 1040 1150 1028 1018 908 
+		nodeNeighbourTbl[1030][0-6]: 1031 1041 1151 1029 1019 909 
+		nodeNeighbourTbl[1031][0-6]: 1032 1042 1152 1030 1020 910 
+		nodeNeighbourTbl[1032][0-6]: 1033 1043 1153 1031 1021 911 
+		nodeNeighbourTbl[1033][0-6]: 1331 1044 1154 1032 1022 912 
+		nodeNeighbourTbl[1034][0-6]: 1035 1045 1155 1331 1023 913 
+		nodeNeighbourTbl[1035][0-6]: 1036 1046 1156 1034 1024 914 
+		nodeNeighbourTbl[1036][0-6]: 1037 1047 1157 1035 1025 915 
+		nodeNeighbourTbl[1037][0-6]: 1038 1048 1158 1036 1026 916 
+		nodeNeighbourTbl[1038][0-6]: 1039 1049 1159 1037 1027 917 
+		nodeNeighbourTbl[1039][0-6]: 1040 1050 1160 1038 1028 918 
+		nodeNeighbourTbl[1040][0-6]: 1041 1051 1161 1039 1029 919 
+		nodeNeighbourTbl[1041][0-6]: 1042 1052 1162 1040 1030 920 
+		nodeNeighbourTbl[1042][0-6]: 1043 1053 1163 1041 1031 921 
+		nodeNeighbourTbl[1043][0-6]: 1044 1054 1164 1042 1032 922 
+		nodeNeighbourTbl[1044][0-6]: 1331 1055 1165 1043 1033 923 
+		nodeNeighbourTbl[1045][0-6]: 1046 1056 1166 1331 1034 924 
+		nodeNeighbourTbl[1046][0-6]: 1047 1057 1167 1045 1035 925 
+		nodeNeighbourTbl[1047][0-6]: 1048 1058 1168 1046 1036 926 
+		nodeNeighbourTbl[1048][0-6]: 1049 1059 1169 1047 1037 927 
+		nodeNeighbourTbl[1049][0-6]: 1050 1060 1170 1048 1038 928 
+		nodeNeighbourTbl[1050][0-6]: 1051 1061 1171 1049 1039 929 
+		nodeNeighbourTbl[1051][0-6]: 1052 1062 1172 1050 1040 930 
+		nodeNeighbourTbl[1052][0-6]: 1053 1063 1173 1051 1041 931 
+		nodeNeighbourTbl[1053][0-6]: 1054 1064 1174 1052 1042 932 
+		nodeNeighbourTbl[1054][0-6]: 1055 1065 1175 1053 1043 933 
+		nodeNeighbourTbl[1055][0-6]: 1331 1066 1176 1054 1044 934 
+		nodeNeighbourTbl[1056][0-6]: 1057 1067 1177 1331 1045 935 
+		nodeNeighbourTbl[1057][0-6]: 1058 1068 1178 1056 1046 936 
+		nodeNeighbourTbl[1058][0-6]: 1059 1069 1179 1057 1047 937 
+		nodeNeighbourTbl[1059][0-6]: 1060 1070 1180 1058 1048 938 
+		nodeNeighbourTbl[1060][0-6]: 1061 1071 1181 1059 1049 939 
+		nodeNeighbourTbl[1061][0-6]: 1062 1072 1182 1060 1050 940 
+		nodeNeighbourTbl[1062][0-6]: 1063 1073 1183 1061 1051 941 
+		nodeNeighbourTbl[1063][0-6]: 1064 1074 1184 1062 1052 942 
+		nodeNeighbourTbl[1064][0-6]: 1065 1075 1185 1063 1053 943 
+		nodeNeighbourTbl[1065][0-6]: 1066 1076 1186 1064 1054 944 
+		nodeNeighbourTbl[1066][0-6]: 1331 1077 1187 1065 1055 945 
+		nodeNeighbourTbl[1067][0-6]: 1068 1078 1188 1331 1056 946 
+		nodeNeighbourTbl[1068][0-6]: 1069 1079 1189 1067 1057 947 
+		nodeNeighbourTbl[1069][0-6]: 1070 1080 1190 1068 1058 948 
+		nodeNeighbourTbl[1070][0-6]: 1071 1081 1191 1069 1059 949 
+		nodeNeighbourTbl[1071][0-6]: 1072 1082 1192 1070 1060 950 
+		nodeNeighbourTbl[1072][0-6]: 1073 1083 1193 1071 1061 951 
+		nodeNeighbourTbl[1073][0-6]: 1074 1084 1194 1072 1062 952 
+		nodeNeighbourTbl[1074][0-6]: 1075 1085 1195 1073 1063 953 
+		nodeNeighbourTbl[1075][0-6]: 1076 1086 1196 1074 1064 954 
+		nodeNeighbourTbl[1076][0-6]: 1077 1087 1197 1075 1065 955 
+		nodeNeighbourTbl[1077][0-6]: 1331 1088 1198 1076 1066 956 
+		nodeNeighbourTbl[1078][0-6]: 1079 1331 1199 1331 1067 957 
+		nodeNeighbourTbl[1079][0-6]: 1080 1331 1200 1078 1068 958 
+		nodeNeighbourTbl[1080][0-6]: 1081 1331 1201 1079 1069 959 
+		nodeNeighbourTbl[1081][0-6]: 1082 1331 1202 1080 1070 960 
+		nodeNeighbourTbl[1082][0-6]: 1083 1331 1203 1081 1071 961 
+		nodeNeighbourTbl[1083][0-6]: 1084 1331 1204 1082 1072 962 
+		nodeNeighbourTbl[1084][0-6]: 1085 1331 1205 1083 1073 963 
+		nodeNeighbourTbl[1085][0-6]: 1086 1331 1206 1084 1074 964 
+		nodeNeighbourTbl[1086][0-6]: 1087 1331 1207 1085 1075 965 
+		nodeNeighbourTbl[1087][0-6]: 1088 1331 1208 1086 1076 966 
+		nodeNeighbourTbl[1088][0-6]: 1331 1331 1209 1087 1077 967 
+		nodeNeighbourTbl[1089][0-6]: 1090 1100 1210 1331 1331 968 
+		nodeNeighbourTbl[1090][0-6]: 1091 1101 1211 1089 1331 969 
+		nodeNeighbourTbl[1091][0-6]: 1092 1102 1212 1090 1331 970 
+		nodeNeighbourTbl[1092][0-6]: 1093 1103 1213 1091 1331 971 
+		nodeNeighbourTbl[1093][0-6]: 1094 1104 1214 1092 1331 972 
+		nodeNeighbourTbl[1094][0-6]: 1095 1105 1215 1093 1331 973 
+		nodeNeighbourTbl[1095][0-6]: 1096 1106 1216 1094 1331 974 
+		nodeNeighbourTbl[1096][0-6]: 1097 1107 1217 1095 1331 975 
+		nodeNeighbourTbl[1097][0-6]: 1098 1108 1218 1096 1331 976 
+		nodeNeighbourTbl[1098][0-6]: 1099 1109 1219 1097 1331 977 
+		nodeNeighbourTbl[1099][0-6]: 1331 1110 1220 1098 1331 978 
+		nodeNeighbourTbl[1100][0-6]: 1101 1111 1221 1331 1089 979 
+		nodeNeighbourTbl[1101][0-6]: 1102 1112 1222 1100 1090 980 
+		nodeNeighbourTbl[1102][0-6]: 1103 1113 1223 1101 1091 981 
+		nodeNeighbourTbl[1103][0-6]: 1104 1114 1224 1102 1092 982 
+		nodeNeighbourTbl[1104][0-6]: 1105 1115 1225 1103 1093 983 
+		nodeNeighbourTbl[1105][0-6]: 1106 1116 1226 1104 1094 984 
+		nodeNeighbourTbl[1106][0-6]: 1107 1117 1227 1105 1095 985 
+		nodeNeighbourTbl[1107][0-6]: 1108 1118 1228 1106 1096 986 
+		nodeNeighbourTbl[1108][0-6]: 1109 1119 1229 1107 1097 987 
+		nodeNeighbourTbl[1109][0-6]: 1110 1120 1230 1108 1098 988 
+		nodeNeighbourTbl[1110][0-6]: 1331 1121 1231 1109 1099 989 
+		nodeNeighbourTbl[1111][0-6]: 1112 1122 1232 1331 1100 990 
+		nodeNeighbourTbl[1112][0-6]: 1113 1123 1233 1111 1101 991 
+		nodeNeighbourTbl[1113][0-6]: 1114 1124 1234 1112 1102 992 
+		nodeNeighbourTbl[1114][0-6]: 1115 1125 1235 1113 1103 993 
+		nodeNeighbourTbl[1115][0-6]: 1116 1126 1236 1114 1104 994 
+		nodeNeighbourTbl[1116][0-6]: 1117 1127 1237 1115 1105 995 
+		nodeNeighbourTbl[1117][0-6]: 1118 1128 1238 1116 1106 996 
+		nodeNeighbourTbl[1118][0-6]: 1119 1129 1239 1117 1107 997 
+		nodeNeighbourTbl[1119][0-6]: 1120 1130 1240 1118 1108 998 
+		nodeNeighbourTbl[1120][0-6]: 1121 1131 1241 1119 1109 999 
+		nodeNeighbourTbl[1121][0-6]: 1331 1132 1242 1120 1110 1000 
+		nodeNeighbourTbl[1122][0-6]: 1123 1133 1243 1331 1111 1001 
+		nodeNeighbourTbl[1123][0-6]: 1124 1134 1244 1122 1112 1002 
+		nodeNeighbourTbl[1124][0-6]: 1125 1135 1245 1123 1113 1003 
+		nodeNeighbourTbl[1125][0-6]: 1126 1136 1246 1124 1114 1004 
+		nodeNeighbourTbl[1126][0-6]: 1127 1137 1247 1125 1115 1005 
+		nodeNeighbourTbl[1127][0-6]: 1128 1138 1248 1126 1116 1006 
+		nodeNeighbourTbl[1128][0-6]: 1129 1139 1249 1127 1117 1007 
+		nodeNeighbourTbl[1129][0-6]: 1130 1140 1250 1128 1118 1008 
+		nodeNeighbourTbl[1130][0-6]: 1131 1141 1251 1129 1119 1009 
+		nodeNeighbourTbl[1131][0-6]: 1132 1142 1252 1130 1120 1010 
+		nodeNeighbourTbl[1132][0-6]: 1331 1143 1253 1131 1121 1011 
+		nodeNeighbourTbl[1133][0-6]: 1134 1144 1254 1331 1122 1012 
+		nodeNeighbourTbl[1134][0-6]: 1135 1145 1255 1133 1123 1013 
+		nodeNeighbourTbl[1135][0-6]: 1136 1146 1256 1134 1124 1014 
+		nodeNeighbourTbl[1136][0-6]: 1137 1147 1257 1135 1125 1015 
+		nodeNeighbourTbl[1137][0-6]: 1138 1148 1258 1136 1126 1016 
+		nodeNeighbourTbl[1138][0-6]: 1139 1149 1259 1137 1127 1017 
+		nodeNeighbourTbl[1139][0-6]: 1140 1150 1260 1138 1128 1018 
+		nodeNeighbourTbl[1140][0-6]: 1141 1151 1261 1139 1129 1019 
+		nodeNeighbourTbl[1141][0-6]: 1142 1152 1262 1140 1130 1020 
+		nodeNeighbourTbl[1142][0-6]: 1143 1153 1263 1141 1131 1021 
+		nodeNeighbourTbl[1143][0-6]: 1331 1154 1264 1142 1132 1022 
+		nodeNeighbourTbl[1144][0-6]: 1145 1155 1265 1331 1133 1023 
+		nodeNeighbourTbl[1145][0-6]: 1146 1156 1266 1144 1134 1024 
+		nodeNeighbourTbl[1146][0-6]: 1147 1157 1267 1145 1135 1025 
+		nodeNeighbourTbl[1147][0-6]: 1148 1158 1268 1146 1136 1026 
+		nodeNeighbourTbl[1148][0-6]: 1149 1159 1269 1147 1137 1027 
+		nodeNeighbourTbl[1149][0-6]: 1150 1160 1270 1148 1138 1028 
+		nodeNeighbourTbl[1150][0-6]: 1151 1161 1271 1149 1139 1029 
+		nodeNeighbourTbl[1151][0-6]: 1152 1162 1272 1150 1140 1030 
+		nodeNeighbourTbl[1152][0-6]: 1153 1163 1273 1151 1141 1031 
+		nodeNeighbourTbl[1153][0-6]: 1154 1164 1274 1152 1142 1032 
+		nodeNeighbourTbl[1154][0-6]: 1331 1165 1275 1153 1143 1033 
+		nodeNeighbourTbl[1155][0-6]: 1156 1166 1276 1331 1144 1034 
+		nodeNeighbourTbl[1156][0-6]: 1157 1167 1277 1155 1145 1035 
+		nodeNeighbourTbl[1157][0-6]: 1158 1168 1278 1156 1146 1036 
+		nodeNeighbourTbl[1158][0-6]: 1159 1169 1279 1157 1147 1037 
+		nodeNeighbourTbl[1159][0-6]: 1160 1170 1280 1158 1148 1038 
+		nodeNeighbourTbl[1160][0-6]: 1161 1171 1281 1159 1149 1039 
+		nodeNeighbourTbl[1161][0-6]: 1162 1172 1282 1160 1150 1040 
+		nodeNeighbourTbl[1162][0-6]: 1163 1173 1283 1161 1151 1041 
+		nodeNeighbourTbl[1163][0-6]: 1164 1174 1284 1162 1152 1042 
+		nodeNeighbourTbl[1164][0-6]: 1165 1175 1285 1163 1153 1043 
+		nodeNeighbourTbl[1165][0-6]: 1331 1176 1286 1164 1154 1044 
+		nodeNeighbourTbl[1166][0-6]: 1167 1177 1287 1331 1155 1045 
+		nodeNeighbourTbl[1167][0-6]: 1168 1178 1288 1166 1156 1046 
+		nodeNeighbourTbl[1168][0-6]: 1169 1179 1289 1167 1157 1047 
+		nodeNeighbourTbl[1169][0-6]: 1170 1180 1290 1168 1158 1048 
+		nodeNeighbourTbl[1170][0-6]: 1171 1181 1291 1169 1159 1049 
+		nodeNeighbourTbl[1171][0-6]: 1172 1182 1292 1170 1160 1050 
+		nodeNeighbourTbl[1172][0-6]: 1173 1183 1293 1171 1161 1051 
+		nodeNeighbourTbl[1173][0-6]: 1174 1184 1294 1172 1162 1052 
+		nodeNeighbourTbl[1174][0-6]: 1175 1185 1295 1173 1163 1053 
+		nodeNeighbourTbl[1175][0-6]: 1176 1186 1296 1174 1164 1054 
+		nodeNeighbourTbl[1176][0-6]: 1331 1187 1297 1175 1165 1055 
+		nodeNeighbourTbl[1177][0-6]: 1178 1188 1298 1331 1166 1056 
+		nodeNeighbourTbl[1178][0-6]: 1179 1189 1299 1177 1167 1057 
+		nodeNeighbourTbl[1179][0-6]: 1180 1190 1300 1178 1168 1058 
+		nodeNeighbourTbl[1180][0-6]: 1181 1191 1301 1179 1169 1059 
+		nodeNeighbourTbl[1181][0-6]: 1182 1192 1302 1180 1170 1060 
+		nodeNeighbourTbl[1182][0-6]: 1183 1193 1303 1181 1171 1061 
+		nodeNeighbourTbl[1183][0-6]: 1184 1194 1304 1182 1172 1062 
+		nodeNeighbourTbl[1184][0-6]: 1185 1195 1305 1183 1173 1063 
+		nodeNeighbourTbl[1185][0-6]: 1186 1196 1306 1184 1174 1064 
+		nodeNeighbourTbl[1186][0-6]: 1187 1197 1307 1185 1175 1065 
+		nodeNeighbourTbl[1187][0-6]: 1331 1198 1308 1186 1176 1066 
+		nodeNeighbourTbl[1188][0-6]: 1189 1199 1309 1331 1177 1067 
+		nodeNeighbourTbl[1189][0-6]: 1190 1200 1310 1188 1178 1068 
+		nodeNeighbourTbl[1190][0-6]: 1191 1201 1311 1189 1179 1069 
+		nodeNeighbourTbl[1191][0-6]: 1192 1202 1312 1190 1180 1070 
+		nodeNeighbourTbl[1192][0-6]: 1193 1203 1313 1191 1181 1071 
+		nodeNeighbourTbl[1193][0-6]: 1194 1204 1314 1192 1182 1072 
+		nodeNeighbourTbl[1194][0-6]: 1195 1205 1315 1193 1183 1073 
+		nodeNeighbourTbl[1195][0-6]: 1196 1206 1316 1194 1184 1074 
+		nodeNeighbourTbl[1196][0-6]: 1197 1207 1317 1195 1185 1075 
+		nodeNeighbourTbl[1197][0-6]: 1198 1208 1318 1196 1186 1076 
+		nodeNeighbourTbl[1198][0-6]: 1331 1209 1319 1197 1187 1077 
+		nodeNeighbourTbl[1199][0-6]: 1200 1331 1320 1331 1188 1078 
+		nodeNeighbourTbl[1200][0-6]: 1201 1331 1321 1199 1189 1079 
+		nodeNeighbourTbl[1201][0-6]: 1202 1331 1322 1200 1190 1080 
+		nodeNeighbourTbl[1202][0-6]: 1203 1331 1323 1201 1191 1081 
+		nodeNeighbourTbl[1203][0-6]: 1204 1331 1324 1202 1192 1082 
+		nodeNeighbourTbl[1204][0-6]: 1205 1331 1325 1203 1193 1083 
+		nodeNeighbourTbl[1205][0-6]: 1206 1331 1326 1204 1194 1084 
+		nodeNeighbourTbl[1206][0-6]: 1207 1331 1327 1205 1195 1085 
+		nodeNeighbourTbl[1207][0-6]: 1208 1331 1328 1206 1196 1086 
+		nodeNeighbourTbl[1208][0-6]: 1209 1331 1329 1207 1197 1087 
+		nodeNeighbourTbl[1209][0-6]: 1331 1331 1330 1208 1198 1088 
+		nodeNeighbourTbl[1210][0-6]: 1211 1221 1331 1331 1331 1089 
+		nodeNeighbourTbl[1211][0-6]: 1212 1222 1331 1210 1331 1090 
+		nodeNeighbourTbl[1212][0-6]: 1213 1223 1331 1211 1331 1091 
+		nodeNeighbourTbl[1213][0-6]: 1214 1224 1331 1212 1331 1092 
+		nodeNeighbourTbl[1214][0-6]: 1215 1225 1331 1213 1331 1093 
+		nodeNeighbourTbl[1215][0-6]: 1216 1226 1331 1214 1331 1094 
+		nodeNeighbourTbl[1216][0-6]: 1217 1227 1331 1215 1331 1095 
+		nodeNeighbourTbl[1217][0-6]: 1218 1228 1331 1216 1331 1096 
+		nodeNeighbourTbl[1218][0-6]: 1219 1229 1331 1217 1331 1097 
+		nodeNeighbourTbl[1219][0-6]: 1220 1230 1331 1218 1331 1098 
+		nodeNeighbourTbl[1220][0-6]: 1331 1231 1331 1219 1331 1099 
+		nodeNeighbourTbl[1221][0-6]: 1222 1232 1331 1331 1210 1100 
+		nodeNeighbourTbl[1222][0-6]: 1223 1233 1331 1221 1211 1101 
+		nodeNeighbourTbl[1223][0-6]: 1224 1234 1331 1222 1212 1102 
+		nodeNeighbourTbl[1224][0-6]: 1225 1235 1331 1223 1213 1103 
+		nodeNeighbourTbl[1225][0-6]: 1226 1236 1331 1224 1214 1104 
+		nodeNeighbourTbl[1226][0-6]: 1227 1237 1331 1225 1215 1105 
+		nodeNeighbourTbl[1227][0-6]: 1228 1238 1331 1226 1216 1106 
+		nodeNeighbourTbl[1228][0-6]: 1229 1239 1331 1227 1217 1107 
+		nodeNeighbourTbl[1229][0-6]: 1230 1240 1331 1228 1218 1108 
+		nodeNeighbourTbl[1230][0-6]: 1231 1241 1331 1229 1219 1109 
+		nodeNeighbourTbl[1231][0-6]: 1331 1242 1331 1230 1220 1110 
+		nodeNeighbourTbl[1232][0-6]: 1233 1243 1331 1331 1221 1111 
+		nodeNeighbourTbl[1233][0-6]: 1234 1244 1331 1232 1222 1112 
+		nodeNeighbourTbl[1234][0-6]: 1235 1245 1331 1233 1223 1113 
+		nodeNeighbourTbl[1235][0-6]: 1236 1246 1331 1234 1224 1114 
+		nodeNeighbourTbl[1236][0-6]: 1237 1247 1331 1235 1225 1115 
+		nodeNeighbourTbl[1237][0-6]: 1238 1248 1331 1236 1226 1116 
+		nodeNeighbourTbl[1238][0-6]: 1239 1249 1331 1237 1227 1117 
+		nodeNeighbourTbl[1239][0-6]: 1240 1250 1331 1238 1228 1118 
+		nodeNeighbourTbl[1240][0-6]: 1241 1251 1331 1239 1229 1119 
+		nodeNeighbourTbl[1241][0-6]: 1242 1252 1331 1240 1230 1120 
+		nodeNeighbourTbl[1242][0-6]: 1331 1253 1331 1241 1231 1121 
+		nodeNeighbourTbl[1243][0-6]: 1244 1254 1331 1331 1232 1122 
+		nodeNeighbourTbl[1244][0-6]: 1245 1255 1331 1243 1233 1123 
+		nodeNeighbourTbl[1245][0-6]: 1246 1256 1331 1244 1234 1124 
+		nodeNeighbourTbl[1246][0-6]: 1247 1257 1331 1245 1235 1125 
+		nodeNeighbourTbl[1247][0-6]: 1248 1258 1331 1246 1236 1126 
+		nodeNeighbourTbl[1248][0-6]: 1249 1259 1331 1247 1237 1127 
+		nodeNeighbourTbl[1249][0-6]: 1250 1260 1331 1248 1238 1128 
+		nodeNeighbourTbl[1250][0-6]: 1251 1261 1331 1249 1239 1129 
+		nodeNeighbourTbl[1251][0-6]: 1252 1262 1331 1250 1240 1130 
+		nodeNeighbourTbl[1252][0-6]: 1253 1263 1331 1251 1241 1131 
+		nodeNeighbourTbl[1253][0-6]: 1331 1264 1331 1252 1242 1132 
+		nodeNeighbourTbl[1254][0-6]: 1255 1265 1331 1331 1243 1133 
+		nodeNeighbourTbl[1255][0-6]: 1256 1266 1331 1254 1244 1134 
+		nodeNeighbourTbl[1256][0-6]: 1257 1267 1331 1255 1245 1135 
+		nodeNeighbourTbl[1257][0-6]: 1258 1268 1331 1256 1246 1136 
+		nodeNeighbourTbl[1258][0-6]: 1259 1269 1331 1257 1247 1137 
+		nodeNeighbourTbl[1259][0-6]: 1260 1270 1331 1258 1248 1138 
+		nodeNeighbourTbl[1260][0-6]: 1261 1271 1331 1259 1249 1139 
+		nodeNeighbourTbl[1261][0-6]: 1262 1272 1331 1260 1250 1140 
+		nodeNeighbourTbl[1262][0-6]: 1263 1273 1331 1261 1251 1141 
+		nodeNeighbourTbl[1263][0-6]: 1264 1274 1331 1262 1252 1142 
+		nodeNeighbourTbl[1264][0-6]: 1331 1275 1331 1263 1253 1143 
+		nodeNeighbourTbl[1265][0-6]: 1266 1276 1331 1331 1254 1144 
+		nodeNeighbourTbl[1266][0-6]: 1267 1277 1331 1265 1255 1145 
+		nodeNeighbourTbl[1267][0-6]: 1268 1278 1331 1266 1256 1146 
+		nodeNeighbourTbl[1268][0-6]: 1269 1279 1331 1267 1257 1147 
+		nodeNeighbourTbl[1269][0-6]: 1270 1280 1331 1268 1258 1148 
+		nodeNeighbourTbl[1270][0-6]: 1271 1281 1331 1269 1259 1149 
+		nodeNeighbourTbl[1271][0-6]: 1272 1282 1331 1270 1260 1150 
+		nodeNeighbourTbl[1272][0-6]: 1273 1283 1331 1271 1261 1151 
+		nodeNeighbourTbl[1273][0-6]: 1274 1284 1331 1272 1262 1152 
+		nodeNeighbourTbl[1274][0-6]: 1275 1285 1331 1273 1263 1153 
+		nodeNeighbourTbl[1275][0-6]: 1331 1286 1331 1274 1264 1154 
+		nodeNeighbourTbl[1276][0-6]: 1277 1287 1331 1331 1265 1155 
+		nodeNeighbourTbl[1277][0-6]: 1278 1288 1331 1276 1266 1156 
+		nodeNeighbourTbl[1278][0-6]: 1279 1289 1331 1277 1267 1157 
+		nodeNeighbourTbl[1279][0-6]: 1280 1290 1331 1278 1268 1158 
+		nodeNeighbourTbl[1280][0-6]: 1281 1291 1331 1279 1269 1159 
+		nodeNeighbourTbl[1281][0-6]: 1282 1292 1331 1280 1270 1160 
+		nodeNeighbourTbl[1282][0-6]: 1283 1293 1331 1281 1271 1161 
+		nodeNeighbourTbl[1283][0-6]: 1284 1294 1331 1282 1272 1162 
+		nodeNeighbourTbl[1284][0-6]: 1285 1295 1331 1283 1273 1163 
+		nodeNeighbourTbl[1285][0-6]: 1286 1296 1331 1284 1274 1164 
+		nodeNeighbourTbl[1286][0-6]: 1331 1297 1331 1285 1275 1165 
+		nodeNeighbourTbl[1287][0-6]: 1288 1298 1331 1331 1276 1166 
+		nodeNeighbourTbl[1288][0-6]: 1289 1299 1331 1287 1277 1167 
+		nodeNeighbourTbl[1289][0-6]: 1290 1300 1331 1288 1278 1168 
+		nodeNeighbourTbl[1290][0-6]: 1291 1301 1331 1289 1279 1169 
+		nodeNeighbourTbl[1291][0-6]: 1292 1302 1331 1290 1280 1170 
+		nodeNeighbourTbl[1292][0-6]: 1293 1303 1331 1291 1281 1171 
+		nodeNeighbourTbl[1293][0-6]: 1294 1304 1331 1292 1282 1172 
+		nodeNeighbourTbl[1294][0-6]: 1295 1305 1331 1293 1283 1173 
+		nodeNeighbourTbl[1295][0-6]: 1296 1306 1331 1294 1284 1174 
+		nodeNeighbourTbl[1296][0-6]: 1297 1307 1331 1295 1285 1175 
+		nodeNeighbourTbl[1297][0-6]: 1331 1308 1331 1296 1286 1176 
+		nodeNeighbourTbl[1298][0-6]: 1299 1309 1331 1331 1287 1177 
+		nodeNeighbourTbl[1299][0-6]: 1300 1310 1331 1298 1288 1178 
+		nodeNeighbourTbl[1300][0-6]: 1301 1311 1331 1299 1289 1179 
+		nodeNeighbourTbl[1301][0-6]: 1302 1312 1331 1300 1290 1180 
+		nodeNeighbourTbl[1302][0-6]: 1303 1313 1331 1301 1291 1181 
+		nodeNeighbourTbl[1303][0-6]: 1304 1314 1331 1302 1292 1182 
+		nodeNeighbourTbl[1304][0-6]: 1305 1315 1331 1303 1293 1183 
+		nodeNeighbourTbl[1305][0-6]: 1306 1316 1331 1304 1294 1184 
+		nodeNeighbourTbl[1306][0-6]: 1307 1317 1331 1305 1295 1185 
+		nodeNeighbourTbl[1307][0-6]: 1308 1318 1331 1306 1296 1186 
+		nodeNeighbourTbl[1308][0-6]: 1331 1319 1331 1307 1297 1187 
+		nodeNeighbourTbl[1309][0-6]: 1310 1320 1331 1331 1298 1188 
+		nodeNeighbourTbl[1310][0-6]: 1311 1321 1331 1309 1299 1189 
+		nodeNeighbourTbl[1311][0-6]: 1312 1322 1331 1310 1300 1190 
+		nodeNeighbourTbl[1312][0-6]: 1313 1323 1331 1311 1301 1191 
+		nodeNeighbourTbl[1313][0-6]: 1314 1324 1331 1312 1302 1192 
+		nodeNeighbourTbl[1314][0-6]: 1315 1325 1331 1313 1303 1193 
+		nodeNeighbourTbl[1315][0-6]: 1316 1326 1331 1314 1304 1194 
+		nodeNeighbourTbl[1316][0-6]: 1317 1327 1331 1315 1305 1195 
+		nodeNeighbourTbl[1317][0-6]: 1318 1328 1331 1316 1306 1196 
+		nodeNeighbourTbl[1318][0-6]: 1319 1329 1331 1317 1307 1197 
+		nodeNeighbourTbl[1319][0-6]: 1331 1330 1331 1318 1308 1198 
+		nodeNeighbourTbl[1320][0-6]: 1321 1331 1331 1331 1309 1199 
+		nodeNeighbourTbl[1321][0-6]: 1322 1331 1331 1320 1310 1200 
+		nodeNeighbourTbl[1322][0-6]: 1323 1331 1331 1321 1311 1201 
+		nodeNeighbourTbl[1323][0-6]: 1324 1331 1331 1322 1312 1202 
+		nodeNeighbourTbl[1324][0-6]: 1325 1331 1331 1323 1313 1203 
+		nodeNeighbourTbl[1325][0-6]: 1326 1331 1331 1324 1314 1204 
+		nodeNeighbourTbl[1326][0-6]: 1327 1331 1331 1325 1315 1205 
+		nodeNeighbourTbl[1327][0-6]: 1328 1331 1331 1326 1316 1206 
+		nodeNeighbourTbl[1328][0-6]: 1329 1331 1331 1327 1317 1207 
+		nodeNeighbourTbl[1329][0-6]: 1330 1331 1331 1328 1318 1208 
+		nodeNeighbourTbl[1330][0-6]: 1331 1331 1331 1329 1319 1209 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8079630
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x807ab08
+	nodeElementTbl[0-1331]:
+		nodeElementTbl[0][0-8]: 1000 1000 1000 1000 1000 1000 1000 000 
+		nodeElementTbl[1][0-8]: 1000 1000 1000 1000 1000 1000 000 001 
+		nodeElementTbl[2][0-8]: 1000 1000 1000 1000 1000 1000 001 002 
+		nodeElementTbl[3][0-8]: 1000 1000 1000 1000 1000 1000 002 003 
+		nodeElementTbl[4][0-8]: 1000 1000 1000 1000 1000 1000 003 004 
+		nodeElementTbl[5][0-8]: 1000 1000 1000 1000 1000 1000 004 005 
+		nodeElementTbl[6][0-8]: 1000 1000 1000 1000 1000 1000 005 006 
+		nodeElementTbl[7][0-8]: 1000 1000 1000 1000 1000 1000 006 007 
+		nodeElementTbl[8][0-8]: 1000 1000 1000 1000 1000 1000 007 008 
+		nodeElementTbl[9][0-8]: 1000 1000 1000 1000 1000 1000 008 009 
+		nodeElementTbl[10][0-8]: 1000 1000 1000 1000 1000 1000 009 1000 
+		nodeElementTbl[11][0-8]: 1000 1000 1000 1000 1000 000 1000 010 
+		nodeElementTbl[12][0-8]: 1000 1000 1000 1000 000 001 010 011 
+		nodeElementTbl[13][0-8]: 1000 1000 1000 1000 001 002 011 012 
+		nodeElementTbl[14][0-8]: 1000 1000 1000 1000 002 003 012 013 
+		nodeElementTbl[15][0-8]: 1000 1000 1000 1000 003 004 013 014 
+		nodeElementTbl[16][0-8]: 1000 1000 1000 1000 004 005 014 015 
+		nodeElementTbl[17][0-8]: 1000 1000 1000 1000 005 006 015 016 
+		nodeElementTbl[18][0-8]: 1000 1000 1000 1000 006 007 016 017 
+		nodeElementTbl[19][0-8]: 1000 1000 1000 1000 007 008 017 018 
+		nodeElementTbl[20][0-8]: 1000 1000 1000 1000 008 009 018 019 
+		nodeElementTbl[21][0-8]: 1000 1000 1000 1000 009 1000 019 1000 
+		nodeElementTbl[22][0-8]: 1000 1000 1000 1000 1000 010 1000 020 
+		nodeElementTbl[23][0-8]: 1000 1000 1000 1000 010 011 020 021 
+		nodeElementTbl[24][0-8]: 1000 1000 1000 1000 011 012 021 022 
+		nodeElementTbl[25][0-8]: 1000 1000 1000 1000 012 013 022 023 
+		nodeElementTbl[26][0-8]: 1000 1000 1000 1000 013 014 023 024 
+		nodeElementTbl[27][0-8]: 1000 1000 1000 1000 014 015 024 025 
+		nodeElementTbl[28][0-8]: 1000 1000 1000 1000 015 016 025 026 
+		nodeElementTbl[29][0-8]: 1000 1000 1000 1000 016 017 026 027 
+		nodeElementTbl[30][0-8]: 1000 1000 1000 1000 017 018 027 028 
+		nodeElementTbl[31][0-8]: 1000 1000 1000 1000 018 019 028 029 
+		nodeElementTbl[32][0-8]: 1000 1000 1000 1000 019 1000 029 1000 
+		nodeElementTbl[33][0-8]: 1000 1000 1000 1000 1000 020 1000 030 
+		nodeElementTbl[34][0-8]: 1000 1000 1000 1000 020 021 030 031 
+		nodeElementTbl[35][0-8]: 1000 1000 1000 1000 021 022 031 032 
+		nodeElementTbl[36][0-8]: 1000 1000 1000 1000 022 023 032 033 
+		nodeElementTbl[37][0-8]: 1000 1000 1000 1000 023 024 033 034 
+		nodeElementTbl[38][0-8]: 1000 1000 1000 1000 024 025 034 035 
+		nodeElementTbl[39][0-8]: 1000 1000 1000 1000 025 026 035 036 
+		nodeElementTbl[40][0-8]: 1000 1000 1000 1000 026 027 036 037 
+		nodeElementTbl[41][0-8]: 1000 1000 1000 1000 027 028 037 038 
+		nodeElementTbl[42][0-8]: 1000 1000 1000 1000 028 029 038 039 
+		nodeElementTbl[43][0-8]: 1000 1000 1000 1000 029 1000 039 1000 
+		nodeElementTbl[44][0-8]: 1000 1000 1000 1000 1000 030 1000 040 
+		nodeElementTbl[45][0-8]: 1000 1000 1000 1000 030 031 040 041 
+		nodeElementTbl[46][0-8]: 1000 1000 1000 1000 031 032 041 042 
+		nodeElementTbl[47][0-8]: 1000 1000 1000 1000 032 033 042 043 
+		nodeElementTbl[48][0-8]: 1000 1000 1000 1000 033 034 043 044 
+		nodeElementTbl[49][0-8]: 1000 1000 1000 1000 034 035 044 045 
+		nodeElementTbl[50][0-8]: 1000 1000 1000 1000 035 036 045 046 
+		nodeElementTbl[51][0-8]: 1000 1000 1000 1000 036 037 046 047 
+		nodeElementTbl[52][0-8]: 1000 1000 1000 1000 037 038 047 048 
+		nodeElementTbl[53][0-8]: 1000 1000 1000 1000 038 039 048 049 
+		nodeElementTbl[54][0-8]: 1000 1000 1000 1000 039 1000 049 1000 
+		nodeElementTbl[55][0-8]: 1000 1000 1000 1000 1000 040 1000 050 
+		nodeElementTbl[56][0-8]: 1000 1000 1000 1000 040 041 050 051 
+		nodeElementTbl[57][0-8]: 1000 1000 1000 1000 041 042 051 052 
+		nodeElementTbl[58][0-8]: 1000 1000 1000 1000 042 043 052 053 
+		nodeElementTbl[59][0-8]: 1000 1000 1000 1000 043 044 053 054 
+		nodeElementTbl[60][0-8]: 1000 1000 1000 1000 044 045 054 055 
+		nodeElementTbl[61][0-8]: 1000 1000 1000 1000 045 046 055 056 
+		nodeElementTbl[62][0-8]: 1000 1000 1000 1000 046 047 056 057 
+		nodeElementTbl[63][0-8]: 1000 1000 1000 1000 047 048 057 058 
+		nodeElementTbl[64][0-8]: 1000 1000 1000 1000 048 049 058 059 
+		nodeElementTbl[65][0-8]: 1000 1000 1000 1000 049 1000 059 1000 
+		nodeElementTbl[66][0-8]: 1000 1000 1000 1000 1000 050 1000 060 
+		nodeElementTbl[67][0-8]: 1000 1000 1000 1000 050 051 060 061 
+		nodeElementTbl[68][0-8]: 1000 1000 1000 1000 051 052 061 062 
+		nodeElementTbl[69][0-8]: 1000 1000 1000 1000 052 053 062 063 
+		nodeElementTbl[70][0-8]: 1000 1000 1000 1000 053 054 063 064 
+		nodeElementTbl[71][0-8]: 1000 1000 1000 1000 054 055 064 065 
+		nodeElementTbl[72][0-8]: 1000 1000 1000 1000 055 056 065 066 
+		nodeElementTbl[73][0-8]: 1000 1000 1000 1000 056 057 066 067 
+		nodeElementTbl[74][0-8]: 1000 1000 1000 1000 057 058 067 068 
+		nodeElementTbl[75][0-8]: 1000 1000 1000 1000 058 059 068 069 
+		nodeElementTbl[76][0-8]: 1000 1000 1000 1000 059 1000 069 1000 
+		nodeElementTbl[77][0-8]: 1000 1000 1000 1000 1000 060 1000 070 
+		nodeElementTbl[78][0-8]: 1000 1000 1000 1000 060 061 070 071 
+		nodeElementTbl[79][0-8]: 1000 1000 1000 1000 061 062 071 072 
+		nodeElementTbl[80][0-8]: 1000 1000 1000 1000 062 063 072 073 
+		nodeElementTbl[81][0-8]: 1000 1000 1000 1000 063 064 073 074 
+		nodeElementTbl[82][0-8]: 1000 1000 1000 1000 064 065 074 075 
+		nodeElementTbl[83][0-8]: 1000 1000 1000 1000 065 066 075 076 
+		nodeElementTbl[84][0-8]: 1000 1000 1000 1000 066 067 076 077 
+		nodeElementTbl[85][0-8]: 1000 1000 1000 1000 067 068 077 078 
+		nodeElementTbl[86][0-8]: 1000 1000 1000 1000 068 069 078 079 
+		nodeElementTbl[87][0-8]: 1000 1000 1000 1000 069 1000 079 1000 
+		nodeElementTbl[88][0-8]: 1000 1000 1000 1000 1000 070 1000 080 
+		nodeElementTbl[89][0-8]: 1000 1000 1000 1000 070 071 080 081 
+		nodeElementTbl[90][0-8]: 1000 1000 1000 1000 071 072 081 082 
+		nodeElementTbl[91][0-8]: 1000 1000 1000 1000 072 073 082 083 
+		nodeElementTbl[92][0-8]: 1000 1000 1000 1000 073 074 083 084 
+		nodeElementTbl[93][0-8]: 1000 1000 1000 1000 074 075 084 085 
+		nodeElementTbl[94][0-8]: 1000 1000 1000 1000 075 076 085 086 
+		nodeElementTbl[95][0-8]: 1000 1000 1000 1000 076 077 086 087 
+		nodeElementTbl[96][0-8]: 1000 1000 1000 1000 077 078 087 088 
+		nodeElementTbl[97][0-8]: 1000 1000 1000 1000 078 079 088 089 
+		nodeElementTbl[98][0-8]: 1000 1000 1000 1000 079 1000 089 1000 
+		nodeElementTbl[99][0-8]: 1000 1000 1000 1000 1000 080 1000 090 
+		nodeElementTbl[100][0-8]: 1000 1000 1000 1000 080 081 090 091 
+		nodeElementTbl[101][0-8]: 1000 1000 1000 1000 081 082 091 092 
+		nodeElementTbl[102][0-8]: 1000 1000 1000 1000 082 083 092 093 
+		nodeElementTbl[103][0-8]: 1000 1000 1000 1000 083 084 093 094 
+		nodeElementTbl[104][0-8]: 1000 1000 1000 1000 084 085 094 095 
+		nodeElementTbl[105][0-8]: 1000 1000 1000 1000 085 086 095 096 
+		nodeElementTbl[106][0-8]: 1000 1000 1000 1000 086 087 096 097 
+		nodeElementTbl[107][0-8]: 1000 1000 1000 1000 087 088 097 098 
+		nodeElementTbl[108][0-8]: 1000 1000 1000 1000 088 089 098 099 
+		nodeElementTbl[109][0-8]: 1000 1000 1000 1000 089 1000 099 1000 
+		nodeElementTbl[110][0-8]: 1000 1000 1000 1000 1000 090 1000 1000 
+		nodeElementTbl[111][0-8]: 1000 1000 1000 1000 090 091 1000 1000 
+		nodeElementTbl[112][0-8]: 1000 1000 1000 1000 091 092 1000 1000 
+		nodeElementTbl[113][0-8]: 1000 1000 1000 1000 092 093 1000 1000 
+		nodeElementTbl[114][0-8]: 1000 1000 1000 1000 093 094 1000 1000 
+		nodeElementTbl[115][0-8]: 1000 1000 1000 1000 094 095 1000 1000 
+		nodeElementTbl[116][0-8]: 1000 1000 1000 1000 095 096 1000 1000 
+		nodeElementTbl[117][0-8]: 1000 1000 1000 1000 096 097 1000 1000 
+		nodeElementTbl[118][0-8]: 1000 1000 1000 1000 097 098 1000 1000 
+		nodeElementTbl[119][0-8]: 1000 1000 1000 1000 098 099 1000 1000 
+		nodeElementTbl[120][0-8]: 1000 1000 1000 1000 099 1000 1000 1000 
+		nodeElementTbl[121][0-8]: 1000 1000 1000 000 1000 1000 1000 100 
+		nodeElementTbl[122][0-8]: 1000 1000 000 001 1000 1000 100 101 
+		nodeElementTbl[123][0-8]: 1000 1000 001 002 1000 1000 101 102 
+		nodeElementTbl[124][0-8]: 1000 1000 002 003 1000 1000 102 103 
+		nodeElementTbl[125][0-8]: 1000 1000 003 004 1000 1000 103 104 
+		nodeElementTbl[126][0-8]: 1000 1000 004 005 1000 1000 104 105 
+		nodeElementTbl[127][0-8]: 1000 1000 005 006 1000 1000 105 106 
+		nodeElementTbl[128][0-8]: 1000 1000 006 007 1000 1000 106 107 
+		nodeElementTbl[129][0-8]: 1000 1000 007 008 1000 1000 107 108 
+		nodeElementTbl[130][0-8]: 1000 1000 008 009 1000 1000 108 109 
+		nodeElementTbl[131][0-8]: 1000 1000 009 1000 1000 1000 109 1000 
+		nodeElementTbl[132][0-8]: 1000 000 1000 010 1000 100 1000 110 
+		nodeElementTbl[133][0-8]: 000 001 010 011 100 101 110 111 
+		nodeElementTbl[134][0-8]: 001 002 011 012 101 102 111 112 
+		nodeElementTbl[135][0-8]: 002 003 012 013 102 103 112 113 
+		nodeElementTbl[136][0-8]: 003 004 013 014 103 104 113 114 
+		nodeElementTbl[137][0-8]: 004 005 014 015 104 105 114 115 
+		nodeElementTbl[138][0-8]: 005 006 015 016 105 106 115 116 
+		nodeElementTbl[139][0-8]: 006 007 016 017 106 107 116 117 
+		nodeElementTbl[140][0-8]: 007 008 017 018 107 108 117 118 
+		nodeElementTbl[141][0-8]: 008 009 018 019 108 109 118 119 
+		nodeElementTbl[142][0-8]: 009 1000 019 1000 109 1000 119 1000 
+		nodeElementTbl[143][0-8]: 1000 010 1000 020 1000 110 1000 120 
+		nodeElementTbl[144][0-8]: 010 011 020 021 110 111 120 121 
+		nodeElementTbl[145][0-8]: 011 012 021 022 111 112 121 122 
+		nodeElementTbl[146][0-8]: 012 013 022 023 112 113 122 123 
+		nodeElementTbl[147][0-8]: 013 014 023 024 113 114 123 124 
+		nodeElementTbl[148][0-8]: 014 015 024 025 114 115 124 125 
+		nodeElementTbl[149][0-8]: 015 016 025 026 115 116 125 126 
+		nodeElementTbl[150][0-8]: 016 017 026 027 116 117 126 127 
+		nodeElementTbl[151][0-8]: 017 018 027 028 117 118 127 128 
+		nodeElementTbl[152][0-8]: 018 019 028 029 118 119 128 129 
+		nodeElementTbl[153][0-8]: 019 1000 029 1000 119 1000 129 1000 
+		nodeElementTbl[154][0-8]: 1000 020 1000 030 1000 120 1000 130 
+		nodeElementTbl[155][0-8]: 020 021 030 031 120 121 130 131 
+		nodeElementTbl[156][0-8]: 021 022 031 032 121 122 131 132 
+		nodeElementTbl[157][0-8]: 022 023 032 033 122 123 132 133 
+		nodeElementTbl[158][0-8]: 023 024 033 034 123 124 133 134 
+		nodeElementTbl[159][0-8]: 024 025 034 035 124 125 134 135 
+		nodeElementTbl[160][0-8]: 025 026 035 036 125 126 135 136 
+		nodeElementTbl[161][0-8]: 026 027 036 037 126 127 136 137 
+		nodeElementTbl[162][0-8]: 027 028 037 038 127 128 137 138 
+		nodeElementTbl[163][0-8]: 028 029 038 039 128 129 138 139 
+		nodeElementTbl[164][0-8]: 029 1000 039 1000 129 1000 139 1000 
+		nodeElementTbl[165][0-8]: 1000 030 1000 040 1000 130 1000 140 
+		nodeElementTbl[166][0-8]: 030 031 040 041 130 131 140 141 
+		nodeElementTbl[167][0-8]: 031 032 041 042 131 132 141 142 
+		nodeElementTbl[168][0-8]: 032 033 042 043 132 133 142 143 
+		nodeElementTbl[169][0-8]: 033 034 043 044 133 134 143 144 
+		nodeElementTbl[170][0-8]: 034 035 044 045 134 135 144 145 
+		nodeElementTbl[171][0-8]: 035 036 045 046 135 136 145 146 
+		nodeElementTbl[172][0-8]: 036 037 046 047 136 137 146 147 
+		nodeElementTbl[173][0-8]: 037 038 047 048 137 138 147 148 
+		nodeElementTbl[174][0-8]: 038 039 048 049 138 139 148 149 
+		nodeElementTbl[175][0-8]: 039 1000 049 1000 139 1000 149 1000 
+		nodeElementTbl[176][0-8]: 1000 040 1000 050 1000 140 1000 150 
+		nodeElementTbl[177][0-8]: 040 041 050 051 140 141 150 151 
+		nodeElementTbl[178][0-8]: 041 042 051 052 141 142 151 152 
+		nodeElementTbl[179][0-8]: 042 043 052 053 142 143 152 153 
+		nodeElementTbl[180][0-8]: 043 044 053 054 143 144 153 154 
+		nodeElementTbl[181][0-8]: 044 045 054 055 144 145 154 155 
+		nodeElementTbl[182][0-8]: 045 046 055 056 145 146 155 156 
+		nodeElementTbl[183][0-8]: 046 047 056 057 146 147 156 157 
+		nodeElementTbl[184][0-8]: 047 048 057 058 147 148 157 158 
+		nodeElementTbl[185][0-8]: 048 049 058 059 148 149 158 159 
+		nodeElementTbl[186][0-8]: 049 1000 059 1000 149 1000 159 1000 
+		nodeElementTbl[187][0-8]: 1000 050 1000 060 1000 150 1000 160 
+		nodeElementTbl[188][0-8]: 050 051 060 061 150 151 160 161 
+		nodeElementTbl[189][0-8]: 051 052 061 062 151 152 161 162 
+		nodeElementTbl[190][0-8]: 052 053 062 063 152 153 162 163 
+		nodeElementTbl[191][0-8]: 053 054 063 064 153 154 163 164 
+		nodeElementTbl[192][0-8]: 054 055 064 065 154 155 164 165 
+		nodeElementTbl[193][0-8]: 055 056 065 066 155 156 165 166 
+		nodeElementTbl[194][0-8]: 056 057 066 067 156 157 166 167 
+		nodeElementTbl[195][0-8]: 057 058 067 068 157 158 167 168 
+		nodeElementTbl[196][0-8]: 058 059 068 069 158 159 168 169 
+		nodeElementTbl[197][0-8]: 059 1000 069 1000 159 1000 169 1000 
+		nodeElementTbl[198][0-8]: 1000 060 1000 070 1000 160 1000 170 
+		nodeElementTbl[199][0-8]: 060 061 070 071 160 161 170 171 
+		nodeElementTbl[200][0-8]: 061 062 071 072 161 162 171 172 
+		nodeElementTbl[201][0-8]: 062 063 072 073 162 163 172 173 
+		nodeElementTbl[202][0-8]: 063 064 073 074 163 164 173 174 
+		nodeElementTbl[203][0-8]: 064 065 074 075 164 165 174 175 
+		nodeElementTbl[204][0-8]: 065 066 075 076 165 166 175 176 
+		nodeElementTbl[205][0-8]: 066 067 076 077 166 167 176 177 
+		nodeElementTbl[206][0-8]: 067 068 077 078 167 168 177 178 
+		nodeElementTbl[207][0-8]: 068 069 078 079 168 169 178 179 
+		nodeElementTbl[208][0-8]: 069 1000 079 1000 169 1000 179 1000 
+		nodeElementTbl[209][0-8]: 1000 070 1000 080 1000 170 1000 180 
+		nodeElementTbl[210][0-8]: 070 071 080 081 170 171 180 181 
+		nodeElementTbl[211][0-8]: 071 072 081 082 171 172 181 182 
+		nodeElementTbl[212][0-8]: 072 073 082 083 172 173 182 183 
+		nodeElementTbl[213][0-8]: 073 074 083 084 173 174 183 184 
+		nodeElementTbl[214][0-8]: 074 075 084 085 174 175 184 185 
+		nodeElementTbl[215][0-8]: 075 076 085 086 175 176 185 186 
+		nodeElementTbl[216][0-8]: 076 077 086 087 176 177 186 187 
+		nodeElementTbl[217][0-8]: 077 078 087 088 177 178 187 188 
+		nodeElementTbl[218][0-8]: 078 079 088 089 178 179 188 189 
+		nodeElementTbl[219][0-8]: 079 1000 089 1000 179 1000 189 1000 
+		nodeElementTbl[220][0-8]: 1000 080 1000 090 1000 180 1000 190 
+		nodeElementTbl[221][0-8]: 080 081 090 091 180 181 190 191 
+		nodeElementTbl[222][0-8]: 081 082 091 092 181 182 191 192 
+		nodeElementTbl[223][0-8]: 082 083 092 093 182 183 192 193 
+		nodeElementTbl[224][0-8]: 083 084 093 094 183 184 193 194 
+		nodeElementTbl[225][0-8]: 084 085 094 095 184 185 194 195 
+		nodeElementTbl[226][0-8]: 085 086 095 096 185 186 195 196 
+		nodeElementTbl[227][0-8]: 086 087 096 097 186 187 196 197 
+		nodeElementTbl[228][0-8]: 087 088 097 098 187 188 197 198 
+		nodeElementTbl[229][0-8]: 088 089 098 099 188 189 198 199 
+		nodeElementTbl[230][0-8]: 089 1000 099 1000 189 1000 199 1000 
+		nodeElementTbl[231][0-8]: 1000 090 1000 1000 1000 190 1000 1000 
+		nodeElementTbl[232][0-8]: 090 091 1000 1000 190 191 1000 1000 
+		nodeElementTbl[233][0-8]: 091 092 1000 1000 191 192 1000 1000 
+		nodeElementTbl[234][0-8]: 092 093 1000 1000 192 193 1000 1000 
+		nodeElementTbl[235][0-8]: 093 094 1000 1000 193 194 1000 1000 
+		nodeElementTbl[236][0-8]: 094 095 1000 1000 194 195 1000 1000 
+		nodeElementTbl[237][0-8]: 095 096 1000 1000 195 196 1000 1000 
+		nodeElementTbl[238][0-8]: 096 097 1000 1000 196 197 1000 1000 
+		nodeElementTbl[239][0-8]: 097 098 1000 1000 197 198 1000 1000 
+		nodeElementTbl[240][0-8]: 098 099 1000 1000 198 199 1000 1000 
+		nodeElementTbl[241][0-8]: 099 1000 1000 1000 199 1000 1000 1000 
+		nodeElementTbl[242][0-8]: 1000 1000 1000 100 1000 1000 1000 200 
+		nodeElementTbl[243][0-8]: 1000 1000 100 101 1000 1000 200 201 
+		nodeElementTbl[244][0-8]: 1000 1000 101 102 1000 1000 201 202 
+		nodeElementTbl[245][0-8]: 1000 1000 102 103 1000 1000 202 203 
+		nodeElementTbl[246][0-8]: 1000 1000 103 104 1000 1000 203 204 
+		nodeElementTbl[247][0-8]: 1000 1000 104 105 1000 1000 204 205 
+		nodeElementTbl[248][0-8]: 1000 1000 105 106 1000 1000 205 206 
+		nodeElementTbl[249][0-8]: 1000 1000 106 107 1000 1000 206 207 
+		nodeElementTbl[250][0-8]: 1000 1000 107 108 1000 1000 207 208 
+		nodeElementTbl[251][0-8]: 1000 1000 108 109 1000 1000 208 209 
+		nodeElementTbl[252][0-8]: 1000 1000 109 1000 1000 1000 209 1000 
+		nodeElementTbl[253][0-8]: 1000 100 1000 110 1000 200 1000 210 
+		nodeElementTbl[254][0-8]: 100 101 110 111 200 201 210 211 
+		nodeElementTbl[255][0-8]: 101 102 111 112 201 202 211 212 
+		nodeElementTbl[256][0-8]: 102 103 112 113 202 203 212 213 
+		nodeElementTbl[257][0-8]: 103 104 113 114 203 204 213 214 
+		nodeElementTbl[258][0-8]: 104 105 114 115 204 205 214 215 
+		nodeElementTbl[259][0-8]: 105 106 115 116 205 206 215 216 
+		nodeElementTbl[260][0-8]: 106 107 116 117 206 207 216 217 
+		nodeElementTbl[261][0-8]: 107 108 117 118 207 208 217 218 
+		nodeElementTbl[262][0-8]: 108 109 118 119 208 209 218 219 
+		nodeElementTbl[263][0-8]: 109 1000 119 1000 209 1000 219 1000 
+		nodeElementTbl[264][0-8]: 1000 110 1000 120 1000 210 1000 220 
+		nodeElementTbl[265][0-8]: 110 111 120 121 210 211 220 221 
+		nodeElementTbl[266][0-8]: 111 112 121 122 211 212 221 222 
+		nodeElementTbl[267][0-8]: 112 113 122 123 212 213 222 223 
+		nodeElementTbl[268][0-8]: 113 114 123 124 213 214 223 224 
+		nodeElementTbl[269][0-8]: 114 115 124 125 214 215 224 225 
+		nodeElementTbl[270][0-8]: 115 116 125 126 215 216 225 226 
+		nodeElementTbl[271][0-8]: 116 117 126 127 216 217 226 227 
+		nodeElementTbl[272][0-8]: 117 118 127 128 217 218 227 228 
+		nodeElementTbl[273][0-8]: 118 119 128 129 218 219 228 229 
+		nodeElementTbl[274][0-8]: 119 1000 129 1000 219 1000 229 1000 
+		nodeElementTbl[275][0-8]: 1000 120 1000 130 1000 220 1000 230 
+		nodeElementTbl[276][0-8]: 120 121 130 131 220 221 230 231 
+		nodeElementTbl[277][0-8]: 121 122 131 132 221 222 231 232 
+		nodeElementTbl[278][0-8]: 122 123 132 133 222 223 232 233 
+		nodeElementTbl[279][0-8]: 123 124 133 134 223 224 233 234 
+		nodeElementTbl[280][0-8]: 124 125 134 135 224 225 234 235 
+		nodeElementTbl[281][0-8]: 125 126 135 136 225 226 235 236 
+		nodeElementTbl[282][0-8]: 126 127 136 137 226 227 236 237 
+		nodeElementTbl[283][0-8]: 127 128 137 138 227 228 237 238 
+		nodeElementTbl[284][0-8]: 128 129 138 139 228 229 238 239 
+		nodeElementTbl[285][0-8]: 129 1000 139 1000 229 1000 239 1000 
+		nodeElementTbl[286][0-8]: 1000 130 1000 140 1000 230 1000 240 
+		nodeElementTbl[287][0-8]: 130 131 140 141 230 231 240 241 
+		nodeElementTbl[288][0-8]: 131 132 141 142 231 232 241 242 
+		nodeElementTbl[289][0-8]: 132 133 142 143 232 233 242 243 
+		nodeElementTbl[290][0-8]: 133 134 143 144 233 234 243 244 
+		nodeElementTbl[291][0-8]: 134 135 144 145 234 235 244 245 
+		nodeElementTbl[292][0-8]: 135 136 145 146 235 236 245 246 
+		nodeElementTbl[293][0-8]: 136 137 146 147 236 237 246 247 
+		nodeElementTbl[294][0-8]: 137 138 147 148 237 238 247 248 
+		nodeElementTbl[295][0-8]: 138 139 148 149 238 239 248 249 
+		nodeElementTbl[296][0-8]: 139 1000 149 1000 239 1000 249 1000 
+		nodeElementTbl[297][0-8]: 1000 140 1000 150 1000 240 1000 250 
+		nodeElementTbl[298][0-8]: 140 141 150 151 240 241 250 251 
+		nodeElementTbl[299][0-8]: 141 142 151 152 241 242 251 252 
+		nodeElementTbl[300][0-8]: 142 143 152 153 242 243 252 253 
+		nodeElementTbl[301][0-8]: 143 144 153 154 243 244 253 254 
+		nodeElementTbl[302][0-8]: 144 145 154 155 244 245 254 255 
+		nodeElementTbl[303][0-8]: 145 146 155 156 245 246 255 256 
+		nodeElementTbl[304][0-8]: 146 147 156 157 246 247 256 257 
+		nodeElementTbl[305][0-8]: 147 148 157 158 247 248 257 258 
+		nodeElementTbl[306][0-8]: 148 149 158 159 248 249 258 259 
+		nodeElementTbl[307][0-8]: 149 1000 159 1000 249 1000 259 1000 
+		nodeElementTbl[308][0-8]: 1000 150 1000 160 1000 250 1000 260 
+		nodeElementTbl[309][0-8]: 150 151 160 161 250 251 260 261 
+		nodeElementTbl[310][0-8]: 151 152 161 162 251 252 261 262 
+		nodeElementTbl[311][0-8]: 152 153 162 163 252 253 262 263 
+		nodeElementTbl[312][0-8]: 153 154 163 164 253 254 263 264 
+		nodeElementTbl[313][0-8]: 154 155 164 165 254 255 264 265 
+		nodeElementTbl[314][0-8]: 155 156 165 166 255 256 265 266 
+		nodeElementTbl[315][0-8]: 156 157 166 167 256 257 266 267 
+		nodeElementTbl[316][0-8]: 157 158 167 168 257 258 267 268 
+		nodeElementTbl[317][0-8]: 158 159 168 169 258 259 268 269 
+		nodeElementTbl[318][0-8]: 159 1000 169 1000 259 1000 269 1000 
+		nodeElementTbl[319][0-8]: 1000 160 1000 170 1000 260 1000 270 
+		nodeElementTbl[320][0-8]: 160 161 170 171 260 261 270 271 
+		nodeElementTbl[321][0-8]: 161 162 171 172 261 262 271 272 
+		nodeElementTbl[322][0-8]: 162 163 172 173 262 263 272 273 
+		nodeElementTbl[323][0-8]: 163 164 173 174 263 264 273 274 
+		nodeElementTbl[324][0-8]: 164 165 174 175 264 265 274 275 
+		nodeElementTbl[325][0-8]: 165 166 175 176 265 266 275 276 
+		nodeElementTbl[326][0-8]: 166 167 176 177 266 267 276 277 
+		nodeElementTbl[327][0-8]: 167 168 177 178 267 268 277 278 
+		nodeElementTbl[328][0-8]: 168 169 178 179 268 269 278 279 
+		nodeElementTbl[329][0-8]: 169 1000 179 1000 269 1000 279 1000 
+		nodeElementTbl[330][0-8]: 1000 170 1000 180 1000 270 1000 280 
+		nodeElementTbl[331][0-8]: 170 171 180 181 270 271 280 281 
+		nodeElementTbl[332][0-8]: 171 172 181 182 271 272 281 282 
+		nodeElementTbl[333][0-8]: 172 173 182 183 272 273 282 283 
+		nodeElementTbl[334][0-8]: 173 174 183 184 273 274 283 284 
+		nodeElementTbl[335][0-8]: 174 175 184 185 274 275 284 285 
+		nodeElementTbl[336][0-8]: 175 176 185 186 275 276 285 286 
+		nodeElementTbl[337][0-8]: 176 177 186 187 276 277 286 287 
+		nodeElementTbl[338][0-8]: 177 178 187 188 277 278 287 288 
+		nodeElementTbl[339][0-8]: 178 179 188 189 278 279 288 289 
+		nodeElementTbl[340][0-8]: 179 1000 189 1000 279 1000 289 1000 
+		nodeElementTbl[341][0-8]: 1000 180 1000 190 1000 280 1000 290 
+		nodeElementTbl[342][0-8]: 180 181 190 191 280 281 290 291 
+		nodeElementTbl[343][0-8]: 181 182 191 192 281 282 291 292 
+		nodeElementTbl[344][0-8]: 182 183 192 193 282 283 292 293 
+		nodeElementTbl[345][0-8]: 183 184 193 194 283 284 293 294 
+		nodeElementTbl[346][0-8]: 184 185 194 195 284 285 294 295 
+		nodeElementTbl[347][0-8]: 185 186 195 196 285 286 295 296 
+		nodeElementTbl[348][0-8]: 186 187 196 197 286 287 296 297 
+		nodeElementTbl[349][0-8]: 187 188 197 198 287 288 297 298 
+		nodeElementTbl[350][0-8]: 188 189 198 199 288 289 298 299 
+		nodeElementTbl[351][0-8]: 189 1000 199 1000 289 1000 299 1000 
+		nodeElementTbl[352][0-8]: 1000 190 1000 1000 1000 290 1000 1000 
+		nodeElementTbl[353][0-8]: 190 191 1000 1000 290 291 1000 1000 
+		nodeElementTbl[354][0-8]: 191 192 1000 1000 291 292 1000 1000 
+		nodeElementTbl[355][0-8]: 192 193 1000 1000 292 293 1000 1000 
+		nodeElementTbl[356][0-8]: 193 194 1000 1000 293 294 1000 1000 
+		nodeElementTbl[357][0-8]: 194 195 1000 1000 294 295 1000 1000 
+		nodeElementTbl[358][0-8]: 195 196 1000 1000 295 296 1000 1000 
+		nodeElementTbl[359][0-8]: 196 197 1000 1000 296 297 1000 1000 
+		nodeElementTbl[360][0-8]: 197 198 1000 1000 297 298 1000 1000 
+		nodeElementTbl[361][0-8]: 198 199 1000 1000 298 299 1000 1000 
+		nodeElementTbl[362][0-8]: 199 1000 1000 1000 299 1000 1000 1000 
+		nodeElementTbl[363][0-8]: 1000 1000 1000 200 1000 1000 1000 300 
+		nodeElementTbl[364][0-8]: 1000 1000 200 201 1000 1000 300 301 
+		nodeElementTbl[365][0-8]: 1000 1000 201 202 1000 1000 301 302 
+		nodeElementTbl[366][0-8]: 1000 1000 202 203 1000 1000 302 303 
+		nodeElementTbl[367][0-8]: 1000 1000 203 204 1000 1000 303 304 
+		nodeElementTbl[368][0-8]: 1000 1000 204 205 1000 1000 304 305 
+		nodeElementTbl[369][0-8]: 1000 1000 205 206 1000 1000 305 306 
+		nodeElementTbl[370][0-8]: 1000 1000 206 207 1000 1000 306 307 
+		nodeElementTbl[371][0-8]: 1000 1000 207 208 1000 1000 307 308 
+		nodeElementTbl[372][0-8]: 1000 1000 208 209 1000 1000 308 309 
+		nodeElementTbl[373][0-8]: 1000 1000 209 1000 1000 1000 309 1000 
+		nodeElementTbl[374][0-8]: 1000 200 1000 210 1000 300 1000 310 
+		nodeElementTbl[375][0-8]: 200 201 210 211 300 301 310 311 
+		nodeElementTbl[376][0-8]: 201 202 211 212 301 302 311 312 
+		nodeElementTbl[377][0-8]: 202 203 212 213 302 303 312 313 
+		nodeElementTbl[378][0-8]: 203 204 213 214 303 304 313 314 
+		nodeElementTbl[379][0-8]: 204 205 214 215 304 305 314 315 
+		nodeElementTbl[380][0-8]: 205 206 215 216 305 306 315 316 
+		nodeElementTbl[381][0-8]: 206 207 216 217 306 307 316 317 
+		nodeElementTbl[382][0-8]: 207 208 217 218 307 308 317 318 
+		nodeElementTbl[383][0-8]: 208 209 218 219 308 309 318 319 
+		nodeElementTbl[384][0-8]: 209 1000 219 1000 309 1000 319 1000 
+		nodeElementTbl[385][0-8]: 1000 210 1000 220 1000 310 1000 320 
+		nodeElementTbl[386][0-8]: 210 211 220 221 310 311 320 321 
+		nodeElementTbl[387][0-8]: 211 212 221 222 311 312 321 322 
+		nodeElementTbl[388][0-8]: 212 213 222 223 312 313 322 323 
+		nodeElementTbl[389][0-8]: 213 214 223 224 313 314 323 324 
+		nodeElementTbl[390][0-8]: 214 215 224 225 314 315 324 325 
+		nodeElementTbl[391][0-8]: 215 216 225 226 315 316 325 326 
+		nodeElementTbl[392][0-8]: 216 217 226 227 316 317 326 327 
+		nodeElementTbl[393][0-8]: 217 218 227 228 317 318 327 328 
+		nodeElementTbl[394][0-8]: 218 219 228 229 318 319 328 329 
+		nodeElementTbl[395][0-8]: 219 1000 229 1000 319 1000 329 1000 
+		nodeElementTbl[396][0-8]: 1000 220 1000 230 1000 320 1000 330 
+		nodeElementTbl[397][0-8]: 220 221 230 231 320 321 330 331 
+		nodeElementTbl[398][0-8]: 221 222 231 232 321 322 331 332 
+		nodeElementTbl[399][0-8]: 222 223 232 233 322 323 332 333 
+		nodeElementTbl[400][0-8]: 223 224 233 234 323 324 333 334 
+		nodeElementTbl[401][0-8]: 224 225 234 235 324 325 334 335 
+		nodeElementTbl[402][0-8]: 225 226 235 236 325 326 335 336 
+		nodeElementTbl[403][0-8]: 226 227 236 237 326 327 336 337 
+		nodeElementTbl[404][0-8]: 227 228 237 238 327 328 337 338 
+		nodeElementTbl[405][0-8]: 228 229 238 239 328 329 338 339 
+		nodeElementTbl[406][0-8]: 229 1000 239 1000 329 1000 339 1000 
+		nodeElementTbl[407][0-8]: 1000 230 1000 240 1000 330 1000 340 
+		nodeElementTbl[408][0-8]: 230 231 240 241 330 331 340 341 
+		nodeElementTbl[409][0-8]: 231 232 241 242 331 332 341 342 
+		nodeElementTbl[410][0-8]: 232 233 242 243 332 333 342 343 
+		nodeElementTbl[411][0-8]: 233 234 243 244 333 334 343 344 
+		nodeElementTbl[412][0-8]: 234 235 244 245 334 335 344 345 
+		nodeElementTbl[413][0-8]: 235 236 245 246 335 336 345 346 
+		nodeElementTbl[414][0-8]: 236 237 246 247 336 337 346 347 
+		nodeElementTbl[415][0-8]: 237 238 247 248 337 338 347 348 
+		nodeElementTbl[416][0-8]: 238 239 248 249 338 339 348 349 
+		nodeElementTbl[417][0-8]: 239 1000 249 1000 339 1000 349 1000 
+		nodeElementTbl[418][0-8]: 1000 240 1000 250 1000 340 1000 350 
+		nodeElementTbl[419][0-8]: 240 241 250 251 340 341 350 351 
+		nodeElementTbl[420][0-8]: 241 242 251 252 341 342 351 352 
+		nodeElementTbl[421][0-8]: 242 243 252 253 342 343 352 353 
+		nodeElementTbl[422][0-8]: 243 244 253 254 343 344 353 354 
+		nodeElementTbl[423][0-8]: 244 245 254 255 344 345 354 355 
+		nodeElementTbl[424][0-8]: 245 246 255 256 345 346 355 356 
+		nodeElementTbl[425][0-8]: 246 247 256 257 346 347 356 357 
+		nodeElementTbl[426][0-8]: 247 248 257 258 347 348 357 358 
+		nodeElementTbl[427][0-8]: 248 249 258 259 348 349 358 359 
+		nodeElementTbl[428][0-8]: 249 1000 259 1000 349 1000 359 1000 
+		nodeElementTbl[429][0-8]: 1000 250 1000 260 1000 350 1000 360 
+		nodeElementTbl[430][0-8]: 250 251 260 261 350 351 360 361 
+		nodeElementTbl[431][0-8]: 251 252 261 262 351 352 361 362 
+		nodeElementTbl[432][0-8]: 252 253 262 263 352 353 362 363 
+		nodeElementTbl[433][0-8]: 253 254 263 264 353 354 363 364 
+		nodeElementTbl[434][0-8]: 254 255 264 265 354 355 364 365 
+		nodeElementTbl[435][0-8]: 255 256 265 266 355 356 365 366 
+		nodeElementTbl[436][0-8]: 256 257 266 267 356 357 366 367 
+		nodeElementTbl[437][0-8]: 257 258 267 268 357 358 367 368 
+		nodeElementTbl[438][0-8]: 258 259 268 269 358 359 368 369 
+		nodeElementTbl[439][0-8]: 259 1000 269 1000 359 1000 369 1000 
+		nodeElementTbl[440][0-8]: 1000 260 1000 270 1000 360 1000 370 
+		nodeElementTbl[441][0-8]: 260 261 270 271 360 361 370 371 
+		nodeElementTbl[442][0-8]: 261 262 271 272 361 362 371 372 
+		nodeElementTbl[443][0-8]: 262 263 272 273 362 363 372 373 
+		nodeElementTbl[444][0-8]: 263 264 273 274 363 364 373 374 
+		nodeElementTbl[445][0-8]: 264 265 274 275 364 365 374 375 
+		nodeElementTbl[446][0-8]: 265 266 275 276 365 366 375 376 
+		nodeElementTbl[447][0-8]: 266 267 276 277 366 367 376 377 
+		nodeElementTbl[448][0-8]: 267 268 277 278 367 368 377 378 
+		nodeElementTbl[449][0-8]: 268 269 278 279 368 369 378 379 
+		nodeElementTbl[450][0-8]: 269 1000 279 1000 369 1000 379 1000 
+		nodeElementTbl[451][0-8]: 1000 270 1000 280 1000 370 1000 380 
+		nodeElementTbl[452][0-8]: 270 271 280 281 370 371 380 381 
+		nodeElementTbl[453][0-8]: 271 272 281 282 371 372 381 382 
+		nodeElementTbl[454][0-8]: 272 273 282 283 372 373 382 383 
+		nodeElementTbl[455][0-8]: 273 274 283 284 373 374 383 384 
+		nodeElementTbl[456][0-8]: 274 275 284 285 374 375 384 385 
+		nodeElementTbl[457][0-8]: 275 276 285 286 375 376 385 386 
+		nodeElementTbl[458][0-8]: 276 277 286 287 376 377 386 387 
+		nodeElementTbl[459][0-8]: 277 278 287 288 377 378 387 388 
+		nodeElementTbl[460][0-8]: 278 279 288 289 378 379 388 389 
+		nodeElementTbl[461][0-8]: 279 1000 289 1000 379 1000 389 1000 
+		nodeElementTbl[462][0-8]: 1000 280 1000 290 1000 380 1000 390 
+		nodeElementTbl[463][0-8]: 280 281 290 291 380 381 390 391 
+		nodeElementTbl[464][0-8]: 281 282 291 292 381 382 391 392 
+		nodeElementTbl[465][0-8]: 282 283 292 293 382 383 392 393 
+		nodeElementTbl[466][0-8]: 283 284 293 294 383 384 393 394 
+		nodeElementTbl[467][0-8]: 284 285 294 295 384 385 394 395 
+		nodeElementTbl[468][0-8]: 285 286 295 296 385 386 395 396 
+		nodeElementTbl[469][0-8]: 286 287 296 297 386 387 396 397 
+		nodeElementTbl[470][0-8]: 287 288 297 298 387 388 397 398 
+		nodeElementTbl[471][0-8]: 288 289 298 299 388 389 398 399 
+		nodeElementTbl[472][0-8]: 289 1000 299 1000 389 1000 399 1000 
+		nodeElementTbl[473][0-8]: 1000 290 1000 1000 1000 390 1000 1000 
+		nodeElementTbl[474][0-8]: 290 291 1000 1000 390 391 1000 1000 
+		nodeElementTbl[475][0-8]: 291 292 1000 1000 391 392 1000 1000 
+		nodeElementTbl[476][0-8]: 292 293 1000 1000 392 393 1000 1000 
+		nodeElementTbl[477][0-8]: 293 294 1000 1000 393 394 1000 1000 
+		nodeElementTbl[478][0-8]: 294 295 1000 1000 394 395 1000 1000 
+		nodeElementTbl[479][0-8]: 295 296 1000 1000 395 396 1000 1000 
+		nodeElementTbl[480][0-8]: 296 297 1000 1000 396 397 1000 1000 
+		nodeElementTbl[481][0-8]: 297 298 1000 1000 397 398 1000 1000 
+		nodeElementTbl[482][0-8]: 298 299 1000 1000 398 399 1000 1000 
+		nodeElementTbl[483][0-8]: 299 1000 1000 1000 399 1000 1000 1000 
+		nodeElementTbl[484][0-8]: 1000 1000 1000 300 1000 1000 1000 400 
+		nodeElementTbl[485][0-8]: 1000 1000 300 301 1000 1000 400 401 
+		nodeElementTbl[486][0-8]: 1000 1000 301 302 1000 1000 401 402 
+		nodeElementTbl[487][0-8]: 1000 1000 302 303 1000 1000 402 403 
+		nodeElementTbl[488][0-8]: 1000 1000 303 304 1000 1000 403 404 
+		nodeElementTbl[489][0-8]: 1000 1000 304 305 1000 1000 404 405 
+		nodeElementTbl[490][0-8]: 1000 1000 305 306 1000 1000 405 406 
+		nodeElementTbl[491][0-8]: 1000 1000 306 307 1000 1000 406 407 
+		nodeElementTbl[492][0-8]: 1000 1000 307 308 1000 1000 407 408 
+		nodeElementTbl[493][0-8]: 1000 1000 308 309 1000 1000 408 409 
+		nodeElementTbl[494][0-8]: 1000 1000 309 1000 1000 1000 409 1000 
+		nodeElementTbl[495][0-8]: 1000 300 1000 310 1000 400 1000 410 
+		nodeElementTbl[496][0-8]: 300 301 310 311 400 401 410 411 
+		nodeElementTbl[497][0-8]: 301 302 311 312 401 402 411 412 
+		nodeElementTbl[498][0-8]: 302 303 312 313 402 403 412 413 
+		nodeElementTbl[499][0-8]: 303 304 313 314 403 404 413 414 
+		nodeElementTbl[500][0-8]: 304 305 314 315 404 405 414 415 
+		nodeElementTbl[501][0-8]: 305 306 315 316 405 406 415 416 
+		nodeElementTbl[502][0-8]: 306 307 316 317 406 407 416 417 
+		nodeElementTbl[503][0-8]: 307 308 317 318 407 408 417 418 
+		nodeElementTbl[504][0-8]: 308 309 318 319 408 409 418 419 
+		nodeElementTbl[505][0-8]: 309 1000 319 1000 409 1000 419 1000 
+		nodeElementTbl[506][0-8]: 1000 310 1000 320 1000 410 1000 420 
+		nodeElementTbl[507][0-8]: 310 311 320 321 410 411 420 421 
+		nodeElementTbl[508][0-8]: 311 312 321 322 411 412 421 422 
+		nodeElementTbl[509][0-8]: 312 313 322 323 412 413 422 423 
+		nodeElementTbl[510][0-8]: 313 314 323 324 413 414 423 424 
+		nodeElementTbl[511][0-8]: 314 315 324 325 414 415 424 425 
+		nodeElementTbl[512][0-8]: 315 316 325 326 415 416 425 426 
+		nodeElementTbl[513][0-8]: 316 317 326 327 416 417 426 427 
+		nodeElementTbl[514][0-8]: 317 318 327 328 417 418 427 428 
+		nodeElementTbl[515][0-8]: 318 319 328 329 418 419 428 429 
+		nodeElementTbl[516][0-8]: 319 1000 329 1000 419 1000 429 1000 
+		nodeElementTbl[517][0-8]: 1000 320 1000 330 1000 420 1000 430 
+		nodeElementTbl[518][0-8]: 320 321 330 331 420 421 430 431 
+		nodeElementTbl[519][0-8]: 321 322 331 332 421 422 431 432 
+		nodeElementTbl[520][0-8]: 322 323 332 333 422 423 432 433 
+		nodeElementTbl[521][0-8]: 323 324 333 334 423 424 433 434 
+		nodeElementTbl[522][0-8]: 324 325 334 335 424 425 434 435 
+		nodeElementTbl[523][0-8]: 325 326 335 336 425 426 435 436 
+		nodeElementTbl[524][0-8]: 326 327 336 337 426 427 436 437 
+		nodeElementTbl[525][0-8]: 327 328 337 338 427 428 437 438 
+		nodeElementTbl[526][0-8]: 328 329 338 339 428 429 438 439 
+		nodeElementTbl[527][0-8]: 329 1000 339 1000 429 1000 439 1000 
+		nodeElementTbl[528][0-8]: 1000 330 1000 340 1000 430 1000 440 
+		nodeElementTbl[529][0-8]: 330 331 340 341 430 431 440 441 
+		nodeElementTbl[530][0-8]: 331 332 341 342 431 432 441 442 
+		nodeElementTbl[531][0-8]: 332 333 342 343 432 433 442 443 
+		nodeElementTbl[532][0-8]: 333 334 343 344 433 434 443 444 
+		nodeElementTbl[533][0-8]: 334 335 344 345 434 435 444 445 
+		nodeElementTbl[534][0-8]: 335 336 345 346 435 436 445 446 
+		nodeElementTbl[535][0-8]: 336 337 346 347 436 437 446 447 
+		nodeElementTbl[536][0-8]: 337 338 347 348 437 438 447 448 
+		nodeElementTbl[537][0-8]: 338 339 348 349 438 439 448 449 
+		nodeElementTbl[538][0-8]: 339 1000 349 1000 439 1000 449 1000 
+		nodeElementTbl[539][0-8]: 1000 340 1000 350 1000 440 1000 450 
+		nodeElementTbl[540][0-8]: 340 341 350 351 440 441 450 451 
+		nodeElementTbl[541][0-8]: 341 342 351 352 441 442 451 452 
+		nodeElementTbl[542][0-8]: 342 343 352 353 442 443 452 453 
+		nodeElementTbl[543][0-8]: 343 344 353 354 443 444 453 454 
+		nodeElementTbl[544][0-8]: 344 345 354 355 444 445 454 455 
+		nodeElementTbl[545][0-8]: 345 346 355 356 445 446 455 456 
+		nodeElementTbl[546][0-8]: 346 347 356 357 446 447 456 457 
+		nodeElementTbl[547][0-8]: 347 348 357 358 447 448 457 458 
+		nodeElementTbl[548][0-8]: 348 349 358 359 448 449 458 459 
+		nodeElementTbl[549][0-8]: 349 1000 359 1000 449 1000 459 1000 
+		nodeElementTbl[550][0-8]: 1000 350 1000 360 1000 450 1000 460 
+		nodeElementTbl[551][0-8]: 350 351 360 361 450 451 460 461 
+		nodeElementTbl[552][0-8]: 351 352 361 362 451 452 461 462 
+		nodeElementTbl[553][0-8]: 352 353 362 363 452 453 462 463 
+		nodeElementTbl[554][0-8]: 353 354 363 364 453 454 463 464 
+		nodeElementTbl[555][0-8]: 354 355 364 365 454 455 464 465 
+		nodeElementTbl[556][0-8]: 355 356 365 366 455 456 465 466 
+		nodeElementTbl[557][0-8]: 356 357 366 367 456 457 466 467 
+		nodeElementTbl[558][0-8]: 357 358 367 368 457 458 467 468 
+		nodeElementTbl[559][0-8]: 358 359 368 369 458 459 468 469 
+		nodeElementTbl[560][0-8]: 359 1000 369 1000 459 1000 469 1000 
+		nodeElementTbl[561][0-8]: 1000 360 1000 370 1000 460 1000 470 
+		nodeElementTbl[562][0-8]: 360 361 370 371 460 461 470 471 
+		nodeElementTbl[563][0-8]: 361 362 371 372 461 462 471 472 
+		nodeElementTbl[564][0-8]: 362 363 372 373 462 463 472 473 
+		nodeElementTbl[565][0-8]: 363 364 373 374 463 464 473 474 
+		nodeElementTbl[566][0-8]: 364 365 374 375 464 465 474 475 
+		nodeElementTbl[567][0-8]: 365 366 375 376 465 466 475 476 
+		nodeElementTbl[568][0-8]: 366 367 376 377 466 467 476 477 
+		nodeElementTbl[569][0-8]: 367 368 377 378 467 468 477 478 
+		nodeElementTbl[570][0-8]: 368 369 378 379 468 469 478 479 
+		nodeElementTbl[571][0-8]: 369 1000 379 1000 469 1000 479 1000 
+		nodeElementTbl[572][0-8]: 1000 370 1000 380 1000 470 1000 480 
+		nodeElementTbl[573][0-8]: 370 371 380 381 470 471 480 481 
+		nodeElementTbl[574][0-8]: 371 372 381 382 471 472 481 482 
+		nodeElementTbl[575][0-8]: 372 373 382 383 472 473 482 483 
+		nodeElementTbl[576][0-8]: 373 374 383 384 473 474 483 484 
+		nodeElementTbl[577][0-8]: 374 375 384 385 474 475 484 485 
+		nodeElementTbl[578][0-8]: 375 376 385 386 475 476 485 486 
+		nodeElementTbl[579][0-8]: 376 377 386 387 476 477 486 487 
+		nodeElementTbl[580][0-8]: 377 378 387 388 477 478 487 488 
+		nodeElementTbl[581][0-8]: 378 379 388 389 478 479 488 489 
+		nodeElementTbl[582][0-8]: 379 1000 389 1000 479 1000 489 1000 
+		nodeElementTbl[583][0-8]: 1000 380 1000 390 1000 480 1000 490 
+		nodeElementTbl[584][0-8]: 380 381 390 391 480 481 490 491 
+		nodeElementTbl[585][0-8]: 381 382 391 392 481 482 491 492 
+		nodeElementTbl[586][0-8]: 382 383 392 393 482 483 492 493 
+		nodeElementTbl[587][0-8]: 383 384 393 394 483 484 493 494 
+		nodeElementTbl[588][0-8]: 384 385 394 395 484 485 494 495 
+		nodeElementTbl[589][0-8]: 385 386 395 396 485 486 495 496 
+		nodeElementTbl[590][0-8]: 386 387 396 397 486 487 496 497 
+		nodeElementTbl[591][0-8]: 387 388 397 398 487 488 497 498 
+		nodeElementTbl[592][0-8]: 388 389 398 399 488 489 498 499 
+		nodeElementTbl[593][0-8]: 389 1000 399 1000 489 1000 499 1000 
+		nodeElementTbl[594][0-8]: 1000 390 1000 1000 1000 490 1000 1000 
+		nodeElementTbl[595][0-8]: 390 391 1000 1000 490 491 1000 1000 
+		nodeElementTbl[596][0-8]: 391 392 1000 1000 491 492 1000 1000 
+		nodeElementTbl[597][0-8]: 392 393 1000 1000 492 493 1000 1000 
+		nodeElementTbl[598][0-8]: 393 394 1000 1000 493 494 1000 1000 
+		nodeElementTbl[599][0-8]: 394 395 1000 1000 494 495 1000 1000 
+		nodeElementTbl[600][0-8]: 395 396 1000 1000 495 496 1000 1000 
+		nodeElementTbl[601][0-8]: 396 397 1000 1000 496 497 1000 1000 
+		nodeElementTbl[602][0-8]: 397 398 1000 1000 497 498 1000 1000 
+		nodeElementTbl[603][0-8]: 398 399 1000 1000 498 499 1000 1000 
+		nodeElementTbl[604][0-8]: 399 1000 1000 1000 499 1000 1000 1000 
+		nodeElementTbl[605][0-8]: 1000 1000 1000 400 1000 1000 1000 500 
+		nodeElementTbl[606][0-8]: 1000 1000 400 401 1000 1000 500 501 
+		nodeElementTbl[607][0-8]: 1000 1000 401 402 1000 1000 501 502 
+		nodeElementTbl[608][0-8]: 1000 1000 402 403 1000 1000 502 503 
+		nodeElementTbl[609][0-8]: 1000 1000 403 404 1000 1000 503 504 
+		nodeElementTbl[610][0-8]: 1000 1000 404 405 1000 1000 504 505 
+		nodeElementTbl[611][0-8]: 1000 1000 405 406 1000 1000 505 506 
+		nodeElementTbl[612][0-8]: 1000 1000 406 407 1000 1000 506 507 
+		nodeElementTbl[613][0-8]: 1000 1000 407 408 1000 1000 507 508 
+		nodeElementTbl[614][0-8]: 1000 1000 408 409 1000 1000 508 509 
+		nodeElementTbl[615][0-8]: 1000 1000 409 1000 1000 1000 509 1000 
+		nodeElementTbl[616][0-8]: 1000 400 1000 410 1000 500 1000 510 
+		nodeElementTbl[617][0-8]: 400 401 410 411 500 501 510 511 
+		nodeElementTbl[618][0-8]: 401 402 411 412 501 502 511 512 
+		nodeElementTbl[619][0-8]: 402 403 412 413 502 503 512 513 
+		nodeElementTbl[620][0-8]: 403 404 413 414 503 504 513 514 
+		nodeElementTbl[621][0-8]: 404 405 414 415 504 505 514 515 
+		nodeElementTbl[622][0-8]: 405 406 415 416 505 506 515 516 
+		nodeElementTbl[623][0-8]: 406 407 416 417 506 507 516 517 
+		nodeElementTbl[624][0-8]: 407 408 417 418 507 508 517 518 
+		nodeElementTbl[625][0-8]: 408 409 418 419 508 509 518 519 
+		nodeElementTbl[626][0-8]: 409 1000 419 1000 509 1000 519 1000 
+		nodeElementTbl[627][0-8]: 1000 410 1000 420 1000 510 1000 520 
+		nodeElementTbl[628][0-8]: 410 411 420 421 510 511 520 521 
+		nodeElementTbl[629][0-8]: 411 412 421 422 511 512 521 522 
+		nodeElementTbl[630][0-8]: 412 413 422 423 512 513 522 523 
+		nodeElementTbl[631][0-8]: 413 414 423 424 513 514 523 524 
+		nodeElementTbl[632][0-8]: 414 415 424 425 514 515 524 525 
+		nodeElementTbl[633][0-8]: 415 416 425 426 515 516 525 526 
+		nodeElementTbl[634][0-8]: 416 417 426 427 516 517 526 527 
+		nodeElementTbl[635][0-8]: 417 418 427 428 517 518 527 528 
+		nodeElementTbl[636][0-8]: 418 419 428 429 518 519 528 529 
+		nodeElementTbl[637][0-8]: 419 1000 429 1000 519 1000 529 1000 
+		nodeElementTbl[638][0-8]: 1000 420 1000 430 1000 520 1000 530 
+		nodeElementTbl[639][0-8]: 420 421 430 431 520 521 530 531 
+		nodeElementTbl[640][0-8]: 421 422 431 432 521 522 531 532 
+		nodeElementTbl[641][0-8]: 422 423 432 433 522 523 532 533 
+		nodeElementTbl[642][0-8]: 423 424 433 434 523 524 533 534 
+		nodeElementTbl[643][0-8]: 424 425 434 435 524 525 534 535 
+		nodeElementTbl[644][0-8]: 425 426 435 436 525 526 535 536 
+		nodeElementTbl[645][0-8]: 426 427 436 437 526 527 536 537 
+		nodeElementTbl[646][0-8]: 427 428 437 438 527 528 537 538 
+		nodeElementTbl[647][0-8]: 428 429 438 439 528 529 538 539 
+		nodeElementTbl[648][0-8]: 429 1000 439 1000 529 1000 539 1000 
+		nodeElementTbl[649][0-8]: 1000 430 1000 440 1000 530 1000 540 
+		nodeElementTbl[650][0-8]: 430 431 440 441 530 531 540 541 
+		nodeElementTbl[651][0-8]: 431 432 441 442 531 532 541 542 
+		nodeElementTbl[652][0-8]: 432 433 442 443 532 533 542 543 
+		nodeElementTbl[653][0-8]: 433 434 443 444 533 534 543 544 
+		nodeElementTbl[654][0-8]: 434 435 444 445 534 535 544 545 
+		nodeElementTbl[655][0-8]: 435 436 445 446 535 536 545 546 
+		nodeElementTbl[656][0-8]: 436 437 446 447 536 537 546 547 
+		nodeElementTbl[657][0-8]: 437 438 447 448 537 538 547 548 
+		nodeElementTbl[658][0-8]: 438 439 448 449 538 539 548 549 
+		nodeElementTbl[659][0-8]: 439 1000 449 1000 539 1000 549 1000 
+		nodeElementTbl[660][0-8]: 1000 440 1000 450 1000 540 1000 550 
+		nodeElementTbl[661][0-8]: 440 441 450 451 540 541 550 551 
+		nodeElementTbl[662][0-8]: 441 442 451 452 541 542 551 552 
+		nodeElementTbl[663][0-8]: 442 443 452 453 542 543 552 553 
+		nodeElementTbl[664][0-8]: 443 444 453 454 543 544 553 554 
+		nodeElementTbl[665][0-8]: 444 445 454 455 544 545 554 555 
+		nodeElementTbl[666][0-8]: 445 446 455 456 545 546 555 556 
+		nodeElementTbl[667][0-8]: 446 447 456 457 546 547 556 557 
+		nodeElementTbl[668][0-8]: 447 448 457 458 547 548 557 558 
+		nodeElementTbl[669][0-8]: 448 449 458 459 548 549 558 559 
+		nodeElementTbl[670][0-8]: 449 1000 459 1000 549 1000 559 1000 
+		nodeElementTbl[671][0-8]: 1000 450 1000 460 1000 550 1000 560 
+		nodeElementTbl[672][0-8]: 450 451 460 461 550 551 560 561 
+		nodeElementTbl[673][0-8]: 451 452 461 462 551 552 561 562 
+		nodeElementTbl[674][0-8]: 452 453 462 463 552 553 562 563 
+		nodeElementTbl[675][0-8]: 453 454 463 464 553 554 563 564 
+		nodeElementTbl[676][0-8]: 454 455 464 465 554 555 564 565 
+		nodeElementTbl[677][0-8]: 455 456 465 466 555 556 565 566 
+		nodeElementTbl[678][0-8]: 456 457 466 467 556 557 566 567 
+		nodeElementTbl[679][0-8]: 457 458 467 468 557 558 567 568 
+		nodeElementTbl[680][0-8]: 458 459 468 469 558 559 568 569 
+		nodeElementTbl[681][0-8]: 459 1000 469 1000 559 1000 569 1000 
+		nodeElementTbl[682][0-8]: 1000 460 1000 470 1000 560 1000 570 
+		nodeElementTbl[683][0-8]: 460 461 470 471 560 561 570 571 
+		nodeElementTbl[684][0-8]: 461 462 471 472 561 562 571 572 
+		nodeElementTbl[685][0-8]: 462 463 472 473 562 563 572 573 
+		nodeElementTbl[686][0-8]: 463 464 473 474 563 564 573 574 
+		nodeElementTbl[687][0-8]: 464 465 474 475 564 565 574 575 
+		nodeElementTbl[688][0-8]: 465 466 475 476 565 566 575 576 
+		nodeElementTbl[689][0-8]: 466 467 476 477 566 567 576 577 
+		nodeElementTbl[690][0-8]: 467 468 477 478 567 568 577 578 
+		nodeElementTbl[691][0-8]: 468 469 478 479 568 569 578 579 
+		nodeElementTbl[692][0-8]: 469 1000 479 1000 569 1000 579 1000 
+		nodeElementTbl[693][0-8]: 1000 470 1000 480 1000 570 1000 580 
+		nodeElementTbl[694][0-8]: 470 471 480 481 570 571 580 581 
+		nodeElementTbl[695][0-8]: 471 472 481 482 571 572 581 582 
+		nodeElementTbl[696][0-8]: 472 473 482 483 572 573 582 583 
+		nodeElementTbl[697][0-8]: 473 474 483 484 573 574 583 584 
+		nodeElementTbl[698][0-8]: 474 475 484 485 574 575 584 585 
+		nodeElementTbl[699][0-8]: 475 476 485 486 575 576 585 586 
+		nodeElementTbl[700][0-8]: 476 477 486 487 576 577 586 587 
+		nodeElementTbl[701][0-8]: 477 478 487 488 577 578 587 588 
+		nodeElementTbl[702][0-8]: 478 479 488 489 578 579 588 589 
+		nodeElementTbl[703][0-8]: 479 1000 489 1000 579 1000 589 1000 
+		nodeElementTbl[704][0-8]: 1000 480 1000 490 1000 580 1000 590 
+		nodeElementTbl[705][0-8]: 480 481 490 491 580 581 590 591 
+		nodeElementTbl[706][0-8]: 481 482 491 492 581 582 591 592 
+		nodeElementTbl[707][0-8]: 482 483 492 493 582 583 592 593 
+		nodeElementTbl[708][0-8]: 483 484 493 494 583 584 593 594 
+		nodeElementTbl[709][0-8]: 484 485 494 495 584 585 594 595 
+		nodeElementTbl[710][0-8]: 485 486 495 496 585 586 595 596 
+		nodeElementTbl[711][0-8]: 486 487 496 497 586 587 596 597 
+		nodeElementTbl[712][0-8]: 487 488 497 498 587 588 597 598 
+		nodeElementTbl[713][0-8]: 488 489 498 499 588 589 598 599 
+		nodeElementTbl[714][0-8]: 489 1000 499 1000 589 1000 599 1000 
+		nodeElementTbl[715][0-8]: 1000 490 1000 1000 1000 590 1000 1000 
+		nodeElementTbl[716][0-8]: 490 491 1000 1000 590 591 1000 1000 
+		nodeElementTbl[717][0-8]: 491 492 1000 1000 591 592 1000 1000 
+		nodeElementTbl[718][0-8]: 492 493 1000 1000 592 593 1000 1000 
+		nodeElementTbl[719][0-8]: 493 494 1000 1000 593 594 1000 1000 
+		nodeElementTbl[720][0-8]: 494 495 1000 1000 594 595 1000 1000 
+		nodeElementTbl[721][0-8]: 495 496 1000 1000 595 596 1000 1000 
+		nodeElementTbl[722][0-8]: 496 497 1000 1000 596 597 1000 1000 
+		nodeElementTbl[723][0-8]: 497 498 1000 1000 597 598 1000 1000 
+		nodeElementTbl[724][0-8]: 498 499 1000 1000 598 599 1000 1000 
+		nodeElementTbl[725][0-8]: 499 1000 1000 1000 599 1000 1000 1000 
+		nodeElementTbl[726][0-8]: 1000 1000 1000 500 1000 1000 1000 600 
+		nodeElementTbl[727][0-8]: 1000 1000 500 501 1000 1000 600 601 
+		nodeElementTbl[728][0-8]: 1000 1000 501 502 1000 1000 601 602 
+		nodeElementTbl[729][0-8]: 1000 1000 502 503 1000 1000 602 603 
+		nodeElementTbl[730][0-8]: 1000 1000 503 504 1000 1000 603 604 
+		nodeElementTbl[731][0-8]: 1000 1000 504 505 1000 1000 604 605 
+		nodeElementTbl[732][0-8]: 1000 1000 505 506 1000 1000 605 606 
+		nodeElementTbl[733][0-8]: 1000 1000 506 507 1000 1000 606 607 
+		nodeElementTbl[734][0-8]: 1000 1000 507 508 1000 1000 607 608 
+		nodeElementTbl[735][0-8]: 1000 1000 508 509 1000 1000 608 609 
+		nodeElementTbl[736][0-8]: 1000 1000 509 1000 1000 1000 609 1000 
+		nodeElementTbl[737][0-8]: 1000 500 1000 510 1000 600 1000 610 
+		nodeElementTbl[738][0-8]: 500 501 510 511 600 601 610 611 
+		nodeElementTbl[739][0-8]: 501 502 511 512 601 602 611 612 
+		nodeElementTbl[740][0-8]: 502 503 512 513 602 603 612 613 
+		nodeElementTbl[741][0-8]: 503 504 513 514 603 604 613 614 
+		nodeElementTbl[742][0-8]: 504 505 514 515 604 605 614 615 
+		nodeElementTbl[743][0-8]: 505 506 515 516 605 606 615 616 
+		nodeElementTbl[744][0-8]: 506 507 516 517 606 607 616 617 
+		nodeElementTbl[745][0-8]: 507 508 517 518 607 608 617 618 
+		nodeElementTbl[746][0-8]: 508 509 518 519 608 609 618 619 
+		nodeElementTbl[747][0-8]: 509 1000 519 1000 609 1000 619 1000 
+		nodeElementTbl[748][0-8]: 1000 510 1000 520 1000 610 1000 620 
+		nodeElementTbl[749][0-8]: 510 511 520 521 610 611 620 621 
+		nodeElementTbl[750][0-8]: 511 512 521 522 611 612 621 622 
+		nodeElementTbl[751][0-8]: 512 513 522 523 612 613 622 623 
+		nodeElementTbl[752][0-8]: 513 514 523 524 613 614 623 624 
+		nodeElementTbl[753][0-8]: 514 515 524 525 614 615 624 625 
+		nodeElementTbl[754][0-8]: 515 516 525 526 615 616 625 626 
+		nodeElementTbl[755][0-8]: 516 517 526 527 616 617 626 627 
+		nodeElementTbl[756][0-8]: 517 518 527 528 617 618 627 628 
+		nodeElementTbl[757][0-8]: 518 519 528 529 618 619 628 629 
+		nodeElementTbl[758][0-8]: 519 1000 529 1000 619 1000 629 1000 
+		nodeElementTbl[759][0-8]: 1000 520 1000 530 1000 620 1000 630 
+		nodeElementTbl[760][0-8]: 520 521 530 531 620 621 630 631 
+		nodeElementTbl[761][0-8]: 521 522 531 532 621 622 631 632 
+		nodeElementTbl[762][0-8]: 522 523 532 533 622 623 632 633 
+		nodeElementTbl[763][0-8]: 523 524 533 534 623 624 633 634 
+		nodeElementTbl[764][0-8]: 524 525 534 535 624 625 634 635 
+		nodeElementTbl[765][0-8]: 525 526 535 536 625 626 635 636 
+		nodeElementTbl[766][0-8]: 526 527 536 537 626 627 636 637 
+		nodeElementTbl[767][0-8]: 527 528 537 538 627 628 637 638 
+		nodeElementTbl[768][0-8]: 528 529 538 539 628 629 638 639 
+		nodeElementTbl[769][0-8]: 529 1000 539 1000 629 1000 639 1000 
+		nodeElementTbl[770][0-8]: 1000 530 1000 540 1000 630 1000 640 
+		nodeElementTbl[771][0-8]: 530 531 540 541 630 631 640 641 
+		nodeElementTbl[772][0-8]: 531 532 541 542 631 632 641 642 
+		nodeElementTbl[773][0-8]: 532 533 542 543 632 633 642 643 
+		nodeElementTbl[774][0-8]: 533 534 543 544 633 634 643 644 
+		nodeElementTbl[775][0-8]: 534 535 544 545 634 635 644 645 
+		nodeElementTbl[776][0-8]: 535 536 545 546 635 636 645 646 
+		nodeElementTbl[777][0-8]: 536 537 546 547 636 637 646 647 
+		nodeElementTbl[778][0-8]: 537 538 547 548 637 638 647 648 
+		nodeElementTbl[779][0-8]: 538 539 548 549 638 639 648 649 
+		nodeElementTbl[780][0-8]: 539 1000 549 1000 639 1000 649 1000 
+		nodeElementTbl[781][0-8]: 1000 540 1000 550 1000 640 1000 650 
+		nodeElementTbl[782][0-8]: 540 541 550 551 640 641 650 651 
+		nodeElementTbl[783][0-8]: 541 542 551 552 641 642 651 652 
+		nodeElementTbl[784][0-8]: 542 543 552 553 642 643 652 653 
+		nodeElementTbl[785][0-8]: 543 544 553 554 643 644 653 654 
+		nodeElementTbl[786][0-8]: 544 545 554 555 644 645 654 655 
+		nodeElementTbl[787][0-8]: 545 546 555 556 645 646 655 656 
+		nodeElementTbl[788][0-8]: 546 547 556 557 646 647 656 657 
+		nodeElementTbl[789][0-8]: 547 548 557 558 647 648 657 658 
+		nodeElementTbl[790][0-8]: 548 549 558 559 648 649 658 659 
+		nodeElementTbl[791][0-8]: 549 1000 559 1000 649 1000 659 1000 
+		nodeElementTbl[792][0-8]: 1000 550 1000 560 1000 650 1000 660 
+		nodeElementTbl[793][0-8]: 550 551 560 561 650 651 660 661 
+		nodeElementTbl[794][0-8]: 551 552 561 562 651 652 661 662 
+		nodeElementTbl[795][0-8]: 552 553 562 563 652 653 662 663 
+		nodeElementTbl[796][0-8]: 553 554 563 564 653 654 663 664 
+		nodeElementTbl[797][0-8]: 554 555 564 565 654 655 664 665 
+		nodeElementTbl[798][0-8]: 555 556 565 566 655 656 665 666 
+		nodeElementTbl[799][0-8]: 556 557 566 567 656 657 666 667 
+		nodeElementTbl[800][0-8]: 557 558 567 568 657 658 667 668 
+		nodeElementTbl[801][0-8]: 558 559 568 569 658 659 668 669 
+		nodeElementTbl[802][0-8]: 559 1000 569 1000 659 1000 669 1000 
+		nodeElementTbl[803][0-8]: 1000 560 1000 570 1000 660 1000 670 
+		nodeElementTbl[804][0-8]: 560 561 570 571 660 661 670 671 
+		nodeElementTbl[805][0-8]: 561 562 571 572 661 662 671 672 
+		nodeElementTbl[806][0-8]: 562 563 572 573 662 663 672 673 
+		nodeElementTbl[807][0-8]: 563 564 573 574 663 664 673 674 
+		nodeElementTbl[808][0-8]: 564 565 574 575 664 665 674 675 
+		nodeElementTbl[809][0-8]: 565 566 575 576 665 666 675 676 
+		nodeElementTbl[810][0-8]: 566 567 576 577 666 667 676 677 
+		nodeElementTbl[811][0-8]: 567 568 577 578 667 668 677 678 
+		nodeElementTbl[812][0-8]: 568 569 578 579 668 669 678 679 
+		nodeElementTbl[813][0-8]: 569 1000 579 1000 669 1000 679 1000 
+		nodeElementTbl[814][0-8]: 1000 570 1000 580 1000 670 1000 680 
+		nodeElementTbl[815][0-8]: 570 571 580 581 670 671 680 681 
+		nodeElementTbl[816][0-8]: 571 572 581 582 671 672 681 682 
+		nodeElementTbl[817][0-8]: 572 573 582 583 672 673 682 683 
+		nodeElementTbl[818][0-8]: 573 574 583 584 673 674 683 684 
+		nodeElementTbl[819][0-8]: 574 575 584 585 674 675 684 685 
+		nodeElementTbl[820][0-8]: 575 576 585 586 675 676 685 686 
+		nodeElementTbl[821][0-8]: 576 577 586 587 676 677 686 687 
+		nodeElementTbl[822][0-8]: 577 578 587 588 677 678 687 688 
+		nodeElementTbl[823][0-8]: 578 579 588 589 678 679 688 689 
+		nodeElementTbl[824][0-8]: 579 1000 589 1000 679 1000 689 1000 
+		nodeElementTbl[825][0-8]: 1000 580 1000 590 1000 680 1000 690 
+		nodeElementTbl[826][0-8]: 580 581 590 591 680 681 690 691 
+		nodeElementTbl[827][0-8]: 581 582 591 592 681 682 691 692 
+		nodeElementTbl[828][0-8]: 582 583 592 593 682 683 692 693 
+		nodeElementTbl[829][0-8]: 583 584 593 594 683 684 693 694 
+		nodeElementTbl[830][0-8]: 584 585 594 595 684 685 694 695 
+		nodeElementTbl[831][0-8]: 585 586 595 596 685 686 695 696 
+		nodeElementTbl[832][0-8]: 586 587 596 597 686 687 696 697 
+		nodeElementTbl[833][0-8]: 587 588 597 598 687 688 697 698 
+		nodeElementTbl[834][0-8]: 588 589 598 599 688 689 698 699 
+		nodeElementTbl[835][0-8]: 589 1000 599 1000 689 1000 699 1000 
+		nodeElementTbl[836][0-8]: 1000 590 1000 1000 1000 690 1000 1000 
+		nodeElementTbl[837][0-8]: 590 591 1000 1000 690 691 1000 1000 
+		nodeElementTbl[838][0-8]: 591 592 1000 1000 691 692 1000 1000 
+		nodeElementTbl[839][0-8]: 592 593 1000 1000 692 693 1000 1000 
+		nodeElementTbl[840][0-8]: 593 594 1000 1000 693 694 1000 1000 
+		nodeElementTbl[841][0-8]: 594 595 1000 1000 694 695 1000 1000 
+		nodeElementTbl[842][0-8]: 595 596 1000 1000 695 696 1000 1000 
+		nodeElementTbl[843][0-8]: 596 597 1000 1000 696 697 1000 1000 
+		nodeElementTbl[844][0-8]: 597 598 1000 1000 697 698 1000 1000 
+		nodeElementTbl[845][0-8]: 598 599 1000 1000 698 699 1000 1000 
+		nodeElementTbl[846][0-8]: 599 1000 1000 1000 699 1000 1000 1000 
+		nodeElementTbl[847][0-8]: 1000 1000 1000 600 1000 1000 1000 700 
+		nodeElementTbl[848][0-8]: 1000 1000 600 601 1000 1000 700 701 
+		nodeElementTbl[849][0-8]: 1000 1000 601 602 1000 1000 701 702 
+		nodeElementTbl[850][0-8]: 1000 1000 602 603 1000 1000 702 703 
+		nodeElementTbl[851][0-8]: 1000 1000 603 604 1000 1000 703 704 
+		nodeElementTbl[852][0-8]: 1000 1000 604 605 1000 1000 704 705 
+		nodeElementTbl[853][0-8]: 1000 1000 605 606 1000 1000 705 706 
+		nodeElementTbl[854][0-8]: 1000 1000 606 607 1000 1000 706 707 
+		nodeElementTbl[855][0-8]: 1000 1000 607 608 1000 1000 707 708 
+		nodeElementTbl[856][0-8]: 1000 1000 608 609 1000 1000 708 709 
+		nodeElementTbl[857][0-8]: 1000 1000 609 1000 1000 1000 709 1000 
+		nodeElementTbl[858][0-8]: 1000 600 1000 610 1000 700 1000 710 
+		nodeElementTbl[859][0-8]: 600 601 610 611 700 701 710 711 
+		nodeElementTbl[860][0-8]: 601 602 611 612 701 702 711 712 
+		nodeElementTbl[861][0-8]: 602 603 612 613 702 703 712 713 
+		nodeElementTbl[862][0-8]: 603 604 613 614 703 704 713 714 
+		nodeElementTbl[863][0-8]: 604 605 614 615 704 705 714 715 
+		nodeElementTbl[864][0-8]: 605 606 615 616 705 706 715 716 
+		nodeElementTbl[865][0-8]: 606 607 616 617 706 707 716 717 
+		nodeElementTbl[866][0-8]: 607 608 617 618 707 708 717 718 
+		nodeElementTbl[867][0-8]: 608 609 618 619 708 709 718 719 
+		nodeElementTbl[868][0-8]: 609 1000 619 1000 709 1000 719 1000 
+		nodeElementTbl[869][0-8]: 1000 610 1000 620 1000 710 1000 720 
+		nodeElementTbl[870][0-8]: 610 611 620 621 710 711 720 721 
+		nodeElementTbl[871][0-8]: 611 612 621 622 711 712 721 722 
+		nodeElementTbl[872][0-8]: 612 613 622 623 712 713 722 723 
+		nodeElementTbl[873][0-8]: 613 614 623 624 713 714 723 724 
+		nodeElementTbl[874][0-8]: 614 615 624 625 714 715 724 725 
+		nodeElementTbl[875][0-8]: 615 616 625 626 715 716 725 726 
+		nodeElementTbl[876][0-8]: 616 617 626 627 716 717 726 727 
+		nodeElementTbl[877][0-8]: 617 618 627 628 717 718 727 728 
+		nodeElementTbl[878][0-8]: 618 619 628 629 718 719 728 729 
+		nodeElementTbl[879][0-8]: 619 1000 629 1000 719 1000 729 1000 
+		nodeElementTbl[880][0-8]: 1000 620 1000 630 1000 720 1000 730 
+		nodeElementTbl[881][0-8]: 620 621 630 631 720 721 730 731 
+		nodeElementTbl[882][0-8]: 621 622 631 632 721 722 731 732 
+		nodeElementTbl[883][0-8]: 622 623 632 633 722 723 732 733 
+		nodeElementTbl[884][0-8]: 623 624 633 634 723 724 733 734 
+		nodeElementTbl[885][0-8]: 624 625 634 635 724 725 734 735 
+		nodeElementTbl[886][0-8]: 625 626 635 636 725 726 735 736 
+		nodeElementTbl[887][0-8]: 626 627 636 637 726 727 736 737 
+		nodeElementTbl[888][0-8]: 627 628 637 638 727 728 737 738 
+		nodeElementTbl[889][0-8]: 628 629 638 639 728 729 738 739 
+		nodeElementTbl[890][0-8]: 629 1000 639 1000 729 1000 739 1000 
+		nodeElementTbl[891][0-8]: 1000 630 1000 640 1000 730 1000 740 
+		nodeElementTbl[892][0-8]: 630 631 640 641 730 731 740 741 
+		nodeElementTbl[893][0-8]: 631 632 641 642 731 732 741 742 
+		nodeElementTbl[894][0-8]: 632 633 642 643 732 733 742 743 
+		nodeElementTbl[895][0-8]: 633 634 643 644 733 734 743 744 
+		nodeElementTbl[896][0-8]: 634 635 644 645 734 735 744 745 
+		nodeElementTbl[897][0-8]: 635 636 645 646 735 736 745 746 
+		nodeElementTbl[898][0-8]: 636 637 646 647 736 737 746 747 
+		nodeElementTbl[899][0-8]: 637 638 647 648 737 738 747 748 
+		nodeElementTbl[900][0-8]: 638 639 648 649 738 739 748 749 
+		nodeElementTbl[901][0-8]: 639 1000 649 1000 739 1000 749 1000 
+		nodeElementTbl[902][0-8]: 1000 640 1000 650 1000 740 1000 750 
+		nodeElementTbl[903][0-8]: 640 641 650 651 740 741 750 751 
+		nodeElementTbl[904][0-8]: 641 642 651 652 741 742 751 752 
+		nodeElementTbl[905][0-8]: 642 643 652 653 742 743 752 753 
+		nodeElementTbl[906][0-8]: 643 644 653 654 743 744 753 754 
+		nodeElementTbl[907][0-8]: 644 645 654 655 744 745 754 755 
+		nodeElementTbl[908][0-8]: 645 646 655 656 745 746 755 756 
+		nodeElementTbl[909][0-8]: 646 647 656 657 746 747 756 757 
+		nodeElementTbl[910][0-8]: 647 648 657 658 747 748 757 758 
+		nodeElementTbl[911][0-8]: 648 649 658 659 748 749 758 759 
+		nodeElementTbl[912][0-8]: 649 1000 659 1000 749 1000 759 1000 
+		nodeElementTbl[913][0-8]: 1000 650 1000 660 1000 750 1000 760 
+		nodeElementTbl[914][0-8]: 650 651 660 661 750 751 760 761 
+		nodeElementTbl[915][0-8]: 651 652 661 662 751 752 761 762 
+		nodeElementTbl[916][0-8]: 652 653 662 663 752 753 762 763 
+		nodeElementTbl[917][0-8]: 653 654 663 664 753 754 763 764 
+		nodeElementTbl[918][0-8]: 654 655 664 665 754 755 764 765 
+		nodeElementTbl[919][0-8]: 655 656 665 666 755 756 765 766 
+		nodeElementTbl[920][0-8]: 656 657 666 667 756 757 766 767 
+		nodeElementTbl[921][0-8]: 657 658 667 668 757 758 767 768 
+		nodeElementTbl[922][0-8]: 658 659 668 669 758 759 768 769 
+		nodeElementTbl[923][0-8]: 659 1000 669 1000 759 1000 769 1000 
+		nodeElementTbl[924][0-8]: 1000 660 1000 670 1000 760 1000 770 
+		nodeElementTbl[925][0-8]: 660 661 670 671 760 761 770 771 
+		nodeElementTbl[926][0-8]: 661 662 671 672 761 762 771 772 
+		nodeElementTbl[927][0-8]: 662 663 672 673 762 763 772 773 
+		nodeElementTbl[928][0-8]: 663 664 673 674 763 764 773 774 
+		nodeElementTbl[929][0-8]: 664 665 674 675 764 765 774 775 
+		nodeElementTbl[930][0-8]: 665 666 675 676 765 766 775 776 
+		nodeElementTbl[931][0-8]: 666 667 676 677 766 767 776 777 
+		nodeElementTbl[932][0-8]: 667 668 677 678 767 768 777 778 
+		nodeElementTbl[933][0-8]: 668 669 678 679 768 769 778 779 
+		nodeElementTbl[934][0-8]: 669 1000 679 1000 769 1000 779 1000 
+		nodeElementTbl[935][0-8]: 1000 670 1000 680 1000 770 1000 780 
+		nodeElementTbl[936][0-8]: 670 671 680 681 770 771 780 781 
+		nodeElementTbl[937][0-8]: 671 672 681 682 771 772 781 782 
+		nodeElementTbl[938][0-8]: 672 673 682 683 772 773 782 783 
+		nodeElementTbl[939][0-8]: 673 674 683 684 773 774 783 784 
+		nodeElementTbl[940][0-8]: 674 675 684 685 774 775 784 785 
+		nodeElementTbl[941][0-8]: 675 676 685 686 775 776 785 786 
+		nodeElementTbl[942][0-8]: 676 677 686 687 776 777 786 787 
+		nodeElementTbl[943][0-8]: 677 678 687 688 777 778 787 788 
+		nodeElementTbl[944][0-8]: 678 679 688 689 778 779 788 789 
+		nodeElementTbl[945][0-8]: 679 1000 689 1000 779 1000 789 1000 
+		nodeElementTbl[946][0-8]: 1000 680 1000 690 1000 780 1000 790 
+		nodeElementTbl[947][0-8]: 680 681 690 691 780 781 790 791 
+		nodeElementTbl[948][0-8]: 681 682 691 692 781 782 791 792 
+		nodeElementTbl[949][0-8]: 682 683 692 693 782 783 792 793 
+		nodeElementTbl[950][0-8]: 683 684 693 694 783 784 793 794 
+		nodeElementTbl[951][0-8]: 684 685 694 695 784 785 794 795 
+		nodeElementTbl[952][0-8]: 685 686 695 696 785 786 795 796 
+		nodeElementTbl[953][0-8]: 686 687 696 697 786 787 796 797 
+		nodeElementTbl[954][0-8]: 687 688 697 698 787 788 797 798 
+		nodeElementTbl[955][0-8]: 688 689 698 699 788 789 798 799 
+		nodeElementTbl[956][0-8]: 689 1000 699 1000 789 1000 799 1000 
+		nodeElementTbl[957][0-8]: 1000 690 1000 1000 1000 790 1000 1000 
+		nodeElementTbl[958][0-8]: 690 691 1000 1000 790 791 1000 1000 
+		nodeElementTbl[959][0-8]: 691 692 1000 1000 791 792 1000 1000 
+		nodeElementTbl[960][0-8]: 692 693 1000 1000 792 793 1000 1000 
+		nodeElementTbl[961][0-8]: 693 694 1000 1000 793 794 1000 1000 
+		nodeElementTbl[962][0-8]: 694 695 1000 1000 794 795 1000 1000 
+		nodeElementTbl[963][0-8]: 695 696 1000 1000 795 796 1000 1000 
+		nodeElementTbl[964][0-8]: 696 697 1000 1000 796 797 1000 1000 
+		nodeElementTbl[965][0-8]: 697 698 1000 1000 797 798 1000 1000 
+		nodeElementTbl[966][0-8]: 698 699 1000 1000 798 799 1000 1000 
+		nodeElementTbl[967][0-8]: 699 1000 1000 1000 799 1000 1000 1000 
+		nodeElementTbl[968][0-8]: 1000 1000 1000 700 1000 1000 1000 800 
+		nodeElementTbl[969][0-8]: 1000 1000 700 701 1000 1000 800 801 
+		nodeElementTbl[970][0-8]: 1000 1000 701 702 1000 1000 801 802 
+		nodeElementTbl[971][0-8]: 1000 1000 702 703 1000 1000 802 803 
+		nodeElementTbl[972][0-8]: 1000 1000 703 704 1000 1000 803 804 
+		nodeElementTbl[973][0-8]: 1000 1000 704 705 1000 1000 804 805 
+		nodeElementTbl[974][0-8]: 1000 1000 705 706 1000 1000 805 806 
+		nodeElementTbl[975][0-8]: 1000 1000 706 707 1000 1000 806 807 
+		nodeElementTbl[976][0-8]: 1000 1000 707 708 1000 1000 807 808 
+		nodeElementTbl[977][0-8]: 1000 1000 708 709 1000 1000 808 809 
+		nodeElementTbl[978][0-8]: 1000 1000 709 1000 1000 1000 809 1000 
+		nodeElementTbl[979][0-8]: 1000 700 1000 710 1000 800 1000 810 
+		nodeElementTbl[980][0-8]: 700 701 710 711 800 801 810 811 
+		nodeElementTbl[981][0-8]: 701 702 711 712 801 802 811 812 
+		nodeElementTbl[982][0-8]: 702 703 712 713 802 803 812 813 
+		nodeElementTbl[983][0-8]: 703 704 713 714 803 804 813 814 
+		nodeElementTbl[984][0-8]: 704 705 714 715 804 805 814 815 
+		nodeElementTbl[985][0-8]: 705 706 715 716 805 806 815 816 
+		nodeElementTbl[986][0-8]: 706 707 716 717 806 807 816 817 
+		nodeElementTbl[987][0-8]: 707 708 717 718 807 808 817 818 
+		nodeElementTbl[988][0-8]: 708 709 718 719 808 809 818 819 
+		nodeElementTbl[989][0-8]: 709 1000 719 1000 809 1000 819 1000 
+		nodeElementTbl[990][0-8]: 1000 710 1000 720 1000 810 1000 820 
+		nodeElementTbl[991][0-8]: 710 711 720 721 810 811 820 821 
+		nodeElementTbl[992][0-8]: 711 712 721 722 811 812 821 822 
+		nodeElementTbl[993][0-8]: 712 713 722 723 812 813 822 823 
+		nodeElementTbl[994][0-8]: 713 714 723 724 813 814 823 824 
+		nodeElementTbl[995][0-8]: 714 715 724 725 814 815 824 825 
+		nodeElementTbl[996][0-8]: 715 716 725 726 815 816 825 826 
+		nodeElementTbl[997][0-8]: 716 717 726 727 816 817 826 827 
+		nodeElementTbl[998][0-8]: 717 718 727 728 817 818 827 828 
+		nodeElementTbl[999][0-8]: 718 719 728 729 818 819 828 829 
+		nodeElementTbl[1000][0-8]: 719 1000 729 1000 819 1000 829 1000 
+		nodeElementTbl[1001][0-8]: 1000 720 1000 730 1000 820 1000 830 
+		nodeElementTbl[1002][0-8]: 720 721 730 731 820 821 830 831 
+		nodeElementTbl[1003][0-8]: 721 722 731 732 821 822 831 832 
+		nodeElementTbl[1004][0-8]: 722 723 732 733 822 823 832 833 
+		nodeElementTbl[1005][0-8]: 723 724 733 734 823 824 833 834 
+		nodeElementTbl[1006][0-8]: 724 725 734 735 824 825 834 835 
+		nodeElementTbl[1007][0-8]: 725 726 735 736 825 826 835 836 
+		nodeElementTbl[1008][0-8]: 726 727 736 737 826 827 836 837 
+		nodeElementTbl[1009][0-8]: 727 728 737 738 827 828 837 838 
+		nodeElementTbl[1010][0-8]: 728 729 738 739 828 829 838 839 
+		nodeElementTbl[1011][0-8]: 729 1000 739 1000 829 1000 839 1000 
+		nodeElementTbl[1012][0-8]: 1000 730 1000 740 1000 830 1000 840 
+		nodeElementTbl[1013][0-8]: 730 731 740 741 830 831 840 841 
+		nodeElementTbl[1014][0-8]: 731 732 741 742 831 832 841 842 
+		nodeElementTbl[1015][0-8]: 732 733 742 743 832 833 842 843 
+		nodeElementTbl[1016][0-8]: 733 734 743 744 833 834 843 844 
+		nodeElementTbl[1017][0-8]: 734 735 744 745 834 835 844 845 
+		nodeElementTbl[1018][0-8]: 735 736 745 746 835 836 845 846 
+		nodeElementTbl[1019][0-8]: 736 737 746 747 836 837 846 847 
+		nodeElementTbl[1020][0-8]: 737 738 747 748 837 838 847 848 
+		nodeElementTbl[1021][0-8]: 738 739 748 749 838 839 848 849 
+		nodeElementTbl[1022][0-8]: 739 1000 749 1000 839 1000 849 1000 
+		nodeElementTbl[1023][0-8]: 1000 740 1000 750 1000 840 1000 850 
+		nodeElementTbl[1024][0-8]: 740 741 750 751 840 841 850 851 
+		nodeElementTbl[1025][0-8]: 741 742 751 752 841 842 851 852 
+		nodeElementTbl[1026][0-8]: 742 743 752 753 842 843 852 853 
+		nodeElementTbl[1027][0-8]: 743 744 753 754 843 844 853 854 
+		nodeElementTbl[1028][0-8]: 744 745 754 755 844 845 854 855 
+		nodeElementTbl[1029][0-8]: 745 746 755 756 845 846 855 856 
+		nodeElementTbl[1030][0-8]: 746 747 756 757 846 847 856 857 
+		nodeElementTbl[1031][0-8]: 747 748 757 758 847 848 857 858 
+		nodeElementTbl[1032][0-8]: 748 749 758 759 848 849 858 859 
+		nodeElementTbl[1033][0-8]: 749 1000 759 1000 849 1000 859 1000 
+		nodeElementTbl[1034][0-8]: 1000 750 1000 760 1000 850 1000 860 
+		nodeElementTbl[1035][0-8]: 750 751 760 761 850 851 860 861 
+		nodeElementTbl[1036][0-8]: 751 752 761 762 851 852 861 862 
+		nodeElementTbl[1037][0-8]: 752 753 762 763 852 853 862 863 
+		nodeElementTbl[1038][0-8]: 753 754 763 764 853 854 863 864 
+		nodeElementTbl[1039][0-8]: 754 755 764 765 854 855 864 865 
+		nodeElementTbl[1040][0-8]: 755 756 765 766 855 856 865 866 
+		nodeElementTbl[1041][0-8]: 756 757 766 767 856 857 866 867 
+		nodeElementTbl[1042][0-8]: 757 758 767 768 857 858 867 868 
+		nodeElementTbl[1043][0-8]: 758 759 768 769 858 859 868 869 
+		nodeElementTbl[1044][0-8]: 759 1000 769 1000 859 1000 869 1000 
+		nodeElementTbl[1045][0-8]: 1000 760 1000 770 1000 860 1000 870 
+		nodeElementTbl[1046][0-8]: 760 761 770 771 860 861 870 871 
+		nodeElementTbl[1047][0-8]: 761 762 771 772 861 862 871 872 
+		nodeElementTbl[1048][0-8]: 762 763 772 773 862 863 872 873 
+		nodeElementTbl[1049][0-8]: 763 764 773 774 863 864 873 874 
+		nodeElementTbl[1050][0-8]: 764 765 774 775 864 865 874 875 
+		nodeElementTbl[1051][0-8]: 765 766 775 776 865 866 875 876 
+		nodeElementTbl[1052][0-8]: 766 767 776 777 866 867 876 877 
+		nodeElementTbl[1053][0-8]: 767 768 777 778 867 868 877 878 
+		nodeElementTbl[1054][0-8]: 768 769 778 779 868 869 878 879 
+		nodeElementTbl[1055][0-8]: 769 1000 779 1000 869 1000 879 1000 
+		nodeElementTbl[1056][0-8]: 1000 770 1000 780 1000 870 1000 880 
+		nodeElementTbl[1057][0-8]: 770 771 780 781 870 871 880 881 
+		nodeElementTbl[1058][0-8]: 771 772 781 782 871 872 881 882 
+		nodeElementTbl[1059][0-8]: 772 773 782 783 872 873 882 883 
+		nodeElementTbl[1060][0-8]: 773 774 783 784 873 874 883 884 
+		nodeElementTbl[1061][0-8]: 774 775 784 785 874 875 884 885 
+		nodeElementTbl[1062][0-8]: 775 776 785 786 875 876 885 886 
+		nodeElementTbl[1063][0-8]: 776 777 786 787 876 877 886 887 
+		nodeElementTbl[1064][0-8]: 777 778 787 788 877 878 887 888 
+		nodeElementTbl[1065][0-8]: 778 779 788 789 878 879 888 889 
+		nodeElementTbl[1066][0-8]: 779 1000 789 1000 879 1000 889 1000 
+		nodeElementTbl[1067][0-8]: 1000 780 1000 790 1000 880 1000 890 
+		nodeElementTbl[1068][0-8]: 780 781 790 791 880 881 890 891 
+		nodeElementTbl[1069][0-8]: 781 782 791 792 881 882 891 892 
+		nodeElementTbl[1070][0-8]: 782 783 792 793 882 883 892 893 
+		nodeElementTbl[1071][0-8]: 783 784 793 794 883 884 893 894 
+		nodeElementTbl[1072][0-8]: 784 785 794 795 884 885 894 895 
+		nodeElementTbl[1073][0-8]: 785 786 795 796 885 886 895 896 
+		nodeElementTbl[1074][0-8]: 786 787 796 797 886 887 896 897 
+		nodeElementTbl[1075][0-8]: 787 788 797 798 887 888 897 898 
+		nodeElementTbl[1076][0-8]: 788 789 798 799 888 889 898 899 
+		nodeElementTbl[1077][0-8]: 789 1000 799 1000 889 1000 899 1000 
+		nodeElementTbl[1078][0-8]: 1000 790 1000 1000 1000 890 1000 1000 
+		nodeElementTbl[1079][0-8]: 790 791 1000 1000 890 891 1000 1000 
+		nodeElementTbl[1080][0-8]: 791 792 1000 1000 891 892 1000 1000 
+		nodeElementTbl[1081][0-8]: 792 793 1000 1000 892 893 1000 1000 
+		nodeElementTbl[1082][0-8]: 793 794 1000 1000 893 894 1000 1000 
+		nodeElementTbl[1083][0-8]: 794 795 1000 1000 894 895 1000 1000 
+		nodeElementTbl[1084][0-8]: 795 796 1000 1000 895 896 1000 1000 
+		nodeElementTbl[1085][0-8]: 796 797 1000 1000 896 897 1000 1000 
+		nodeElementTbl[1086][0-8]: 797 798 1000 1000 897 898 1000 1000 
+		nodeElementTbl[1087][0-8]: 798 799 1000 1000 898 899 1000 1000 
+		nodeElementTbl[1088][0-8]: 799 1000 1000 1000 899 1000 1000 1000 
+		nodeElementTbl[1089][0-8]: 1000 1000 1000 800 1000 1000 1000 900 
+		nodeElementTbl[1090][0-8]: 1000 1000 800 801 1000 1000 900 901 
+		nodeElementTbl[1091][0-8]: 1000 1000 801 802 1000 1000 901 902 
+		nodeElementTbl[1092][0-8]: 1000 1000 802 803 1000 1000 902 903 
+		nodeElementTbl[1093][0-8]: 1000 1000 803 804 1000 1000 903 904 
+		nodeElementTbl[1094][0-8]: 1000 1000 804 805 1000 1000 904 905 
+		nodeElementTbl[1095][0-8]: 1000 1000 805 806 1000 1000 905 906 
+		nodeElementTbl[1096][0-8]: 1000 1000 806 807 1000 1000 906 907 
+		nodeElementTbl[1097][0-8]: 1000 1000 807 808 1000 1000 907 908 
+		nodeElementTbl[1098][0-8]: 1000 1000 808 809 1000 1000 908 909 
+		nodeElementTbl[1099][0-8]: 1000 1000 809 1000 1000 1000 909 1000 
+		nodeElementTbl[1100][0-8]: 1000 800 1000 810 1000 900 1000 910 
+		nodeElementTbl[1101][0-8]: 800 801 810 811 900 901 910 911 
+		nodeElementTbl[1102][0-8]: 801 802 811 812 901 902 911 912 
+		nodeElementTbl[1103][0-8]: 802 803 812 813 902 903 912 913 
+		nodeElementTbl[1104][0-8]: 803 804 813 814 903 904 913 914 
+		nodeElementTbl[1105][0-8]: 804 805 814 815 904 905 914 915 
+		nodeElementTbl[1106][0-8]: 805 806 815 816 905 906 915 916 
+		nodeElementTbl[1107][0-8]: 806 807 816 817 906 907 916 917 
+		nodeElementTbl[1108][0-8]: 807 808 817 818 907 908 917 918 
+		nodeElementTbl[1109][0-8]: 808 809 818 819 908 909 918 919 
+		nodeElementTbl[1110][0-8]: 809 1000 819 1000 909 1000 919 1000 
+		nodeElementTbl[1111][0-8]: 1000 810 1000 820 1000 910 1000 920 
+		nodeElementTbl[1112][0-8]: 810 811 820 821 910 911 920 921 
+		nodeElementTbl[1113][0-8]: 811 812 821 822 911 912 921 922 
+		nodeElementTbl[1114][0-8]: 812 813 822 823 912 913 922 923 
+		nodeElementTbl[1115][0-8]: 813 814 823 824 913 914 923 924 
+		nodeElementTbl[1116][0-8]: 814 815 824 825 914 915 924 925 
+		nodeElementTbl[1117][0-8]: 815 816 825 826 915 916 925 926 
+		nodeElementTbl[1118][0-8]: 816 817 826 827 916 917 926 927 
+		nodeElementTbl[1119][0-8]: 817 818 827 828 917 918 927 928 
+		nodeElementTbl[1120][0-8]: 818 819 828 829 918 919 928 929 
+		nodeElementTbl[1121][0-8]: 819 1000 829 1000 919 1000 929 1000 
+		nodeElementTbl[1122][0-8]: 1000 820 1000 830 1000 920 1000 930 
+		nodeElementTbl[1123][0-8]: 820 821 830 831 920 921 930 931 
+		nodeElementTbl[1124][0-8]: 821 822 831 832 921 922 931 932 
+		nodeElementTbl[1125][0-8]: 822 823 832 833 922 923 932 933 
+		nodeElementTbl[1126][0-8]: 823 824 833 834 923 924 933 934 
+		nodeElementTbl[1127][0-8]: 824 825 834 835 924 925 934 935 
+		nodeElementTbl[1128][0-8]: 825 826 835 836 925 926 935 936 
+		nodeElementTbl[1129][0-8]: 826 827 836 837 926 927 936 937 
+		nodeElementTbl[1130][0-8]: 827 828 837 838 927 928 937 938 
+		nodeElementTbl[1131][0-8]: 828 829 838 839 928 929 938 939 
+		nodeElementTbl[1132][0-8]: 829 1000 839 1000 929 1000 939 1000 
+		nodeElementTbl[1133][0-8]: 1000 830 1000 840 1000 930 1000 940 
+		nodeElementTbl[1134][0-8]: 830 831 840 841 930 931 940 941 
+		nodeElementTbl[1135][0-8]: 831 832 841 842 931 932 941 942 
+		nodeElementTbl[1136][0-8]: 832 833 842 843 932 933 942 943 
+		nodeElementTbl[1137][0-8]: 833 834 843 844 933 934 943 944 
+		nodeElementTbl[1138][0-8]: 834 835 844 845 934 935 944 945 
+		nodeElementTbl[1139][0-8]: 835 836 845 846 935 936 945 946 
+		nodeElementTbl[1140][0-8]: 836 837 846 847 936 937 946 947 
+		nodeElementTbl[1141][0-8]: 837 838 847 848 937 938 947 948 
+		nodeElementTbl[1142][0-8]: 838 839 848 849 938 939 948 949 
+		nodeElementTbl[1143][0-8]: 839 1000 849 1000 939 1000 949 1000 
+		nodeElementTbl[1144][0-8]: 1000 840 1000 850 1000 940 1000 950 
+		nodeElementTbl[1145][0-8]: 840 841 850 851 940 941 950 951 
+		nodeElementTbl[1146][0-8]: 841 842 851 852 941 942 951 952 
+		nodeElementTbl[1147][0-8]: 842 843 852 853 942 943 952 953 
+		nodeElementTbl[1148][0-8]: 843 844 853 854 943 944 953 954 
+		nodeElementTbl[1149][0-8]: 844 845 854 855 944 945 954 955 
+		nodeElementTbl[1150][0-8]: 845 846 855 856 945 946 955 956 
+		nodeElementTbl[1151][0-8]: 846 847 856 857 946 947 956 957 
+		nodeElementTbl[1152][0-8]: 847 848 857 858 947 948 957 958 
+		nodeElementTbl[1153][0-8]: 848 849 858 859 948 949 958 959 
+		nodeElementTbl[1154][0-8]: 849 1000 859 1000 949 1000 959 1000 
+		nodeElementTbl[1155][0-8]: 1000 850 1000 860 1000 950 1000 960 
+		nodeElementTbl[1156][0-8]: 850 851 860 861 950 951 960 961 
+		nodeElementTbl[1157][0-8]: 851 852 861 862 951 952 961 962 
+		nodeElementTbl[1158][0-8]: 852 853 862 863 952 953 962 963 
+		nodeElementTbl[1159][0-8]: 853 854 863 864 953 954 963 964 
+		nodeElementTbl[1160][0-8]: 854 855 864 865 954 955 964 965 
+		nodeElementTbl[1161][0-8]: 855 856 865 866 955 956 965 966 
+		nodeElementTbl[1162][0-8]: 856 857 866 867 956 957 966 967 
+		nodeElementTbl[1163][0-8]: 857 858 867 868 957 958 967 968 
+		nodeElementTbl[1164][0-8]: 858 859 868 869 958 959 968 969 
+		nodeElementTbl[1165][0-8]: 859 1000 869 1000 959 1000 969 1000 
+		nodeElementTbl[1166][0-8]: 1000 860 1000 870 1000 960 1000 970 
+		nodeElementTbl[1167][0-8]: 860 861 870 871 960 961 970 971 
+		nodeElementTbl[1168][0-8]: 861 862 871 872 961 962 971 972 
+		nodeElementTbl[1169][0-8]: 862 863 872 873 962 963 972 973 
+		nodeElementTbl[1170][0-8]: 863 864 873 874 963 964 973 974 
+		nodeElementTbl[1171][0-8]: 864 865 874 875 964 965 974 975 
+		nodeElementTbl[1172][0-8]: 865 866 875 876 965 966 975 976 
+		nodeElementTbl[1173][0-8]: 866 867 876 877 966 967 976 977 
+		nodeElementTbl[1174][0-8]: 867 868 877 878 967 968 977 978 
+		nodeElementTbl[1175][0-8]: 868 869 878 879 968 969 978 979 
+		nodeElementTbl[1176][0-8]: 869 1000 879 1000 969 1000 979 1000 
+		nodeElementTbl[1177][0-8]: 1000 870 1000 880 1000 970 1000 980 
+		nodeElementTbl[1178][0-8]: 870 871 880 881 970 971 980 981 
+		nodeElementTbl[1179][0-8]: 871 872 881 882 971 972 981 982 
+		nodeElementTbl[1180][0-8]: 872 873 882 883 972 973 982 983 
+		nodeElementTbl[1181][0-8]: 873 874 883 884 973 974 983 984 
+		nodeElementTbl[1182][0-8]: 874 875 884 885 974 975 984 985 
+		nodeElementTbl[1183][0-8]: 875 876 885 886 975 976 985 986 
+		nodeElementTbl[1184][0-8]: 876 877 886 887 976 977 986 987 
+		nodeElementTbl[1185][0-8]: 877 878 887 888 977 978 987 988 
+		nodeElementTbl[1186][0-8]: 878 879 888 889 978 979 988 989 
+		nodeElementTbl[1187][0-8]: 879 1000 889 1000 979 1000 989 1000 
+		nodeElementTbl[1188][0-8]: 1000 880 1000 890 1000 980 1000 990 
+		nodeElementTbl[1189][0-8]: 880 881 890 891 980 981 990 991 
+		nodeElementTbl[1190][0-8]: 881 882 891 892 981 982 991 992 
+		nodeElementTbl[1191][0-8]: 882 883 892 893 982 983 992 993 
+		nodeElementTbl[1192][0-8]: 883 884 893 894 983 984 993 994 
+		nodeElementTbl[1193][0-8]: 884 885 894 895 984 985 994 995 
+		nodeElementTbl[1194][0-8]: 885 886 895 896 985 986 995 996 
+		nodeElementTbl[1195][0-8]: 886 887 896 897 986 987 996 997 
+		nodeElementTbl[1196][0-8]: 887 888 897 898 987 988 997 998 
+		nodeElementTbl[1197][0-8]: 888 889 898 899 988 989 998 999 
+		nodeElementTbl[1198][0-8]: 889 1000 899 1000 989 1000 999 1000 
+		nodeElementTbl[1199][0-8]: 1000 890 1000 1000 1000 990 1000 1000 
+		nodeElementTbl[1200][0-8]: 890 891 1000 1000 990 991 1000 1000 
+		nodeElementTbl[1201][0-8]: 891 892 1000 1000 991 992 1000 1000 
+		nodeElementTbl[1202][0-8]: 892 893 1000 1000 992 993 1000 1000 
+		nodeElementTbl[1203][0-8]: 893 894 1000 1000 993 994 1000 1000 
+		nodeElementTbl[1204][0-8]: 894 895 1000 1000 994 995 1000 1000 
+		nodeElementTbl[1205][0-8]: 895 896 1000 1000 995 996 1000 1000 
+		nodeElementTbl[1206][0-8]: 896 897 1000 1000 996 997 1000 1000 
+		nodeElementTbl[1207][0-8]: 897 898 1000 1000 997 998 1000 1000 
+		nodeElementTbl[1208][0-8]: 898 899 1000 1000 998 999 1000 1000 
+		nodeElementTbl[1209][0-8]: 899 1000 1000 1000 999 1000 1000 1000 
+		nodeElementTbl[1210][0-8]: 1000 1000 1000 900 1000 1000 1000 1000 
+		nodeElementTbl[1211][0-8]: 1000 1000 900 901 1000 1000 1000 1000 
+		nodeElementTbl[1212][0-8]: 1000 1000 901 902 1000 1000 1000 1000 
+		nodeElementTbl[1213][0-8]: 1000 1000 902 903 1000 1000 1000 1000 
+		nodeElementTbl[1214][0-8]: 1000 1000 903 904 1000 1000 1000 1000 
+		nodeElementTbl[1215][0-8]: 1000 1000 904 905 1000 1000 1000 1000 
+		nodeElementTbl[1216][0-8]: 1000 1000 905 906 1000 1000 1000 1000 
+		nodeElementTbl[1217][0-8]: 1000 1000 906 907 1000 1000 1000 1000 
+		nodeElementTbl[1218][0-8]: 1000 1000 907 908 1000 1000 1000 1000 
+		nodeElementTbl[1219][0-8]: 1000 1000 908 909 1000 1000 1000 1000 
+		nodeElementTbl[1220][0-8]: 1000 1000 909 1000 1000 1000 1000 1000 
+		nodeElementTbl[1221][0-8]: 1000 900 1000 910 1000 1000 1000 1000 
+		nodeElementTbl[1222][0-8]: 900 901 910 911 1000 1000 1000 1000 
+		nodeElementTbl[1223][0-8]: 901 902 911 912 1000 1000 1000 1000 
+		nodeElementTbl[1224][0-8]: 902 903 912 913 1000 1000 1000 1000 
+		nodeElementTbl[1225][0-8]: 903 904 913 914 1000 1000 1000 1000 
+		nodeElementTbl[1226][0-8]: 904 905 914 915 1000 1000 1000 1000 
+		nodeElementTbl[1227][0-8]: 905 906 915 916 1000 1000 1000 1000 
+		nodeElementTbl[1228][0-8]: 906 907 916 917 1000 1000 1000 1000 
+		nodeElementTbl[1229][0-8]: 907 908 917 918 1000 1000 1000 1000 
+		nodeElementTbl[1230][0-8]: 908 909 918 919 1000 1000 1000 1000 
+		nodeElementTbl[1231][0-8]: 909 1000 919 1000 1000 1000 1000 1000 
+		nodeElementTbl[1232][0-8]: 1000 910 1000 920 1000 1000 1000 1000 
+		nodeElementTbl[1233][0-8]: 910 911 920 921 1000 1000 1000 1000 
+		nodeElementTbl[1234][0-8]: 911 912 921 922 1000 1000 1000 1000 
+		nodeElementTbl[1235][0-8]: 912 913 922 923 1000 1000 1000 1000 
+		nodeElementTbl[1236][0-8]: 913 914 923 924 1000 1000 1000 1000 
+		nodeElementTbl[1237][0-8]: 914 915 924 925 1000 1000 1000 1000 
+		nodeElementTbl[1238][0-8]: 915 916 925 926 1000 1000 1000 1000 
+		nodeElementTbl[1239][0-8]: 916 917 926 927 1000 1000 1000 1000 
+		nodeElementTbl[1240][0-8]: 917 918 927 928 1000 1000 1000 1000 
+		nodeElementTbl[1241][0-8]: 918 919 928 929 1000 1000 1000 1000 
+		nodeElementTbl[1242][0-8]: 919 1000 929 1000 1000 1000 1000 1000 
+		nodeElementTbl[1243][0-8]: 1000 920 1000 930 1000 1000 1000 1000 
+		nodeElementTbl[1244][0-8]: 920 921 930 931 1000 1000 1000 1000 
+		nodeElementTbl[1245][0-8]: 921 922 931 932 1000 1000 1000 1000 
+		nodeElementTbl[1246][0-8]: 922 923 932 933 1000 1000 1000 1000 
+		nodeElementTbl[1247][0-8]: 923 924 933 934 1000 1000 1000 1000 
+		nodeElementTbl[1248][0-8]: 924 925 934 935 1000 1000 1000 1000 
+		nodeElementTbl[1249][0-8]: 925 926 935 936 1000 1000 1000 1000 
+		nodeElementTbl[1250][0-8]: 926 927 936 937 1000 1000 1000 1000 
+		nodeElementTbl[1251][0-8]: 927 928 937 938 1000 1000 1000 1000 
+		nodeElementTbl[1252][0-8]: 928 929 938 939 1000 1000 1000 1000 
+		nodeElementTbl[1253][0-8]: 929 1000 939 1000 1000 1000 1000 1000 
+		nodeElementTbl[1254][0-8]: 1000 930 1000 940 1000 1000 1000 1000 
+		nodeElementTbl[1255][0-8]: 930 931 940 941 1000 1000 1000 1000 
+		nodeElementTbl[1256][0-8]: 931 932 941 942 1000 1000 1000 1000 
+		nodeElementTbl[1257][0-8]: 932 933 942 943 1000 1000 1000 1000 
+		nodeElementTbl[1258][0-8]: 933 934 943 944 1000 1000 1000 1000 
+		nodeElementTbl[1259][0-8]: 934 935 944 945 1000 1000 1000 1000 
+		nodeElementTbl[1260][0-8]: 935 936 945 946 1000 1000 1000 1000 
+		nodeElementTbl[1261][0-8]: 936 937 946 947 1000 1000 1000 1000 
+		nodeElementTbl[1262][0-8]: 937 938 947 948 1000 1000 1000 1000 
+		nodeElementTbl[1263][0-8]: 938 939 948 949 1000 1000 1000 1000 
+		nodeElementTbl[1264][0-8]: 939 1000 949 1000 1000 1000 1000 1000 
+		nodeElementTbl[1265][0-8]: 1000 940 1000 950 1000 1000 1000 1000 
+		nodeElementTbl[1266][0-8]: 940 941 950 951 1000 1000 1000 1000 
+		nodeElementTbl[1267][0-8]: 941 942 951 952 1000 1000 1000 1000 
+		nodeElementTbl[1268][0-8]: 942 943 952 953 1000 1000 1000 1000 
+		nodeElementTbl[1269][0-8]: 943 944 953 954 1000 1000 1000 1000 
+		nodeElementTbl[1270][0-8]: 944 945 954 955 1000 1000 1000 1000 
+		nodeElementTbl[1271][0-8]: 945 946 955 956 1000 1000 1000 1000 
+		nodeElementTbl[1272][0-8]: 946 947 956 957 1000 1000 1000 1000 
+		nodeElementTbl[1273][0-8]: 947 948 957 958 1000 1000 1000 1000 
+		nodeElementTbl[1274][0-8]: 948 949 958 959 1000 1000 1000 1000 
+		nodeElementTbl[1275][0-8]: 949 1000 959 1000 1000 1000 1000 1000 
+		nodeElementTbl[1276][0-8]: 1000 950 1000 960 1000 1000 1000 1000 
+		nodeElementTbl[1277][0-8]: 950 951 960 961 1000 1000 1000 1000 
+		nodeElementTbl[1278][0-8]: 951 952 961 962 1000 1000 1000 1000 
+		nodeElementTbl[1279][0-8]: 952 953 962 963 1000 1000 1000 1000 
+		nodeElementTbl[1280][0-8]: 953 954 963 964 1000 1000 1000 1000 
+		nodeElementTbl[1281][0-8]: 954 955 964 965 1000 1000 1000 1000 
+		nodeElementTbl[1282][0-8]: 955 956 965 966 1000 1000 1000 1000 
+		nodeElementTbl[1283][0-8]: 956 957 966 967 1000 1000 1000 1000 
+		nodeElementTbl[1284][0-8]: 957 958 967 968 1000 1000 1000 1000 
+		nodeElementTbl[1285][0-8]: 958 959 968 969 1000 1000 1000 1000 
+		nodeElementTbl[1286][0-8]: 959 1000 969 1000 1000 1000 1000 1000 
+		nodeElementTbl[1287][0-8]: 1000 960 1000 970 1000 1000 1000 1000 
+		nodeElementTbl[1288][0-8]: 960 961 970 971 1000 1000 1000 1000 
+		nodeElementTbl[1289][0-8]: 961 962 971 972 1000 1000 1000 1000 
+		nodeElementTbl[1290][0-8]: 962 963 972 973 1000 1000 1000 1000 
+		nodeElementTbl[1291][0-8]: 963 964 973 974 1000 1000 1000 1000 
+		nodeElementTbl[1292][0-8]: 964 965 974 975 1000 1000 1000 1000 
+		nodeElementTbl[1293][0-8]: 965 966 975 976 1000 1000 1000 1000 
+		nodeElementTbl[1294][0-8]: 966 967 976 977 1000 1000 1000 1000 
+		nodeElementTbl[1295][0-8]: 967 968 977 978 1000 1000 1000 1000 
+		nodeElementTbl[1296][0-8]: 968 969 978 979 1000 1000 1000 1000 
+		nodeElementTbl[1297][0-8]: 969 1000 979 1000 1000 1000 1000 1000 
+		nodeElementTbl[1298][0-8]: 1000 970 1000 980 1000 1000 1000 1000 
+		nodeElementTbl[1299][0-8]: 970 971 980 981 1000 1000 1000 1000 
+		nodeElementTbl[1300][0-8]: 971 972 981 982 1000 1000 1000 1000 
+		nodeElementTbl[1301][0-8]: 972 973 982 983 1000 1000 1000 1000 
+		nodeElementTbl[1302][0-8]: 973 974 983 984 1000 1000 1000 1000 
+		nodeElementTbl[1303][0-8]: 974 975 984 985 1000 1000 1000 1000 
+		nodeElementTbl[1304][0-8]: 975 976 985 986 1000 1000 1000 1000 
+		nodeElementTbl[1305][0-8]: 976 977 986 987 1000 1000 1000 1000 
+		nodeElementTbl[1306][0-8]: 977 978 987 988 1000 1000 1000 1000 
+		nodeElementTbl[1307][0-8]: 978 979 988 989 1000 1000 1000 1000 
+		nodeElementTbl[1308][0-8]: 979 1000 989 1000 1000 1000 1000 1000 
+		nodeElementTbl[1309][0-8]: 1000 980 1000 990 1000 1000 1000 1000 
+		nodeElementTbl[1310][0-8]: 980 981 990 991 1000 1000 1000 1000 
+		nodeElementTbl[1311][0-8]: 981 982 991 992 1000 1000 1000 1000 
+		nodeElementTbl[1312][0-8]: 982 983 992 993 1000 1000 1000 1000 
+		nodeElementTbl[1313][0-8]: 983 984 993 994 1000 1000 1000 1000 
+		nodeElementTbl[1314][0-8]: 984 985 994 995 1000 1000 1000 1000 
+		nodeElementTbl[1315][0-8]: 985 986 995 996 1000 1000 1000 1000 
+		nodeElementTbl[1316][0-8]: 986 987 996 997 1000 1000 1000 1000 
+		nodeElementTbl[1317][0-8]: 987 988 997 998 1000 1000 1000 1000 
+		nodeElementTbl[1318][0-8]: 988 989 998 999 1000 1000 1000 1000 
+		nodeElementTbl[1319][0-8]: 989 1000 999 1000 1000 1000 1000 1000 
+		nodeElementTbl[1320][0-8]: 1000 990 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1321][0-8]: 990 991 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1322][0-8]: 991 992 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1323][0-8]: 992 993 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1324][0-8]: 993 994 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1325][0-8]: 994 995 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1326][0-8]: 995 996 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1327][0-8]: 996 997 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1328][0-8]: 997 998 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1329][0-8]: 998 999 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[1330][0-8]: 999 1000 1000 1000 1000 1000 1000 1000 
+	element (ptr): 0x8086640
+	elementLocalCount: 1000
+	elementDomainCount: 1000
+	elementShadowCount: 0
+	elementGlobalCount: 1000
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x8078680
+	elementL2G[0-1000]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x8078680
+	elementD2G[0-1000]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8088590
+	elementG2L[0-1000]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8088590
+	elementG2D[0-1000]:   000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8089540
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x808a4f0
+	elementNeighbourTbl[0-1000]:
+		elementNeighbourTbl[0][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 1000 010 011 1000 1000 1000 1000 100 101 1000 110 111 
+		elementNeighbourTbl[1][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 002 010 011 012 1000 1000 1000 100 101 102 110 111 112 
+		elementNeighbourTbl[2][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 003 011 012 013 1000 1000 1000 101 102 103 111 112 113 
+		elementNeighbourTbl[3][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 004 012 013 014 1000 1000 1000 102 103 104 112 113 114 
+		elementNeighbourTbl[4][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 005 013 014 015 1000 1000 1000 103 104 105 113 114 115 
+		elementNeighbourTbl[5][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 004 006 014 015 016 1000 1000 1000 104 105 106 114 115 116 
+		elementNeighbourTbl[6][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 007 015 016 017 1000 1000 1000 105 106 107 115 116 117 
+		elementNeighbourTbl[7][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 006 008 016 017 018 1000 1000 1000 106 107 108 116 117 118 
+		elementNeighbourTbl[8][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 007 009 017 018 019 1000 1000 1000 107 108 109 117 118 119 
+		elementNeighbourTbl[9][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 008 1000 018 019 1000 1000 1000 1000 108 109 1000 118 119 1000 
+		elementNeighbourTbl[10][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 1000 011 1000 020 021 1000 100 101 1000 110 111 1000 120 121 
+		elementNeighbourTbl[11][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 002 010 012 020 021 022 100 101 102 110 111 112 120 121 122 
+		elementNeighbourTbl[12][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 002 003 011 013 021 022 023 101 102 103 111 112 113 121 122 123 
+		elementNeighbourTbl[13][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 003 004 012 014 022 023 024 102 103 104 112 113 114 122 123 124 
+		elementNeighbourTbl[14][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 004 005 013 015 023 024 025 103 104 105 113 114 115 123 124 125 
+		elementNeighbourTbl[15][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 004 005 006 014 016 024 025 026 104 105 106 114 115 116 124 125 126 
+		elementNeighbourTbl[16][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 006 007 015 017 025 026 027 105 106 107 115 116 117 125 126 127 
+		elementNeighbourTbl[17][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 006 007 008 016 018 026 027 028 106 107 108 116 117 118 126 127 128 
+		elementNeighbourTbl[18][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 007 008 009 017 019 027 028 029 107 108 109 117 118 119 127 128 129 
+		elementNeighbourTbl[19][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 008 009 1000 018 1000 028 029 1000 108 109 1000 118 119 1000 128 129 1000 
+		elementNeighbourTbl[20][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 1000 021 1000 030 031 1000 110 111 1000 120 121 1000 130 131 
+		elementNeighbourTbl[21][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 012 020 022 030 031 032 110 111 112 120 121 122 130 131 132 
+		elementNeighbourTbl[22][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 011 012 013 021 023 031 032 033 111 112 113 121 122 123 131 132 133 
+		elementNeighbourTbl[23][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 012 013 014 022 024 032 033 034 112 113 114 122 123 124 132 133 134 
+		elementNeighbourTbl[24][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 013 014 015 023 025 033 034 035 113 114 115 123 124 125 133 134 135 
+		elementNeighbourTbl[25][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 014 015 016 024 026 034 035 036 114 115 116 124 125 126 134 135 136 
+		elementNeighbourTbl[26][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 015 016 017 025 027 035 036 037 115 116 117 125 126 127 135 136 137 
+		elementNeighbourTbl[27][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 016 017 018 026 028 036 037 038 116 117 118 126 127 128 136 137 138 
+		elementNeighbourTbl[28][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 017 018 019 027 029 037 038 039 117 118 119 127 128 129 137 138 139 
+		elementNeighbourTbl[29][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 018 019 1000 028 1000 038 039 1000 118 119 1000 128 129 1000 138 139 1000 
+		elementNeighbourTbl[30][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 1000 031 1000 040 041 1000 120 121 1000 130 131 1000 140 141 
+		elementNeighbourTbl[31][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 022 030 032 040 041 042 120 121 122 130 131 132 140 141 142 
+		elementNeighbourTbl[32][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 021 022 023 031 033 041 042 043 121 122 123 131 132 133 141 142 143 
+		elementNeighbourTbl[33][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 022 023 024 032 034 042 043 044 122 123 124 132 133 134 142 143 144 
+		elementNeighbourTbl[34][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 023 024 025 033 035 043 044 045 123 124 125 133 134 135 143 144 145 
+		elementNeighbourTbl[35][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 024 025 026 034 036 044 045 046 124 125 126 134 135 136 144 145 146 
+		elementNeighbourTbl[36][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 025 026 027 035 037 045 046 047 125 126 127 135 136 137 145 146 147 
+		elementNeighbourTbl[37][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 026 027 028 036 038 046 047 048 126 127 128 136 137 138 146 147 148 
+		elementNeighbourTbl[38][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 027 028 029 037 039 047 048 049 127 128 129 137 138 139 147 148 149 
+		elementNeighbourTbl[39][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 028 029 1000 038 1000 048 049 1000 128 129 1000 138 139 1000 148 149 1000 
+		elementNeighbourTbl[40][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 1000 041 1000 050 051 1000 130 131 1000 140 141 1000 150 151 
+		elementNeighbourTbl[41][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 032 040 042 050 051 052 130 131 132 140 141 142 150 151 152 
+		elementNeighbourTbl[42][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 031 032 033 041 043 051 052 053 131 132 133 141 142 143 151 152 153 
+		elementNeighbourTbl[43][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 032 033 034 042 044 052 053 054 132 133 134 142 143 144 152 153 154 
+		elementNeighbourTbl[44][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 033 034 035 043 045 053 054 055 133 134 135 143 144 145 153 154 155 
+		elementNeighbourTbl[45][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 034 035 036 044 046 054 055 056 134 135 136 144 145 146 154 155 156 
+		elementNeighbourTbl[46][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 035 036 037 045 047 055 056 057 135 136 137 145 146 147 155 156 157 
+		elementNeighbourTbl[47][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 036 037 038 046 048 056 057 058 136 137 138 146 147 148 156 157 158 
+		elementNeighbourTbl[48][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 037 038 039 047 049 057 058 059 137 138 139 147 148 149 157 158 159 
+		elementNeighbourTbl[49][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 038 039 1000 048 1000 058 059 1000 138 139 1000 148 149 1000 158 159 1000 
+		elementNeighbourTbl[50][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 1000 051 1000 060 061 1000 140 141 1000 150 151 1000 160 161 
+		elementNeighbourTbl[51][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 042 050 052 060 061 062 140 141 142 150 151 152 160 161 162 
+		elementNeighbourTbl[52][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 041 042 043 051 053 061 062 063 141 142 143 151 152 153 161 162 163 
+		elementNeighbourTbl[53][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 042 043 044 052 054 062 063 064 142 143 144 152 153 154 162 163 164 
+		elementNeighbourTbl[54][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 043 044 045 053 055 063 064 065 143 144 145 153 154 155 163 164 165 
+		elementNeighbourTbl[55][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 044 045 046 054 056 064 065 066 144 145 146 154 155 156 164 165 166 
+		elementNeighbourTbl[56][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 045 046 047 055 057 065 066 067 145 146 147 155 156 157 165 166 167 
+		elementNeighbourTbl[57][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 046 047 048 056 058 066 067 068 146 147 148 156 157 158 166 167 168 
+		elementNeighbourTbl[58][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 047 048 049 057 059 067 068 069 147 148 149 157 158 159 167 168 169 
+		elementNeighbourTbl[59][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 048 049 1000 058 1000 068 069 1000 148 149 1000 158 159 1000 168 169 1000 
+		elementNeighbourTbl[60][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 050 051 1000 061 1000 070 071 1000 150 151 1000 160 161 1000 170 171 
+		elementNeighbourTbl[61][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 050 051 052 060 062 070 071 072 150 151 152 160 161 162 170 171 172 
+		elementNeighbourTbl[62][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 051 052 053 061 063 071 072 073 151 152 153 161 162 163 171 172 173 
+		elementNeighbourTbl[63][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 052 053 054 062 064 072 073 074 152 153 154 162 163 164 172 173 174 
+		elementNeighbourTbl[64][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 053 054 055 063 065 073 074 075 153 154 155 163 164 165 173 174 175 
+		elementNeighbourTbl[65][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 054 055 056 064 066 074 075 076 154 155 156 164 165 166 174 175 176 
+		elementNeighbourTbl[66][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 055 056 057 065 067 075 076 077 155 156 157 165 166 167 175 176 177 
+		elementNeighbourTbl[67][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 056 057 058 066 068 076 077 078 156 157 158 166 167 168 176 177 178 
+		elementNeighbourTbl[68][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 057 058 059 067 069 077 078 079 157 158 159 167 168 169 177 178 179 
+		elementNeighbourTbl[69][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 058 059 1000 068 1000 078 079 1000 158 159 1000 168 169 1000 178 179 1000 
+		elementNeighbourTbl[70][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 060 061 1000 071 1000 080 081 1000 160 161 1000 170 171 1000 180 181 
+		elementNeighbourTbl[71][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 060 061 062 070 072 080 081 082 160 161 162 170 171 172 180 181 182 
+		elementNeighbourTbl[72][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 061 062 063 071 073 081 082 083 161 162 163 171 172 173 181 182 183 
+		elementNeighbourTbl[73][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 062 063 064 072 074 082 083 084 162 163 164 172 173 174 182 183 184 
+		elementNeighbourTbl[74][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 063 064 065 073 075 083 084 085 163 164 165 173 174 175 183 184 185 
+		elementNeighbourTbl[75][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 064 065 066 074 076 084 085 086 164 165 166 174 175 176 184 185 186 
+		elementNeighbourTbl[76][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 065 066 067 075 077 085 086 087 165 166 167 175 176 177 185 186 187 
+		elementNeighbourTbl[77][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 066 067 068 076 078 086 087 088 166 167 168 176 177 178 186 187 188 
+		elementNeighbourTbl[78][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 067 068 069 077 079 087 088 089 167 168 169 177 178 179 187 188 189 
+		elementNeighbourTbl[79][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 068 069 1000 078 1000 088 089 1000 168 169 1000 178 179 1000 188 189 1000 
+		elementNeighbourTbl[80][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 070 071 1000 081 1000 090 091 1000 170 171 1000 180 181 1000 190 191 
+		elementNeighbourTbl[81][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 070 071 072 080 082 090 091 092 170 171 172 180 181 182 190 191 192 
+		elementNeighbourTbl[82][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 071 072 073 081 083 091 092 093 171 172 173 181 182 183 191 192 193 
+		elementNeighbourTbl[83][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 072 073 074 082 084 092 093 094 172 173 174 182 183 184 192 193 194 
+		elementNeighbourTbl[84][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 073 074 075 083 085 093 094 095 173 174 175 183 184 185 193 194 195 
+		elementNeighbourTbl[85][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 074 075 076 084 086 094 095 096 174 175 176 184 185 186 194 195 196 
+		elementNeighbourTbl[86][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 075 076 077 085 087 095 096 097 175 176 177 185 186 187 195 196 197 
+		elementNeighbourTbl[87][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 076 077 078 086 088 096 097 098 176 177 178 186 187 188 196 197 198 
+		elementNeighbourTbl[88][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 077 078 079 087 089 097 098 099 177 178 179 187 188 189 197 198 199 
+		elementNeighbourTbl[89][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 078 079 1000 088 1000 098 099 1000 178 179 1000 188 189 1000 198 199 1000 
+		elementNeighbourTbl[90][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 080 081 1000 091 1000 1000 1000 1000 180 181 1000 190 191 1000 1000 1000 
+		elementNeighbourTbl[91][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 080 081 082 090 092 1000 1000 1000 180 181 182 190 191 192 1000 1000 1000 
+		elementNeighbourTbl[92][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 081 082 083 091 093 1000 1000 1000 181 182 183 191 192 193 1000 1000 1000 
+		elementNeighbourTbl[93][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 082 083 084 092 094 1000 1000 1000 182 183 184 192 193 194 1000 1000 1000 
+		elementNeighbourTbl[94][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 083 084 085 093 095 1000 1000 1000 183 184 185 193 194 195 1000 1000 1000 
+		elementNeighbourTbl[95][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 084 085 086 094 096 1000 1000 1000 184 185 186 194 195 196 1000 1000 1000 
+		elementNeighbourTbl[96][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 085 086 087 095 097 1000 1000 1000 185 186 187 195 196 197 1000 1000 1000 
+		elementNeighbourTbl[97][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 086 087 088 096 098 1000 1000 1000 186 187 188 196 197 198 1000 1000 1000 
+		elementNeighbourTbl[98][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 087 088 089 097 099 1000 1000 1000 187 188 189 197 198 199 1000 1000 1000 
+		elementNeighbourTbl[99][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 088 089 1000 098 1000 1000 1000 1000 188 189 1000 198 199 1000 1000 1000 1000 
+		elementNeighbourTbl[100][0-26]: 1000 1000 1000 1000 000 001 1000 010 011 1000 1000 1000 1000 101 1000 110 111 1000 1000 1000 1000 200 201 1000 210 211 
+		elementNeighbourTbl[101][0-26]: 1000 1000 1000 000 001 002 010 011 012 1000 1000 1000 100 102 110 111 112 1000 1000 1000 200 201 202 210 211 212 
+		elementNeighbourTbl[102][0-26]: 1000 1000 1000 001 002 003 011 012 013 1000 1000 1000 101 103 111 112 113 1000 1000 1000 201 202 203 211 212 213 
+		elementNeighbourTbl[103][0-26]: 1000 1000 1000 002 003 004 012 013 014 1000 1000 1000 102 104 112 113 114 1000 1000 1000 202 203 204 212 213 214 
+		elementNeighbourTbl[104][0-26]: 1000 1000 1000 003 004 005 013 014 015 1000 1000 1000 103 105 113 114 115 1000 1000 1000 203 204 205 213 214 215 
+		elementNeighbourTbl[105][0-26]: 1000 1000 1000 004 005 006 014 015 016 1000 1000 1000 104 106 114 115 116 1000 1000 1000 204 205 206 214 215 216 
+		elementNeighbourTbl[106][0-26]: 1000 1000 1000 005 006 007 015 016 017 1000 1000 1000 105 107 115 116 117 1000 1000 1000 205 206 207 215 216 217 
+		elementNeighbourTbl[107][0-26]: 1000 1000 1000 006 007 008 016 017 018 1000 1000 1000 106 108 116 117 118 1000 1000 1000 206 207 208 216 217 218 
+		elementNeighbourTbl[108][0-26]: 1000 1000 1000 007 008 009 017 018 019 1000 1000 1000 107 109 117 118 119 1000 1000 1000 207 208 209 217 218 219 
+		elementNeighbourTbl[109][0-26]: 1000 1000 1000 008 009 1000 018 019 1000 1000 1000 1000 108 1000 118 119 1000 1000 1000 1000 208 209 1000 218 219 1000 
+		elementNeighbourTbl[110][0-26]: 1000 000 001 1000 010 011 1000 020 021 1000 100 101 1000 111 1000 120 121 1000 200 201 1000 210 211 1000 220 221 
+		elementNeighbourTbl[111][0-26]: 000 001 002 010 011 012 020 021 022 100 101 102 110 112 120 121 122 200 201 202 210 211 212 220 221 222 
+		elementNeighbourTbl[112][0-26]: 001 002 003 011 012 013 021 022 023 101 102 103 111 113 121 122 123 201 202 203 211 212 213 221 222 223 
+		elementNeighbourTbl[113][0-26]: 002 003 004 012 013 014 022 023 024 102 103 104 112 114 122 123 124 202 203 204 212 213 214 222 223 224 
+		elementNeighbourTbl[114][0-26]: 003 004 005 013 014 015 023 024 025 103 104 105 113 115 123 124 125 203 204 205 213 214 215 223 224 225 
+		elementNeighbourTbl[115][0-26]: 004 005 006 014 015 016 024 025 026 104 105 106 114 116 124 125 126 204 205 206 214 215 216 224 225 226 
+		elementNeighbourTbl[116][0-26]: 005 006 007 015 016 017 025 026 027 105 106 107 115 117 125 126 127 205 206 207 215 216 217 225 226 227 
+		elementNeighbourTbl[117][0-26]: 006 007 008 016 017 018 026 027 028 106 107 108 116 118 126 127 128 206 207 208 216 217 218 226 227 228 
+		elementNeighbourTbl[118][0-26]: 007 008 009 017 018 019 027 028 029 107 108 109 117 119 127 128 129 207 208 209 217 218 219 227 228 229 
+		elementNeighbourTbl[119][0-26]: 008 009 1000 018 019 1000 028 029 1000 108 109 1000 118 1000 128 129 1000 208 209 1000 218 219 1000 228 229 1000 
+		elementNeighbourTbl[120][0-26]: 1000 010 011 1000 020 021 1000 030 031 1000 110 111 1000 121 1000 130 131 1000 210 211 1000 220 221 1000 230 231 
+		elementNeighbourTbl[121][0-26]: 010 011 012 020 021 022 030 031 032 110 111 112 120 122 130 131 132 210 211 212 220 221 222 230 231 232 
+		elementNeighbourTbl[122][0-26]: 011 012 013 021 022 023 031 032 033 111 112 113 121 123 131 132 133 211 212 213 221 222 223 231 232 233 
+		elementNeighbourTbl[123][0-26]: 012 013 014 022 023 024 032 033 034 112 113 114 122 124 132 133 134 212 213 214 222 223 224 232 233 234 
+		elementNeighbourTbl[124][0-26]: 013 014 015 023 024 025 033 034 035 113 114 115 123 125 133 134 135 213 214 215 223 224 225 233 234 235 
+		elementNeighbourTbl[125][0-26]: 014 015 016 024 025 026 034 035 036 114 115 116 124 126 134 135 136 214 215 216 224 225 226 234 235 236 
+		elementNeighbourTbl[126][0-26]: 015 016 017 025 026 027 035 036 037 115 116 117 125 127 135 136 137 215 216 217 225 226 227 235 236 237 
+		elementNeighbourTbl[127][0-26]: 016 017 018 026 027 028 036 037 038 116 117 118 126 128 136 137 138 216 217 218 226 227 228 236 237 238 
+		elementNeighbourTbl[128][0-26]: 017 018 019 027 028 029 037 038 039 117 118 119 127 129 137 138 139 217 218 219 227 228 229 237 238 239 
+		elementNeighbourTbl[129][0-26]: 018 019 1000 028 029 1000 038 039 1000 118 119 1000 128 1000 138 139 1000 218 219 1000 228 229 1000 238 239 1000 
+		elementNeighbourTbl[130][0-26]: 1000 020 021 1000 030 031 1000 040 041 1000 120 121 1000 131 1000 140 141 1000 220 221 1000 230 231 1000 240 241 
+		elementNeighbourTbl[131][0-26]: 020 021 022 030 031 032 040 041 042 120 121 122 130 132 140 141 142 220 221 222 230 231 232 240 241 242 
+		elementNeighbourTbl[132][0-26]: 021 022 023 031 032 033 041 042 043 121 122 123 131 133 141 142 143 221 222 223 231 232 233 241 242 243 
+		elementNeighbourTbl[133][0-26]: 022 023 024 032 033 034 042 043 044 122 123 124 132 134 142 143 144 222 223 224 232 233 234 242 243 244 
+		elementNeighbourTbl[134][0-26]: 023 024 025 033 034 035 043 044 045 123 124 125 133 135 143 144 145 223 224 225 233 234 235 243 244 245 
+		elementNeighbourTbl[135][0-26]: 024 025 026 034 035 036 044 045 046 124 125 126 134 136 144 145 146 224 225 226 234 235 236 244 245 246 
+		elementNeighbourTbl[136][0-26]: 025 026 027 035 036 037 045 046 047 125 126 127 135 137 145 146 147 225 226 227 235 236 237 245 246 247 
+		elementNeighbourTbl[137][0-26]: 026 027 028 036 037 038 046 047 048 126 127 128 136 138 146 147 148 226 227 228 236 237 238 246 247 248 
+		elementNeighbourTbl[138][0-26]: 027 028 029 037 038 039 047 048 049 127 128 129 137 139 147 148 149 227 228 229 237 238 239 247 248 249 
+		elementNeighbourTbl[139][0-26]: 028 029 1000 038 039 1000 048 049 1000 128 129 1000 138 1000 148 149 1000 228 229 1000 238 239 1000 248 249 1000 
+		elementNeighbourTbl[140][0-26]: 1000 030 031 1000 040 041 1000 050 051 1000 130 131 1000 141 1000 150 151 1000 230 231 1000 240 241 1000 250 251 
+		elementNeighbourTbl[141][0-26]: 030 031 032 040 041 042 050 051 052 130 131 132 140 142 150 151 152 230 231 232 240 241 242 250 251 252 
+		elementNeighbourTbl[142][0-26]: 031 032 033 041 042 043 051 052 053 131 132 133 141 143 151 152 153 231 232 233 241 242 243 251 252 253 
+		elementNeighbourTbl[143][0-26]: 032 033 034 042 043 044 052 053 054 132 133 134 142 144 152 153 154 232 233 234 242 243 244 252 253 254 
+		elementNeighbourTbl[144][0-26]: 033 034 035 043 044 045 053 054 055 133 134 135 143 145 153 154 155 233 234 235 243 244 245 253 254 255 
+		elementNeighbourTbl[145][0-26]: 034 035 036 044 045 046 054 055 056 134 135 136 144 146 154 155 156 234 235 236 244 245 246 254 255 256 
+		elementNeighbourTbl[146][0-26]: 035 036 037 045 046 047 055 056 057 135 136 137 145 147 155 156 157 235 236 237 245 246 247 255 256 257 
+		elementNeighbourTbl[147][0-26]: 036 037 038 046 047 048 056 057 058 136 137 138 146 148 156 157 158 236 237 238 246 247 248 256 257 258 
+		elementNeighbourTbl[148][0-26]: 037 038 039 047 048 049 057 058 059 137 138 139 147 149 157 158 159 237 238 239 247 248 249 257 258 259 
+		elementNeighbourTbl[149][0-26]: 038 039 1000 048 049 1000 058 059 1000 138 139 1000 148 1000 158 159 1000 238 239 1000 248 249 1000 258 259 1000 
+		elementNeighbourTbl[150][0-26]: 1000 040 041 1000 050 051 1000 060 061 1000 140 141 1000 151 1000 160 161 1000 240 241 1000 250 251 1000 260 261 
+		elementNeighbourTbl[151][0-26]: 040 041 042 050 051 052 060 061 062 140 141 142 150 152 160 161 162 240 241 242 250 251 252 260 261 262 
+		elementNeighbourTbl[152][0-26]: 041 042 043 051 052 053 061 062 063 141 142 143 151 153 161 162 163 241 242 243 251 252 253 261 262 263 
+		elementNeighbourTbl[153][0-26]: 042 043 044 052 053 054 062 063 064 142 143 144 152 154 162 163 164 242 243 244 252 253 254 262 263 264 
+		elementNeighbourTbl[154][0-26]: 043 044 045 053 054 055 063 064 065 143 144 145 153 155 163 164 165 243 244 245 253 254 255 263 264 265 
+		elementNeighbourTbl[155][0-26]: 044 045 046 054 055 056 064 065 066 144 145 146 154 156 164 165 166 244 245 246 254 255 256 264 265 266 
+		elementNeighbourTbl[156][0-26]: 045 046 047 055 056 057 065 066 067 145 146 147 155 157 165 166 167 245 246 247 255 256 257 265 266 267 
+		elementNeighbourTbl[157][0-26]: 046 047 048 056 057 058 066 067 068 146 147 148 156 158 166 167 168 246 247 248 256 257 258 266 267 268 
+		elementNeighbourTbl[158][0-26]: 047 048 049 057 058 059 067 068 069 147 148 149 157 159 167 168 169 247 248 249 257 258 259 267 268 269 
+		elementNeighbourTbl[159][0-26]: 048 049 1000 058 059 1000 068 069 1000 148 149 1000 158 1000 168 169 1000 248 249 1000 258 259 1000 268 269 1000 
+		elementNeighbourTbl[160][0-26]: 1000 050 051 1000 060 061 1000 070 071 1000 150 151 1000 161 1000 170 171 1000 250 251 1000 260 261 1000 270 271 
+		elementNeighbourTbl[161][0-26]: 050 051 052 060 061 062 070 071 072 150 151 152 160 162 170 171 172 250 251 252 260 261 262 270 271 272 
+		elementNeighbourTbl[162][0-26]: 051 052 053 061 062 063 071 072 073 151 152 153 161 163 171 172 173 251 252 253 261 262 263 271 272 273 
+		elementNeighbourTbl[163][0-26]: 052 053 054 062 063 064 072 073 074 152 153 154 162 164 172 173 174 252 253 254 262 263 264 272 273 274 
+		elementNeighbourTbl[164][0-26]: 053 054 055 063 064 065 073 074 075 153 154 155 163 165 173 174 175 253 254 255 263 264 265 273 274 275 
+		elementNeighbourTbl[165][0-26]: 054 055 056 064 065 066 074 075 076 154 155 156 164 166 174 175 176 254 255 256 264 265 266 274 275 276 
+		elementNeighbourTbl[166][0-26]: 055 056 057 065 066 067 075 076 077 155 156 157 165 167 175 176 177 255 256 257 265 266 267 275 276 277 
+		elementNeighbourTbl[167][0-26]: 056 057 058 066 067 068 076 077 078 156 157 158 166 168 176 177 178 256 257 258 266 267 268 276 277 278 
+		elementNeighbourTbl[168][0-26]: 057 058 059 067 068 069 077 078 079 157 158 159 167 169 177 178 179 257 258 259 267 268 269 277 278 279 
+		elementNeighbourTbl[169][0-26]: 058 059 1000 068 069 1000 078 079 1000 158 159 1000 168 1000 178 179 1000 258 259 1000 268 269 1000 278 279 1000 
+		elementNeighbourTbl[170][0-26]: 1000 060 061 1000 070 071 1000 080 081 1000 160 161 1000 171 1000 180 181 1000 260 261 1000 270 271 1000 280 281 
+		elementNeighbourTbl[171][0-26]: 060 061 062 070 071 072 080 081 082 160 161 162 170 172 180 181 182 260 261 262 270 271 272 280 281 282 
+		elementNeighbourTbl[172][0-26]: 061 062 063 071 072 073 081 082 083 161 162 163 171 173 181 182 183 261 262 263 271 272 273 281 282 283 
+		elementNeighbourTbl[173][0-26]: 062 063 064 072 073 074 082 083 084 162 163 164 172 174 182 183 184 262 263 264 272 273 274 282 283 284 
+		elementNeighbourTbl[174][0-26]: 063 064 065 073 074 075 083 084 085 163 164 165 173 175 183 184 185 263 264 265 273 274 275 283 284 285 
+		elementNeighbourTbl[175][0-26]: 064 065 066 074 075 076 084 085 086 164 165 166 174 176 184 185 186 264 265 266 274 275 276 284 285 286 
+		elementNeighbourTbl[176][0-26]: 065 066 067 075 076 077 085 086 087 165 166 167 175 177 185 186 187 265 266 267 275 276 277 285 286 287 
+		elementNeighbourTbl[177][0-26]: 066 067 068 076 077 078 086 087 088 166 167 168 176 178 186 187 188 266 267 268 276 277 278 286 287 288 
+		elementNeighbourTbl[178][0-26]: 067 068 069 077 078 079 087 088 089 167 168 169 177 179 187 188 189 267 268 269 277 278 279 287 288 289 
+		elementNeighbourTbl[179][0-26]: 068 069 1000 078 079 1000 088 089 1000 168 169 1000 178 1000 188 189 1000 268 269 1000 278 279 1000 288 289 1000 
+		elementNeighbourTbl[180][0-26]: 1000 070 071 1000 080 081 1000 090 091 1000 170 171 1000 181 1000 190 191 1000 270 271 1000 280 281 1000 290 291 
+		elementNeighbourTbl[181][0-26]: 070 071 072 080 081 082 090 091 092 170 171 172 180 182 190 191 192 270 271 272 280 281 282 290 291 292 
+		elementNeighbourTbl[182][0-26]: 071 072 073 081 082 083 091 092 093 171 172 173 181 183 191 192 193 271 272 273 281 282 283 291 292 293 
+		elementNeighbourTbl[183][0-26]: 072 073 074 082 083 084 092 093 094 172 173 174 182 184 192 193 194 272 273 274 282 283 284 292 293 294 
+		elementNeighbourTbl[184][0-26]: 073 074 075 083 084 085 093 094 095 173 174 175 183 185 193 194 195 273 274 275 283 284 285 293 294 295 
+		elementNeighbourTbl[185][0-26]: 074 075 076 084 085 086 094 095 096 174 175 176 184 186 194 195 196 274 275 276 284 285 286 294 295 296 
+		elementNeighbourTbl[186][0-26]: 075 076 077 085 086 087 095 096 097 175 176 177 185 187 195 196 197 275 276 277 285 286 287 295 296 297 
+		elementNeighbourTbl[187][0-26]: 076 077 078 086 087 088 096 097 098 176 177 178 186 188 196 197 198 276 277 278 286 287 288 296 297 298 
+		elementNeighbourTbl[188][0-26]: 077 078 079 087 088 089 097 098 099 177 178 179 187 189 197 198 199 277 278 279 287 288 289 297 298 299 
+		elementNeighbourTbl[189][0-26]: 078 079 1000 088 089 1000 098 099 1000 178 179 1000 188 1000 198 199 1000 278 279 1000 288 289 1000 298 299 1000 
+		elementNeighbourTbl[190][0-26]: 1000 080 081 1000 090 091 1000 1000 1000 1000 180 181 1000 191 1000 1000 1000 1000 280 281 1000 290 291 1000 1000 1000 
+		elementNeighbourTbl[191][0-26]: 080 081 082 090 091 092 1000 1000 1000 180 181 182 190 192 1000 1000 1000 280 281 282 290 291 292 1000 1000 1000 
+		elementNeighbourTbl[192][0-26]: 081 082 083 091 092 093 1000 1000 1000 181 182 183 191 193 1000 1000 1000 281 282 283 291 292 293 1000 1000 1000 
+		elementNeighbourTbl[193][0-26]: 082 083 084 092 093 094 1000 1000 1000 182 183 184 192 194 1000 1000 1000 282 283 284 292 293 294 1000 1000 1000 
+		elementNeighbourTbl[194][0-26]: 083 084 085 093 094 095 1000 1000 1000 183 184 185 193 195 1000 1000 1000 283 284 285 293 294 295 1000 1000 1000 
+		elementNeighbourTbl[195][0-26]: 084 085 086 094 095 096 1000 1000 1000 184 185 186 194 196 1000 1000 1000 284 285 286 294 295 296 1000 1000 1000 
+		elementNeighbourTbl[196][0-26]: 085 086 087 095 096 097 1000 1000 1000 185 186 187 195 197 1000 1000 1000 285 286 287 295 296 297 1000 1000 1000 
+		elementNeighbourTbl[197][0-26]: 086 087 088 096 097 098 1000 1000 1000 186 187 188 196 198 1000 1000 1000 286 287 288 296 297 298 1000 1000 1000 
+		elementNeighbourTbl[198][0-26]: 087 088 089 097 098 099 1000 1000 1000 187 188 189 197 199 1000 1000 1000 287 288 289 297 298 299 1000 1000 1000 
+		elementNeighbourTbl[199][0-26]: 088 089 1000 098 099 1000 1000 1000 1000 188 189 1000 198 1000 1000 1000 1000 288 289 1000 298 299 1000 1000 1000 1000 
+		elementNeighbourTbl[200][0-26]: 1000 1000 1000 1000 100 101 1000 110 111 1000 1000 1000 1000 201 1000 210 211 1000 1000 1000 1000 300 301 1000 310 311 
+		elementNeighbourTbl[201][0-26]: 1000 1000 1000 100 101 102 110 111 112 1000 1000 1000 200 202 210 211 212 1000 1000 1000 300 301 302 310 311 312 
+		elementNeighbourTbl[202][0-26]: 1000 1000 1000 101 102 103 111 112 113 1000 1000 1000 201 203 211 212 213 1000 1000 1000 301 302 303 311 312 313 
+		elementNeighbourTbl[203][0-26]: 1000 1000 1000 102 103 104 112 113 114 1000 1000 1000 202 204 212 213 214 1000 1000 1000 302 303 304 312 313 314 
+		elementNeighbourTbl[204][0-26]: 1000 1000 1000 103 104 105 113 114 115 1000 1000 1000 203 205 213 214 215 1000 1000 1000 303 304 305 313 314 315 
+		elementNeighbourTbl[205][0-26]: 1000 1000 1000 104 105 106 114 115 116 1000 1000 1000 204 206 214 215 216 1000 1000 1000 304 305 306 314 315 316 
+		elementNeighbourTbl[206][0-26]: 1000 1000 1000 105 106 107 115 116 117 1000 1000 1000 205 207 215 216 217 1000 1000 1000 305 306 307 315 316 317 
+		elementNeighbourTbl[207][0-26]: 1000 1000 1000 106 107 108 116 117 118 1000 1000 1000 206 208 216 217 218 1000 1000 1000 306 307 308 316 317 318 
+		elementNeighbourTbl[208][0-26]: 1000 1000 1000 107 108 109 117 118 119 1000 1000 1000 207 209 217 218 219 1000 1000 1000 307 308 309 317 318 319 
+		elementNeighbourTbl[209][0-26]: 1000 1000 1000 108 109 1000 118 119 1000 1000 1000 1000 208 1000 218 219 1000 1000 1000 1000 308 309 1000 318 319 1000 
+		elementNeighbourTbl[210][0-26]: 1000 100 101 1000 110 111 1000 120 121 1000 200 201 1000 211 1000 220 221 1000 300 301 1000 310 311 1000 320 321 
+		elementNeighbourTbl[211][0-26]: 100 101 102 110 111 112 120 121 122 200 201 202 210 212 220 221 222 300 301 302 310 311 312 320 321 322 
+		elementNeighbourTbl[212][0-26]: 101 102 103 111 112 113 121 122 123 201 202 203 211 213 221 222 223 301 302 303 311 312 313 321 322 323 
+		elementNeighbourTbl[213][0-26]: 102 103 104 112 113 114 122 123 124 202 203 204 212 214 222 223 224 302 303 304 312 313 314 322 323 324 
+		elementNeighbourTbl[214][0-26]: 103 104 105 113 114 115 123 124 125 203 204 205 213 215 223 224 225 303 304 305 313 314 315 323 324 325 
+		elementNeighbourTbl[215][0-26]: 104 105 106 114 115 116 124 125 126 204 205 206 214 216 224 225 226 304 305 306 314 315 316 324 325 326 
+		elementNeighbourTbl[216][0-26]: 105 106 107 115 116 117 125 126 127 205 206 207 215 217 225 226 227 305 306 307 315 316 317 325 326 327 
+		elementNeighbourTbl[217][0-26]: 106 107 108 116 117 118 126 127 128 206 207 208 216 218 226 227 228 306 307 308 316 317 318 326 327 328 
+		elementNeighbourTbl[218][0-26]: 107 108 109 117 118 119 127 128 129 207 208 209 217 219 227 228 229 307 308 309 317 318 319 327 328 329 
+		elementNeighbourTbl[219][0-26]: 108 109 1000 118 119 1000 128 129 1000 208 209 1000 218 1000 228 229 1000 308 309 1000 318 319 1000 328 329 1000 
+		elementNeighbourTbl[220][0-26]: 1000 110 111 1000 120 121 1000 130 131 1000 210 211 1000 221 1000 230 231 1000 310 311 1000 320 321 1000 330 331 
+		elementNeighbourTbl[221][0-26]: 110 111 112 120 121 122 130 131 132 210 211 212 220 222 230 231 232 310 311 312 320 321 322 330 331 332 
+		elementNeighbourTbl[222][0-26]: 111 112 113 121 122 123 131 132 133 211 212 213 221 223 231 232 233 311 312 313 321 322 323 331 332 333 
+		elementNeighbourTbl[223][0-26]: 112 113 114 122 123 124 132 133 134 212 213 214 222 224 232 233 234 312 313 314 322 323 324 332 333 334 
+		elementNeighbourTbl[224][0-26]: 113 114 115 123 124 125 133 134 135 213 214 215 223 225 233 234 235 313 314 315 323 324 325 333 334 335 
+		elementNeighbourTbl[225][0-26]: 114 115 116 124 125 126 134 135 136 214 215 216 224 226 234 235 236 314 315 316 324 325 326 334 335 336 
+		elementNeighbourTbl[226][0-26]: 115 116 117 125 126 127 135 136 137 215 216 217 225 227 235 236 237 315 316 317 325 326 327 335 336 337 
+		elementNeighbourTbl[227][0-26]: 116 117 118 126 127 128 136 137 138 216 217 218 226 228 236 237 238 316 317 318 326 327 328 336 337 338 
+		elementNeighbourTbl[228][0-26]: 117 118 119 127 128 129 137 138 139 217 218 219 227 229 237 238 239 317 318 319 327 328 329 337 338 339 
+		elementNeighbourTbl[229][0-26]: 118 119 1000 128 129 1000 138 139 1000 218 219 1000 228 1000 238 239 1000 318 319 1000 328 329 1000 338 339 1000 
+		elementNeighbourTbl[230][0-26]: 1000 120 121 1000 130 131 1000 140 141 1000 220 221 1000 231 1000 240 241 1000 320 321 1000 330 331 1000 340 341 
+		elementNeighbourTbl[231][0-26]: 120 121 122 130 131 132 140 141 142 220 221 222 230 232 240 241 242 320 321 322 330 331 332 340 341 342 
+		elementNeighbourTbl[232][0-26]: 121 122 123 131 132 133 141 142 143 221 222 223 231 233 241 242 243 321 322 323 331 332 333 341 342 343 
+		elementNeighbourTbl[233][0-26]: 122 123 124 132 133 134 142 143 144 222 223 224 232 234 242 243 244 322 323 324 332 333 334 342 343 344 
+		elementNeighbourTbl[234][0-26]: 123 124 125 133 134 135 143 144 145 223 224 225 233 235 243 244 245 323 324 325 333 334 335 343 344 345 
+		elementNeighbourTbl[235][0-26]: 124 125 126 134 135 136 144 145 146 224 225 226 234 236 244 245 246 324 325 326 334 335 336 344 345 346 
+		elementNeighbourTbl[236][0-26]: 125 126 127 135 136 137 145 146 147 225 226 227 235 237 245 246 247 325 326 327 335 336 337 345 346 347 
+		elementNeighbourTbl[237][0-26]: 126 127 128 136 137 138 146 147 148 226 227 228 236 238 246 247 248 326 327 328 336 337 338 346 347 348 
+		elementNeighbourTbl[238][0-26]: 127 128 129 137 138 139 147 148 149 227 228 229 237 239 247 248 249 327 328 329 337 338 339 347 348 349 
+		elementNeighbourTbl[239][0-26]: 128 129 1000 138 139 1000 148 149 1000 228 229 1000 238 1000 248 249 1000 328 329 1000 338 339 1000 348 349 1000 
+		elementNeighbourTbl[240][0-26]: 1000 130 131 1000 140 141 1000 150 151 1000 230 231 1000 241 1000 250 251 1000 330 331 1000 340 341 1000 350 351 
+		elementNeighbourTbl[241][0-26]: 130 131 132 140 141 142 150 151 152 230 231 232 240 242 250 251 252 330 331 332 340 341 342 350 351 352 
+		elementNeighbourTbl[242][0-26]: 131 132 133 141 142 143 151 152 153 231 232 233 241 243 251 252 253 331 332 333 341 342 343 351 352 353 
+		elementNeighbourTbl[243][0-26]: 132 133 134 142 143 144 152 153 154 232 233 234 242 244 252 253 254 332 333 334 342 343 344 352 353 354 
+		elementNeighbourTbl[244][0-26]: 133 134 135 143 144 145 153 154 155 233 234 235 243 245 253 254 255 333 334 335 343 344 345 353 354 355 
+		elementNeighbourTbl[245][0-26]: 134 135 136 144 145 146 154 155 156 234 235 236 244 246 254 255 256 334 335 336 344 345 346 354 355 356 
+		elementNeighbourTbl[246][0-26]: 135 136 137 145 146 147 155 156 157 235 236 237 245 247 255 256 257 335 336 337 345 346 347 355 356 357 
+		elementNeighbourTbl[247][0-26]: 136 137 138 146 147 148 156 157 158 236 237 238 246 248 256 257 258 336 337 338 346 347 348 356 357 358 
+		elementNeighbourTbl[248][0-26]: 137 138 139 147 148 149 157 158 159 237 238 239 247 249 257 258 259 337 338 339 347 348 349 357 358 359 
+		elementNeighbourTbl[249][0-26]: 138 139 1000 148 149 1000 158 159 1000 238 239 1000 248 1000 258 259 1000 338 339 1000 348 349 1000 358 359 1000 
+		elementNeighbourTbl[250][0-26]: 1000 140 141 1000 150 151 1000 160 161 1000 240 241 1000 251 1000 260 261 1000 340 341 1000 350 351 1000 360 361 
+		elementNeighbourTbl[251][0-26]: 140 141 142 150 151 152 160 161 162 240 241 242 250 252 260 261 262 340 341 342 350 351 352 360 361 362 
+		elementNeighbourTbl[252][0-26]: 141 142 143 151 152 153 161 162 163 241 242 243 251 253 261 262 263 341 342 343 351 352 353 361 362 363 
+		elementNeighbourTbl[253][0-26]: 142 143 144 152 153 154 162 163 164 242 243 244 252 254 262 263 264 342 343 344 352 353 354 362 363 364 
+		elementNeighbourTbl[254][0-26]: 143 144 145 153 154 155 163 164 165 243 244 245 253 255 263 264 265 343 344 345 353 354 355 363 364 365 
+		elementNeighbourTbl[255][0-26]: 144 145 146 154 155 156 164 165 166 244 245 246 254 256 264 265 266 344 345 346 354 355 356 364 365 366 
+		elementNeighbourTbl[256][0-26]: 145 146 147 155 156 157 165 166 167 245 246 247 255 257 265 266 267 345 346 347 355 356 357 365 366 367 
+		elementNeighbourTbl[257][0-26]: 146 147 148 156 157 158 166 167 168 246 247 248 256 258 266 267 268 346 347 348 356 357 358 366 367 368 
+		elementNeighbourTbl[258][0-26]: 147 148 149 157 158 159 167 168 169 247 248 249 257 259 267 268 269 347 348 349 357 358 359 367 368 369 
+		elementNeighbourTbl[259][0-26]: 148 149 1000 158 159 1000 168 169 1000 248 249 1000 258 1000 268 269 1000 348 349 1000 358 359 1000 368 369 1000 
+		elementNeighbourTbl[260][0-26]: 1000 150 151 1000 160 161 1000 170 171 1000 250 251 1000 261 1000 270 271 1000 350 351 1000 360 361 1000 370 371 
+		elementNeighbourTbl[261][0-26]: 150 151 152 160 161 162 170 171 172 250 251 252 260 262 270 271 272 350 351 352 360 361 362 370 371 372 
+		elementNeighbourTbl[262][0-26]: 151 152 153 161 162 163 171 172 173 251 252 253 261 263 271 272 273 351 352 353 361 362 363 371 372 373 
+		elementNeighbourTbl[263][0-26]: 152 153 154 162 163 164 172 173 174 252 253 254 262 264 272 273 274 352 353 354 362 363 364 372 373 374 
+		elementNeighbourTbl[264][0-26]: 153 154 155 163 164 165 173 174 175 253 254 255 263 265 273 274 275 353 354 355 363 364 365 373 374 375 
+		elementNeighbourTbl[265][0-26]: 154 155 156 164 165 166 174 175 176 254 255 256 264 266 274 275 276 354 355 356 364 365 366 374 375 376 
+		elementNeighbourTbl[266][0-26]: 155 156 157 165 166 167 175 176 177 255 256 257 265 267 275 276 277 355 356 357 365 366 367 375 376 377 
+		elementNeighbourTbl[267][0-26]: 156 157 158 166 167 168 176 177 178 256 257 258 266 268 276 277 278 356 357 358 366 367 368 376 377 378 
+		elementNeighbourTbl[268][0-26]: 157 158 159 167 168 169 177 178 179 257 258 259 267 269 277 278 279 357 358 359 367 368 369 377 378 379 
+		elementNeighbourTbl[269][0-26]: 158 159 1000 168 169 1000 178 179 1000 258 259 1000 268 1000 278 279 1000 358 359 1000 368 369 1000 378 379 1000 
+		elementNeighbourTbl[270][0-26]: 1000 160 161 1000 170 171 1000 180 181 1000 260 261 1000 271 1000 280 281 1000 360 361 1000 370 371 1000 380 381 
+		elementNeighbourTbl[271][0-26]: 160 161 162 170 171 172 180 181 182 260 261 262 270 272 280 281 282 360 361 362 370 371 372 380 381 382 
+		elementNeighbourTbl[272][0-26]: 161 162 163 171 172 173 181 182 183 261 262 263 271 273 281 282 283 361 362 363 371 372 373 381 382 383 
+		elementNeighbourTbl[273][0-26]: 162 163 164 172 173 174 182 183 184 262 263 264 272 274 282 283 284 362 363 364 372 373 374 382 383 384 
+		elementNeighbourTbl[274][0-26]: 163 164 165 173 174 175 183 184 185 263 264 265 273 275 283 284 285 363 364 365 373 374 375 383 384 385 
+		elementNeighbourTbl[275][0-26]: 164 165 166 174 175 176 184 185 186 264 265 266 274 276 284 285 286 364 365 366 374 375 376 384 385 386 
+		elementNeighbourTbl[276][0-26]: 165 166 167 175 176 177 185 186 187 265 266 267 275 277 285 286 287 365 366 367 375 376 377 385 386 387 
+		elementNeighbourTbl[277][0-26]: 166 167 168 176 177 178 186 187 188 266 267 268 276 278 286 287 288 366 367 368 376 377 378 386 387 388 
+		elementNeighbourTbl[278][0-26]: 167 168 169 177 178 179 187 188 189 267 268 269 277 279 287 288 289 367 368 369 377 378 379 387 388 389 
+		elementNeighbourTbl[279][0-26]: 168 169 1000 178 179 1000 188 189 1000 268 269 1000 278 1000 288 289 1000 368 369 1000 378 379 1000 388 389 1000 
+		elementNeighbourTbl[280][0-26]: 1000 170 171 1000 180 181 1000 190 191 1000 270 271 1000 281 1000 290 291 1000 370 371 1000 380 381 1000 390 391 
+		elementNeighbourTbl[281][0-26]: 170 171 172 180 181 182 190 191 192 270 271 272 280 282 290 291 292 370 371 372 380 381 382 390 391 392 
+		elementNeighbourTbl[282][0-26]: 171 172 173 181 182 183 191 192 193 271 272 273 281 283 291 292 293 371 372 373 381 382 383 391 392 393 
+		elementNeighbourTbl[283][0-26]: 172 173 174 182 183 184 192 193 194 272 273 274 282 284 292 293 294 372 373 374 382 383 384 392 393 394 
+		elementNeighbourTbl[284][0-26]: 173 174 175 183 184 185 193 194 195 273 274 275 283 285 293 294 295 373 374 375 383 384 385 393 394 395 
+		elementNeighbourTbl[285][0-26]: 174 175 176 184 185 186 194 195 196 274 275 276 284 286 294 295 296 374 375 376 384 385 386 394 395 396 
+		elementNeighbourTbl[286][0-26]: 175 176 177 185 186 187 195 196 197 275 276 277 285 287 295 296 297 375 376 377 385 386 387 395 396 397 
+		elementNeighbourTbl[287][0-26]: 176 177 178 186 187 188 196 197 198 276 277 278 286 288 296 297 298 376 377 378 386 387 388 396 397 398 
+		elementNeighbourTbl[288][0-26]: 177 178 179 187 188 189 197 198 199 277 278 279 287 289 297 298 299 377 378 379 387 388 389 397 398 399 
+		elementNeighbourTbl[289][0-26]: 178 179 1000 188 189 1000 198 199 1000 278 279 1000 288 1000 298 299 1000 378 379 1000 388 389 1000 398 399 1000 
+		elementNeighbourTbl[290][0-26]: 1000 180 181 1000 190 191 1000 1000 1000 1000 280 281 1000 291 1000 1000 1000 1000 380 381 1000 390 391 1000 1000 1000 
+		elementNeighbourTbl[291][0-26]: 180 181 182 190 191 192 1000 1000 1000 280 281 282 290 292 1000 1000 1000 380 381 382 390 391 392 1000 1000 1000 
+		elementNeighbourTbl[292][0-26]: 181 182 183 191 192 193 1000 1000 1000 281 282 283 291 293 1000 1000 1000 381 382 383 391 392 393 1000 1000 1000 
+		elementNeighbourTbl[293][0-26]: 182 183 184 192 193 194 1000 1000 1000 282 283 284 292 294 1000 1000 1000 382 383 384 392 393 394 1000 1000 1000 
+		elementNeighbourTbl[294][0-26]: 183 184 185 193 194 195 1000 1000 1000 283 284 285 293 295 1000 1000 1000 383 384 385 393 394 395 1000 1000 1000 
+		elementNeighbourTbl[295][0-26]: 184 185 186 194 195 196 1000 1000 1000 284 285 286 294 296 1000 1000 1000 384 385 386 394 395 396 1000 1000 1000 
+		elementNeighbourTbl[296][0-26]: 185 186 187 195 196 197 1000 1000 1000 285 286 287 295 297 1000 1000 1000 385 386 387 395 396 397 1000 1000 1000 
+		elementNeighbourTbl[297][0-26]: 186 187 188 196 197 198 1000 1000 1000 286 287 288 296 298 1000 1000 1000 386 387 388 396 397 398 1000 1000 1000 
+		elementNeighbourTbl[298][0-26]: 187 188 189 197 198 199 1000 1000 1000 287 288 289 297 299 1000 1000 1000 387 388 389 397 398 399 1000 1000 1000 
+		elementNeighbourTbl[299][0-26]: 188 189 1000 198 199 1000 1000 1000 1000 288 289 1000 298 1000 1000 1000 1000 388 389 1000 398 399 1000 1000 1000 1000 
+		elementNeighbourTbl[300][0-26]: 1000 1000 1000 1000 200 201 1000 210 211 1000 1000 1000 1000 301 1000 310 311 1000 1000 1000 1000 400 401 1000 410 411 
+		elementNeighbourTbl[301][0-26]: 1000 1000 1000 200 201 202 210 211 212 1000 1000 1000 300 302 310 311 312 1000 1000 1000 400 401 402 410 411 412 
+		elementNeighbourTbl[302][0-26]: 1000 1000 1000 201 202 203 211 212 213 1000 1000 1000 301 303 311 312 313 1000 1000 1000 401 402 403 411 412 413 
+		elementNeighbourTbl[303][0-26]: 1000 1000 1000 202 203 204 212 213 214 1000 1000 1000 302 304 312 313 314 1000 1000 1000 402 403 404 412 413 414 
+		elementNeighbourTbl[304][0-26]: 1000 1000 1000 203 204 205 213 214 215 1000 1000 1000 303 305 313 314 315 1000 1000 1000 403 404 405 413 414 415 
+		elementNeighbourTbl[305][0-26]: 1000 1000 1000 204 205 206 214 215 216 1000 1000 1000 304 306 314 315 316 1000 1000 1000 404 405 406 414 415 416 
+		elementNeighbourTbl[306][0-26]: 1000 1000 1000 205 206 207 215 216 217 1000 1000 1000 305 307 315 316 317 1000 1000 1000 405 406 407 415 416 417 
+		elementNeighbourTbl[307][0-26]: 1000 1000 1000 206 207 208 216 217 218 1000 1000 1000 306 308 316 317 318 1000 1000 1000 406 407 408 416 417 418 
+		elementNeighbourTbl[308][0-26]: 1000 1000 1000 207 208 209 217 218 219 1000 1000 1000 307 309 317 318 319 1000 1000 1000 407 408 409 417 418 419 
+		elementNeighbourTbl[309][0-26]: 1000 1000 1000 208 209 1000 218 219 1000 1000 1000 1000 308 1000 318 319 1000 1000 1000 1000 408 409 1000 418 419 1000 
+		elementNeighbourTbl[310][0-26]: 1000 200 201 1000 210 211 1000 220 221 1000 300 301 1000 311 1000 320 321 1000 400 401 1000 410 411 1000 420 421 
+		elementNeighbourTbl[311][0-26]: 200 201 202 210 211 212 220 221 222 300 301 302 310 312 320 321 322 400 401 402 410 411 412 420 421 422 
+		elementNeighbourTbl[312][0-26]: 201 202 203 211 212 213 221 222 223 301 302 303 311 313 321 322 323 401 402 403 411 412 413 421 422 423 
+		elementNeighbourTbl[313][0-26]: 202 203 204 212 213 214 222 223 224 302 303 304 312 314 322 323 324 402 403 404 412 413 414 422 423 424 
+		elementNeighbourTbl[314][0-26]: 203 204 205 213 214 215 223 224 225 303 304 305 313 315 323 324 325 403 404 405 413 414 415 423 424 425 
+		elementNeighbourTbl[315][0-26]: 204 205 206 214 215 216 224 225 226 304 305 306 314 316 324 325 326 404 405 406 414 415 416 424 425 426 
+		elementNeighbourTbl[316][0-26]: 205 206 207 215 216 217 225 226 227 305 306 307 315 317 325 326 327 405 406 407 415 416 417 425 426 427 
+		elementNeighbourTbl[317][0-26]: 206 207 208 216 217 218 226 227 228 306 307 308 316 318 326 327 328 406 407 408 416 417 418 426 427 428 
+		elementNeighbourTbl[318][0-26]: 207 208 209 217 218 219 227 228 229 307 308 309 317 319 327 328 329 407 408 409 417 418 419 427 428 429 
+		elementNeighbourTbl[319][0-26]: 208 209 1000 218 219 1000 228 229 1000 308 309 1000 318 1000 328 329 1000 408 409 1000 418 419 1000 428 429 1000 
+		elementNeighbourTbl[320][0-26]: 1000 210 211 1000 220 221 1000 230 231 1000 310 311 1000 321 1000 330 331 1000 410 411 1000 420 421 1000 430 431 
+		elementNeighbourTbl[321][0-26]: 210 211 212 220 221 222 230 231 232 310 311 312 320 322 330 331 332 410 411 412 420 421 422 430 431 432 
+		elementNeighbourTbl[322][0-26]: 211 212 213 221 222 223 231 232 233 311 312 313 321 323 331 332 333 411 412 413 421 422 423 431 432 433 
+		elementNeighbourTbl[323][0-26]: 212 213 214 222 223 224 232 233 234 312 313 314 322 324 332 333 334 412 413 414 422 423 424 432 433 434 
+		elementNeighbourTbl[324][0-26]: 213 214 215 223 224 225 233 234 235 313 314 315 323 325 333 334 335 413 414 415 423 424 425 433 434 435 
+		elementNeighbourTbl[325][0-26]: 214 215 216 224 225 226 234 235 236 314 315 316 324 326 334 335 336 414 415 416 424 425 426 434 435 436 
+		elementNeighbourTbl[326][0-26]: 215 216 217 225 226 227 235 236 237 315 316 317 325 327 335 336 337 415 416 417 425 426 427 435 436 437 
+		elementNeighbourTbl[327][0-26]: 216 217 218 226 227 228 236 237 238 316 317 318 326 328 336 337 338 416 417 418 426 427 428 436 437 438 
+		elementNeighbourTbl[328][0-26]: 217 218 219 227 228 229 237 238 239 317 318 319 327 329 337 338 339 417 418 419 427 428 429 437 438 439 
+		elementNeighbourTbl[329][0-26]: 218 219 1000 228 229 1000 238 239 1000 318 319 1000 328 1000 338 339 1000 418 419 1000 428 429 1000 438 439 1000 
+		elementNeighbourTbl[330][0-26]: 1000 220 221 1000 230 231 1000 240 241 1000 320 321 1000 331 1000 340 341 1000 420 421 1000 430 431 1000 440 441 
+		elementNeighbourTbl[331][0-26]: 220 221 222 230 231 232 240 241 242 320 321 322 330 332 340 341 342 420 421 422 430 431 432 440 441 442 
+		elementNeighbourTbl[332][0-26]: 221 222 223 231 232 233 241 242 243 321 322 323 331 333 341 342 343 421 422 423 431 432 433 441 442 443 
+		elementNeighbourTbl[333][0-26]: 222 223 224 232 233 234 242 243 244 322 323 324 332 334 342 343 344 422 423 424 432 433 434 442 443 444 
+		elementNeighbourTbl[334][0-26]: 223 224 225 233 234 235 243 244 245 323 324 325 333 335 343 344 345 423 424 425 433 434 435 443 444 445 
+		elementNeighbourTbl[335][0-26]: 224 225 226 234 235 236 244 245 246 324 325 326 334 336 344 345 346 424 425 426 434 435 436 444 445 446 
+		elementNeighbourTbl[336][0-26]: 225 226 227 235 236 237 245 246 247 325 326 327 335 337 345 346 347 425 426 427 435 436 437 445 446 447 
+		elementNeighbourTbl[337][0-26]: 226 227 228 236 237 238 246 247 248 326 327 328 336 338 346 347 348 426 427 428 436 437 438 446 447 448 
+		elementNeighbourTbl[338][0-26]: 227 228 229 237 238 239 247 248 249 327 328 329 337 339 347 348 349 427 428 429 437 438 439 447 448 449 
+		elementNeighbourTbl[339][0-26]: 228 229 1000 238 239 1000 248 249 1000 328 329 1000 338 1000 348 349 1000 428 429 1000 438 439 1000 448 449 1000 
+		elementNeighbourTbl[340][0-26]: 1000 230 231 1000 240 241 1000 250 251 1000 330 331 1000 341 1000 350 351 1000 430 431 1000 440 441 1000 450 451 
+		elementNeighbourTbl[341][0-26]: 230 231 232 240 241 242 250 251 252 330 331 332 340 342 350 351 352 430 431 432 440 441 442 450 451 452 
+		elementNeighbourTbl[342][0-26]: 231 232 233 241 242 243 251 252 253 331 332 333 341 343 351 352 353 431 432 433 441 442 443 451 452 453 
+		elementNeighbourTbl[343][0-26]: 232 233 234 242 243 244 252 253 254 332 333 334 342 344 352 353 354 432 433 434 442 443 444 452 453 454 
+		elementNeighbourTbl[344][0-26]: 233 234 235 243 244 245 253 254 255 333 334 335 343 345 353 354 355 433 434 435 443 444 445 453 454 455 
+		elementNeighbourTbl[345][0-26]: 234 235 236 244 245 246 254 255 256 334 335 336 344 346 354 355 356 434 435 436 444 445 446 454 455 456 
+		elementNeighbourTbl[346][0-26]: 235 236 237 245 246 247 255 256 257 335 336 337 345 347 355 356 357 435 436 437 445 446 447 455 456 457 
+		elementNeighbourTbl[347][0-26]: 236 237 238 246 247 248 256 257 258 336 337 338 346 348 356 357 358 436 437 438 446 447 448 456 457 458 
+		elementNeighbourTbl[348][0-26]: 237 238 239 247 248 249 257 258 259 337 338 339 347 349 357 358 359 437 438 439 447 448 449 457 458 459 
+		elementNeighbourTbl[349][0-26]: 238 239 1000 248 249 1000 258 259 1000 338 339 1000 348 1000 358 359 1000 438 439 1000 448 449 1000 458 459 1000 
+		elementNeighbourTbl[350][0-26]: 1000 240 241 1000 250 251 1000 260 261 1000 340 341 1000 351 1000 360 361 1000 440 441 1000 450 451 1000 460 461 
+		elementNeighbourTbl[351][0-26]: 240 241 242 250 251 252 260 261 262 340 341 342 350 352 360 361 362 440 441 442 450 451 452 460 461 462 
+		elementNeighbourTbl[352][0-26]: 241 242 243 251 252 253 261 262 263 341 342 343 351 353 361 362 363 441 442 443 451 452 453 461 462 463 
+		elementNeighbourTbl[353][0-26]: 242 243 244 252 253 254 262 263 264 342 343 344 352 354 362 363 364 442 443 444 452 453 454 462 463 464 
+		elementNeighbourTbl[354][0-26]: 243 244 245 253 254 255 263 264 265 343 344 345 353 355 363 364 365 443 444 445 453 454 455 463 464 465 
+		elementNeighbourTbl[355][0-26]: 244 245 246 254 255 256 264 265 266 344 345 346 354 356 364 365 366 444 445 446 454 455 456 464 465 466 
+		elementNeighbourTbl[356][0-26]: 245 246 247 255 256 257 265 266 267 345 346 347 355 357 365 366 367 445 446 447 455 456 457 465 466 467 
+		elementNeighbourTbl[357][0-26]: 246 247 248 256 257 258 266 267 268 346 347 348 356 358 366 367 368 446 447 448 456 457 458 466 467 468 
+		elementNeighbourTbl[358][0-26]: 247 248 249 257 258 259 267 268 269 347 348 349 357 359 367 368 369 447 448 449 457 458 459 467 468 469 
+		elementNeighbourTbl[359][0-26]: 248 249 1000 258 259 1000 268 269 1000 348 349 1000 358 1000 368 369 1000 448 449 1000 458 459 1000 468 469 1000 
+		elementNeighbourTbl[360][0-26]: 1000 250 251 1000 260 261 1000 270 271 1000 350 351 1000 361 1000 370 371 1000 450 451 1000 460 461 1000 470 471 
+		elementNeighbourTbl[361][0-26]: 250 251 252 260 261 262 270 271 272 350 351 352 360 362 370 371 372 450 451 452 460 461 462 470 471 472 
+		elementNeighbourTbl[362][0-26]: 251 252 253 261 262 263 271 272 273 351 352 353 361 363 371 372 373 451 452 453 461 462 463 471 472 473 
+		elementNeighbourTbl[363][0-26]: 252 253 254 262 263 264 272 273 274 352 353 354 362 364 372 373 374 452 453 454 462 463 464 472 473 474 
+		elementNeighbourTbl[364][0-26]: 253 254 255 263 264 265 273 274 275 353 354 355 363 365 373 374 375 453 454 455 463 464 465 473 474 475 
+		elementNeighbourTbl[365][0-26]: 254 255 256 264 265 266 274 275 276 354 355 356 364 366 374 375 376 454 455 456 464 465 466 474 475 476 
+		elementNeighbourTbl[366][0-26]: 255 256 257 265 266 267 275 276 277 355 356 357 365 367 375 376 377 455 456 457 465 466 467 475 476 477 
+		elementNeighbourTbl[367][0-26]: 256 257 258 266 267 268 276 277 278 356 357 358 366 368 376 377 378 456 457 458 466 467 468 476 477 478 
+		elementNeighbourTbl[368][0-26]: 257 258 259 267 268 269 277 278 279 357 358 359 367 369 377 378 379 457 458 459 467 468 469 477 478 479 
+		elementNeighbourTbl[369][0-26]: 258 259 1000 268 269 1000 278 279 1000 358 359 1000 368 1000 378 379 1000 458 459 1000 468 469 1000 478 479 1000 
+		elementNeighbourTbl[370][0-26]: 1000 260 261 1000 270 271 1000 280 281 1000 360 361 1000 371 1000 380 381 1000 460 461 1000 470 471 1000 480 481 
+		elementNeighbourTbl[371][0-26]: 260 261 262 270 271 272 280 281 282 360 361 362 370 372 380 381 382 460 461 462 470 471 472 480 481 482 
+		elementNeighbourTbl[372][0-26]: 261 262 263 271 272 273 281 282 283 361 362 363 371 373 381 382 383 461 462 463 471 472 473 481 482 483 
+		elementNeighbourTbl[373][0-26]: 262 263 264 272 273 274 282 283 284 362 363 364 372 374 382 383 384 462 463 464 472 473 474 482 483 484 
+		elementNeighbourTbl[374][0-26]: 263 264 265 273 274 275 283 284 285 363 364 365 373 375 383 384 385 463 464 465 473 474 475 483 484 485 
+		elementNeighbourTbl[375][0-26]: 264 265 266 274 275 276 284 285 286 364 365 366 374 376 384 385 386 464 465 466 474 475 476 484 485 486 
+		elementNeighbourTbl[376][0-26]: 265 266 267 275 276 277 285 286 287 365 366 367 375 377 385 386 387 465 466 467 475 476 477 485 486 487 
+		elementNeighbourTbl[377][0-26]: 266 267 268 276 277 278 286 287 288 366 367 368 376 378 386 387 388 466 467 468 476 477 478 486 487 488 
+		elementNeighbourTbl[378][0-26]: 267 268 269 277 278 279 287 288 289 367 368 369 377 379 387 388 389 467 468 469 477 478 479 487 488 489 
+		elementNeighbourTbl[379][0-26]: 268 269 1000 278 279 1000 288 289 1000 368 369 1000 378 1000 388 389 1000 468 469 1000 478 479 1000 488 489 1000 
+		elementNeighbourTbl[380][0-26]: 1000 270 271 1000 280 281 1000 290 291 1000 370 371 1000 381 1000 390 391 1000 470 471 1000 480 481 1000 490 491 
+		elementNeighbourTbl[381][0-26]: 270 271 272 280 281 282 290 291 292 370 371 372 380 382 390 391 392 470 471 472 480 481 482 490 491 492 
+		elementNeighbourTbl[382][0-26]: 271 272 273 281 282 283 291 292 293 371 372 373 381 383 391 392 393 471 472 473 481 482 483 491 492 493 
+		elementNeighbourTbl[383][0-26]: 272 273 274 282 283 284 292 293 294 372 373 374 382 384 392 393 394 472 473 474 482 483 484 492 493 494 
+		elementNeighbourTbl[384][0-26]: 273 274 275 283 284 285 293 294 295 373 374 375 383 385 393 394 395 473 474 475 483 484 485 493 494 495 
+		elementNeighbourTbl[385][0-26]: 274 275 276 284 285 286 294 295 296 374 375 376 384 386 394 395 396 474 475 476 484 485 486 494 495 496 
+		elementNeighbourTbl[386][0-26]: 275 276 277 285 286 287 295 296 297 375 376 377 385 387 395 396 397 475 476 477 485 486 487 495 496 497 
+		elementNeighbourTbl[387][0-26]: 276 277 278 286 287 288 296 297 298 376 377 378 386 388 396 397 398 476 477 478 486 487 488 496 497 498 
+		elementNeighbourTbl[388][0-26]: 277 278 279 287 288 289 297 298 299 377 378 379 387 389 397 398 399 477 478 479 487 488 489 497 498 499 
+		elementNeighbourTbl[389][0-26]: 278 279 1000 288 289 1000 298 299 1000 378 379 1000 388 1000 398 399 1000 478 479 1000 488 489 1000 498 499 1000 
+		elementNeighbourTbl[390][0-26]: 1000 280 281 1000 290 291 1000 1000 1000 1000 380 381 1000 391 1000 1000 1000 1000 480 481 1000 490 491 1000 1000 1000 
+		elementNeighbourTbl[391][0-26]: 280 281 282 290 291 292 1000 1000 1000 380 381 382 390 392 1000 1000 1000 480 481 482 490 491 492 1000 1000 1000 
+		elementNeighbourTbl[392][0-26]: 281 282 283 291 292 293 1000 1000 1000 381 382 383 391 393 1000 1000 1000 481 482 483 491 492 493 1000 1000 1000 
+		elementNeighbourTbl[393][0-26]: 282 283 284 292 293 294 1000 1000 1000 382 383 384 392 394 1000 1000 1000 482 483 484 492 493 494 1000 1000 1000 
+		elementNeighbourTbl[394][0-26]: 283 284 285 293 294 295 1000 1000 1000 383 384 385 393 395 1000 1000 1000 483 484 485 493 494 495 1000 1000 1000 
+		elementNeighbourTbl[395][0-26]: 284 285 286 294 295 296 1000 1000 1000 384 385 386 394 396 1000 1000 1000 484 485 486 494 495 496 1000 1000 1000 
+		elementNeighbourTbl[396][0-26]: 285 286 287 295 296 297 1000 1000 1000 385 386 387 395 397 1000 1000 1000 485 486 487 495 496 497 1000 1000 1000 
+		elementNeighbourTbl[397][0-26]: 286 287 288 296 297 298 1000 1000 1000 386 387 388 396 398 1000 1000 1000 486 487 488 496 497 498 1000 1000 1000 
+		elementNeighbourTbl[398][0-26]: 287 288 289 297 298 299 1000 1000 1000 387 388 389 397 399 1000 1000 1000 487 488 489 497 498 499 1000 1000 1000 
+		elementNeighbourTbl[399][0-26]: 288 289 1000 298 299 1000 1000 1000 1000 388 389 1000 398 1000 1000 1000 1000 488 489 1000 498 499 1000 1000 1000 1000 
+		elementNeighbourTbl[400][0-26]: 1000 1000 1000 1000 300 301 1000 310 311 1000 1000 1000 1000 401 1000 410 411 1000 1000 1000 1000 500 501 1000 510 511 
+		elementNeighbourTbl[401][0-26]: 1000 1000 1000 300 301 302 310 311 312 1000 1000 1000 400 402 410 411 412 1000 1000 1000 500 501 502 510 511 512 
+		elementNeighbourTbl[402][0-26]: 1000 1000 1000 301 302 303 311 312 313 1000 1000 1000 401 403 411 412 413 1000 1000 1000 501 502 503 511 512 513 
+		elementNeighbourTbl[403][0-26]: 1000 1000 1000 302 303 304 312 313 314 1000 1000 1000 402 404 412 413 414 1000 1000 1000 502 503 504 512 513 514 
+		elementNeighbourTbl[404][0-26]: 1000 1000 1000 303 304 305 313 314 315 1000 1000 1000 403 405 413 414 415 1000 1000 1000 503 504 505 513 514 515 
+		elementNeighbourTbl[405][0-26]: 1000 1000 1000 304 305 306 314 315 316 1000 1000 1000 404 406 414 415 416 1000 1000 1000 504 505 506 514 515 516 
+		elementNeighbourTbl[406][0-26]: 1000 1000 1000 305 306 307 315 316 317 1000 1000 1000 405 407 415 416 417 1000 1000 1000 505 506 507 515 516 517 
+		elementNeighbourTbl[407][0-26]: 1000 1000 1000 306 307 308 316 317 318 1000 1000 1000 406 408 416 417 418 1000 1000 1000 506 507 508 516 517 518 
+		elementNeighbourTbl[408][0-26]: 1000 1000 1000 307 308 309 317 318 319 1000 1000 1000 407 409 417 418 419 1000 1000 1000 507 508 509 517 518 519 
+		elementNeighbourTbl[409][0-26]: 1000 1000 1000 308 309 1000 318 319 1000 1000 1000 1000 408 1000 418 419 1000 1000 1000 1000 508 509 1000 518 519 1000 
+		elementNeighbourTbl[410][0-26]: 1000 300 301 1000 310 311 1000 320 321 1000 400 401 1000 411 1000 420 421 1000 500 501 1000 510 511 1000 520 521 
+		elementNeighbourTbl[411][0-26]: 300 301 302 310 311 312 320 321 322 400 401 402 410 412 420 421 422 500 501 502 510 511 512 520 521 522 
+		elementNeighbourTbl[412][0-26]: 301 302 303 311 312 313 321 322 323 401 402 403 411 413 421 422 423 501 502 503 511 512 513 521 522 523 
+		elementNeighbourTbl[413][0-26]: 302 303 304 312 313 314 322 323 324 402 403 404 412 414 422 423 424 502 503 504 512 513 514 522 523 524 
+		elementNeighbourTbl[414][0-26]: 303 304 305 313 314 315 323 324 325 403 404 405 413 415 423 424 425 503 504 505 513 514 515 523 524 525 
+		elementNeighbourTbl[415][0-26]: 304 305 306 314 315 316 324 325 326 404 405 406 414 416 424 425 426 504 505 506 514 515 516 524 525 526 
+		elementNeighbourTbl[416][0-26]: 305 306 307 315 316 317 325 326 327 405 406 407 415 417 425 426 427 505 506 507 515 516 517 525 526 527 
+		elementNeighbourTbl[417][0-26]: 306 307 308 316 317 318 326 327 328 406 407 408 416 418 426 427 428 506 507 508 516 517 518 526 527 528 
+		elementNeighbourTbl[418][0-26]: 307 308 309 317 318 319 327 328 329 407 408 409 417 419 427 428 429 507 508 509 517 518 519 527 528 529 
+		elementNeighbourTbl[419][0-26]: 308 309 1000 318 319 1000 328 329 1000 408 409 1000 418 1000 428 429 1000 508 509 1000 518 519 1000 528 529 1000 
+		elementNeighbourTbl[420][0-26]: 1000 310 311 1000 320 321 1000 330 331 1000 410 411 1000 421 1000 430 431 1000 510 511 1000 520 521 1000 530 531 
+		elementNeighbourTbl[421][0-26]: 310 311 312 320 321 322 330 331 332 410 411 412 420 422 430 431 432 510 511 512 520 521 522 530 531 532 
+		elementNeighbourTbl[422][0-26]: 311 312 313 321 322 323 331 332 333 411 412 413 421 423 431 432 433 511 512 513 521 522 523 531 532 533 
+		elementNeighbourTbl[423][0-26]: 312 313 314 322 323 324 332 333 334 412 413 414 422 424 432 433 434 512 513 514 522 523 524 532 533 534 
+		elementNeighbourTbl[424][0-26]: 313 314 315 323 324 325 333 334 335 413 414 415 423 425 433 434 435 513 514 515 523 524 525 533 534 535 
+		elementNeighbourTbl[425][0-26]: 314 315 316 324 325 326 334 335 336 414 415 416 424 426 434 435 436 514 515 516 524 525 526 534 535 536 
+		elementNeighbourTbl[426][0-26]: 315 316 317 325 326 327 335 336 337 415 416 417 425 427 435 436 437 515 516 517 525 526 527 535 536 537 
+		elementNeighbourTbl[427][0-26]: 316 317 318 326 327 328 336 337 338 416 417 418 426 428 436 437 438 516 517 518 526 527 528 536 537 538 
+		elementNeighbourTbl[428][0-26]: 317 318 319 327 328 329 337 338 339 417 418 419 427 429 437 438 439 517 518 519 527 528 529 537 538 539 
+		elementNeighbourTbl[429][0-26]: 318 319 1000 328 329 1000 338 339 1000 418 419 1000 428 1000 438 439 1000 518 519 1000 528 529 1000 538 539 1000 
+		elementNeighbourTbl[430][0-26]: 1000 320 321 1000 330 331 1000 340 341 1000 420 421 1000 431 1000 440 441 1000 520 521 1000 530 531 1000 540 541 
+		elementNeighbourTbl[431][0-26]: 320 321 322 330 331 332 340 341 342 420 421 422 430 432 440 441 442 520 521 522 530 531 532 540 541 542 
+		elementNeighbourTbl[432][0-26]: 321 322 323 331 332 333 341 342 343 421 422 423 431 433 441 442 443 521 522 523 531 532 533 541 542 543 
+		elementNeighbourTbl[433][0-26]: 322 323 324 332 333 334 342 343 344 422 423 424 432 434 442 443 444 522 523 524 532 533 534 542 543 544 
+		elementNeighbourTbl[434][0-26]: 323 324 325 333 334 335 343 344 345 423 424 425 433 435 443 444 445 523 524 525 533 534 535 543 544 545 
+		elementNeighbourTbl[435][0-26]: 324 325 326 334 335 336 344 345 346 424 425 426 434 436 444 445 446 524 525 526 534 535 536 544 545 546 
+		elementNeighbourTbl[436][0-26]: 325 326 327 335 336 337 345 346 347 425 426 427 435 437 445 446 447 525 526 527 535 536 537 545 546 547 
+		elementNeighbourTbl[437][0-26]: 326 327 328 336 337 338 346 347 348 426 427 428 436 438 446 447 448 526 527 528 536 537 538 546 547 548 
+		elementNeighbourTbl[438][0-26]: 327 328 329 337 338 339 347 348 349 427 428 429 437 439 447 448 449 527 528 529 537 538 539 547 548 549 
+		elementNeighbourTbl[439][0-26]: 328 329 1000 338 339 1000 348 349 1000 428 429 1000 438 1000 448 449 1000 528 529 1000 538 539 1000 548 549 1000 
+		elementNeighbourTbl[440][0-26]: 1000 330 331 1000 340 341 1000 350 351 1000 430 431 1000 441 1000 450 451 1000 530 531 1000 540 541 1000 550 551 
+		elementNeighbourTbl[441][0-26]: 330 331 332 340 341 342 350 351 352 430 431 432 440 442 450 451 452 530 531 532 540 541 542 550 551 552 
+		elementNeighbourTbl[442][0-26]: 331 332 333 341 342 343 351 352 353 431 432 433 441 443 451 452 453 531 532 533 541 542 543 551 552 553 
+		elementNeighbourTbl[443][0-26]: 332 333 334 342 343 344 352 353 354 432 433 434 442 444 452 453 454 532 533 534 542 543 544 552 553 554 
+		elementNeighbourTbl[444][0-26]: 333 334 335 343 344 345 353 354 355 433 434 435 443 445 453 454 455 533 534 535 543 544 545 553 554 555 
+		elementNeighbourTbl[445][0-26]: 334 335 336 344 345 346 354 355 356 434 435 436 444 446 454 455 456 534 535 536 544 545 546 554 555 556 
+		elementNeighbourTbl[446][0-26]: 335 336 337 345 346 347 355 356 357 435 436 437 445 447 455 456 457 535 536 537 545 546 547 555 556 557 
+		elementNeighbourTbl[447][0-26]: 336 337 338 346 347 348 356 357 358 436 437 438 446 448 456 457 458 536 537 538 546 547 548 556 557 558 
+		elementNeighbourTbl[448][0-26]: 337 338 339 347 348 349 357 358 359 437 438 439 447 449 457 458 459 537 538 539 547 548 549 557 558 559 
+		elementNeighbourTbl[449][0-26]: 338 339 1000 348 349 1000 358 359 1000 438 439 1000 448 1000 458 459 1000 538 539 1000 548 549 1000 558 559 1000 
+		elementNeighbourTbl[450][0-26]: 1000 340 341 1000 350 351 1000 360 361 1000 440 441 1000 451 1000 460 461 1000 540 541 1000 550 551 1000 560 561 
+		elementNeighbourTbl[451][0-26]: 340 341 342 350 351 352 360 361 362 440 441 442 450 452 460 461 462 540 541 542 550 551 552 560 561 562 
+		elementNeighbourTbl[452][0-26]: 341 342 343 351 352 353 361 362 363 441 442 443 451 453 461 462 463 541 542 543 551 552 553 561 562 563 
+		elementNeighbourTbl[453][0-26]: 342 343 344 352 353 354 362 363 364 442 443 444 452 454 462 463 464 542 543 544 552 553 554 562 563 564 
+		elementNeighbourTbl[454][0-26]: 343 344 345 353 354 355 363 364 365 443 444 445 453 455 463 464 465 543 544 545 553 554 555 563 564 565 
+		elementNeighbourTbl[455][0-26]: 344 345 346 354 355 356 364 365 366 444 445 446 454 456 464 465 466 544 545 546 554 555 556 564 565 566 
+		elementNeighbourTbl[456][0-26]: 345 346 347 355 356 357 365 366 367 445 446 447 455 457 465 466 467 545 546 547 555 556 557 565 566 567 
+		elementNeighbourTbl[457][0-26]: 346 347 348 356 357 358 366 367 368 446 447 448 456 458 466 467 468 546 547 548 556 557 558 566 567 568 
+		elementNeighbourTbl[458][0-26]: 347 348 349 357 358 359 367 368 369 447 448 449 457 459 467 468 469 547 548 549 557 558 559 567 568 569 
+		elementNeighbourTbl[459][0-26]: 348 349 1000 358 359 1000 368 369 1000 448 449 1000 458 1000 468 469 1000 548 549 1000 558 559 1000 568 569 1000 
+		elementNeighbourTbl[460][0-26]: 1000 350 351 1000 360 361 1000 370 371 1000 450 451 1000 461 1000 470 471 1000 550 551 1000 560 561 1000 570 571 
+		elementNeighbourTbl[461][0-26]: 350 351 352 360 361 362 370 371 372 450 451 452 460 462 470 471 472 550 551 552 560 561 562 570 571 572 
+		elementNeighbourTbl[462][0-26]: 351 352 353 361 362 363 371 372 373 451 452 453 461 463 471 472 473 551 552 553 561 562 563 571 572 573 
+		elementNeighbourTbl[463][0-26]: 352 353 354 362 363 364 372 373 374 452 453 454 462 464 472 473 474 552 553 554 562 563 564 572 573 574 
+		elementNeighbourTbl[464][0-26]: 353 354 355 363 364 365 373 374 375 453 454 455 463 465 473 474 475 553 554 555 563 564 565 573 574 575 
+		elementNeighbourTbl[465][0-26]: 354 355 356 364 365 366 374 375 376 454 455 456 464 466 474 475 476 554 555 556 564 565 566 574 575 576 
+		elementNeighbourTbl[466][0-26]: 355 356 357 365 366 367 375 376 377 455 456 457 465 467 475 476 477 555 556 557 565 566 567 575 576 577 
+		elementNeighbourTbl[467][0-26]: 356 357 358 366 367 368 376 377 378 456 457 458 466 468 476 477 478 556 557 558 566 567 568 576 577 578 
+		elementNeighbourTbl[468][0-26]: 357 358 359 367 368 369 377 378 379 457 458 459 467 469 477 478 479 557 558 559 567 568 569 577 578 579 
+		elementNeighbourTbl[469][0-26]: 358 359 1000 368 369 1000 378 379 1000 458 459 1000 468 1000 478 479 1000 558 559 1000 568 569 1000 578 579 1000 
+		elementNeighbourTbl[470][0-26]: 1000 360 361 1000 370 371 1000 380 381 1000 460 461 1000 471 1000 480 481 1000 560 561 1000 570 571 1000 580 581 
+		elementNeighbourTbl[471][0-26]: 360 361 362 370 371 372 380 381 382 460 461 462 470 472 480 481 482 560 561 562 570 571 572 580 581 582 
+		elementNeighbourTbl[472][0-26]: 361 362 363 371 372 373 381 382 383 461 462 463 471 473 481 482 483 561 562 563 571 572 573 581 582 583 
+		elementNeighbourTbl[473][0-26]: 362 363 364 372 373 374 382 383 384 462 463 464 472 474 482 483 484 562 563 564 572 573 574 582 583 584 
+		elementNeighbourTbl[474][0-26]: 363 364 365 373 374 375 383 384 385 463 464 465 473 475 483 484 485 563 564 565 573 574 575 583 584 585 
+		elementNeighbourTbl[475][0-26]: 364 365 366 374 375 376 384 385 386 464 465 466 474 476 484 485 486 564 565 566 574 575 576 584 585 586 
+		elementNeighbourTbl[476][0-26]: 365 366 367 375 376 377 385 386 387 465 466 467 475 477 485 486 487 565 566 567 575 576 577 585 586 587 
+		elementNeighbourTbl[477][0-26]: 366 367 368 376 377 378 386 387 388 466 467 468 476 478 486 487 488 566 567 568 576 577 578 586 587 588 
+		elementNeighbourTbl[478][0-26]: 367 368 369 377 378 379 387 388 389 467 468 469 477 479 487 488 489 567 568 569 577 578 579 587 588 589 
+		elementNeighbourTbl[479][0-26]: 368 369 1000 378 379 1000 388 389 1000 468 469 1000 478 1000 488 489 1000 568 569 1000 578 579 1000 588 589 1000 
+		elementNeighbourTbl[480][0-26]: 1000 370 371 1000 380 381 1000 390 391 1000 470 471 1000 481 1000 490 491 1000 570 571 1000 580 581 1000 590 591 
+		elementNeighbourTbl[481][0-26]: 370 371 372 380 381 382 390 391 392 470 471 472 480 482 490 491 492 570 571 572 580 581 582 590 591 592 
+		elementNeighbourTbl[482][0-26]: 371 372 373 381 382 383 391 392 393 471 472 473 481 483 491 492 493 571 572 573 581 582 583 591 592 593 
+		elementNeighbourTbl[483][0-26]: 372 373 374 382 383 384 392 393 394 472 473 474 482 484 492 493 494 572 573 574 582 583 584 592 593 594 
+		elementNeighbourTbl[484][0-26]: 373 374 375 383 384 385 393 394 395 473 474 475 483 485 493 494 495 573 574 575 583 584 585 593 594 595 
+		elementNeighbourTbl[485][0-26]: 374 375 376 384 385 386 394 395 396 474 475 476 484 486 494 495 496 574 575 576 584 585 586 594 595 596 
+		elementNeighbourTbl[486][0-26]: 375 376 377 385 386 387 395 396 397 475 476 477 485 487 495 496 497 575 576 577 585 586 587 595 596 597 
+		elementNeighbourTbl[487][0-26]: 376 377 378 386 387 388 396 397 398 476 477 478 486 488 496 497 498 576 577 578 586 587 588 596 597 598 
+		elementNeighbourTbl[488][0-26]: 377 378 379 387 388 389 397 398 399 477 478 479 487 489 497 498 499 577 578 579 587 588 589 597 598 599 
+		elementNeighbourTbl[489][0-26]: 378 379 1000 388 389 1000 398 399 1000 478 479 1000 488 1000 498 499 1000 578 579 1000 588 589 1000 598 599 1000 
+		elementNeighbourTbl[490][0-26]: 1000 380 381 1000 390 391 1000 1000 1000 1000 480 481 1000 491 1000 1000 1000 1000 580 581 1000 590 591 1000 1000 1000 
+		elementNeighbourTbl[491][0-26]: 380 381 382 390 391 392 1000 1000 1000 480 481 482 490 492 1000 1000 1000 580 581 582 590 591 592 1000 1000 1000 
+		elementNeighbourTbl[492][0-26]: 381 382 383 391 392 393 1000 1000 1000 481 482 483 491 493 1000 1000 1000 581 582 583 591 592 593 1000 1000 1000 
+		elementNeighbourTbl[493][0-26]: 382 383 384 392 393 394 1000 1000 1000 482 483 484 492 494 1000 1000 1000 582 583 584 592 593 594 1000 1000 1000 
+		elementNeighbourTbl[494][0-26]: 383 384 385 393 394 395 1000 1000 1000 483 484 485 493 495 1000 1000 1000 583 584 585 593 594 595 1000 1000 1000 
+		elementNeighbourTbl[495][0-26]: 384 385 386 394 395 396 1000 1000 1000 484 485 486 494 496 1000 1000 1000 584 585 586 594 595 596 1000 1000 1000 
+		elementNeighbourTbl[496][0-26]: 385 386 387 395 396 397 1000 1000 1000 485 486 487 495 497 1000 1000 1000 585 586 587 595 596 597 1000 1000 1000 
+		elementNeighbourTbl[497][0-26]: 386 387 388 396 397 398 1000 1000 1000 486 487 488 496 498 1000 1000 1000 586 587 588 596 597 598 1000 1000 1000 
+		elementNeighbourTbl[498][0-26]: 387 388 389 397 398 399 1000 1000 1000 487 488 489 497 499 1000 1000 1000 587 588 589 597 598 599 1000 1000 1000 
+		elementNeighbourTbl[499][0-26]: 388 389 1000 398 399 1000 1000 1000 1000 488 489 1000 498 1000 1000 1000 1000 588 589 1000 598 599 1000 1000 1000 1000 
+		elementNeighbourTbl[500][0-26]: 1000 1000 1000 1000 400 401 1000 410 411 1000 1000 1000 1000 501 1000 510 511 1000 1000 1000 1000 600 601 1000 610 611 
+		elementNeighbourTbl[501][0-26]: 1000 1000 1000 400 401 402 410 411 412 1000 1000 1000 500 502 510 511 512 1000 1000 1000 600 601 602 610 611 612 
+		elementNeighbourTbl[502][0-26]: 1000 1000 1000 401 402 403 411 412 413 1000 1000 1000 501 503 511 512 513 1000 1000 1000 601 602 603 611 612 613 
+		elementNeighbourTbl[503][0-26]: 1000 1000 1000 402 403 404 412 413 414 1000 1000 1000 502 504 512 513 514 1000 1000 1000 602 603 604 612 613 614 
+		elementNeighbourTbl[504][0-26]: 1000 1000 1000 403 404 405 413 414 415 1000 1000 1000 503 505 513 514 515 1000 1000 1000 603 604 605 613 614 615 
+		elementNeighbourTbl[505][0-26]: 1000 1000 1000 404 405 406 414 415 416 1000 1000 1000 504 506 514 515 516 1000 1000 1000 604 605 606 614 615 616 
+		elementNeighbourTbl[506][0-26]: 1000 1000 1000 405 406 407 415 416 417 1000 1000 1000 505 507 515 516 517 1000 1000 1000 605 606 607 615 616 617 
+		elementNeighbourTbl[507][0-26]: 1000 1000 1000 406 407 408 416 417 418 1000 1000 1000 506 508 516 517 518 1000 1000 1000 606 607 608 616 617 618 
+		elementNeighbourTbl[508][0-26]: 1000 1000 1000 407 408 409 417 418 419 1000 1000 1000 507 509 517 518 519 1000 1000 1000 607 608 609 617 618 619 
+		elementNeighbourTbl[509][0-26]: 1000 1000 1000 408 409 1000 418 419 1000 1000 1000 1000 508 1000 518 519 1000 1000 1000 1000 608 609 1000 618 619 1000 
+		elementNeighbourTbl[510][0-26]: 1000 400 401 1000 410 411 1000 420 421 1000 500 501 1000 511 1000 520 521 1000 600 601 1000 610 611 1000 620 621 
+		elementNeighbourTbl[511][0-26]: 400 401 402 410 411 412 420 421 422 500 501 502 510 512 520 521 522 600 601 602 610 611 612 620 621 622 
+		elementNeighbourTbl[512][0-26]: 401 402 403 411 412 413 421 422 423 501 502 503 511 513 521 522 523 601 602 603 611 612 613 621 622 623 
+		elementNeighbourTbl[513][0-26]: 402 403 404 412 413 414 422 423 424 502 503 504 512 514 522 523 524 602 603 604 612 613 614 622 623 624 
+		elementNeighbourTbl[514][0-26]: 403 404 405 413 414 415 423 424 425 503 504 505 513 515 523 524 525 603 604 605 613 614 615 623 624 625 
+		elementNeighbourTbl[515][0-26]: 404 405 406 414 415 416 424 425 426 504 505 506 514 516 524 525 526 604 605 606 614 615 616 624 625 626 
+		elementNeighbourTbl[516][0-26]: 405 406 407 415 416 417 425 426 427 505 506 507 515 517 525 526 527 605 606 607 615 616 617 625 626 627 
+		elementNeighbourTbl[517][0-26]: 406 407 408 416 417 418 426 427 428 506 507 508 516 518 526 527 528 606 607 608 616 617 618 626 627 628 
+		elementNeighbourTbl[518][0-26]: 407 408 409 417 418 419 427 428 429 507 508 509 517 519 527 528 529 607 608 609 617 618 619 627 628 629 
+		elementNeighbourTbl[519][0-26]: 408 409 1000 418 419 1000 428 429 1000 508 509 1000 518 1000 528 529 1000 608 609 1000 618 619 1000 628 629 1000 
+		elementNeighbourTbl[520][0-26]: 1000 410 411 1000 420 421 1000 430 431 1000 510 511 1000 521 1000 530 531 1000 610 611 1000 620 621 1000 630 631 
+		elementNeighbourTbl[521][0-26]: 410 411 412 420 421 422 430 431 432 510 511 512 520 522 530 531 532 610 611 612 620 621 622 630 631 632 
+		elementNeighbourTbl[522][0-26]: 411 412 413 421 422 423 431 432 433 511 512 513 521 523 531 532 533 611 612 613 621 622 623 631 632 633 
+		elementNeighbourTbl[523][0-26]: 412 413 414 422 423 424 432 433 434 512 513 514 522 524 532 533 534 612 613 614 622 623 624 632 633 634 
+		elementNeighbourTbl[524][0-26]: 413 414 415 423 424 425 433 434 435 513 514 515 523 525 533 534 535 613 614 615 623 624 625 633 634 635 
+		elementNeighbourTbl[525][0-26]: 414 415 416 424 425 426 434 435 436 514 515 516 524 526 534 535 536 614 615 616 624 625 626 634 635 636 
+		elementNeighbourTbl[526][0-26]: 415 416 417 425 426 427 435 436 437 515 516 517 525 527 535 536 537 615 616 617 625 626 627 635 636 637 
+		elementNeighbourTbl[527][0-26]: 416 417 418 426 427 428 436 437 438 516 517 518 526 528 536 537 538 616 617 618 626 627 628 636 637 638 
+		elementNeighbourTbl[528][0-26]: 417 418 419 427 428 429 437 438 439 517 518 519 527 529 537 538 539 617 618 619 627 628 629 637 638 639 
+		elementNeighbourTbl[529][0-26]: 418 419 1000 428 429 1000 438 439 1000 518 519 1000 528 1000 538 539 1000 618 619 1000 628 629 1000 638 639 1000 
+		elementNeighbourTbl[530][0-26]: 1000 420 421 1000 430 431 1000 440 441 1000 520 521 1000 531 1000 540 541 1000 620 621 1000 630 631 1000 640 641 
+		elementNeighbourTbl[531][0-26]: 420 421 422 430 431 432 440 441 442 520 521 522 530 532 540 541 542 620 621 622 630 631 632 640 641 642 
+		elementNeighbourTbl[532][0-26]: 421 422 423 431 432 433 441 442 443 521 522 523 531 533 541 542 543 621 622 623 631 632 633 641 642 643 
+		elementNeighbourTbl[533][0-26]: 422 423 424 432 433 434 442 443 444 522 523 524 532 534 542 543 544 622 623 624 632 633 634 642 643 644 
+		elementNeighbourTbl[534][0-26]: 423 424 425 433 434 435 443 444 445 523 524 525 533 535 543 544 545 623 624 625 633 634 635 643 644 645 
+		elementNeighbourTbl[535][0-26]: 424 425 426 434 435 436 444 445 446 524 525 526 534 536 544 545 546 624 625 626 634 635 636 644 645 646 
+		elementNeighbourTbl[536][0-26]: 425 426 427 435 436 437 445 446 447 525 526 527 535 537 545 546 547 625 626 627 635 636 637 645 646 647 
+		elementNeighbourTbl[537][0-26]: 426 427 428 436 437 438 446 447 448 526 527 528 536 538 546 547 548 626 627 628 636 637 638 646 647 648 
+		elementNeighbourTbl[538][0-26]: 427 428 429 437 438 439 447 448 449 527 528 529 537 539 547 548 549 627 628 629 637 638 639 647 648 649 
+		elementNeighbourTbl[539][0-26]: 428 429 1000 438 439 1000 448 449 1000 528 529 1000 538 1000 548 549 1000 628 629 1000 638 639 1000 648 649 1000 
+		elementNeighbourTbl[540][0-26]: 1000 430 431 1000 440 441 1000 450 451 1000 530 531 1000 541 1000 550 551 1000 630 631 1000 640 641 1000 650 651 
+		elementNeighbourTbl[541][0-26]: 430 431 432 440 441 442 450 451 452 530 531 532 540 542 550 551 552 630 631 632 640 641 642 650 651 652 
+		elementNeighbourTbl[542][0-26]: 431 432 433 441 442 443 451 452 453 531 532 533 541 543 551 552 553 631 632 633 641 642 643 651 652 653 
+		elementNeighbourTbl[543][0-26]: 432 433 434 442 443 444 452 453 454 532 533 534 542 544 552 553 554 632 633 634 642 643 644 652 653 654 
+		elementNeighbourTbl[544][0-26]: 433 434 435 443 444 445 453 454 455 533 534 535 543 545 553 554 555 633 634 635 643 644 645 653 654 655 
+		elementNeighbourTbl[545][0-26]: 434 435 436 444 445 446 454 455 456 534 535 536 544 546 554 555 556 634 635 636 644 645 646 654 655 656 
+		elementNeighbourTbl[546][0-26]: 435 436 437 445 446 447 455 456 457 535 536 537 545 547 555 556 557 635 636 637 645 646 647 655 656 657 
+		elementNeighbourTbl[547][0-26]: 436 437 438 446 447 448 456 457 458 536 537 538 546 548 556 557 558 636 637 638 646 647 648 656 657 658 
+		elementNeighbourTbl[548][0-26]: 437 438 439 447 448 449 457 458 459 537 538 539 547 549 557 558 559 637 638 639 647 648 649 657 658 659 
+		elementNeighbourTbl[549][0-26]: 438 439 1000 448 449 1000 458 459 1000 538 539 1000 548 1000 558 559 1000 638 639 1000 648 649 1000 658 659 1000 
+		elementNeighbourTbl[550][0-26]: 1000 440 441 1000 450 451 1000 460 461 1000 540 541 1000 551 1000 560 561 1000 640 641 1000 650 651 1000 660 661 
+		elementNeighbourTbl[551][0-26]: 440 441 442 450 451 452 460 461 462 540 541 542 550 552 560 561 562 640 641 642 650 651 652 660 661 662 
+		elementNeighbourTbl[552][0-26]: 441 442 443 451 452 453 461 462 463 541 542 543 551 553 561 562 563 641 642 643 651 652 653 661 662 663 
+		elementNeighbourTbl[553][0-26]: 442 443 444 452 453 454 462 463 464 542 543 544 552 554 562 563 564 642 643 644 652 653 654 662 663 664 
+		elementNeighbourTbl[554][0-26]: 443 444 445 453 454 455 463 464 465 543 544 545 553 555 563 564 565 643 644 645 653 654 655 663 664 665 
+		elementNeighbourTbl[555][0-26]: 444 445 446 454 455 456 464 465 466 544 545 546 554 556 564 565 566 644 645 646 654 655 656 664 665 666 
+		elementNeighbourTbl[556][0-26]: 445 446 447 455 456 457 465 466 467 545 546 547 555 557 565 566 567 645 646 647 655 656 657 665 666 667 
+		elementNeighbourTbl[557][0-26]: 446 447 448 456 457 458 466 467 468 546 547 548 556 558 566 567 568 646 647 648 656 657 658 666 667 668 
+		elementNeighbourTbl[558][0-26]: 447 448 449 457 458 459 467 468 469 547 548 549 557 559 567 568 569 647 648 649 657 658 659 667 668 669 
+		elementNeighbourTbl[559][0-26]: 448 449 1000 458 459 1000 468 469 1000 548 549 1000 558 1000 568 569 1000 648 649 1000 658 659 1000 668 669 1000 
+		elementNeighbourTbl[560][0-26]: 1000 450 451 1000 460 461 1000 470 471 1000 550 551 1000 561 1000 570 571 1000 650 651 1000 660 661 1000 670 671 
+		elementNeighbourTbl[561][0-26]: 450 451 452 460 461 462 470 471 472 550 551 552 560 562 570 571 572 650 651 652 660 661 662 670 671 672 
+		elementNeighbourTbl[562][0-26]: 451 452 453 461 462 463 471 472 473 551 552 553 561 563 571 572 573 651 652 653 661 662 663 671 672 673 
+		elementNeighbourTbl[563][0-26]: 452 453 454 462 463 464 472 473 474 552 553 554 562 564 572 573 574 652 653 654 662 663 664 672 673 674 
+		elementNeighbourTbl[564][0-26]: 453 454 455 463 464 465 473 474 475 553 554 555 563 565 573 574 575 653 654 655 663 664 665 673 674 675 
+		elementNeighbourTbl[565][0-26]: 454 455 456 464 465 466 474 475 476 554 555 556 564 566 574 575 576 654 655 656 664 665 666 674 675 676 
+		elementNeighbourTbl[566][0-26]: 455 456 457 465 466 467 475 476 477 555 556 557 565 567 575 576 577 655 656 657 665 666 667 675 676 677 
+		elementNeighbourTbl[567][0-26]: 456 457 458 466 467 468 476 477 478 556 557 558 566 568 576 577 578 656 657 658 666 667 668 676 677 678 
+		elementNeighbourTbl[568][0-26]: 457 458 459 467 468 469 477 478 479 557 558 559 567 569 577 578 579 657 658 659 667 668 669 677 678 679 
+		elementNeighbourTbl[569][0-26]: 458 459 1000 468 469 1000 478 479 1000 558 559 1000 568 1000 578 579 1000 658 659 1000 668 669 1000 678 679 1000 
+		elementNeighbourTbl[570][0-26]: 1000 460 461 1000 470 471 1000 480 481 1000 560 561 1000 571 1000 580 581 1000 660 661 1000 670 671 1000 680 681 
+		elementNeighbourTbl[571][0-26]: 460 461 462 470 471 472 480 481 482 560 561 562 570 572 580 581 582 660 661 662 670 671 672 680 681 682 
+		elementNeighbourTbl[572][0-26]: 461 462 463 471 472 473 481 482 483 561 562 563 571 573 581 582 583 661 662 663 671 672 673 681 682 683 
+		elementNeighbourTbl[573][0-26]: 462 463 464 472 473 474 482 483 484 562 563 564 572 574 582 583 584 662 663 664 672 673 674 682 683 684 
+		elementNeighbourTbl[574][0-26]: 463 464 465 473 474 475 483 484 485 563 564 565 573 575 583 584 585 663 664 665 673 674 675 683 684 685 
+		elementNeighbourTbl[575][0-26]: 464 465 466 474 475 476 484 485 486 564 565 566 574 576 584 585 586 664 665 666 674 675 676 684 685 686 
+		elementNeighbourTbl[576][0-26]: 465 466 467 475 476 477 485 486 487 565 566 567 575 577 585 586 587 665 666 667 675 676 677 685 686 687 
+		elementNeighbourTbl[577][0-26]: 466 467 468 476 477 478 486 487 488 566 567 568 576 578 586 587 588 666 667 668 676 677 678 686 687 688 
+		elementNeighbourTbl[578][0-26]: 467 468 469 477 478 479 487 488 489 567 568 569 577 579 587 588 589 667 668 669 677 678 679 687 688 689 
+		elementNeighbourTbl[579][0-26]: 468 469 1000 478 479 1000 488 489 1000 568 569 1000 578 1000 588 589 1000 668 669 1000 678 679 1000 688 689 1000 
+		elementNeighbourTbl[580][0-26]: 1000 470 471 1000 480 481 1000 490 491 1000 570 571 1000 581 1000 590 591 1000 670 671 1000 680 681 1000 690 691 
+		elementNeighbourTbl[581][0-26]: 470 471 472 480 481 482 490 491 492 570 571 572 580 582 590 591 592 670 671 672 680 681 682 690 691 692 
+		elementNeighbourTbl[582][0-26]: 471 472 473 481 482 483 491 492 493 571 572 573 581 583 591 592 593 671 672 673 681 682 683 691 692 693 
+		elementNeighbourTbl[583][0-26]: 472 473 474 482 483 484 492 493 494 572 573 574 582 584 592 593 594 672 673 674 682 683 684 692 693 694 
+		elementNeighbourTbl[584][0-26]: 473 474 475 483 484 485 493 494 495 573 574 575 583 585 593 594 595 673 674 675 683 684 685 693 694 695 
+		elementNeighbourTbl[585][0-26]: 474 475 476 484 485 486 494 495 496 574 575 576 584 586 594 595 596 674 675 676 684 685 686 694 695 696 
+		elementNeighbourTbl[586][0-26]: 475 476 477 485 486 487 495 496 497 575 576 577 585 587 595 596 597 675 676 677 685 686 687 695 696 697 
+		elementNeighbourTbl[587][0-26]: 476 477 478 486 487 488 496 497 498 576 577 578 586 588 596 597 598 676 677 678 686 687 688 696 697 698 
+		elementNeighbourTbl[588][0-26]: 477 478 479 487 488 489 497 498 499 577 578 579 587 589 597 598 599 677 678 679 687 688 689 697 698 699 
+		elementNeighbourTbl[589][0-26]: 478 479 1000 488 489 1000 498 499 1000 578 579 1000 588 1000 598 599 1000 678 679 1000 688 689 1000 698 699 1000 
+		elementNeighbourTbl[590][0-26]: 1000 480 481 1000 490 491 1000 1000 1000 1000 580 581 1000 591 1000 1000 1000 1000 680 681 1000 690 691 1000 1000 1000 
+		elementNeighbourTbl[591][0-26]: 480 481 482 490 491 492 1000 1000 1000 580 581 582 590 592 1000 1000 1000 680 681 682 690 691 692 1000 1000 1000 
+		elementNeighbourTbl[592][0-26]: 481 482 483 491 492 493 1000 1000 1000 581 582 583 591 593 1000 1000 1000 681 682 683 691 692 693 1000 1000 1000 
+		elementNeighbourTbl[593][0-26]: 482 483 484 492 493 494 1000 1000 1000 582 583 584 592 594 1000 1000 1000 682 683 684 692 693 694 1000 1000 1000 
+		elementNeighbourTbl[594][0-26]: 483 484 485 493 494 495 1000 1000 1000 583 584 585 593 595 1000 1000 1000 683 684 685 693 694 695 1000 1000 1000 
+		elementNeighbourTbl[595][0-26]: 484 485 486 494 495 496 1000 1000 1000 584 585 586 594 596 1000 1000 1000 684 685 686 694 695 696 1000 1000 1000 
+		elementNeighbourTbl[596][0-26]: 485 486 487 495 496 497 1000 1000 1000 585 586 587 595 597 1000 1000 1000 685 686 687 695 696 697 1000 1000 1000 
+		elementNeighbourTbl[597][0-26]: 486 487 488 496 497 498 1000 1000 1000 586 587 588 596 598 1000 1000 1000 686 687 688 696 697 698 1000 1000 1000 
+		elementNeighbourTbl[598][0-26]: 487 488 489 497 498 499 1000 1000 1000 587 588 589 597 599 1000 1000 1000 687 688 689 697 698 699 1000 1000 1000 
+		elementNeighbourTbl[599][0-26]: 488 489 1000 498 499 1000 1000 1000 1000 588 589 1000 598 1000 1000 1000 1000 688 689 1000 698 699 1000 1000 1000 1000 
+		elementNeighbourTbl[600][0-26]: 1000 1000 1000 1000 500 501 1000 510 511 1000 1000 1000 1000 601 1000 610 611 1000 1000 1000 1000 700 701 1000 710 711 
+		elementNeighbourTbl[601][0-26]: 1000 1000 1000 500 501 502 510 511 512 1000 1000 1000 600 602 610 611 612 1000 1000 1000 700 701 702 710 711 712 
+		elementNeighbourTbl[602][0-26]: 1000 1000 1000 501 502 503 511 512 513 1000 1000 1000 601 603 611 612 613 1000 1000 1000 701 702 703 711 712 713 
+		elementNeighbourTbl[603][0-26]: 1000 1000 1000 502 503 504 512 513 514 1000 1000 1000 602 604 612 613 614 1000 1000 1000 702 703 704 712 713 714 
+		elementNeighbourTbl[604][0-26]: 1000 1000 1000 503 504 505 513 514 515 1000 1000 1000 603 605 613 614 615 1000 1000 1000 703 704 705 713 714 715 
+		elementNeighbourTbl[605][0-26]: 1000 1000 1000 504 505 506 514 515 516 1000 1000 1000 604 606 614 615 616 1000 1000 1000 704 705 706 714 715 716 
+		elementNeighbourTbl[606][0-26]: 1000 1000 1000 505 506 507 515 516 517 1000 1000 1000 605 607 615 616 617 1000 1000 1000 705 706 707 715 716 717 
+		elementNeighbourTbl[607][0-26]: 1000 1000 1000 506 507 508 516 517 518 1000 1000 1000 606 608 616 617 618 1000 1000 1000 706 707 708 716 717 718 
+		elementNeighbourTbl[608][0-26]: 1000 1000 1000 507 508 509 517 518 519 1000 1000 1000 607 609 617 618 619 1000 1000 1000 707 708 709 717 718 719 
+		elementNeighbourTbl[609][0-26]: 1000 1000 1000 508 509 1000 518 519 1000 1000 1000 1000 608 1000 618 619 1000 1000 1000 1000 708 709 1000 718 719 1000 
+		elementNeighbourTbl[610][0-26]: 1000 500 501 1000 510 511 1000 520 521 1000 600 601 1000 611 1000 620 621 1000 700 701 1000 710 711 1000 720 721 
+		elementNeighbourTbl[611][0-26]: 500 501 502 510 511 512 520 521 522 600 601 602 610 612 620 621 622 700 701 702 710 711 712 720 721 722 
+		elementNeighbourTbl[612][0-26]: 501 502 503 511 512 513 521 522 523 601 602 603 611 613 621 622 623 701 702 703 711 712 713 721 722 723 
+		elementNeighbourTbl[613][0-26]: 502 503 504 512 513 514 522 523 524 602 603 604 612 614 622 623 624 702 703 704 712 713 714 722 723 724 
+		elementNeighbourTbl[614][0-26]: 503 504 505 513 514 515 523 524 525 603 604 605 613 615 623 624 625 703 704 705 713 714 715 723 724 725 
+		elementNeighbourTbl[615][0-26]: 504 505 506 514 515 516 524 525 526 604 605 606 614 616 624 625 626 704 705 706 714 715 716 724 725 726 
+		elementNeighbourTbl[616][0-26]: 505 506 507 515 516 517 525 526 527 605 606 607 615 617 625 626 627 705 706 707 715 716 717 725 726 727 
+		elementNeighbourTbl[617][0-26]: 506 507 508 516 517 518 526 527 528 606 607 608 616 618 626 627 628 706 707 708 716 717 718 726 727 728 
+		elementNeighbourTbl[618][0-26]: 507 508 509 517 518 519 527 528 529 607 608 609 617 619 627 628 629 707 708 709 717 718 719 727 728 729 
+		elementNeighbourTbl[619][0-26]: 508 509 1000 518 519 1000 528 529 1000 608 609 1000 618 1000 628 629 1000 708 709 1000 718 719 1000 728 729 1000 
+		elementNeighbourTbl[620][0-26]: 1000 510 511 1000 520 521 1000 530 531 1000 610 611 1000 621 1000 630 631 1000 710 711 1000 720 721 1000 730 731 
+		elementNeighbourTbl[621][0-26]: 510 511 512 520 521 522 530 531 532 610 611 612 620 622 630 631 632 710 711 712 720 721 722 730 731 732 
+		elementNeighbourTbl[622][0-26]: 511 512 513 521 522 523 531 532 533 611 612 613 621 623 631 632 633 711 712 713 721 722 723 731 732 733 
+		elementNeighbourTbl[623][0-26]: 512 513 514 522 523 524 532 533 534 612 613 614 622 624 632 633 634 712 713 714 722 723 724 732 733 734 
+		elementNeighbourTbl[624][0-26]: 513 514 515 523 524 525 533 534 535 613 614 615 623 625 633 634 635 713 714 715 723 724 725 733 734 735 
+		elementNeighbourTbl[625][0-26]: 514 515 516 524 525 526 534 535 536 614 615 616 624 626 634 635 636 714 715 716 724 725 726 734 735 736 
+		elementNeighbourTbl[626][0-26]: 515 516 517 525 526 527 535 536 537 615 616 617 625 627 635 636 637 715 716 717 725 726 727 735 736 737 
+		elementNeighbourTbl[627][0-26]: 516 517 518 526 527 528 536 537 538 616 617 618 626 628 636 637 638 716 717 718 726 727 728 736 737 738 
+		elementNeighbourTbl[628][0-26]: 517 518 519 527 528 529 537 538 539 617 618 619 627 629 637 638 639 717 718 719 727 728 729 737 738 739 
+		elementNeighbourTbl[629][0-26]: 518 519 1000 528 529 1000 538 539 1000 618 619 1000 628 1000 638 639 1000 718 719 1000 728 729 1000 738 739 1000 
+		elementNeighbourTbl[630][0-26]: 1000 520 521 1000 530 531 1000 540 541 1000 620 621 1000 631 1000 640 641 1000 720 721 1000 730 731 1000 740 741 
+		elementNeighbourTbl[631][0-26]: 520 521 522 530 531 532 540 541 542 620 621 622 630 632 640 641 642 720 721 722 730 731 732 740 741 742 
+		elementNeighbourTbl[632][0-26]: 521 522 523 531 532 533 541 542 543 621 622 623 631 633 641 642 643 721 722 723 731 732 733 741 742 743 
+		elementNeighbourTbl[633][0-26]: 522 523 524 532 533 534 542 543 544 622 623 624 632 634 642 643 644 722 723 724 732 733 734 742 743 744 
+		elementNeighbourTbl[634][0-26]: 523 524 525 533 534 535 543 544 545 623 624 625 633 635 643 644 645 723 724 725 733 734 735 743 744 745 
+		elementNeighbourTbl[635][0-26]: 524 525 526 534 535 536 544 545 546 624 625 626 634 636 644 645 646 724 725 726 734 735 736 744 745 746 
+		elementNeighbourTbl[636][0-26]: 525 526 527 535 536 537 545 546 547 625 626 627 635 637 645 646 647 725 726 727 735 736 737 745 746 747 
+		elementNeighbourTbl[637][0-26]: 526 527 528 536 537 538 546 547 548 626 627 628 636 638 646 647 648 726 727 728 736 737 738 746 747 748 
+		elementNeighbourTbl[638][0-26]: 527 528 529 537 538 539 547 548 549 627 628 629 637 639 647 648 649 727 728 729 737 738 739 747 748 749 
+		elementNeighbourTbl[639][0-26]: 528 529 1000 538 539 1000 548 549 1000 628 629 1000 638 1000 648 649 1000 728 729 1000 738 739 1000 748 749 1000 
+		elementNeighbourTbl[640][0-26]: 1000 530 531 1000 540 541 1000 550 551 1000 630 631 1000 641 1000 650 651 1000 730 731 1000 740 741 1000 750 751 
+		elementNeighbourTbl[641][0-26]: 530 531 532 540 541 542 550 551 552 630 631 632 640 642 650 651 652 730 731 732 740 741 742 750 751 752 
+		elementNeighbourTbl[642][0-26]: 531 532 533 541 542 543 551 552 553 631 632 633 641 643 651 652 653 731 732 733 741 742 743 751 752 753 
+		elementNeighbourTbl[643][0-26]: 532 533 534 542 543 544 552 553 554 632 633 634 642 644 652 653 654 732 733 734 742 743 744 752 753 754 
+		elementNeighbourTbl[644][0-26]: 533 534 535 543 544 545 553 554 555 633 634 635 643 645 653 654 655 733 734 735 743 744 745 753 754 755 
+		elementNeighbourTbl[645][0-26]: 534 535 536 544 545 546 554 555 556 634 635 636 644 646 654 655 656 734 735 736 744 745 746 754 755 756 
+		elementNeighbourTbl[646][0-26]: 535 536 537 545 546 547 555 556 557 635 636 637 645 647 655 656 657 735 736 737 745 746 747 755 756 757 
+		elementNeighbourTbl[647][0-26]: 536 537 538 546 547 548 556 557 558 636 637 638 646 648 656 657 658 736 737 738 746 747 748 756 757 758 
+		elementNeighbourTbl[648][0-26]: 537 538 539 547 548 549 557 558 559 637 638 639 647 649 657 658 659 737 738 739 747 748 749 757 758 759 
+		elementNeighbourTbl[649][0-26]: 538 539 1000 548 549 1000 558 559 1000 638 639 1000 648 1000 658 659 1000 738 739 1000 748 749 1000 758 759 1000 
+		elementNeighbourTbl[650][0-26]: 1000 540 541 1000 550 551 1000 560 561 1000 640 641 1000 651 1000 660 661 1000 740 741 1000 750 751 1000 760 761 
+		elementNeighbourTbl[651][0-26]: 540 541 542 550 551 552 560 561 562 640 641 642 650 652 660 661 662 740 741 742 750 751 752 760 761 762 
+		elementNeighbourTbl[652][0-26]: 541 542 543 551 552 553 561 562 563 641 642 643 651 653 661 662 663 741 742 743 751 752 753 761 762 763 
+		elementNeighbourTbl[653][0-26]: 542 543 544 552 553 554 562 563 564 642 643 644 652 654 662 663 664 742 743 744 752 753 754 762 763 764 
+		elementNeighbourTbl[654][0-26]: 543 544 545 553 554 555 563 564 565 643 644 645 653 655 663 664 665 743 744 745 753 754 755 763 764 765 
+		elementNeighbourTbl[655][0-26]: 544 545 546 554 555 556 564 565 566 644 645 646 654 656 664 665 666 744 745 746 754 755 756 764 765 766 
+		elementNeighbourTbl[656][0-26]: 545 546 547 555 556 557 565 566 567 645 646 647 655 657 665 666 667 745 746 747 755 756 757 765 766 767 
+		elementNeighbourTbl[657][0-26]: 546 547 548 556 557 558 566 567 568 646 647 648 656 658 666 667 668 746 747 748 756 757 758 766 767 768 
+		elementNeighbourTbl[658][0-26]: 547 548 549 557 558 559 567 568 569 647 648 649 657 659 667 668 669 747 748 749 757 758 759 767 768 769 
+		elementNeighbourTbl[659][0-26]: 548 549 1000 558 559 1000 568 569 1000 648 649 1000 658 1000 668 669 1000 748 749 1000 758 759 1000 768 769 1000 
+		elementNeighbourTbl[660][0-26]: 1000 550 551 1000 560 561 1000 570 571 1000 650 651 1000 661 1000 670 671 1000 750 751 1000 760 761 1000 770 771 
+		elementNeighbourTbl[661][0-26]: 550 551 552 560 561 562 570 571 572 650 651 652 660 662 670 671 672 750 751 752 760 761 762 770 771 772 
+		elementNeighbourTbl[662][0-26]: 551 552 553 561 562 563 571 572 573 651 652 653 661 663 671 672 673 751 752 753 761 762 763 771 772 773 
+		elementNeighbourTbl[663][0-26]: 552 553 554 562 563 564 572 573 574 652 653 654 662 664 672 673 674 752 753 754 762 763 764 772 773 774 
+		elementNeighbourTbl[664][0-26]: 553 554 555 563 564 565 573 574 575 653 654 655 663 665 673 674 675 753 754 755 763 764 765 773 774 775 
+		elementNeighbourTbl[665][0-26]: 554 555 556 564 565 566 574 575 576 654 655 656 664 666 674 675 676 754 755 756 764 765 766 774 775 776 
+		elementNeighbourTbl[666][0-26]: 555 556 557 565 566 567 575 576 577 655 656 657 665 667 675 676 677 755 756 757 765 766 767 775 776 777 
+		elementNeighbourTbl[667][0-26]: 556 557 558 566 567 568 576 577 578 656 657 658 666 668 676 677 678 756 757 758 766 767 768 776 777 778 
+		elementNeighbourTbl[668][0-26]: 557 558 559 567 568 569 577 578 579 657 658 659 667 669 677 678 679 757 758 759 767 768 769 777 778 779 
+		elementNeighbourTbl[669][0-26]: 558 559 1000 568 569 1000 578 579 1000 658 659 1000 668 1000 678 679 1000 758 759 1000 768 769 1000 778 779 1000 
+		elementNeighbourTbl[670][0-26]: 1000 560 561 1000 570 571 1000 580 581 1000 660 661 1000 671 1000 680 681 1000 760 761 1000 770 771 1000 780 781 
+		elementNeighbourTbl[671][0-26]: 560 561 562 570 571 572 580 581 582 660 661 662 670 672 680 681 682 760 761 762 770 771 772 780 781 782 
+		elementNeighbourTbl[672][0-26]: 561 562 563 571 572 573 581 582 583 661 662 663 671 673 681 682 683 761 762 763 771 772 773 781 782 783 
+		elementNeighbourTbl[673][0-26]: 562 563 564 572 573 574 582 583 584 662 663 664 672 674 682 683 684 762 763 764 772 773 774 782 783 784 
+		elementNeighbourTbl[674][0-26]: 563 564 565 573 574 575 583 584 585 663 664 665 673 675 683 684 685 763 764 765 773 774 775 783 784 785 
+		elementNeighbourTbl[675][0-26]: 564 565 566 574 575 576 584 585 586 664 665 666 674 676 684 685 686 764 765 766 774 775 776 784 785 786 
+		elementNeighbourTbl[676][0-26]: 565 566 567 575 576 577 585 586 587 665 666 667 675 677 685 686 687 765 766 767 775 776 777 785 786 787 
+		elementNeighbourTbl[677][0-26]: 566 567 568 576 577 578 586 587 588 666 667 668 676 678 686 687 688 766 767 768 776 777 778 786 787 788 
+		elementNeighbourTbl[678][0-26]: 567 568 569 577 578 579 587 588 589 667 668 669 677 679 687 688 689 767 768 769 777 778 779 787 788 789 
+		elementNeighbourTbl[679][0-26]: 568 569 1000 578 579 1000 588 589 1000 668 669 1000 678 1000 688 689 1000 768 769 1000 778 779 1000 788 789 1000 
+		elementNeighbourTbl[680][0-26]: 1000 570 571 1000 580 581 1000 590 591 1000 670 671 1000 681 1000 690 691 1000 770 771 1000 780 781 1000 790 791 
+		elementNeighbourTbl[681][0-26]: 570 571 572 580 581 582 590 591 592 670 671 672 680 682 690 691 692 770 771 772 780 781 782 790 791 792 
+		elementNeighbourTbl[682][0-26]: 571 572 573 581 582 583 591 592 593 671 672 673 681 683 691 692 693 771 772 773 781 782 783 791 792 793 
+		elementNeighbourTbl[683][0-26]: 572 573 574 582 583 584 592 593 594 672 673 674 682 684 692 693 694 772 773 774 782 783 784 792 793 794 
+		elementNeighbourTbl[684][0-26]: 573 574 575 583 584 585 593 594 595 673 674 675 683 685 693 694 695 773 774 775 783 784 785 793 794 795 
+		elementNeighbourTbl[685][0-26]: 574 575 576 584 585 586 594 595 596 674 675 676 684 686 694 695 696 774 775 776 784 785 786 794 795 796 
+		elementNeighbourTbl[686][0-26]: 575 576 577 585 586 587 595 596 597 675 676 677 685 687 695 696 697 775 776 777 785 786 787 795 796 797 
+		elementNeighbourTbl[687][0-26]: 576 577 578 586 587 588 596 597 598 676 677 678 686 688 696 697 698 776 777 778 786 787 788 796 797 798 
+		elementNeighbourTbl[688][0-26]: 577 578 579 587 588 589 597 598 599 677 678 679 687 689 697 698 699 777 778 779 787 788 789 797 798 799 
+		elementNeighbourTbl[689][0-26]: 578 579 1000 588 589 1000 598 599 1000 678 679 1000 688 1000 698 699 1000 778 779 1000 788 789 1000 798 799 1000 
+		elementNeighbourTbl[690][0-26]: 1000 580 581 1000 590 591 1000 1000 1000 1000 680 681 1000 691 1000 1000 1000 1000 780 781 1000 790 791 1000 1000 1000 
+		elementNeighbourTbl[691][0-26]: 580 581 582 590 591 592 1000 1000 1000 680 681 682 690 692 1000 1000 1000 780 781 782 790 791 792 1000 1000 1000 
+		elementNeighbourTbl[692][0-26]: 581 582 583 591 592 593 1000 1000 1000 681 682 683 691 693 1000 1000 1000 781 782 783 791 792 793 1000 1000 1000 
+		elementNeighbourTbl[693][0-26]: 582 583 584 592 593 594 1000 1000 1000 682 683 684 692 694 1000 1000 1000 782 783 784 792 793 794 1000 1000 1000 
+		elementNeighbourTbl[694][0-26]: 583 584 585 593 594 595 1000 1000 1000 683 684 685 693 695 1000 1000 1000 783 784 785 793 794 795 1000 1000 1000 
+		elementNeighbourTbl[695][0-26]: 584 585 586 594 595 596 1000 1000 1000 684 685 686 694 696 1000 1000 1000 784 785 786 794 795 796 1000 1000 1000 
+		elementNeighbourTbl[696][0-26]: 585 586 587 595 596 597 1000 1000 1000 685 686 687 695 697 1000 1000 1000 785 786 787 795 796 797 1000 1000 1000 
+		elementNeighbourTbl[697][0-26]: 586 587 588 596 597 598 1000 1000 1000 686 687 688 696 698 1000 1000 1000 786 787 788 796 797 798 1000 1000 1000 
+		elementNeighbourTbl[698][0-26]: 587 588 589 597 598 599 1000 1000 1000 687 688 689 697 699 1000 1000 1000 787 788 789 797 798 799 1000 1000 1000 
+		elementNeighbourTbl[699][0-26]: 588 589 1000 598 599 1000 1000 1000 1000 688 689 1000 698 1000 1000 1000 1000 788 789 1000 798 799 1000 1000 1000 1000 
+		elementNeighbourTbl[700][0-26]: 1000 1000 1000 1000 600 601 1000 610 611 1000 1000 1000 1000 701 1000 710 711 1000 1000 1000 1000 800 801 1000 810 811 
+		elementNeighbourTbl[701][0-26]: 1000 1000 1000 600 601 602 610 611 612 1000 1000 1000 700 702 710 711 712 1000 1000 1000 800 801 802 810 811 812 
+		elementNeighbourTbl[702][0-26]: 1000 1000 1000 601 602 603 611 612 613 1000 1000 1000 701 703 711 712 713 1000 1000 1000 801 802 803 811 812 813 
+		elementNeighbourTbl[703][0-26]: 1000 1000 1000 602 603 604 612 613 614 1000 1000 1000 702 704 712 713 714 1000 1000 1000 802 803 804 812 813 814 
+		elementNeighbourTbl[704][0-26]: 1000 1000 1000 603 604 605 613 614 615 1000 1000 1000 703 705 713 714 715 1000 1000 1000 803 804 805 813 814 815 
+		elementNeighbourTbl[705][0-26]: 1000 1000 1000 604 605 606 614 615 616 1000 1000 1000 704 706 714 715 716 1000 1000 1000 804 805 806 814 815 816 
+		elementNeighbourTbl[706][0-26]: 1000 1000 1000 605 606 607 615 616 617 1000 1000 1000 705 707 715 716 717 1000 1000 1000 805 806 807 815 816 817 
+		elementNeighbourTbl[707][0-26]: 1000 1000 1000 606 607 608 616 617 618 1000 1000 1000 706 708 716 717 718 1000 1000 1000 806 807 808 816 817 818 
+		elementNeighbourTbl[708][0-26]: 1000 1000 1000 607 608 609 617 618 619 1000 1000 1000 707 709 717 718 719 1000 1000 1000 807 808 809 817 818 819 
+		elementNeighbourTbl[709][0-26]: 1000 1000 1000 608 609 1000 618 619 1000 1000 1000 1000 708 1000 718 719 1000 1000 1000 1000 808 809 1000 818 819 1000 
+		elementNeighbourTbl[710][0-26]: 1000 600 601 1000 610 611 1000 620 621 1000 700 701 1000 711 1000 720 721 1000 800 801 1000 810 811 1000 820 821 
+		elementNeighbourTbl[711][0-26]: 600 601 602 610 611 612 620 621 622 700 701 702 710 712 720 721 722 800 801 802 810 811 812 820 821 822 
+		elementNeighbourTbl[712][0-26]: 601 602 603 611 612 613 621 622 623 701 702 703 711 713 721 722 723 801 802 803 811 812 813 821 822 823 
+		elementNeighbourTbl[713][0-26]: 602 603 604 612 613 614 622 623 624 702 703 704 712 714 722 723 724 802 803 804 812 813 814 822 823 824 
+		elementNeighbourTbl[714][0-26]: 603 604 605 613 614 615 623 624 625 703 704 705 713 715 723 724 725 803 804 805 813 814 815 823 824 825 
+		elementNeighbourTbl[715][0-26]: 604 605 606 614 615 616 624 625 626 704 705 706 714 716 724 725 726 804 805 806 814 815 816 824 825 826 
+		elementNeighbourTbl[716][0-26]: 605 606 607 615 616 617 625 626 627 705 706 707 715 717 725 726 727 805 806 807 815 816 817 825 826 827 
+		elementNeighbourTbl[717][0-26]: 606 607 608 616 617 618 626 627 628 706 707 708 716 718 726 727 728 806 807 808 816 817 818 826 827 828 
+		elementNeighbourTbl[718][0-26]: 607 608 609 617 618 619 627 628 629 707 708 709 717 719 727 728 729 807 808 809 817 818 819 827 828 829 
+		elementNeighbourTbl[719][0-26]: 608 609 1000 618 619 1000 628 629 1000 708 709 1000 718 1000 728 729 1000 808 809 1000 818 819 1000 828 829 1000 
+		elementNeighbourTbl[720][0-26]: 1000 610 611 1000 620 621 1000 630 631 1000 710 711 1000 721 1000 730 731 1000 810 811 1000 820 821 1000 830 831 
+		elementNeighbourTbl[721][0-26]: 610 611 612 620 621 622 630 631 632 710 711 712 720 722 730 731 732 810 811 812 820 821 822 830 831 832 
+		elementNeighbourTbl[722][0-26]: 611 612 613 621 622 623 631 632 633 711 712 713 721 723 731 732 733 811 812 813 821 822 823 831 832 833 
+		elementNeighbourTbl[723][0-26]: 612 613 614 622 623 624 632 633 634 712 713 714 722 724 732 733 734 812 813 814 822 823 824 832 833 834 
+		elementNeighbourTbl[724][0-26]: 613 614 615 623 624 625 633 634 635 713 714 715 723 725 733 734 735 813 814 815 823 824 825 833 834 835 
+		elementNeighbourTbl[725][0-26]: 614 615 616 624 625 626 634 635 636 714 715 716 724 726 734 735 736 814 815 816 824 825 826 834 835 836 
+		elementNeighbourTbl[726][0-26]: 615 616 617 625 626 627 635 636 637 715 716 717 725 727 735 736 737 815 816 817 825 826 827 835 836 837 
+		elementNeighbourTbl[727][0-26]: 616 617 618 626 627 628 636 637 638 716 717 718 726 728 736 737 738 816 817 818 826 827 828 836 837 838 
+		elementNeighbourTbl[728][0-26]: 617 618 619 627 628 629 637 638 639 717 718 719 727 729 737 738 739 817 818 819 827 828 829 837 838 839 
+		elementNeighbourTbl[729][0-26]: 618 619 1000 628 629 1000 638 639 1000 718 719 1000 728 1000 738 739 1000 818 819 1000 828 829 1000 838 839 1000 
+		elementNeighbourTbl[730][0-26]: 1000 620 621 1000 630 631 1000 640 641 1000 720 721 1000 731 1000 740 741 1000 820 821 1000 830 831 1000 840 841 
+		elementNeighbourTbl[731][0-26]: 620 621 622 630 631 632 640 641 642 720 721 722 730 732 740 741 742 820 821 822 830 831 832 840 841 842 
+		elementNeighbourTbl[732][0-26]: 621 622 623 631 632 633 641 642 643 721 722 723 731 733 741 742 743 821 822 823 831 832 833 841 842 843 
+		elementNeighbourTbl[733][0-26]: 622 623 624 632 633 634 642 643 644 722 723 724 732 734 742 743 744 822 823 824 832 833 834 842 843 844 
+		elementNeighbourTbl[734][0-26]: 623 624 625 633 634 635 643 644 645 723 724 725 733 735 743 744 745 823 824 825 833 834 835 843 844 845 
+		elementNeighbourTbl[735][0-26]: 624 625 626 634 635 636 644 645 646 724 725 726 734 736 744 745 746 824 825 826 834 835 836 844 845 846 
+		elementNeighbourTbl[736][0-26]: 625 626 627 635 636 637 645 646 647 725 726 727 735 737 745 746 747 825 826 827 835 836 837 845 846 847 
+		elementNeighbourTbl[737][0-26]: 626 627 628 636 637 638 646 647 648 726 727 728 736 738 746 747 748 826 827 828 836 837 838 846 847 848 
+		elementNeighbourTbl[738][0-26]: 627 628 629 637 638 639 647 648 649 727 728 729 737 739 747 748 749 827 828 829 837 838 839 847 848 849 
+		elementNeighbourTbl[739][0-26]: 628 629 1000 638 639 1000 648 649 1000 728 729 1000 738 1000 748 749 1000 828 829 1000 838 839 1000 848 849 1000 
+		elementNeighbourTbl[740][0-26]: 1000 630 631 1000 640 641 1000 650 651 1000 730 731 1000 741 1000 750 751 1000 830 831 1000 840 841 1000 850 851 
+		elementNeighbourTbl[741][0-26]: 630 631 632 640 641 642 650 651 652 730 731 732 740 742 750 751 752 830 831 832 840 841 842 850 851 852 
+		elementNeighbourTbl[742][0-26]: 631 632 633 641 642 643 651 652 653 731 732 733 741 743 751 752 753 831 832 833 841 842 843 851 852 853 
+		elementNeighbourTbl[743][0-26]: 632 633 634 642 643 644 652 653 654 732 733 734 742 744 752 753 754 832 833 834 842 843 844 852 853 854 
+		elementNeighbourTbl[744][0-26]: 633 634 635 643 644 645 653 654 655 733 734 735 743 745 753 754 755 833 834 835 843 844 845 853 854 855 
+		elementNeighbourTbl[745][0-26]: 634 635 636 644 645 646 654 655 656 734 735 736 744 746 754 755 756 834 835 836 844 845 846 854 855 856 
+		elementNeighbourTbl[746][0-26]: 635 636 637 645 646 647 655 656 657 735 736 737 745 747 755 756 757 835 836 837 845 846 847 855 856 857 
+		elementNeighbourTbl[747][0-26]: 636 637 638 646 647 648 656 657 658 736 737 738 746 748 756 757 758 836 837 838 846 847 848 856 857 858 
+		elementNeighbourTbl[748][0-26]: 637 638 639 647 648 649 657 658 659 737 738 739 747 749 757 758 759 837 838 839 847 848 849 857 858 859 
+		elementNeighbourTbl[749][0-26]: 638 639 1000 648 649 1000 658 659 1000 738 739 1000 748 1000 758 759 1000 838 839 1000 848 849 1000 858 859 1000 
+		elementNeighbourTbl[750][0-26]: 1000 640 641 1000 650 651 1000 660 661 1000 740 741 1000 751 1000 760 761 1000 840 841 1000 850 851 1000 860 861 
+		elementNeighbourTbl[751][0-26]: 640 641 642 650 651 652 660 661 662 740 741 742 750 752 760 761 762 840 841 842 850 851 852 860 861 862 
+		elementNeighbourTbl[752][0-26]: 641 642 643 651 652 653 661 662 663 741 742 743 751 753 761 762 763 841 842 843 851 852 853 861 862 863 
+		elementNeighbourTbl[753][0-26]: 642 643 644 652 653 654 662 663 664 742 743 744 752 754 762 763 764 842 843 844 852 853 854 862 863 864 
+		elementNeighbourTbl[754][0-26]: 643 644 645 653 654 655 663 664 665 743 744 745 753 755 763 764 765 843 844 845 853 854 855 863 864 865 
+		elementNeighbourTbl[755][0-26]: 644 645 646 654 655 656 664 665 666 744 745 746 754 756 764 765 766 844 845 846 854 855 856 864 865 866 
+		elementNeighbourTbl[756][0-26]: 645 646 647 655 656 657 665 666 667 745 746 747 755 757 765 766 767 845 846 847 855 856 857 865 866 867 
+		elementNeighbourTbl[757][0-26]: 646 647 648 656 657 658 666 667 668 746 747 748 756 758 766 767 768 846 847 848 856 857 858 866 867 868 
+		elementNeighbourTbl[758][0-26]: 647 648 649 657 658 659 667 668 669 747 748 749 757 759 767 768 769 847 848 849 857 858 859 867 868 869 
+		elementNeighbourTbl[759][0-26]: 648 649 1000 658 659 1000 668 669 1000 748 749 1000 758 1000 768 769 1000 848 849 1000 858 859 1000 868 869 1000 
+		elementNeighbourTbl[760][0-26]: 1000 650 651 1000 660 661 1000 670 671 1000 750 751 1000 761 1000 770 771 1000 850 851 1000 860 861 1000 870 871 
+		elementNeighbourTbl[761][0-26]: 650 651 652 660 661 662 670 671 672 750 751 752 760 762 770 771 772 850 851 852 860 861 862 870 871 872 
+		elementNeighbourTbl[762][0-26]: 651 652 653 661 662 663 671 672 673 751 752 753 761 763 771 772 773 851 852 853 861 862 863 871 872 873 
+		elementNeighbourTbl[763][0-26]: 652 653 654 662 663 664 672 673 674 752 753 754 762 764 772 773 774 852 853 854 862 863 864 872 873 874 
+		elementNeighbourTbl[764][0-26]: 653 654 655 663 664 665 673 674 675 753 754 755 763 765 773 774 775 853 854 855 863 864 865 873 874 875 
+		elementNeighbourTbl[765][0-26]: 654 655 656 664 665 666 674 675 676 754 755 756 764 766 774 775 776 854 855 856 864 865 866 874 875 876 
+		elementNeighbourTbl[766][0-26]: 655 656 657 665 666 667 675 676 677 755 756 757 765 767 775 776 777 855 856 857 865 866 867 875 876 877 
+		elementNeighbourTbl[767][0-26]: 656 657 658 666 667 668 676 677 678 756 757 758 766 768 776 777 778 856 857 858 866 867 868 876 877 878 
+		elementNeighbourTbl[768][0-26]: 657 658 659 667 668 669 677 678 679 757 758 759 767 769 777 778 779 857 858 859 867 868 869 877 878 879 
+		elementNeighbourTbl[769][0-26]: 658 659 1000 668 669 1000 678 679 1000 758 759 1000 768 1000 778 779 1000 858 859 1000 868 869 1000 878 879 1000 
+		elementNeighbourTbl[770][0-26]: 1000 660 661 1000 670 671 1000 680 681 1000 760 761 1000 771 1000 780 781 1000 860 861 1000 870 871 1000 880 881 
+		elementNeighbourTbl[771][0-26]: 660 661 662 670 671 672 680 681 682 760 761 762 770 772 780 781 782 860 861 862 870 871 872 880 881 882 
+		elementNeighbourTbl[772][0-26]: 661 662 663 671 672 673 681 682 683 761 762 763 771 773 781 782 783 861 862 863 871 872 873 881 882 883 
+		elementNeighbourTbl[773][0-26]: 662 663 664 672 673 674 682 683 684 762 763 764 772 774 782 783 784 862 863 864 872 873 874 882 883 884 
+		elementNeighbourTbl[774][0-26]: 663 664 665 673 674 675 683 684 685 763 764 765 773 775 783 784 785 863 864 865 873 874 875 883 884 885 
+		elementNeighbourTbl[775][0-26]: 664 665 666 674 675 676 684 685 686 764 765 766 774 776 784 785 786 864 865 866 874 875 876 884 885 886 
+		elementNeighbourTbl[776][0-26]: 665 666 667 675 676 677 685 686 687 765 766 767 775 777 785 786 787 865 866 867 875 876 877 885 886 887 
+		elementNeighbourTbl[777][0-26]: 666 667 668 676 677 678 686 687 688 766 767 768 776 778 786 787 788 866 867 868 876 877 878 886 887 888 
+		elementNeighbourTbl[778][0-26]: 667 668 669 677 678 679 687 688 689 767 768 769 777 779 787 788 789 867 868 869 877 878 879 887 888 889 
+		elementNeighbourTbl[779][0-26]: 668 669 1000 678 679 1000 688 689 1000 768 769 1000 778 1000 788 789 1000 868 869 1000 878 879 1000 888 889 1000 
+		elementNeighbourTbl[780][0-26]: 1000 670 671 1000 680 681 1000 690 691 1000 770 771 1000 781 1000 790 791 1000 870 871 1000 880 881 1000 890 891 
+		elementNeighbourTbl[781][0-26]: 670 671 672 680 681 682 690 691 692 770 771 772 780 782 790 791 792 870 871 872 880 881 882 890 891 892 
+		elementNeighbourTbl[782][0-26]: 671 672 673 681 682 683 691 692 693 771 772 773 781 783 791 792 793 871 872 873 881 882 883 891 892 893 
+		elementNeighbourTbl[783][0-26]: 672 673 674 682 683 684 692 693 694 772 773 774 782 784 792 793 794 872 873 874 882 883 884 892 893 894 
+		elementNeighbourTbl[784][0-26]: 673 674 675 683 684 685 693 694 695 773 774 775 783 785 793 794 795 873 874 875 883 884 885 893 894 895 
+		elementNeighbourTbl[785][0-26]: 674 675 676 684 685 686 694 695 696 774 775 776 784 786 794 795 796 874 875 876 884 885 886 894 895 896 
+		elementNeighbourTbl[786][0-26]: 675 676 677 685 686 687 695 696 697 775 776 777 785 787 795 796 797 875 876 877 885 886 887 895 896 897 
+		elementNeighbourTbl[787][0-26]: 676 677 678 686 687 688 696 697 698 776 777 778 786 788 796 797 798 876 877 878 886 887 888 896 897 898 
+		elementNeighbourTbl[788][0-26]: 677 678 679 687 688 689 697 698 699 777 778 779 787 789 797 798 799 877 878 879 887 888 889 897 898 899 
+		elementNeighbourTbl[789][0-26]: 678 679 1000 688 689 1000 698 699 1000 778 779 1000 788 1000 798 799 1000 878 879 1000 888 889 1000 898 899 1000 
+		elementNeighbourTbl[790][0-26]: 1000 680 681 1000 690 691 1000 1000 1000 1000 780 781 1000 791 1000 1000 1000 1000 880 881 1000 890 891 1000 1000 1000 
+		elementNeighbourTbl[791][0-26]: 680 681 682 690 691 692 1000 1000 1000 780 781 782 790 792 1000 1000 1000 880 881 882 890 891 892 1000 1000 1000 
+		elementNeighbourTbl[792][0-26]: 681 682 683 691 692 693 1000 1000 1000 781 782 783 791 793 1000 1000 1000 881 882 883 891 892 893 1000 1000 1000 
+		elementNeighbourTbl[793][0-26]: 682 683 684 692 693 694 1000 1000 1000 782 783 784 792 794 1000 1000 1000 882 883 884 892 893 894 1000 1000 1000 
+		elementNeighbourTbl[794][0-26]: 683 684 685 693 694 695 1000 1000 1000 783 784 785 793 795 1000 1000 1000 883 884 885 893 894 895 1000 1000 1000 
+		elementNeighbourTbl[795][0-26]: 684 685 686 694 695 696 1000 1000 1000 784 785 786 794 796 1000 1000 1000 884 885 886 894 895 896 1000 1000 1000 
+		elementNeighbourTbl[796][0-26]: 685 686 687 695 696 697 1000 1000 1000 785 786 787 795 797 1000 1000 1000 885 886 887 895 896 897 1000 1000 1000 
+		elementNeighbourTbl[797][0-26]: 686 687 688 696 697 698 1000 1000 1000 786 787 788 796 798 1000 1000 1000 886 887 888 896 897 898 1000 1000 1000 
+		elementNeighbourTbl[798][0-26]: 687 688 689 697 698 699 1000 1000 1000 787 788 789 797 799 1000 1000 1000 887 888 889 897 898 899 1000 1000 1000 
+		elementNeighbourTbl[799][0-26]: 688 689 1000 698 699 1000 1000 1000 1000 788 789 1000 798 1000 1000 1000 1000 888 889 1000 898 899 1000 1000 1000 1000 
+		elementNeighbourTbl[800][0-26]: 1000 1000 1000 1000 700 701 1000 710 711 1000 1000 1000 1000 801 1000 810 811 1000 1000 1000 1000 900 901 1000 910 911 
+		elementNeighbourTbl[801][0-26]: 1000 1000 1000 700 701 702 710 711 712 1000 1000 1000 800 802 810 811 812 1000 1000 1000 900 901 902 910 911 912 
+		elementNeighbourTbl[802][0-26]: 1000 1000 1000 701 702 703 711 712 713 1000 1000 1000 801 803 811 812 813 1000 1000 1000 901 902 903 911 912 913 
+		elementNeighbourTbl[803][0-26]: 1000 1000 1000 702 703 704 712 713 714 1000 1000 1000 802 804 812 813 814 1000 1000 1000 902 903 904 912 913 914 
+		elementNeighbourTbl[804][0-26]: 1000 1000 1000 703 704 705 713 714 715 1000 1000 1000 803 805 813 814 815 1000 1000 1000 903 904 905 913 914 915 
+		elementNeighbourTbl[805][0-26]: 1000 1000 1000 704 705 706 714 715 716 1000 1000 1000 804 806 814 815 816 1000 1000 1000 904 905 906 914 915 916 
+		elementNeighbourTbl[806][0-26]: 1000 1000 1000 705 706 707 715 716 717 1000 1000 1000 805 807 815 816 817 1000 1000 1000 905 906 907 915 916 917 
+		elementNeighbourTbl[807][0-26]: 1000 1000 1000 706 707 708 716 717 718 1000 1000 1000 806 808 816 817 818 1000 1000 1000 906 907 908 916 917 918 
+		elementNeighbourTbl[808][0-26]: 1000 1000 1000 707 708 709 717 718 719 1000 1000 1000 807 809 817 818 819 1000 1000 1000 907 908 909 917 918 919 
+		elementNeighbourTbl[809][0-26]: 1000 1000 1000 708 709 1000 718 719 1000 1000 1000 1000 808 1000 818 819 1000 1000 1000 1000 908 909 1000 918 919 1000 
+		elementNeighbourTbl[810][0-26]: 1000 700 701 1000 710 711 1000 720 721 1000 800 801 1000 811 1000 820 821 1000 900 901 1000 910 911 1000 920 921 
+		elementNeighbourTbl[811][0-26]: 700 701 702 710 711 712 720 721 722 800 801 802 810 812 820 821 822 900 901 902 910 911 912 920 921 922 
+		elementNeighbourTbl[812][0-26]: 701 702 703 711 712 713 721 722 723 801 802 803 811 813 821 822 823 901 902 903 911 912 913 921 922 923 
+		elementNeighbourTbl[813][0-26]: 702 703 704 712 713 714 722 723 724 802 803 804 812 814 822 823 824 902 903 904 912 913 914 922 923 924 
+		elementNeighbourTbl[814][0-26]: 703 704 705 713 714 715 723 724 725 803 804 805 813 815 823 824 825 903 904 905 913 914 915 923 924 925 
+		elementNeighbourTbl[815][0-26]: 704 705 706 714 715 716 724 725 726 804 805 806 814 816 824 825 826 904 905 906 914 915 916 924 925 926 
+		elementNeighbourTbl[816][0-26]: 705 706 707 715 716 717 725 726 727 805 806 807 815 817 825 826 827 905 906 907 915 916 917 925 926 927 
+		elementNeighbourTbl[817][0-26]: 706 707 708 716 717 718 726 727 728 806 807 808 816 818 826 827 828 906 907 908 916 917 918 926 927 928 
+		elementNeighbourTbl[818][0-26]: 707 708 709 717 718 719 727 728 729 807 808 809 817 819 827 828 829 907 908 909 917 918 919 927 928 929 
+		elementNeighbourTbl[819][0-26]: 708 709 1000 718 719 1000 728 729 1000 808 809 1000 818 1000 828 829 1000 908 909 1000 918 919 1000 928 929 1000 
+		elementNeighbourTbl[820][0-26]: 1000 710 711 1000 720 721 1000 730 731 1000 810 811 1000 821 1000 830 831 1000 910 911 1000 920 921 1000 930 931 
+		elementNeighbourTbl[821][0-26]: 710 711 712 720 721 722 730 731 732 810 811 812 820 822 830 831 832 910 911 912 920 921 922 930 931 932 
+		elementNeighbourTbl[822][0-26]: 711 712 713 721 722 723 731 732 733 811 812 813 821 823 831 832 833 911 912 913 921 922 923 931 932 933 
+		elementNeighbourTbl[823][0-26]: 712 713 714 722 723 724 732 733 734 812 813 814 822 824 832 833 834 912 913 914 922 923 924 932 933 934 
+		elementNeighbourTbl[824][0-26]: 713 714 715 723 724 725 733 734 735 813 814 815 823 825 833 834 835 913 914 915 923 924 925 933 934 935 
+		elementNeighbourTbl[825][0-26]: 714 715 716 724 725 726 734 735 736 814 815 816 824 826 834 835 836 914 915 916 924 925 926 934 935 936 
+		elementNeighbourTbl[826][0-26]: 715 716 717 725 726 727 735 736 737 815 816 817 825 827 835 836 837 915 916 917 925 926 927 935 936 937 
+		elementNeighbourTbl[827][0-26]: 716 717 718 726 727 728 736 737 738 816 817 818 826 828 836 837 838 916 917 918 926 927 928 936 937 938 
+		elementNeighbourTbl[828][0-26]: 717 718 719 727 728 729 737 738 739 817 818 819 827 829 837 838 839 917 918 919 927 928 929 937 938 939 
+		elementNeighbourTbl[829][0-26]: 718 719 1000 728 729 1000 738 739 1000 818 819 1000 828 1000 838 839 1000 918 919 1000 928 929 1000 938 939 1000 
+		elementNeighbourTbl[830][0-26]: 1000 720 721 1000 730 731 1000 740 741 1000 820 821 1000 831 1000 840 841 1000 920 921 1000 930 931 1000 940 941 
+		elementNeighbourTbl[831][0-26]: 720 721 722 730 731 732 740 741 742 820 821 822 830 832 840 841 842 920 921 922 930 931 932 940 941 942 
+		elementNeighbourTbl[832][0-26]: 721 722 723 731 732 733 741 742 743 821 822 823 831 833 841 842 843 921 922 923 931 932 933 941 942 943 
+		elementNeighbourTbl[833][0-26]: 722 723 724 732 733 734 742 743 744 822 823 824 832 834 842 843 844 922 923 924 932 933 934 942 943 944 
+		elementNeighbourTbl[834][0-26]: 723 724 725 733 734 735 743 744 745 823 824 825 833 835 843 844 845 923 924 925 933 934 935 943 944 945 
+		elementNeighbourTbl[835][0-26]: 724 725 726 734 735 736 744 745 746 824 825 826 834 836 844 845 846 924 925 926 934 935 936 944 945 946 
+		elementNeighbourTbl[836][0-26]: 725 726 727 735 736 737 745 746 747 825 826 827 835 837 845 846 847 925 926 927 935 936 937 945 946 947 
+		elementNeighbourTbl[837][0-26]: 726 727 728 736 737 738 746 747 748 826 827 828 836 838 846 847 848 926 927 928 936 937 938 946 947 948 
+		elementNeighbourTbl[838][0-26]: 727 728 729 737 738 739 747 748 749 827 828 829 837 839 847 848 849 927 928 929 937 938 939 947 948 949 
+		elementNeighbourTbl[839][0-26]: 728 729 1000 738 739 1000 748 749 1000 828 829 1000 838 1000 848 849 1000 928 929 1000 938 939 1000 948 949 1000 
+		elementNeighbourTbl[840][0-26]: 1000 730 731 1000 740 741 1000 750 751 1000 830 831 1000 841 1000 850 851 1000 930 931 1000 940 941 1000 950 951 
+		elementNeighbourTbl[841][0-26]: 730 731 732 740 741 742 750 751 752 830 831 832 840 842 850 851 852 930 931 932 940 941 942 950 951 952 
+		elementNeighbourTbl[842][0-26]: 731 732 733 741 742 743 751 752 753 831 832 833 841 843 851 852 853 931 932 933 941 942 943 951 952 953 
+		elementNeighbourTbl[843][0-26]: 732 733 734 742 743 744 752 753 754 832 833 834 842 844 852 853 854 932 933 934 942 943 944 952 953 954 
+		elementNeighbourTbl[844][0-26]: 733 734 735 743 744 745 753 754 755 833 834 835 843 845 853 854 855 933 934 935 943 944 945 953 954 955 
+		elementNeighbourTbl[845][0-26]: 734 735 736 744 745 746 754 755 756 834 835 836 844 846 854 855 856 934 935 936 944 945 946 954 955 956 
+		elementNeighbourTbl[846][0-26]: 735 736 737 745 746 747 755 756 757 835 836 837 845 847 855 856 857 935 936 937 945 946 947 955 956 957 
+		elementNeighbourTbl[847][0-26]: 736 737 738 746 747 748 756 757 758 836 837 838 846 848 856 857 858 936 937 938 946 947 948 956 957 958 
+		elementNeighbourTbl[848][0-26]: 737 738 739 747 748 749 757 758 759 837 838 839 847 849 857 858 859 937 938 939 947 948 949 957 958 959 
+		elementNeighbourTbl[849][0-26]: 738 739 1000 748 749 1000 758 759 1000 838 839 1000 848 1000 858 859 1000 938 939 1000 948 949 1000 958 959 1000 
+		elementNeighbourTbl[850][0-26]: 1000 740 741 1000 750 751 1000 760 761 1000 840 841 1000 851 1000 860 861 1000 940 941 1000 950 951 1000 960 961 
+		elementNeighbourTbl[851][0-26]: 740 741 742 750 751 752 760 761 762 840 841 842 850 852 860 861 862 940 941 942 950 951 952 960 961 962 
+		elementNeighbourTbl[852][0-26]: 741 742 743 751 752 753 761 762 763 841 842 843 851 853 861 862 863 941 942 943 951 952 953 961 962 963 
+		elementNeighbourTbl[853][0-26]: 742 743 744 752 753 754 762 763 764 842 843 844 852 854 862 863 864 942 943 944 952 953 954 962 963 964 
+		elementNeighbourTbl[854][0-26]: 743 744 745 753 754 755 763 764 765 843 844 845 853 855 863 864 865 943 944 945 953 954 955 963 964 965 
+		elementNeighbourTbl[855][0-26]: 744 745 746 754 755 756 764 765 766 844 845 846 854 856 864 865 866 944 945 946 954 955 956 964 965 966 
+		elementNeighbourTbl[856][0-26]: 745 746 747 755 756 757 765 766 767 845 846 847 855 857 865 866 867 945 946 947 955 956 957 965 966 967 
+		elementNeighbourTbl[857][0-26]: 746 747 748 756 757 758 766 767 768 846 847 848 856 858 866 867 868 946 947 948 956 957 958 966 967 968 
+		elementNeighbourTbl[858][0-26]: 747 748 749 757 758 759 767 768 769 847 848 849 857 859 867 868 869 947 948 949 957 958 959 967 968 969 
+		elementNeighbourTbl[859][0-26]: 748 749 1000 758 759 1000 768 769 1000 848 849 1000 858 1000 868 869 1000 948 949 1000 958 959 1000 968 969 1000 
+		elementNeighbourTbl[860][0-26]: 1000 750 751 1000 760 761 1000 770 771 1000 850 851 1000 861 1000 870 871 1000 950 951 1000 960 961 1000 970 971 
+		elementNeighbourTbl[861][0-26]: 750 751 752 760 761 762 770 771 772 850 851 852 860 862 870 871 872 950 951 952 960 961 962 970 971 972 
+		elementNeighbourTbl[862][0-26]: 751 752 753 761 762 763 771 772 773 851 852 853 861 863 871 872 873 951 952 953 961 962 963 971 972 973 
+		elementNeighbourTbl[863][0-26]: 752 753 754 762 763 764 772 773 774 852 853 854 862 864 872 873 874 952 953 954 962 963 964 972 973 974 
+		elementNeighbourTbl[864][0-26]: 753 754 755 763 764 765 773 774 775 853 854 855 863 865 873 874 875 953 954 955 963 964 965 973 974 975 
+		elementNeighbourTbl[865][0-26]: 754 755 756 764 765 766 774 775 776 854 855 856 864 866 874 875 876 954 955 956 964 965 966 974 975 976 
+		elementNeighbourTbl[866][0-26]: 755 756 757 765 766 767 775 776 777 855 856 857 865 867 875 876 877 955 956 957 965 966 967 975 976 977 
+		elementNeighbourTbl[867][0-26]: 756 757 758 766 767 768 776 777 778 856 857 858 866 868 876 877 878 956 957 958 966 967 968 976 977 978 
+		elementNeighbourTbl[868][0-26]: 757 758 759 767 768 769 777 778 779 857 858 859 867 869 877 878 879 957 958 959 967 968 969 977 978 979 
+		elementNeighbourTbl[869][0-26]: 758 759 1000 768 769 1000 778 779 1000 858 859 1000 868 1000 878 879 1000 958 959 1000 968 969 1000 978 979 1000 
+		elementNeighbourTbl[870][0-26]: 1000 760 761 1000 770 771 1000 780 781 1000 860 861 1000 871 1000 880 881 1000 960 961 1000 970 971 1000 980 981 
+		elementNeighbourTbl[871][0-26]: 760 761 762 770 771 772 780 781 782 860 861 862 870 872 880 881 882 960 961 962 970 971 972 980 981 982 
+		elementNeighbourTbl[872][0-26]: 761 762 763 771 772 773 781 782 783 861 862 863 871 873 881 882 883 961 962 963 971 972 973 981 982 983 
+		elementNeighbourTbl[873][0-26]: 762 763 764 772 773 774 782 783 784 862 863 864 872 874 882 883 884 962 963 964 972 973 974 982 983 984 
+		elementNeighbourTbl[874][0-26]: 763 764 765 773 774 775 783 784 785 863 864 865 873 875 883 884 885 963 964 965 973 974 975 983 984 985 
+		elementNeighbourTbl[875][0-26]: 764 765 766 774 775 776 784 785 786 864 865 866 874 876 884 885 886 964 965 966 974 975 976 984 985 986 
+		elementNeighbourTbl[876][0-26]: 765 766 767 775 776 777 785 786 787 865 866 867 875 877 885 886 887 965 966 967 975 976 977 985 986 987 
+		elementNeighbourTbl[877][0-26]: 766 767 768 776 777 778 786 787 788 866 867 868 876 878 886 887 888 966 967 968 976 977 978 986 987 988 
+		elementNeighbourTbl[878][0-26]: 767 768 769 777 778 779 787 788 789 867 868 869 877 879 887 888 889 967 968 969 977 978 979 987 988 989 
+		elementNeighbourTbl[879][0-26]: 768 769 1000 778 779 1000 788 789 1000 868 869 1000 878 1000 888 889 1000 968 969 1000 978 979 1000 988 989 1000 
+		elementNeighbourTbl[880][0-26]: 1000 770 771 1000 780 781 1000 790 791 1000 870 871 1000 881 1000 890 891 1000 970 971 1000 980 981 1000 990 991 
+		elementNeighbourTbl[881][0-26]: 770 771 772 780 781 782 790 791 792 870 871 872 880 882 890 891 892 970 971 972 980 981 982 990 991 992 
+		elementNeighbourTbl[882][0-26]: 771 772 773 781 782 783 791 792 793 871 872 873 881 883 891 892 893 971 972 973 981 982 983 991 992 993 
+		elementNeighbourTbl[883][0-26]: 772 773 774 782 783 784 792 793 794 872 873 874 882 884 892 893 894 972 973 974 982 983 984 992 993 994 
+		elementNeighbourTbl[884][0-26]: 773 774 775 783 784 785 793 794 795 873 874 875 883 885 893 894 895 973 974 975 983 984 985 993 994 995 
+		elementNeighbourTbl[885][0-26]: 774 775 776 784 785 786 794 795 796 874 875 876 884 886 894 895 896 974 975 976 984 985 986 994 995 996 
+		elementNeighbourTbl[886][0-26]: 775 776 777 785 786 787 795 796 797 875 876 877 885 887 895 896 897 975 976 977 985 986 987 995 996 997 
+		elementNeighbourTbl[887][0-26]: 776 777 778 786 787 788 796 797 798 876 877 878 886 888 896 897 898 976 977 978 986 987 988 996 997 998 
+		elementNeighbourTbl[888][0-26]: 777 778 779 787 788 789 797 798 799 877 878 879 887 889 897 898 899 977 978 979 987 988 989 997 998 999 
+		elementNeighbourTbl[889][0-26]: 778 779 1000 788 789 1000 798 799 1000 878 879 1000 888 1000 898 899 1000 978 979 1000 988 989 1000 998 999 1000 
+		elementNeighbourTbl[890][0-26]: 1000 780 781 1000 790 791 1000 1000 1000 1000 880 881 1000 891 1000 1000 1000 1000 980 981 1000 990 991 1000 1000 1000 
+		elementNeighbourTbl[891][0-26]: 780 781 782 790 791 792 1000 1000 1000 880 881 882 890 892 1000 1000 1000 980 981 982 990 991 992 1000 1000 1000 
+		elementNeighbourTbl[892][0-26]: 781 782 783 791 792 793 1000 1000 1000 881 882 883 891 893 1000 1000 1000 981 982 983 991 992 993 1000 1000 1000 
+		elementNeighbourTbl[893][0-26]: 782 783 784 792 793 794 1000 1000 1000 882 883 884 892 894 1000 1000 1000 982 983 984 992 993 994 1000 1000 1000 
+		elementNeighbourTbl[894][0-26]: 783 784 785 793 794 795 1000 1000 1000 883 884 885 893 895 1000 1000 1000 983 984 985 993 994 995 1000 1000 1000 
+		elementNeighbourTbl[895][0-26]: 784 785 786 794 795 796 1000 1000 1000 884 885 886 894 896 1000 1000 1000 984 985 986 994 995 996 1000 1000 1000 
+		elementNeighbourTbl[896][0-26]: 785 786 787 795 796 797 1000 1000 1000 885 886 887 895 897 1000 1000 1000 985 986 987 995 996 997 1000 1000 1000 
+		elementNeighbourTbl[897][0-26]: 786 787 788 796 797 798 1000 1000 1000 886 887 888 896 898 1000 1000 1000 986 987 988 996 997 998 1000 1000 1000 
+		elementNeighbourTbl[898][0-26]: 787 788 789 797 798 799 1000 1000 1000 887 888 889 897 899 1000 1000 1000 987 988 989 997 998 999 1000 1000 1000 
+		elementNeighbourTbl[899][0-26]: 788 789 1000 798 799 1000 1000 1000 1000 888 889 1000 898 1000 1000 1000 1000 988 989 1000 998 999 1000 1000 1000 1000 
+		elementNeighbourTbl[900][0-26]: 1000 1000 1000 1000 800 801 1000 810 811 1000 1000 1000 1000 901 1000 910 911 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[901][0-26]: 1000 1000 1000 800 801 802 810 811 812 1000 1000 1000 900 902 910 911 912 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[902][0-26]: 1000 1000 1000 801 802 803 811 812 813 1000 1000 1000 901 903 911 912 913 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[903][0-26]: 1000 1000 1000 802 803 804 812 813 814 1000 1000 1000 902 904 912 913 914 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[904][0-26]: 1000 1000 1000 803 804 805 813 814 815 1000 1000 1000 903 905 913 914 915 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[905][0-26]: 1000 1000 1000 804 805 806 814 815 816 1000 1000 1000 904 906 914 915 916 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[906][0-26]: 1000 1000 1000 805 806 807 815 816 817 1000 1000 1000 905 907 915 916 917 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[907][0-26]: 1000 1000 1000 806 807 808 816 817 818 1000 1000 1000 906 908 916 917 918 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[908][0-26]: 1000 1000 1000 807 808 809 817 818 819 1000 1000 1000 907 909 917 918 919 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[909][0-26]: 1000 1000 1000 808 809 1000 818 819 1000 1000 1000 1000 908 1000 918 919 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[910][0-26]: 1000 800 801 1000 810 811 1000 820 821 1000 900 901 1000 911 1000 920 921 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[911][0-26]: 800 801 802 810 811 812 820 821 822 900 901 902 910 912 920 921 922 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[912][0-26]: 801 802 803 811 812 813 821 822 823 901 902 903 911 913 921 922 923 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[913][0-26]: 802 803 804 812 813 814 822 823 824 902 903 904 912 914 922 923 924 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[914][0-26]: 803 804 805 813 814 815 823 824 825 903 904 905 913 915 923 924 925 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[915][0-26]: 804 805 806 814 815 816 824 825 826 904 905 906 914 916 924 925 926 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[916][0-26]: 805 806 807 815 816 817 825 826 827 905 906 907 915 917 925 926 927 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[917][0-26]: 806 807 808 816 817 818 826 827 828 906 907 908 916 918 926 927 928 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[918][0-26]: 807 808 809 817 818 819 827 828 829 907 908 909 917 919 927 928 929 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[919][0-26]: 808 809 1000 818 819 1000 828 829 1000 908 909 1000 918 1000 928 929 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[920][0-26]: 1000 810 811 1000 820 821 1000 830 831 1000 910 911 1000 921 1000 930 931 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[921][0-26]: 810 811 812 820 821 822 830 831 832 910 911 912 920 922 930 931 932 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[922][0-26]: 811 812 813 821 822 823 831 832 833 911 912 913 921 923 931 932 933 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[923][0-26]: 812 813 814 822 823 824 832 833 834 912 913 914 922 924 932 933 934 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[924][0-26]: 813 814 815 823 824 825 833 834 835 913 914 915 923 925 933 934 935 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[925][0-26]: 814 815 816 824 825 826 834 835 836 914 915 916 924 926 934 935 936 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[926][0-26]: 815 816 817 825 826 827 835 836 837 915 916 917 925 927 935 936 937 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[927][0-26]: 816 817 818 826 827 828 836 837 838 916 917 918 926 928 936 937 938 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[928][0-26]: 817 818 819 827 828 829 837 838 839 917 918 919 927 929 937 938 939 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[929][0-26]: 818 819 1000 828 829 1000 838 839 1000 918 919 1000 928 1000 938 939 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[930][0-26]: 1000 820 821 1000 830 831 1000 840 841 1000 920 921 1000 931 1000 940 941 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[931][0-26]: 820 821 822 830 831 832 840 841 842 920 921 922 930 932 940 941 942 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[932][0-26]: 821 822 823 831 832 833 841 842 843 921 922 923 931 933 941 942 943 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[933][0-26]: 822 823 824 832 833 834 842 843 844 922 923 924 932 934 942 943 944 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[934][0-26]: 823 824 825 833 834 835 843 844 845 923 924 925 933 935 943 944 945 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[935][0-26]: 824 825 826 834 835 836 844 845 846 924 925 926 934 936 944 945 946 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[936][0-26]: 825 826 827 835 836 837 845 846 847 925 926 927 935 937 945 946 947 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[937][0-26]: 826 827 828 836 837 838 846 847 848 926 927 928 936 938 946 947 948 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[938][0-26]: 827 828 829 837 838 839 847 848 849 927 928 929 937 939 947 948 949 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[939][0-26]: 828 829 1000 838 839 1000 848 849 1000 928 929 1000 938 1000 948 949 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[940][0-26]: 1000 830 831 1000 840 841 1000 850 851 1000 930 931 1000 941 1000 950 951 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[941][0-26]: 830 831 832 840 841 842 850 851 852 930 931 932 940 942 950 951 952 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[942][0-26]: 831 832 833 841 842 843 851 852 853 931 932 933 941 943 951 952 953 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[943][0-26]: 832 833 834 842 843 844 852 853 854 932 933 934 942 944 952 953 954 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[944][0-26]: 833 834 835 843 844 845 853 854 855 933 934 935 943 945 953 954 955 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[945][0-26]: 834 835 836 844 845 846 854 855 856 934 935 936 944 946 954 955 956 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[946][0-26]: 835 836 837 845 846 847 855 856 857 935 936 937 945 947 955 956 957 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[947][0-26]: 836 837 838 846 847 848 856 857 858 936 937 938 946 948 956 957 958 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[948][0-26]: 837 838 839 847 848 849 857 858 859 937 938 939 947 949 957 958 959 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[949][0-26]: 838 839 1000 848 849 1000 858 859 1000 938 939 1000 948 1000 958 959 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[950][0-26]: 1000 840 841 1000 850 851 1000 860 861 1000 940 941 1000 951 1000 960 961 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[951][0-26]: 840 841 842 850 851 852 860 861 862 940 941 942 950 952 960 961 962 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[952][0-26]: 841 842 843 851 852 853 861 862 863 941 942 943 951 953 961 962 963 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[953][0-26]: 842 843 844 852 853 854 862 863 864 942 943 944 952 954 962 963 964 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[954][0-26]: 843 844 845 853 854 855 863 864 865 943 944 945 953 955 963 964 965 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[955][0-26]: 844 845 846 854 855 856 864 865 866 944 945 946 954 956 964 965 966 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[956][0-26]: 845 846 847 855 856 857 865 866 867 945 946 947 955 957 965 966 967 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[957][0-26]: 846 847 848 856 857 858 866 867 868 946 947 948 956 958 966 967 968 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[958][0-26]: 847 848 849 857 858 859 867 868 869 947 948 949 957 959 967 968 969 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[959][0-26]: 848 849 1000 858 859 1000 868 869 1000 948 949 1000 958 1000 968 969 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[960][0-26]: 1000 850 851 1000 860 861 1000 870 871 1000 950 951 1000 961 1000 970 971 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[961][0-26]: 850 851 852 860 861 862 870 871 872 950 951 952 960 962 970 971 972 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[962][0-26]: 851 852 853 861 862 863 871 872 873 951 952 953 961 963 971 972 973 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[963][0-26]: 852 853 854 862 863 864 872 873 874 952 953 954 962 964 972 973 974 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[964][0-26]: 853 854 855 863 864 865 873 874 875 953 954 955 963 965 973 974 975 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[965][0-26]: 854 855 856 864 865 866 874 875 876 954 955 956 964 966 974 975 976 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[966][0-26]: 855 856 857 865 866 867 875 876 877 955 956 957 965 967 975 976 977 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[967][0-26]: 856 857 858 866 867 868 876 877 878 956 957 958 966 968 976 977 978 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[968][0-26]: 857 858 859 867 868 869 877 878 879 957 958 959 967 969 977 978 979 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[969][0-26]: 858 859 1000 868 869 1000 878 879 1000 958 959 1000 968 1000 978 979 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[970][0-26]: 1000 860 861 1000 870 871 1000 880 881 1000 960 961 1000 971 1000 980 981 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[971][0-26]: 860 861 862 870 871 872 880 881 882 960 961 962 970 972 980 981 982 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[972][0-26]: 861 862 863 871 872 873 881 882 883 961 962 963 971 973 981 982 983 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[973][0-26]: 862 863 864 872 873 874 882 883 884 962 963 964 972 974 982 983 984 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[974][0-26]: 863 864 865 873 874 875 883 884 885 963 964 965 973 975 983 984 985 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[975][0-26]: 864 865 866 874 875 876 884 885 886 964 965 966 974 976 984 985 986 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[976][0-26]: 865 866 867 875 876 877 885 886 887 965 966 967 975 977 985 986 987 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[977][0-26]: 866 867 868 876 877 878 886 887 888 966 967 968 976 978 986 987 988 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[978][0-26]: 867 868 869 877 878 879 887 888 889 967 968 969 977 979 987 988 989 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[979][0-26]: 868 869 1000 878 879 1000 888 889 1000 968 969 1000 978 1000 988 989 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[980][0-26]: 1000 870 871 1000 880 881 1000 890 891 1000 970 971 1000 981 1000 990 991 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[981][0-26]: 870 871 872 880 881 882 890 891 892 970 971 972 980 982 990 991 992 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[982][0-26]: 871 872 873 881 882 883 891 892 893 971 972 973 981 983 991 992 993 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[983][0-26]: 872 873 874 882 883 884 892 893 894 972 973 974 982 984 992 993 994 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[984][0-26]: 873 874 875 883 884 885 893 894 895 973 974 975 983 985 993 994 995 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[985][0-26]: 874 875 876 884 885 886 894 895 896 974 975 976 984 986 994 995 996 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[986][0-26]: 875 876 877 885 886 887 895 896 897 975 976 977 985 987 995 996 997 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[987][0-26]: 876 877 878 886 887 888 896 897 898 976 977 978 986 988 996 997 998 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[988][0-26]: 877 878 879 887 888 889 897 898 899 977 978 979 987 989 997 998 999 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[989][0-26]: 878 879 1000 888 889 1000 898 899 1000 978 979 1000 988 1000 998 999 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[990][0-26]: 1000 880 881 1000 890 891 1000 1000 1000 1000 980 981 1000 991 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[991][0-26]: 880 881 882 890 891 892 1000 1000 1000 980 981 982 990 992 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[992][0-26]: 881 882 883 891 892 893 1000 1000 1000 981 982 983 991 993 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[993][0-26]: 882 883 884 892 893 894 1000 1000 1000 982 983 984 992 994 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[994][0-26]: 883 884 885 893 894 895 1000 1000 1000 983 984 985 993 995 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[995][0-26]: 884 885 886 894 895 896 1000 1000 1000 984 985 986 994 996 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[996][0-26]: 885 886 887 895 896 897 1000 1000 1000 985 986 987 995 997 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[997][0-26]: 886 887 888 896 897 898 1000 1000 1000 986 987 988 996 998 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[998][0-26]: 887 888 889 897 898 899 1000 1000 1000 987 988 989 997 999 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[999][0-26]: 888 889 1000 898 899 1000 1000 1000 1000 988 989 1000 998 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x80a4ae0
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80a5a90
+	elementNodeTbl[0-1000]:
+		elementNodeTbl[0][0-8]: 000 001 012 011 121 122 133 132 
+		elementNodeTbl[1][0-8]: 001 002 013 012 122 123 134 133 
+		elementNodeTbl[2][0-8]: 002 003 014 013 123 124 135 134 
+		elementNodeTbl[3][0-8]: 003 004 015 014 124 125 136 135 
+		elementNodeTbl[4][0-8]: 004 005 016 015 125 126 137 136 
+		elementNodeTbl[5][0-8]: 005 006 017 016 126 127 138 137 
+		elementNodeTbl[6][0-8]: 006 007 018 017 127 128 139 138 
+		elementNodeTbl[7][0-8]: 007 008 019 018 128 129 140 139 
+		elementNodeTbl[8][0-8]: 008 009 020 019 129 130 141 140 
+		elementNodeTbl[9][0-8]: 009 010 021 020 130 131 142 141 
+		elementNodeTbl[10][0-8]: 011 012 023 022 132 133 144 143 
+		elementNodeTbl[11][0-8]: 012 013 024 023 133 134 145 144 
+		elementNodeTbl[12][0-8]: 013 014 025 024 134 135 146 145 
+		elementNodeTbl[13][0-8]: 014 015 026 025 135 136 147 146 
+		elementNodeTbl[14][0-8]: 015 016 027 026 136 137 148 147 
+		elementNodeTbl[15][0-8]: 016 017 028 027 137 138 149 148 
+		elementNodeTbl[16][0-8]: 017 018 029 028 138 139 150 149 
+		elementNodeTbl[17][0-8]: 018 019 030 029 139 140 151 150 
+		elementNodeTbl[18][0-8]: 019 020 031 030 140 141 152 151 
+		elementNodeTbl[19][0-8]: 020 021 032 031 141 142 153 152 
+		elementNodeTbl[20][0-8]: 022 023 034 033 143 144 155 154 
+		elementNodeTbl[21][0-8]: 023 024 035 034 144 145 156 155 
+		elementNodeTbl[22][0-8]: 024 025 036 035 145 146 157 156 
+		elementNodeTbl[23][0-8]: 025 026 037 036 146 147 158 157 
+		elementNodeTbl[24][0-8]: 026 027 038 037 147 148 159 158 
+		elementNodeTbl[25][0-8]: 027 028 039 038 148 149 160 159 
+		elementNodeTbl[26][0-8]: 028 029 040 039 149 150 161 160 
+		elementNodeTbl[27][0-8]: 029 030 041 040 150 151 162 161 
+		elementNodeTbl[28][0-8]: 030 031 042 041 151 152 163 162 
+		elementNodeTbl[29][0-8]: 031 032 043 042 152 153 164 163 
+		elementNodeTbl[30][0-8]: 033 034 045 044 154 155 166 165 
+		elementNodeTbl[31][0-8]: 034 035 046 045 155 156 167 166 
+		elementNodeTbl[32][0-8]: 035 036 047 046 156 157 168 167 
+		elementNodeTbl[33][0-8]: 036 037 048 047 157 158 169 168 
+		elementNodeTbl[34][0-8]: 037 038 049 048 158 159 170 169 
+		elementNodeTbl[35][0-8]: 038 039 050 049 159 160 171 170 
+		elementNodeTbl[36][0-8]: 039 040 051 050 160 161 172 171 
+		elementNodeTbl[37][0-8]: 040 041 052 051 161 162 173 172 
+		elementNodeTbl[38][0-8]: 041 042 053 052 162 163 174 173 
+		elementNodeTbl[39][0-8]: 042 043 054 053 163 164 175 174 
+		elementNodeTbl[40][0-8]: 044 045 056 055 165 166 177 176 
+		elementNodeTbl[41][0-8]: 045 046 057 056 166 167 178 177 
+		elementNodeTbl[42][0-8]: 046 047 058 057 167 168 179 178 
+		elementNodeTbl[43][0-8]: 047 048 059 058 168 169 180 179 
+		elementNodeTbl[44][0-8]: 048 049 060 059 169 170 181 180 
+		elementNodeTbl[45][0-8]: 049 050 061 060 170 171 182 181 
+		elementNodeTbl[46][0-8]: 050 051 062 061 171 172 183 182 
+		elementNodeTbl[47][0-8]: 051 052 063 062 172 173 184 183 
+		elementNodeTbl[48][0-8]: 052 053 064 063 173 174 185 184 
+		elementNodeTbl[49][0-8]: 053 054 065 064 174 175 186 185 
+		elementNodeTbl[50][0-8]: 055 056 067 066 176 177 188 187 
+		elementNodeTbl[51][0-8]: 056 057 068 067 177 178 189 188 
+		elementNodeTbl[52][0-8]: 057 058 069 068 178 179 190 189 
+		elementNodeTbl[53][0-8]: 058 059 070 069 179 180 191 190 
+		elementNodeTbl[54][0-8]: 059 060 071 070 180 181 192 191 
+		elementNodeTbl[55][0-8]: 060 061 072 071 181 182 193 192 
+		elementNodeTbl[56][0-8]: 061 062 073 072 182 183 194 193 
+		elementNodeTbl[57][0-8]: 062 063 074 073 183 184 195 194 
+		elementNodeTbl[58][0-8]: 063 064 075 074 184 185 196 195 
+		elementNodeTbl[59][0-8]: 064 065 076 075 185 186 197 196 
+		elementNodeTbl[60][0-8]: 066 067 078 077 187 188 199 198 
+		elementNodeTbl[61][0-8]: 067 068 079 078 188 189 200 199 
+		elementNodeTbl[62][0-8]: 068 069 080 079 189 190 201 200 
+		elementNodeTbl[63][0-8]: 069 070 081 080 190 191 202 201 
+		elementNodeTbl[64][0-8]: 070 071 082 081 191 192 203 202 
+		elementNodeTbl[65][0-8]: 071 072 083 082 192 193 204 203 
+		elementNodeTbl[66][0-8]: 072 073 084 083 193 194 205 204 
+		elementNodeTbl[67][0-8]: 073 074 085 084 194 195 206 205 
+		elementNodeTbl[68][0-8]: 074 075 086 085 195 196 207 206 
+		elementNodeTbl[69][0-8]: 075 076 087 086 196 197 208 207 
+		elementNodeTbl[70][0-8]: 077 078 089 088 198 199 210 209 
+		elementNodeTbl[71][0-8]: 078 079 090 089 199 200 211 210 
+		elementNodeTbl[72][0-8]: 079 080 091 090 200 201 212 211 
+		elementNodeTbl[73][0-8]: 080 081 092 091 201 202 213 212 
+		elementNodeTbl[74][0-8]: 081 082 093 092 202 203 214 213 
+		elementNodeTbl[75][0-8]: 082 083 094 093 203 204 215 214 
+		elementNodeTbl[76][0-8]: 083 084 095 094 204 205 216 215 
+		elementNodeTbl[77][0-8]: 084 085 096 095 205 206 217 216 
+		elementNodeTbl[78][0-8]: 085 086 097 096 206 207 218 217 
+		elementNodeTbl[79][0-8]: 086 087 098 097 207 208 219 218 
+		elementNodeTbl[80][0-8]: 088 089 100 099 209 210 221 220 
+		elementNodeTbl[81][0-8]: 089 090 101 100 210 211 222 221 
+		elementNodeTbl[82][0-8]: 090 091 102 101 211 212 223 222 
+		elementNodeTbl[83][0-8]: 091 092 103 102 212 213 224 223 
+		elementNodeTbl[84][0-8]: 092 093 104 103 213 214 225 224 
+		elementNodeTbl[85][0-8]: 093 094 105 104 214 215 226 225 
+		elementNodeTbl[86][0-8]: 094 095 106 105 215 216 227 226 
+		elementNodeTbl[87][0-8]: 095 096 107 106 216 217 228 227 
+		elementNodeTbl[88][0-8]: 096 097 108 107 217 218 229 228 
+		elementNodeTbl[89][0-8]: 097 098 109 108 218 219 230 229 
+		elementNodeTbl[90][0-8]: 099 100 111 110 220 221 232 231 
+		elementNodeTbl[91][0-8]: 100 101 112 111 221 222 233 232 
+		elementNodeTbl[92][0-8]: 101 102 113 112 222 223 234 233 
+		elementNodeTbl[93][0-8]: 102 103 114 113 223 224 235 234 
+		elementNodeTbl[94][0-8]: 103 104 115 114 224 225 236 235 
+		elementNodeTbl[95][0-8]: 104 105 116 115 225 226 237 236 
+		elementNodeTbl[96][0-8]: 105 106 117 116 226 227 238 237 
+		elementNodeTbl[97][0-8]: 106 107 118 117 227 228 239 238 
+		elementNodeTbl[98][0-8]: 107 108 119 118 228 229 240 239 
+		elementNodeTbl[99][0-8]: 108 109 120 119 229 230 241 240 
+		elementNodeTbl[100][0-8]: 121 122 133 132 242 243 254 253 
+		elementNodeTbl[101][0-8]: 122 123 134 133 243 244 255 254 
+		elementNodeTbl[102][0-8]: 123 124 135 134 244 245 256 255 
+		elementNodeTbl[103][0-8]: 124 125 136 135 245 246 257 256 
+		elementNodeTbl[104][0-8]: 125 126 137 136 246 247 258 257 
+		elementNodeTbl[105][0-8]: 126 127 138 137 247 248 259 258 
+		elementNodeTbl[106][0-8]: 127 128 139 138 248 249 260 259 
+		elementNodeTbl[107][0-8]: 128 129 140 139 249 250 261 260 
+		elementNodeTbl[108][0-8]: 129 130 141 140 250 251 262 261 
+		elementNodeTbl[109][0-8]: 130 131 142 141 251 252 263 262 
+		elementNodeTbl[110][0-8]: 132 133 144 143 253 254 265 264 
+		elementNodeTbl[111][0-8]: 133 134 145 144 254 255 266 265 
+		elementNodeTbl[112][0-8]: 134 135 146 145 255 256 267 266 
+		elementNodeTbl[113][0-8]: 135 136 147 146 256 257 268 267 
+		elementNodeTbl[114][0-8]: 136 137 148 147 257 258 269 268 
+		elementNodeTbl[115][0-8]: 137 138 149 148 258 259 270 269 
+		elementNodeTbl[116][0-8]: 138 139 150 149 259 260 271 270 
+		elementNodeTbl[117][0-8]: 139 140 151 150 260 261 272 271 
+		elementNodeTbl[118][0-8]: 140 141 152 151 261 262 273 272 
+		elementNodeTbl[119][0-8]: 141 142 153 152 262 263 274 273 
+		elementNodeTbl[120][0-8]: 143 144 155 154 264 265 276 275 
+		elementNodeTbl[121][0-8]: 144 145 156 155 265 266 277 276 
+		elementNodeTbl[122][0-8]: 145 146 157 156 266 267 278 277 
+		elementNodeTbl[123][0-8]: 146 147 158 157 267 268 279 278 
+		elementNodeTbl[124][0-8]: 147 148 159 158 268 269 280 279 
+		elementNodeTbl[125][0-8]: 148 149 160 159 269 270 281 280 
+		elementNodeTbl[126][0-8]: 149 150 161 160 270 271 282 281 
+		elementNodeTbl[127][0-8]: 150 151 162 161 271 272 283 282 
+		elementNodeTbl[128][0-8]: 151 152 163 162 272 273 284 283 
+		elementNodeTbl[129][0-8]: 152 153 164 163 273 274 285 284 
+		elementNodeTbl[130][0-8]: 154 155 166 165 275 276 287 286 
+		elementNodeTbl[131][0-8]: 155 156 167 166 276 277 288 287 
+		elementNodeTbl[132][0-8]: 156 157 168 167 277 278 289 288 
+		elementNodeTbl[133][0-8]: 157 158 169 168 278 279 290 289 
+		elementNodeTbl[134][0-8]: 158 159 170 169 279 280 291 290 
+		elementNodeTbl[135][0-8]: 159 160 171 170 280 281 292 291 
+		elementNodeTbl[136][0-8]: 160 161 172 171 281 282 293 292 
+		elementNodeTbl[137][0-8]: 161 162 173 172 282 283 294 293 
+		elementNodeTbl[138][0-8]: 162 163 174 173 283 284 295 294 
+		elementNodeTbl[139][0-8]: 163 164 175 174 284 285 296 295 
+		elementNodeTbl[140][0-8]: 165 166 177 176 286 287 298 297 
+		elementNodeTbl[141][0-8]: 166 167 178 177 287 288 299 298 
+		elementNodeTbl[142][0-8]: 167 168 179 178 288 289 300 299 
+		elementNodeTbl[143][0-8]: 168 169 180 179 289 290 301 300 
+		elementNodeTbl[144][0-8]: 169 170 181 180 290 291 302 301 
+		elementNodeTbl[145][0-8]: 170 171 182 181 291 292 303 302 
+		elementNodeTbl[146][0-8]: 171 172 183 182 292 293 304 303 
+		elementNodeTbl[147][0-8]: 172 173 184 183 293 294 305 304 
+		elementNodeTbl[148][0-8]: 173 174 185 184 294 295 306 305 
+		elementNodeTbl[149][0-8]: 174 175 186 185 295 296 307 306 
+		elementNodeTbl[150][0-8]: 176 177 188 187 297 298 309 308 
+		elementNodeTbl[151][0-8]: 177 178 189 188 298 299 310 309 
+		elementNodeTbl[152][0-8]: 178 179 190 189 299 300 311 310 
+		elementNodeTbl[153][0-8]: 179 180 191 190 300 301 312 311 
+		elementNodeTbl[154][0-8]: 180 181 192 191 301 302 313 312 
+		elementNodeTbl[155][0-8]: 181 182 193 192 302 303 314 313 
+		elementNodeTbl[156][0-8]: 182 183 194 193 303 304 315 314 
+		elementNodeTbl[157][0-8]: 183 184 195 194 304 305 316 315 
+		elementNodeTbl[158][0-8]: 184 185 196 195 305 306 317 316 
+		elementNodeTbl[159][0-8]: 185 186 197 196 306 307 318 317 
+		elementNodeTbl[160][0-8]: 187 188 199 198 308 309 320 319 
+		elementNodeTbl[161][0-8]: 188 189 200 199 309 310 321 320 
+		elementNodeTbl[162][0-8]: 189 190 201 200 310 311 322 321 
+		elementNodeTbl[163][0-8]: 190 191 202 201 311 312 323 322 
+		elementNodeTbl[164][0-8]: 191 192 203 202 312 313 324 323 
+		elementNodeTbl[165][0-8]: 192 193 204 203 313 314 325 324 
+		elementNodeTbl[166][0-8]: 193 194 205 204 314 315 326 325 
+		elementNodeTbl[167][0-8]: 194 195 206 205 315 316 327 326 
+		elementNodeTbl[168][0-8]: 195 196 207 206 316 317 328 327 
+		elementNodeTbl[169][0-8]: 196 197 208 207 317 318 329 328 
+		elementNodeTbl[170][0-8]: 198 199 210 209 319 320 331 330 
+		elementNodeTbl[171][0-8]: 199 200 211 210 320 321 332 331 
+		elementNodeTbl[172][0-8]: 200 201 212 211 321 322 333 332 
+		elementNodeTbl[173][0-8]: 201 202 213 212 322 323 334 333 
+		elementNodeTbl[174][0-8]: 202 203 214 213 323 324 335 334 
+		elementNodeTbl[175][0-8]: 203 204 215 214 324 325 336 335 
+		elementNodeTbl[176][0-8]: 204 205 216 215 325 326 337 336 
+		elementNodeTbl[177][0-8]: 205 206 217 216 326 327 338 337 
+		elementNodeTbl[178][0-8]: 206 207 218 217 327 328 339 338 
+		elementNodeTbl[179][0-8]: 207 208 219 218 328 329 340 339 
+		elementNodeTbl[180][0-8]: 209 210 221 220 330 331 342 341 
+		elementNodeTbl[181][0-8]: 210 211 222 221 331 332 343 342 
+		elementNodeTbl[182][0-8]: 211 212 223 222 332 333 344 343 
+		elementNodeTbl[183][0-8]: 212 213 224 223 333 334 345 344 
+		elementNodeTbl[184][0-8]: 213 214 225 224 334 335 346 345 
+		elementNodeTbl[185][0-8]: 214 215 226 225 335 336 347 346 
+		elementNodeTbl[186][0-8]: 215 216 227 226 336 337 348 347 
+		elementNodeTbl[187][0-8]: 216 217 228 227 337 338 349 348 
+		elementNodeTbl[188][0-8]: 217 218 229 228 338 339 350 349 
+		elementNodeTbl[189][0-8]: 218 219 230 229 339 340 351 350 
+		elementNodeTbl[190][0-8]: 220 221 232 231 341 342 353 352 
+		elementNodeTbl[191][0-8]: 221 222 233 232 342 343 354 353 
+		elementNodeTbl[192][0-8]: 222 223 234 233 343 344 355 354 
+		elementNodeTbl[193][0-8]: 223 224 235 234 344 345 356 355 
+		elementNodeTbl[194][0-8]: 224 225 236 235 345 346 357 356 
+		elementNodeTbl[195][0-8]: 225 226 237 236 346 347 358 357 
+		elementNodeTbl[196][0-8]: 226 227 238 237 347 348 359 358 
+		elementNodeTbl[197][0-8]: 227 228 239 238 348 349 360 359 
+		elementNodeTbl[198][0-8]: 228 229 240 239 349 350 361 360 
+		elementNodeTbl[199][0-8]: 229 230 241 240 350 351 362 361 
+		elementNodeTbl[200][0-8]: 242 243 254 253 363 364 375 374 
+		elementNodeTbl[201][0-8]: 243 244 255 254 364 365 376 375 
+		elementNodeTbl[202][0-8]: 244 245 256 255 365 366 377 376 
+		elementNodeTbl[203][0-8]: 245 246 257 256 366 367 378 377 
+		elementNodeTbl[204][0-8]: 246 247 258 257 367 368 379 378 
+		elementNodeTbl[205][0-8]: 247 248 259 258 368 369 380 379 
+		elementNodeTbl[206][0-8]: 248 249 260 259 369 370 381 380 
+		elementNodeTbl[207][0-8]: 249 250 261 260 370 371 382 381 
+		elementNodeTbl[208][0-8]: 250 251 262 261 371 372 383 382 
+		elementNodeTbl[209][0-8]: 251 252 263 262 372 373 384 383 
+		elementNodeTbl[210][0-8]: 253 254 265 264 374 375 386 385 
+		elementNodeTbl[211][0-8]: 254 255 266 265 375 376 387 386 
+		elementNodeTbl[212][0-8]: 255 256 267 266 376 377 388 387 
+		elementNodeTbl[213][0-8]: 256 257 268 267 377 378 389 388 
+		elementNodeTbl[214][0-8]: 257 258 269 268 378 379 390 389 
+		elementNodeTbl[215][0-8]: 258 259 270 269 379 380 391 390 
+		elementNodeTbl[216][0-8]: 259 260 271 270 380 381 392 391 
+		elementNodeTbl[217][0-8]: 260 261 272 271 381 382 393 392 
+		elementNodeTbl[218][0-8]: 261 262 273 272 382 383 394 393 
+		elementNodeTbl[219][0-8]: 262 263 274 273 383 384 395 394 
+		elementNodeTbl[220][0-8]: 264 265 276 275 385 386 397 396 
+		elementNodeTbl[221][0-8]: 265 266 277 276 386 387 398 397 
+		elementNodeTbl[222][0-8]: 266 267 278 277 387 388 399 398 
+		elementNodeTbl[223][0-8]: 267 268 279 278 388 389 400 399 
+		elementNodeTbl[224][0-8]: 268 269 280 279 389 390 401 400 
+		elementNodeTbl[225][0-8]: 269 270 281 280 390 391 402 401 
+		elementNodeTbl[226][0-8]: 270 271 282 281 391 392 403 402 
+		elementNodeTbl[227][0-8]: 271 272 283 282 392 393 404 403 
+		elementNodeTbl[228][0-8]: 272 273 284 283 393 394 405 404 
+		elementNodeTbl[229][0-8]: 273 274 285 284 394 395 406 405 
+		elementNodeTbl[230][0-8]: 275 276 287 286 396 397 408 407 
+		elementNodeTbl[231][0-8]: 276 277 288 287 397 398 409 408 
+		elementNodeTbl[232][0-8]: 277 278 289 288 398 399 410 409 
+		elementNodeTbl[233][0-8]: 278 279 290 289 399 400 411 410 
+		elementNodeTbl[234][0-8]: 279 280 291 290 400 401 412 411 
+		elementNodeTbl[235][0-8]: 280 281 292 291 401 402 413 412 
+		elementNodeTbl[236][0-8]: 281 282 293 292 402 403 414 413 
+		elementNodeTbl[237][0-8]: 282 283 294 293 403 404 415 414 
+		elementNodeTbl[238][0-8]: 283 284 295 294 404 405 416 415 
+		elementNodeTbl[239][0-8]: 284 285 296 295 405 406 417 416 
+		elementNodeTbl[240][0-8]: 286 287 298 297 407 408 419 418 
+		elementNodeTbl[241][0-8]: 287 288 299 298 408 409 420 419 
+		elementNodeTbl[242][0-8]: 288 289 300 299 409 410 421 420 
+		elementNodeTbl[243][0-8]: 289 290 301 300 410 411 422 421 
+		elementNodeTbl[244][0-8]: 290 291 302 301 411 412 423 422 
+		elementNodeTbl[245][0-8]: 291 292 303 302 412 413 424 423 
+		elementNodeTbl[246][0-8]: 292 293 304 303 413 414 425 424 
+		elementNodeTbl[247][0-8]: 293 294 305 304 414 415 426 425 
+		elementNodeTbl[248][0-8]: 294 295 306 305 415 416 427 426 
+		elementNodeTbl[249][0-8]: 295 296 307 306 416 417 428 427 
+		elementNodeTbl[250][0-8]: 297 298 309 308 418 419 430 429 
+		elementNodeTbl[251][0-8]: 298 299 310 309 419 420 431 430 
+		elementNodeTbl[252][0-8]: 299 300 311 310 420 421 432 431 
+		elementNodeTbl[253][0-8]: 300 301 312 311 421 422 433 432 
+		elementNodeTbl[254][0-8]: 301 302 313 312 422 423 434 433 
+		elementNodeTbl[255][0-8]: 302 303 314 313 423 424 435 434 
+		elementNodeTbl[256][0-8]: 303 304 315 314 424 425 436 435 
+		elementNodeTbl[257][0-8]: 304 305 316 315 425 426 437 436 
+		elementNodeTbl[258][0-8]: 305 306 317 316 426 427 438 437 
+		elementNodeTbl[259][0-8]: 306 307 318 317 427 428 439 438 
+		elementNodeTbl[260][0-8]: 308 309 320 319 429 430 441 440 
+		elementNodeTbl[261][0-8]: 309 310 321 320 430 431 442 441 
+		elementNodeTbl[262][0-8]: 310 311 322 321 431 432 443 442 
+		elementNodeTbl[263][0-8]: 311 312 323 322 432 433 444 443 
+		elementNodeTbl[264][0-8]: 312 313 324 323 433 434 445 444 
+		elementNodeTbl[265][0-8]: 313 314 325 324 434 435 446 445 
+		elementNodeTbl[266][0-8]: 314 315 326 325 435 436 447 446 
+		elementNodeTbl[267][0-8]: 315 316 327 326 436 437 448 447 
+		elementNodeTbl[268][0-8]: 316 317 328 327 437 438 449 448 
+		elementNodeTbl[269][0-8]: 317 318 329 328 438 439 450 449 
+		elementNodeTbl[270][0-8]: 319 320 331 330 440 441 452 451 
+		elementNodeTbl[271][0-8]: 320 321 332 331 441 442 453 452 
+		elementNodeTbl[272][0-8]: 321 322 333 332 442 443 454 453 
+		elementNodeTbl[273][0-8]: 322 323 334 333 443 444 455 454 
+		elementNodeTbl[274][0-8]: 323 324 335 334 444 445 456 455 
+		elementNodeTbl[275][0-8]: 324 325 336 335 445 446 457 456 
+		elementNodeTbl[276][0-8]: 325 326 337 336 446 447 458 457 
+		elementNodeTbl[277][0-8]: 326 327 338 337 447 448 459 458 
+		elementNodeTbl[278][0-8]: 327 328 339 338 448 449 460 459 
+		elementNodeTbl[279][0-8]: 328 329 340 339 449 450 461 460 
+		elementNodeTbl[280][0-8]: 330 331 342 341 451 452 463 462 
+		elementNodeTbl[281][0-8]: 331 332 343 342 452 453 464 463 
+		elementNodeTbl[282][0-8]: 332 333 344 343 453 454 465 464 
+		elementNodeTbl[283][0-8]: 333 334 345 344 454 455 466 465 
+		elementNodeTbl[284][0-8]: 334 335 346 345 455 456 467 466 
+		elementNodeTbl[285][0-8]: 335 336 347 346 456 457 468 467 
+		elementNodeTbl[286][0-8]: 336 337 348 347 457 458 469 468 
+		elementNodeTbl[287][0-8]: 337 338 349 348 458 459 470 469 
+		elementNodeTbl[288][0-8]: 338 339 350 349 459 460 471 470 
+		elementNodeTbl[289][0-8]: 339 340 351 350 460 461 472 471 
+		elementNodeTbl[290][0-8]: 341 342 353 352 462 463 474 473 
+		elementNodeTbl[291][0-8]: 342 343 354 353 463 464 475 474 
+		elementNodeTbl[292][0-8]: 343 344 355 354 464 465 476 475 
+		elementNodeTbl[293][0-8]: 344 345 356 355 465 466 477 476 
+		elementNodeTbl[294][0-8]: 345 346 357 356 466 467 478 477 
+		elementNodeTbl[295][0-8]: 346 347 358 357 467 468 479 478 
+		elementNodeTbl[296][0-8]: 347 348 359 358 468 469 480 479 
+		elementNodeTbl[297][0-8]: 348 349 360 359 469 470 481 480 
+		elementNodeTbl[298][0-8]: 349 350 361 360 470 471 482 481 
+		elementNodeTbl[299][0-8]: 350 351 362 361 471 472 483 482 
+		elementNodeTbl[300][0-8]: 363 364 375 374 484 485 496 495 
+		elementNodeTbl[301][0-8]: 364 365 376 375 485 486 497 496 
+		elementNodeTbl[302][0-8]: 365 366 377 376 486 487 498 497 
+		elementNodeTbl[303][0-8]: 366 367 378 377 487 488 499 498 
+		elementNodeTbl[304][0-8]: 367 368 379 378 488 489 500 499 
+		elementNodeTbl[305][0-8]: 368 369 380 379 489 490 501 500 
+		elementNodeTbl[306][0-8]: 369 370 381 380 490 491 502 501 
+		elementNodeTbl[307][0-8]: 370 371 382 381 491 492 503 502 
+		elementNodeTbl[308][0-8]: 371 372 383 382 492 493 504 503 
+		elementNodeTbl[309][0-8]: 372 373 384 383 493 494 505 504 
+		elementNodeTbl[310][0-8]: 374 375 386 385 495 496 507 506 
+		elementNodeTbl[311][0-8]: 375 376 387 386 496 497 508 507 
+		elementNodeTbl[312][0-8]: 376 377 388 387 497 498 509 508 
+		elementNodeTbl[313][0-8]: 377 378 389 388 498 499 510 509 
+		elementNodeTbl[314][0-8]: 378 379 390 389 499 500 511 510 
+		elementNodeTbl[315][0-8]: 379 380 391 390 500 501 512 511 
+		elementNodeTbl[316][0-8]: 380 381 392 391 501 502 513 512 
+		elementNodeTbl[317][0-8]: 381 382 393 392 502 503 514 513 
+		elementNodeTbl[318][0-8]: 382 383 394 393 503 504 515 514 
+		elementNodeTbl[319][0-8]: 383 384 395 394 504 505 516 515 
+		elementNodeTbl[320][0-8]: 385 386 397 396 506 507 518 517 
+		elementNodeTbl[321][0-8]: 386 387 398 397 507 508 519 518 
+		elementNodeTbl[322][0-8]: 387 388 399 398 508 509 520 519 
+		elementNodeTbl[323][0-8]: 388 389 400 399 509 510 521 520 
+		elementNodeTbl[324][0-8]: 389 390 401 400 510 511 522 521 
+		elementNodeTbl[325][0-8]: 390 391 402 401 511 512 523 522 
+		elementNodeTbl[326][0-8]: 391 392 403 402 512 513 524 523 
+		elementNodeTbl[327][0-8]: 392 393 404 403 513 514 525 524 
+		elementNodeTbl[328][0-8]: 393 394 405 404 514 515 526 525 
+		elementNodeTbl[329][0-8]: 394 395 406 405 515 516 527 526 
+		elementNodeTbl[330][0-8]: 396 397 408 407 517 518 529 528 
+		elementNodeTbl[331][0-8]: 397 398 409 408 518 519 530 529 
+		elementNodeTbl[332][0-8]: 398 399 410 409 519 520 531 530 
+		elementNodeTbl[333][0-8]: 399 400 411 410 520 521 532 531 
+		elementNodeTbl[334][0-8]: 400 401 412 411 521 522 533 532 
+		elementNodeTbl[335][0-8]: 401 402 413 412 522 523 534 533 
+		elementNodeTbl[336][0-8]: 402 403 414 413 523 524 535 534 
+		elementNodeTbl[337][0-8]: 403 404 415 414 524 525 536 535 
+		elementNodeTbl[338][0-8]: 404 405 416 415 525 526 537 536 
+		elementNodeTbl[339][0-8]: 405 406 417 416 526 527 538 537 
+		elementNodeTbl[340][0-8]: 407 408 419 418 528 529 540 539 
+		elementNodeTbl[341][0-8]: 408 409 420 419 529 530 541 540 
+		elementNodeTbl[342][0-8]: 409 410 421 420 530 531 542 541 
+		elementNodeTbl[343][0-8]: 410 411 422 421 531 532 543 542 
+		elementNodeTbl[344][0-8]: 411 412 423 422 532 533 544 543 
+		elementNodeTbl[345][0-8]: 412 413 424 423 533 534 545 544 
+		elementNodeTbl[346][0-8]: 413 414 425 424 534 535 546 545 
+		elementNodeTbl[347][0-8]: 414 415 426 425 535 536 547 546 
+		elementNodeTbl[348][0-8]: 415 416 427 426 536 537 548 547 
+		elementNodeTbl[349][0-8]: 416 417 428 427 537 538 549 548 
+		elementNodeTbl[350][0-8]: 418 419 430 429 539 540 551 550 
+		elementNodeTbl[351][0-8]: 419 420 431 430 540 541 552 551 
+		elementNodeTbl[352][0-8]: 420 421 432 431 541 542 553 552 
+		elementNodeTbl[353][0-8]: 421 422 433 432 542 543 554 553 
+		elementNodeTbl[354][0-8]: 422 423 434 433 543 544 555 554 
+		elementNodeTbl[355][0-8]: 423 424 435 434 544 545 556 555 
+		elementNodeTbl[356][0-8]: 424 425 436 435 545 546 557 556 
+		elementNodeTbl[357][0-8]: 425 426 437 436 546 547 558 557 
+		elementNodeTbl[358][0-8]: 426 427 438 437 547 548 559 558 
+		elementNodeTbl[359][0-8]: 427 428 439 438 548 549 560 559 
+		elementNodeTbl[360][0-8]: 429 430 441 440 550 551 562 561 
+		elementNodeTbl[361][0-8]: 430 431 442 441 551 552 563 562 
+		elementNodeTbl[362][0-8]: 431 432 443 442 552 553 564 563 
+		elementNodeTbl[363][0-8]: 432 433 444 443 553 554 565 564 
+		elementNodeTbl[364][0-8]: 433 434 445 444 554 555 566 565 
+		elementNodeTbl[365][0-8]: 434 435 446 445 555 556 567 566 
+		elementNodeTbl[366][0-8]: 435 436 447 446 556 557 568 567 
+		elementNodeTbl[367][0-8]: 436 437 448 447 557 558 569 568 
+		elementNodeTbl[368][0-8]: 437 438 449 448 558 559 570 569 
+		elementNodeTbl[369][0-8]: 438 439 450 449 559 560 571 570 
+		elementNodeTbl[370][0-8]: 440 441 452 451 561 562 573 572 
+		elementNodeTbl[371][0-8]: 441 442 453 452 562 563 574 573 
+		elementNodeTbl[372][0-8]: 442 443 454 453 563 564 575 574 
+		elementNodeTbl[373][0-8]: 443 444 455 454 564 565 576 575 
+		elementNodeTbl[374][0-8]: 444 445 456 455 565 566 577 576 
+		elementNodeTbl[375][0-8]: 445 446 457 456 566 567 578 577 
+		elementNodeTbl[376][0-8]: 446 447 458 457 567 568 579 578 
+		elementNodeTbl[377][0-8]: 447 448 459 458 568 569 580 579 
+		elementNodeTbl[378][0-8]: 448 449 460 459 569 570 581 580 
+		elementNodeTbl[379][0-8]: 449 450 461 460 570 571 582 581 
+		elementNodeTbl[380][0-8]: 451 452 463 462 572 573 584 583 
+		elementNodeTbl[381][0-8]: 452 453 464 463 573 574 585 584 
+		elementNodeTbl[382][0-8]: 453 454 465 464 574 575 586 585 
+		elementNodeTbl[383][0-8]: 454 455 466 465 575 576 587 586 
+		elementNodeTbl[384][0-8]: 455 456 467 466 576 577 588 587 
+		elementNodeTbl[385][0-8]: 456 457 468 467 577 578 589 588 
+		elementNodeTbl[386][0-8]: 457 458 469 468 578 579 590 589 
+		elementNodeTbl[387][0-8]: 458 459 470 469 579 580 591 590 
+		elementNodeTbl[388][0-8]: 459 460 471 470 580 581 592 591 
+		elementNodeTbl[389][0-8]: 460 461 472 471 581 582 593 592 
+		elementNodeTbl[390][0-8]: 462 463 474 473 583 584 595 594 
+		elementNodeTbl[391][0-8]: 463 464 475 474 584 585 596 595 
+		elementNodeTbl[392][0-8]: 464 465 476 475 585 586 597 596 
+		elementNodeTbl[393][0-8]: 465 466 477 476 586 587 598 597 
+		elementNodeTbl[394][0-8]: 466 467 478 477 587 588 599 598 
+		elementNodeTbl[395][0-8]: 467 468 479 478 588 589 600 599 
+		elementNodeTbl[396][0-8]: 468 469 480 479 589 590 601 600 
+		elementNodeTbl[397][0-8]: 469 470 481 480 590 591 602 601 
+		elementNodeTbl[398][0-8]: 470 471 482 481 591 592 603 602 
+		elementNodeTbl[399][0-8]: 471 472 483 482 592 593 604 603 
+		elementNodeTbl[400][0-8]: 484 485 496 495 605 606 617 616 
+		elementNodeTbl[401][0-8]: 485 486 497 496 606 607 618 617 
+		elementNodeTbl[402][0-8]: 486 487 498 497 607 608 619 618 
+		elementNodeTbl[403][0-8]: 487 488 499 498 608 609 620 619 
+		elementNodeTbl[404][0-8]: 488 489 500 499 609 610 621 620 
+		elementNodeTbl[405][0-8]: 489 490 501 500 610 611 622 621 
+		elementNodeTbl[406][0-8]: 490 491 502 501 611 612 623 622 
+		elementNodeTbl[407][0-8]: 491 492 503 502 612 613 624 623 
+		elementNodeTbl[408][0-8]: 492 493 504 503 613 614 625 624 
+		elementNodeTbl[409][0-8]: 493 494 505 504 614 615 626 625 
+		elementNodeTbl[410][0-8]: 495 496 507 506 616 617 628 627 
+		elementNodeTbl[411][0-8]: 496 497 508 507 617 618 629 628 
+		elementNodeTbl[412][0-8]: 497 498 509 508 618 619 630 629 
+		elementNodeTbl[413][0-8]: 498 499 510 509 619 620 631 630 
+		elementNodeTbl[414][0-8]: 499 500 511 510 620 621 632 631 
+		elementNodeTbl[415][0-8]: 500 501 512 511 621 622 633 632 
+		elementNodeTbl[416][0-8]: 501 502 513 512 622 623 634 633 
+		elementNodeTbl[417][0-8]: 502 503 514 513 623 624 635 634 
+		elementNodeTbl[418][0-8]: 503 504 515 514 624 625 636 635 
+		elementNodeTbl[419][0-8]: 504 505 516 515 625 626 637 636 
+		elementNodeTbl[420][0-8]: 506 507 518 517 627 628 639 638 
+		elementNodeTbl[421][0-8]: 507 508 519 518 628 629 640 639 
+		elementNodeTbl[422][0-8]: 508 509 520 519 629 630 641 640 
+		elementNodeTbl[423][0-8]: 509 510 521 520 630 631 642 641 
+		elementNodeTbl[424][0-8]: 510 511 522 521 631 632 643 642 
+		elementNodeTbl[425][0-8]: 511 512 523 522 632 633 644 643 
+		elementNodeTbl[426][0-8]: 512 513 524 523 633 634 645 644 
+		elementNodeTbl[427][0-8]: 513 514 525 524 634 635 646 645 
+		elementNodeTbl[428][0-8]: 514 515 526 525 635 636 647 646 
+		elementNodeTbl[429][0-8]: 515 516 527 526 636 637 648 647 
+		elementNodeTbl[430][0-8]: 517 518 529 528 638 639 650 649 
+		elementNodeTbl[431][0-8]: 518 519 530 529 639 640 651 650 
+		elementNodeTbl[432][0-8]: 519 520 531 530 640 641 652 651 
+		elementNodeTbl[433][0-8]: 520 521 532 531 641 642 653 652 
+		elementNodeTbl[434][0-8]: 521 522 533 532 642 643 654 653 
+		elementNodeTbl[435][0-8]: 522 523 534 533 643 644 655 654 
+		elementNodeTbl[436][0-8]: 523 524 535 534 644 645 656 655 
+		elementNodeTbl[437][0-8]: 524 525 536 535 645 646 657 656 
+		elementNodeTbl[438][0-8]: 525 526 537 536 646 647 658 657 
+		elementNodeTbl[439][0-8]: 526 527 538 537 647 648 659 658 
+		elementNodeTbl[440][0-8]: 528 529 540 539 649 650 661 660 
+		elementNodeTbl[441][0-8]: 529 530 541 540 650 651 662 661 
+		elementNodeTbl[442][0-8]: 530 531 542 541 651 652 663 662 
+		elementNodeTbl[443][0-8]: 531 532 543 542 652 653 664 663 
+		elementNodeTbl[444][0-8]: 532 533 544 543 653 654 665 664 
+		elementNodeTbl[445][0-8]: 533 534 545 544 654 655 666 665 
+		elementNodeTbl[446][0-8]: 534 535 546 545 655 656 667 666 
+		elementNodeTbl[447][0-8]: 535 536 547 546 656 657 668 667 
+		elementNodeTbl[448][0-8]: 536 537 548 547 657 658 669 668 
+		elementNodeTbl[449][0-8]: 537 538 549 548 658 659 670 669 
+		elementNodeTbl[450][0-8]: 539 540 551 550 660 661 672 671 
+		elementNodeTbl[451][0-8]: 540 541 552 551 661 662 673 672 
+		elementNodeTbl[452][0-8]: 541 542 553 552 662 663 674 673 
+		elementNodeTbl[453][0-8]: 542 543 554 553 663 664 675 674 
+		elementNodeTbl[454][0-8]: 543 544 555 554 664 665 676 675 
+		elementNodeTbl[455][0-8]: 544 545 556 555 665 666 677 676 
+		elementNodeTbl[456][0-8]: 545 546 557 556 666 667 678 677 
+		elementNodeTbl[457][0-8]: 546 547 558 557 667 668 679 678 
+		elementNodeTbl[458][0-8]: 547 548 559 558 668 669 680 679 
+		elementNodeTbl[459][0-8]: 548 549 560 559 669 670 681 680 
+		elementNodeTbl[460][0-8]: 550 551 562 561 671 672 683 682 
+		elementNodeTbl[461][0-8]: 551 552 563 562 672 673 684 683 
+		elementNodeTbl[462][0-8]: 552 553 564 563 673 674 685 684 
+		elementNodeTbl[463][0-8]: 553 554 565 564 674 675 686 685 
+		elementNodeTbl[464][0-8]: 554 555 566 565 675 676 687 686 
+		elementNodeTbl[465][0-8]: 555 556 567 566 676 677 688 687 
+		elementNodeTbl[466][0-8]: 556 557 568 567 677 678 689 688 
+		elementNodeTbl[467][0-8]: 557 558 569 568 678 679 690 689 
+		elementNodeTbl[468][0-8]: 558 559 570 569 679 680 691 690 
+		elementNodeTbl[469][0-8]: 559 560 571 570 680 681 692 691 
+		elementNodeTbl[470][0-8]: 561 562 573 572 682 683 694 693 
+		elementNodeTbl[471][0-8]: 562 563 574 573 683 684 695 694 
+		elementNodeTbl[472][0-8]: 563 564 575 574 684 685 696 695 
+		elementNodeTbl[473][0-8]: 564 565 576 575 685 686 697 696 
+		elementNodeTbl[474][0-8]: 565 566 577 576 686 687 698 697 
+		elementNodeTbl[475][0-8]: 566 567 578 577 687 688 699 698 
+		elementNodeTbl[476][0-8]: 567 568 579 578 688 689 700 699 
+		elementNodeTbl[477][0-8]: 568 569 580 579 689 690 701 700 
+		elementNodeTbl[478][0-8]: 569 570 581 580 690 691 702 701 
+		elementNodeTbl[479][0-8]: 570 571 582 581 691 692 703 702 
+		elementNodeTbl[480][0-8]: 572 573 584 583 693 694 705 704 
+		elementNodeTbl[481][0-8]: 573 574 585 584 694 695 706 705 
+		elementNodeTbl[482][0-8]: 574 575 586 585 695 696 707 706 
+		elementNodeTbl[483][0-8]: 575 576 587 586 696 697 708 707 
+		elementNodeTbl[484][0-8]: 576 577 588 587 697 698 709 708 
+		elementNodeTbl[485][0-8]: 577 578 589 588 698 699 710 709 
+		elementNodeTbl[486][0-8]: 578 579 590 589 699 700 711 710 
+		elementNodeTbl[487][0-8]: 579 580 591 590 700 701 712 711 
+		elementNodeTbl[488][0-8]: 580 581 592 591 701 702 713 712 
+		elementNodeTbl[489][0-8]: 581 582 593 592 702 703 714 713 
+		elementNodeTbl[490][0-8]: 583 584 595 594 704 705 716 715 
+		elementNodeTbl[491][0-8]: 584 585 596 595 705 706 717 716 
+		elementNodeTbl[492][0-8]: 585 586 597 596 706 707 718 717 
+		elementNodeTbl[493][0-8]: 586 587 598 597 707 708 719 718 
+		elementNodeTbl[494][0-8]: 587 588 599 598 708 709 720 719 
+		elementNodeTbl[495][0-8]: 588 589 600 599 709 710 721 720 
+		elementNodeTbl[496][0-8]: 589 590 601 600 710 711 722 721 
+		elementNodeTbl[497][0-8]: 590 591 602 601 711 712 723 722 
+		elementNodeTbl[498][0-8]: 591 592 603 602 712 713 724 723 
+		elementNodeTbl[499][0-8]: 592 593 604 603 713 714 725 724 
+		elementNodeTbl[500][0-8]: 605 606 617 616 726 727 738 737 
+		elementNodeTbl[501][0-8]: 606 607 618 617 727 728 739 738 
+		elementNodeTbl[502][0-8]: 607 608 619 618 728 729 740 739 
+		elementNodeTbl[503][0-8]: 608 609 620 619 729 730 741 740 
+		elementNodeTbl[504][0-8]: 609 610 621 620 730 731 742 741 
+		elementNodeTbl[505][0-8]: 610 611 622 621 731 732 743 742 
+		elementNodeTbl[506][0-8]: 611 612 623 622 732 733 744 743 
+		elementNodeTbl[507][0-8]: 612 613 624 623 733 734 745 744 
+		elementNodeTbl[508][0-8]: 613 614 625 624 734 735 746 745 
+		elementNodeTbl[509][0-8]: 614 615 626 625 735 736 747 746 
+		elementNodeTbl[510][0-8]: 616 617 628 627 737 738 749 748 
+		elementNodeTbl[511][0-8]: 617 618 629 628 738 739 750 749 
+		elementNodeTbl[512][0-8]: 618 619 630 629 739 740 751 750 
+		elementNodeTbl[513][0-8]: 619 620 631 630 740 741 752 751 
+		elementNodeTbl[514][0-8]: 620 621 632 631 741 742 753 752 
+		elementNodeTbl[515][0-8]: 621 622 633 632 742 743 754 753 
+		elementNodeTbl[516][0-8]: 622 623 634 633 743 744 755 754 
+		elementNodeTbl[517][0-8]: 623 624 635 634 744 745 756 755 
+		elementNodeTbl[518][0-8]: 624 625 636 635 745 746 757 756 
+		elementNodeTbl[519][0-8]: 625 626 637 636 746 747 758 757 
+		elementNodeTbl[520][0-8]: 627 628 639 638 748 749 760 759 
+		elementNodeTbl[521][0-8]: 628 629 640 639 749 750 761 760 
+		elementNodeTbl[522][0-8]: 629 630 641 640 750 751 762 761 
+		elementNodeTbl[523][0-8]: 630 631 642 641 751 752 763 762 
+		elementNodeTbl[524][0-8]: 631 632 643 642 752 753 764 763 
+		elementNodeTbl[525][0-8]: 632 633 644 643 753 754 765 764 
+		elementNodeTbl[526][0-8]: 633 634 645 644 754 755 766 765 
+		elementNodeTbl[527][0-8]: 634 635 646 645 755 756 767 766 
+		elementNodeTbl[528][0-8]: 635 636 647 646 756 757 768 767 
+		elementNodeTbl[529][0-8]: 636 637 648 647 757 758 769 768 
+		elementNodeTbl[530][0-8]: 638 639 650 649 759 760 771 770 
+		elementNodeTbl[531][0-8]: 639 640 651 650 760 761 772 771 
+		elementNodeTbl[532][0-8]: 640 641 652 651 761 762 773 772 
+		elementNodeTbl[533][0-8]: 641 642 653 652 762 763 774 773 
+		elementNodeTbl[534][0-8]: 642 643 654 653 763 764 775 774 
+		elementNodeTbl[535][0-8]: 643 644 655 654 764 765 776 775 
+		elementNodeTbl[536][0-8]: 644 645 656 655 765 766 777 776 
+		elementNodeTbl[537][0-8]: 645 646 657 656 766 767 778 777 
+		elementNodeTbl[538][0-8]: 646 647 658 657 767 768 779 778 
+		elementNodeTbl[539][0-8]: 647 648 659 658 768 769 780 779 
+		elementNodeTbl[540][0-8]: 649 650 661 660 770 771 782 781 
+		elementNodeTbl[541][0-8]: 650 651 662 661 771 772 783 782 
+		elementNodeTbl[542][0-8]: 651 652 663 662 772 773 784 783 
+		elementNodeTbl[543][0-8]: 652 653 664 663 773 774 785 784 
+		elementNodeTbl[544][0-8]: 653 654 665 664 774 775 786 785 
+		elementNodeTbl[545][0-8]: 654 655 666 665 775 776 787 786 
+		elementNodeTbl[546][0-8]: 655 656 667 666 776 777 788 787 
+		elementNodeTbl[547][0-8]: 656 657 668 667 777 778 789 788 
+		elementNodeTbl[548][0-8]: 657 658 669 668 778 779 790 789 
+		elementNodeTbl[549][0-8]: 658 659 670 669 779 780 791 790 
+		elementNodeTbl[550][0-8]: 660 661 672 671 781 782 793 792 
+		elementNodeTbl[551][0-8]: 661 662 673 672 782 783 794 793 
+		elementNodeTbl[552][0-8]: 662 663 674 673 783 784 795 794 
+		elementNodeTbl[553][0-8]: 663 664 675 674 784 785 796 795 
+		elementNodeTbl[554][0-8]: 664 665 676 675 785 786 797 796 
+		elementNodeTbl[555][0-8]: 665 666 677 676 786 787 798 797 
+		elementNodeTbl[556][0-8]: 666 667 678 677 787 788 799 798 
+		elementNodeTbl[557][0-8]: 667 668 679 678 788 789 800 799 
+		elementNodeTbl[558][0-8]: 668 669 680 679 789 790 801 800 
+		elementNodeTbl[559][0-8]: 669 670 681 680 790 791 802 801 
+		elementNodeTbl[560][0-8]: 671 672 683 682 792 793 804 803 
+		elementNodeTbl[561][0-8]: 672 673 684 683 793 794 805 804 
+		elementNodeTbl[562][0-8]: 673 674 685 684 794 795 806 805 
+		elementNodeTbl[563][0-8]: 674 675 686 685 795 796 807 806 
+		elementNodeTbl[564][0-8]: 675 676 687 686 796 797 808 807 
+		elementNodeTbl[565][0-8]: 676 677 688 687 797 798 809 808 
+		elementNodeTbl[566][0-8]: 677 678 689 688 798 799 810 809 
+		elementNodeTbl[567][0-8]: 678 679 690 689 799 800 811 810 
+		elementNodeTbl[568][0-8]: 679 680 691 690 800 801 812 811 
+		elementNodeTbl[569][0-8]: 680 681 692 691 801 802 813 812 
+		elementNodeTbl[570][0-8]: 682 683 694 693 803 804 815 814 
+		elementNodeTbl[571][0-8]: 683 684 695 694 804 805 816 815 
+		elementNodeTbl[572][0-8]: 684 685 696 695 805 806 817 816 
+		elementNodeTbl[573][0-8]: 685 686 697 696 806 807 818 817 
+		elementNodeTbl[574][0-8]: 686 687 698 697 807 808 819 818 
+		elementNodeTbl[575][0-8]: 687 688 699 698 808 809 820 819 
+		elementNodeTbl[576][0-8]: 688 689 700 699 809 810 821 820 
+		elementNodeTbl[577][0-8]: 689 690 701 700 810 811 822 821 
+		elementNodeTbl[578][0-8]: 690 691 702 701 811 812 823 822 
+		elementNodeTbl[579][0-8]: 691 692 703 702 812 813 824 823 
+		elementNodeTbl[580][0-8]: 693 694 705 704 814 815 826 825 
+		elementNodeTbl[581][0-8]: 694 695 706 705 815 816 827 826 
+		elementNodeTbl[582][0-8]: 695 696 707 706 816 817 828 827 
+		elementNodeTbl[583][0-8]: 696 697 708 707 817 818 829 828 
+		elementNodeTbl[584][0-8]: 697 698 709 708 818 819 830 829 
+		elementNodeTbl[585][0-8]: 698 699 710 709 819 820 831 830 
+		elementNodeTbl[586][0-8]: 699 700 711 710 820 821 832 831 
+		elementNodeTbl[587][0-8]: 700 701 712 711 821 822 833 832 
+		elementNodeTbl[588][0-8]: 701 702 713 712 822 823 834 833 
+		elementNodeTbl[589][0-8]: 702 703 714 713 823 824 835 834 
+		elementNodeTbl[590][0-8]: 704 705 716 715 825 826 837 836 
+		elementNodeTbl[591][0-8]: 705 706 717 716 826 827 838 837 
+		elementNodeTbl[592][0-8]: 706 707 718 717 827 828 839 838 
+		elementNodeTbl[593][0-8]: 707 708 719 718 828 829 840 839 
+		elementNodeTbl[594][0-8]: 708 709 720 719 829 830 841 840 
+		elementNodeTbl[595][0-8]: 709 710 721 720 830 831 842 841 
+		elementNodeTbl[596][0-8]: 710 711 722 721 831 832 843 842 
+		elementNodeTbl[597][0-8]: 711 712 723 722 832 833 844 843 
+		elementNodeTbl[598][0-8]: 712 713 724 723 833 834 845 844 
+		elementNodeTbl[599][0-8]: 713 714 725 724 834 835 846 845 
+		elementNodeTbl[600][0-8]: 726 727 738 737 847 848 859 858 
+		elementNodeTbl[601][0-8]: 727 728 739 738 848 849 860 859 
+		elementNodeTbl[602][0-8]: 728 729 740 739 849 850 861 860 
+		elementNodeTbl[603][0-8]: 729 730 741 740 850 851 862 861 
+		elementNodeTbl[604][0-8]: 730 731 742 741 851 852 863 862 
+		elementNodeTbl[605][0-8]: 731 732 743 742 852 853 864 863 
+		elementNodeTbl[606][0-8]: 732 733 744 743 853 854 865 864 
+		elementNodeTbl[607][0-8]: 733 734 745 744 854 855 866 865 
+		elementNodeTbl[608][0-8]: 734 735 746 745 855 856 867 866 
+		elementNodeTbl[609][0-8]: 735 736 747 746 856 857 868 867 
+		elementNodeTbl[610][0-8]: 737 738 749 748 858 859 870 869 
+		elementNodeTbl[611][0-8]: 738 739 750 749 859 860 871 870 
+		elementNodeTbl[612][0-8]: 739 740 751 750 860 861 872 871 
+		elementNodeTbl[613][0-8]: 740 741 752 751 861 862 873 872 
+		elementNodeTbl[614][0-8]: 741 742 753 752 862 863 874 873 
+		elementNodeTbl[615][0-8]: 742 743 754 753 863 864 875 874 
+		elementNodeTbl[616][0-8]: 743 744 755 754 864 865 876 875 
+		elementNodeTbl[617][0-8]: 744 745 756 755 865 866 877 876 
+		elementNodeTbl[618][0-8]: 745 746 757 756 866 867 878 877 
+		elementNodeTbl[619][0-8]: 746 747 758 757 867 868 879 878 
+		elementNodeTbl[620][0-8]: 748 749 760 759 869 870 881 880 
+		elementNodeTbl[621][0-8]: 749 750 761 760 870 871 882 881 
+		elementNodeTbl[622][0-8]: 750 751 762 761 871 872 883 882 
+		elementNodeTbl[623][0-8]: 751 752 763 762 872 873 884 883 
+		elementNodeTbl[624][0-8]: 752 753 764 763 873 874 885 884 
+		elementNodeTbl[625][0-8]: 753 754 765 764 874 875 886 885 
+		elementNodeTbl[626][0-8]: 754 755 766 765 875 876 887 886 
+		elementNodeTbl[627][0-8]: 755 756 767 766 876 877 888 887 
+		elementNodeTbl[628][0-8]: 756 757 768 767 877 878 889 888 
+		elementNodeTbl[629][0-8]: 757 758 769 768 878 879 890 889 
+		elementNodeTbl[630][0-8]: 759 760 771 770 880 881 892 891 
+		elementNodeTbl[631][0-8]: 760 761 772 771 881 882 893 892 
+		elementNodeTbl[632][0-8]: 761 762 773 772 882 883 894 893 
+		elementNodeTbl[633][0-8]: 762 763 774 773 883 884 895 894 
+		elementNodeTbl[634][0-8]: 763 764 775 774 884 885 896 895 
+		elementNodeTbl[635][0-8]: 764 765 776 775 885 886 897 896 
+		elementNodeTbl[636][0-8]: 765 766 777 776 886 887 898 897 
+		elementNodeTbl[637][0-8]: 766 767 778 777 887 888 899 898 
+		elementNodeTbl[638][0-8]: 767 768 779 778 888 889 900 899 
+		elementNodeTbl[639][0-8]: 768 769 780 779 889 890 901 900 
+		elementNodeTbl[640][0-8]: 770 771 782 781 891 892 903 902 
+		elementNodeTbl[641][0-8]: 771 772 783 782 892 893 904 903 
+		elementNodeTbl[642][0-8]: 772 773 784 783 893 894 905 904 
+		elementNodeTbl[643][0-8]: 773 774 785 784 894 895 906 905 
+		elementNodeTbl[644][0-8]: 774 775 786 785 895 896 907 906 
+		elementNodeTbl[645][0-8]: 775 776 787 786 896 897 908 907 
+		elementNodeTbl[646][0-8]: 776 777 788 787 897 898 909 908 
+		elementNodeTbl[647][0-8]: 777 778 789 788 898 899 910 909 
+		elementNodeTbl[648][0-8]: 778 779 790 789 899 900 911 910 
+		elementNodeTbl[649][0-8]: 779 780 791 790 900 901 912 911 
+		elementNodeTbl[650][0-8]: 781 782 793 792 902 903 914 913 
+		elementNodeTbl[651][0-8]: 782 783 794 793 903 904 915 914 
+		elementNodeTbl[652][0-8]: 783 784 795 794 904 905 916 915 
+		elementNodeTbl[653][0-8]: 784 785 796 795 905 906 917 916 
+		elementNodeTbl[654][0-8]: 785 786 797 796 906 907 918 917 
+		elementNodeTbl[655][0-8]: 786 787 798 797 907 908 919 918 
+		elementNodeTbl[656][0-8]: 787 788 799 798 908 909 920 919 
+		elementNodeTbl[657][0-8]: 788 789 800 799 909 910 921 920 
+		elementNodeTbl[658][0-8]: 789 790 801 800 910 911 922 921 
+		elementNodeTbl[659][0-8]: 790 791 802 801 911 912 923 922 
+		elementNodeTbl[660][0-8]: 792 793 804 803 913 914 925 924 
+		elementNodeTbl[661][0-8]: 793 794 805 804 914 915 926 925 
+		elementNodeTbl[662][0-8]: 794 795 806 805 915 916 927 926 
+		elementNodeTbl[663][0-8]: 795 796 807 806 916 917 928 927 
+		elementNodeTbl[664][0-8]: 796 797 808 807 917 918 929 928 
+		elementNodeTbl[665][0-8]: 797 798 809 808 918 919 930 929 
+		elementNodeTbl[666][0-8]: 798 799 810 809 919 920 931 930 
+		elementNodeTbl[667][0-8]: 799 800 811 810 920 921 932 931 
+		elementNodeTbl[668][0-8]: 800 801 812 811 921 922 933 932 
+		elementNodeTbl[669][0-8]: 801 802 813 812 922 923 934 933 
+		elementNodeTbl[670][0-8]: 803 804 815 814 924 925 936 935 
+		elementNodeTbl[671][0-8]: 804 805 816 815 925 926 937 936 
+		elementNodeTbl[672][0-8]: 805 806 817 816 926 927 938 937 
+		elementNodeTbl[673][0-8]: 806 807 818 817 927 928 939 938 
+		elementNodeTbl[674][0-8]: 807 808 819 818 928 929 940 939 
+		elementNodeTbl[675][0-8]: 808 809 820 819 929 930 941 940 
+		elementNodeTbl[676][0-8]: 809 810 821 820 930 931 942 941 
+		elementNodeTbl[677][0-8]: 810 811 822 821 931 932 943 942 
+		elementNodeTbl[678][0-8]: 811 812 823 822 932 933 944 943 
+		elementNodeTbl[679][0-8]: 812 813 824 823 933 934 945 944 
+		elementNodeTbl[680][0-8]: 814 815 826 825 935 936 947 946 
+		elementNodeTbl[681][0-8]: 815 816 827 826 936 937 948 947 
+		elementNodeTbl[682][0-8]: 816 817 828 827 937 938 949 948 
+		elementNodeTbl[683][0-8]: 817 818 829 828 938 939 950 949 
+		elementNodeTbl[684][0-8]: 818 819 830 829 939 940 951 950 
+		elementNodeTbl[685][0-8]: 819 820 831 830 940 941 952 951 
+		elementNodeTbl[686][0-8]: 820 821 832 831 941 942 953 952 
+		elementNodeTbl[687][0-8]: 821 822 833 832 942 943 954 953 
+		elementNodeTbl[688][0-8]: 822 823 834 833 943 944 955 954 
+		elementNodeTbl[689][0-8]: 823 824 835 834 944 945 956 955 
+		elementNodeTbl[690][0-8]: 825 826 837 836 946 947 958 957 
+		elementNodeTbl[691][0-8]: 826 827 838 837 947 948 959 958 
+		elementNodeTbl[692][0-8]: 827 828 839 838 948 949 960 959 
+		elementNodeTbl[693][0-8]: 828 829 840 839 949 950 961 960 
+		elementNodeTbl[694][0-8]: 829 830 841 840 950 951 962 961 
+		elementNodeTbl[695][0-8]: 830 831 842 841 951 952 963 962 
+		elementNodeTbl[696][0-8]: 831 832 843 842 952 953 964 963 
+		elementNodeTbl[697][0-8]: 832 833 844 843 953 954 965 964 
+		elementNodeTbl[698][0-8]: 833 834 845 844 954 955 966 965 
+		elementNodeTbl[699][0-8]: 834 835 846 845 955 956 967 966 
+		elementNodeTbl[700][0-8]: 847 848 859 858 968 969 980 979 
+		elementNodeTbl[701][0-8]: 848 849 860 859 969 970 981 980 
+		elementNodeTbl[702][0-8]: 849 850 861 860 970 971 982 981 
+		elementNodeTbl[703][0-8]: 850 851 862 861 971 972 983 982 
+		elementNodeTbl[704][0-8]: 851 852 863 862 972 973 984 983 
+		elementNodeTbl[705][0-8]: 852 853 864 863 973 974 985 984 
+		elementNodeTbl[706][0-8]: 853 854 865 864 974 975 986 985 
+		elementNodeTbl[707][0-8]: 854 855 866 865 975 976 987 986 
+		elementNodeTbl[708][0-8]: 855 856 867 866 976 977 988 987 
+		elementNodeTbl[709][0-8]: 856 857 868 867 977 978 989 988 
+		elementNodeTbl[710][0-8]: 858 859 870 869 979 980 991 990 
+		elementNodeTbl[711][0-8]: 859 860 871 870 980 981 992 991 
+		elementNodeTbl[712][0-8]: 860 861 872 871 981 982 993 992 
+		elementNodeTbl[713][0-8]: 861 862 873 872 982 983 994 993 
+		elementNodeTbl[714][0-8]: 862 863 874 873 983 984 995 994 
+		elementNodeTbl[715][0-8]: 863 864 875 874 984 985 996 995 
+		elementNodeTbl[716][0-8]: 864 865 876 875 985 986 997 996 
+		elementNodeTbl[717][0-8]: 865 866 877 876 986 987 998 997 
+		elementNodeTbl[718][0-8]: 866 867 878 877 987 988 999 998 
+		elementNodeTbl[719][0-8]: 867 868 879 878 988 989 1000 999 
+		elementNodeTbl[720][0-8]: 869 870 881 880 990 991 1002 1001 
+		elementNodeTbl[721][0-8]: 870 871 882 881 991 992 1003 1002 
+		elementNodeTbl[722][0-8]: 871 872 883 882 992 993 1004 1003 
+		elementNodeTbl[723][0-8]: 872 873 884 883 993 994 1005 1004 
+		elementNodeTbl[724][0-8]: 873 874 885 884 994 995 1006 1005 
+		elementNodeTbl[725][0-8]: 874 875 886 885 995 996 1007 1006 
+		elementNodeTbl[726][0-8]: 875 876 887 886 996 997 1008 1007 
+		elementNodeTbl[727][0-8]: 876 877 888 887 997 998 1009 1008 
+		elementNodeTbl[728][0-8]: 877 878 889 888 998 999 1010 1009 
+		elementNodeTbl[729][0-8]: 878 879 890 889 999 1000 1011 1010 
+		elementNodeTbl[730][0-8]: 880 881 892 891 1001 1002 1013 1012 
+		elementNodeTbl[731][0-8]: 881 882 893 892 1002 1003 1014 1013 
+		elementNodeTbl[732][0-8]: 882 883 894 893 1003 1004 1015 1014 
+		elementNodeTbl[733][0-8]: 883 884 895 894 1004 1005 1016 1015 
+		elementNodeTbl[734][0-8]: 884 885 896 895 1005 1006 1017 1016 
+		elementNodeTbl[735][0-8]: 885 886 897 896 1006 1007 1018 1017 
+		elementNodeTbl[736][0-8]: 886 887 898 897 1007 1008 1019 1018 
+		elementNodeTbl[737][0-8]: 887 888 899 898 1008 1009 1020 1019 
+		elementNodeTbl[738][0-8]: 888 889 900 899 1009 1010 1021 1020 
+		elementNodeTbl[739][0-8]: 889 890 901 900 1010 1011 1022 1021 
+		elementNodeTbl[740][0-8]: 891 892 903 902 1012 1013 1024 1023 
+		elementNodeTbl[741][0-8]: 892 893 904 903 1013 1014 1025 1024 
+		elementNodeTbl[742][0-8]: 893 894 905 904 1014 1015 1026 1025 
+		elementNodeTbl[743][0-8]: 894 895 906 905 1015 1016 1027 1026 
+		elementNodeTbl[744][0-8]: 895 896 907 906 1016 1017 1028 1027 
+		elementNodeTbl[745][0-8]: 896 897 908 907 1017 1018 1029 1028 
+		elementNodeTbl[746][0-8]: 897 898 909 908 1018 1019 1030 1029 
+		elementNodeTbl[747][0-8]: 898 899 910 909 1019 1020 1031 1030 
+		elementNodeTbl[748][0-8]: 899 900 911 910 1020 1021 1032 1031 
+		elementNodeTbl[749][0-8]: 900 901 912 911 1021 1022 1033 1032 
+		elementNodeTbl[750][0-8]: 902 903 914 913 1023 1024 1035 1034 
+		elementNodeTbl[751][0-8]: 903 904 915 914 1024 1025 1036 1035 
+		elementNodeTbl[752][0-8]: 904 905 916 915 1025 1026 1037 1036 
+		elementNodeTbl[753][0-8]: 905 906 917 916 1026 1027 1038 1037 
+		elementNodeTbl[754][0-8]: 906 907 918 917 1027 1028 1039 1038 
+		elementNodeTbl[755][0-8]: 907 908 919 918 1028 1029 1040 1039 
+		elementNodeTbl[756][0-8]: 908 909 920 919 1029 1030 1041 1040 
+		elementNodeTbl[757][0-8]: 909 910 921 920 1030 1031 1042 1041 
+		elementNodeTbl[758][0-8]: 910 911 922 921 1031 1032 1043 1042 
+		elementNodeTbl[759][0-8]: 911 912 923 922 1032 1033 1044 1043 
+		elementNodeTbl[760][0-8]: 913 914 925 924 1034 1035 1046 1045 
+		elementNodeTbl[761][0-8]: 914 915 926 925 1035 1036 1047 1046 
+		elementNodeTbl[762][0-8]: 915 916 927 926 1036 1037 1048 1047 
+		elementNodeTbl[763][0-8]: 916 917 928 927 1037 1038 1049 1048 
+		elementNodeTbl[764][0-8]: 917 918 929 928 1038 1039 1050 1049 
+		elementNodeTbl[765][0-8]: 918 919 930 929 1039 1040 1051 1050 
+		elementNodeTbl[766][0-8]: 919 920 931 930 1040 1041 1052 1051 
+		elementNodeTbl[767][0-8]: 920 921 932 931 1041 1042 1053 1052 
+		elementNodeTbl[768][0-8]: 921 922 933 932 1042 1043 1054 1053 
+		elementNodeTbl[769][0-8]: 922 923 934 933 1043 1044 1055 1054 
+		elementNodeTbl[770][0-8]: 924 925 936 935 1045 1046 1057 1056 
+		elementNodeTbl[771][0-8]: 925 926 937 936 1046 1047 1058 1057 
+		elementNodeTbl[772][0-8]: 926 927 938 937 1047 1048 1059 1058 
+		elementNodeTbl[773][0-8]: 927 928 939 938 1048 1049 1060 1059 
+		elementNodeTbl[774][0-8]: 928 929 940 939 1049 1050 1061 1060 
+		elementNodeTbl[775][0-8]: 929 930 941 940 1050 1051 1062 1061 
+		elementNodeTbl[776][0-8]: 930 931 942 941 1051 1052 1063 1062 
+		elementNodeTbl[777][0-8]: 931 932 943 942 1052 1053 1064 1063 
+		elementNodeTbl[778][0-8]: 932 933 944 943 1053 1054 1065 1064 
+		elementNodeTbl[779][0-8]: 933 934 945 944 1054 1055 1066 1065 
+		elementNodeTbl[780][0-8]: 935 936 947 946 1056 1057 1068 1067 
+		elementNodeTbl[781][0-8]: 936 937 948 947 1057 1058 1069 1068 
+		elementNodeTbl[782][0-8]: 937 938 949 948 1058 1059 1070 1069 
+		elementNodeTbl[783][0-8]: 938 939 950 949 1059 1060 1071 1070 
+		elementNodeTbl[784][0-8]: 939 940 951 950 1060 1061 1072 1071 
+		elementNodeTbl[785][0-8]: 940 941 952 951 1061 1062 1073 1072 
+		elementNodeTbl[786][0-8]: 941 942 953 952 1062 1063 1074 1073 
+		elementNodeTbl[787][0-8]: 942 943 954 953 1063 1064 1075 1074 
+		elementNodeTbl[788][0-8]: 943 944 955 954 1064 1065 1076 1075 
+		elementNodeTbl[789][0-8]: 944 945 956 955 1065 1066 1077 1076 
+		elementNodeTbl[790][0-8]: 946 947 958 957 1067 1068 1079 1078 
+		elementNodeTbl[791][0-8]: 947 948 959 958 1068 1069 1080 1079 
+		elementNodeTbl[792][0-8]: 948 949 960 959 1069 1070 1081 1080 
+		elementNodeTbl[793][0-8]: 949 950 961 960 1070 1071 1082 1081 
+		elementNodeTbl[794][0-8]: 950 951 962 961 1071 1072 1083 1082 
+		elementNodeTbl[795][0-8]: 951 952 963 962 1072 1073 1084 1083 
+		elementNodeTbl[796][0-8]: 952 953 964 963 1073 1074 1085 1084 
+		elementNodeTbl[797][0-8]: 953 954 965 964 1074 1075 1086 1085 
+		elementNodeTbl[798][0-8]: 954 955 966 965 1075 1076 1087 1086 
+		elementNodeTbl[799][0-8]: 955 956 967 966 1076 1077 1088 1087 
+		elementNodeTbl[800][0-8]: 968 969 980 979 1089 1090 1101 1100 
+		elementNodeTbl[801][0-8]: 969 970 981 980 1090 1091 1102 1101 
+		elementNodeTbl[802][0-8]: 970 971 982 981 1091 1092 1103 1102 
+		elementNodeTbl[803][0-8]: 971 972 983 982 1092 1093 1104 1103 
+		elementNodeTbl[804][0-8]: 972 973 984 983 1093 1094 1105 1104 
+		elementNodeTbl[805][0-8]: 973 974 985 984 1094 1095 1106 1105 
+		elementNodeTbl[806][0-8]: 974 975 986 985 1095 1096 1107 1106 
+		elementNodeTbl[807][0-8]: 975 976 987 986 1096 1097 1108 1107 
+		elementNodeTbl[808][0-8]: 976 977 988 987 1097 1098 1109 1108 
+		elementNodeTbl[809][0-8]: 977 978 989 988 1098 1099 1110 1109 
+		elementNodeTbl[810][0-8]: 979 980 991 990 1100 1101 1112 1111 
+		elementNodeTbl[811][0-8]: 980 981 992 991 1101 1102 1113 1112 
+		elementNodeTbl[812][0-8]: 981 982 993 992 1102 1103 1114 1113 
+		elementNodeTbl[813][0-8]: 982 983 994 993 1103 1104 1115 1114 
+		elementNodeTbl[814][0-8]: 983 984 995 994 1104 1105 1116 1115 
+		elementNodeTbl[815][0-8]: 984 985 996 995 1105 1106 1117 1116 
+		elementNodeTbl[816][0-8]: 985 986 997 996 1106 1107 1118 1117 
+		elementNodeTbl[817][0-8]: 986 987 998 997 1107 1108 1119 1118 
+		elementNodeTbl[818][0-8]: 987 988 999 998 1108 1109 1120 1119 
+		elementNodeTbl[819][0-8]: 988 989 1000 999 1109 1110 1121 1120 
+		elementNodeTbl[820][0-8]: 990 991 1002 1001 1111 1112 1123 1122 
+		elementNodeTbl[821][0-8]: 991 992 1003 1002 1112 1113 1124 1123 
+		elementNodeTbl[822][0-8]: 992 993 1004 1003 1113 1114 1125 1124 
+		elementNodeTbl[823][0-8]: 993 994 1005 1004 1114 1115 1126 1125 
+		elementNodeTbl[824][0-8]: 994 995 1006 1005 1115 1116 1127 1126 
+		elementNodeTbl[825][0-8]: 995 996 1007 1006 1116 1117 1128 1127 
+		elementNodeTbl[826][0-8]: 996 997 1008 1007 1117 1118 1129 1128 
+		elementNodeTbl[827][0-8]: 997 998 1009 1008 1118 1119 1130 1129 
+		elementNodeTbl[828][0-8]: 998 999 1010 1009 1119 1120 1131 1130 
+		elementNodeTbl[829][0-8]: 999 1000 1011 1010 1120 1121 1132 1131 
+		elementNodeTbl[830][0-8]: 1001 1002 1013 1012 1122 1123 1134 1133 
+		elementNodeTbl[831][0-8]: 1002 1003 1014 1013 1123 1124 1135 1134 
+		elementNodeTbl[832][0-8]: 1003 1004 1015 1014 1124 1125 1136 1135 
+		elementNodeTbl[833][0-8]: 1004 1005 1016 1015 1125 1126 1137 1136 
+		elementNodeTbl[834][0-8]: 1005 1006 1017 1016 1126 1127 1138 1137 
+		elementNodeTbl[835][0-8]: 1006 1007 1018 1017 1127 1128 1139 1138 
+		elementNodeTbl[836][0-8]: 1007 1008 1019 1018 1128 1129 1140 1139 
+		elementNodeTbl[837][0-8]: 1008 1009 1020 1019 1129 1130 1141 1140 
+		elementNodeTbl[838][0-8]: 1009 1010 1021 1020 1130 1131 1142 1141 
+		elementNodeTbl[839][0-8]: 1010 1011 1022 1021 1131 1132 1143 1142 
+		elementNodeTbl[840][0-8]: 1012 1013 1024 1023 1133 1134 1145 1144 
+		elementNodeTbl[841][0-8]: 1013 1014 1025 1024 1134 1135 1146 1145 
+		elementNodeTbl[842][0-8]: 1014 1015 1026 1025 1135 1136 1147 1146 
+		elementNodeTbl[843][0-8]: 1015 1016 1027 1026 1136 1137 1148 1147 
+		elementNodeTbl[844][0-8]: 1016 1017 1028 1027 1137 1138 1149 1148 
+		elementNodeTbl[845][0-8]: 1017 1018 1029 1028 1138 1139 1150 1149 
+		elementNodeTbl[846][0-8]: 1018 1019 1030 1029 1139 1140 1151 1150 
+		elementNodeTbl[847][0-8]: 1019 1020 1031 1030 1140 1141 1152 1151 
+		elementNodeTbl[848][0-8]: 1020 1021 1032 1031 1141 1142 1153 1152 
+		elementNodeTbl[849][0-8]: 1021 1022 1033 1032 1142 1143 1154 1153 
+		elementNodeTbl[850][0-8]: 1023 1024 1035 1034 1144 1145 1156 1155 
+		elementNodeTbl[851][0-8]: 1024 1025 1036 1035 1145 1146 1157 1156 
+		elementNodeTbl[852][0-8]: 1025 1026 1037 1036 1146 1147 1158 1157 
+		elementNodeTbl[853][0-8]: 1026 1027 1038 1037 1147 1148 1159 1158 
+		elementNodeTbl[854][0-8]: 1027 1028 1039 1038 1148 1149 1160 1159 
+		elementNodeTbl[855][0-8]: 1028 1029 1040 1039 1149 1150 1161 1160 
+		elementNodeTbl[856][0-8]: 1029 1030 1041 1040 1150 1151 1162 1161 
+		elementNodeTbl[857][0-8]: 1030 1031 1042 1041 1151 1152 1163 1162 
+		elementNodeTbl[858][0-8]: 1031 1032 1043 1042 1152 1153 1164 1163 
+		elementNodeTbl[859][0-8]: 1032 1033 1044 1043 1153 1154 1165 1164 
+		elementNodeTbl[860][0-8]: 1034 1035 1046 1045 1155 1156 1167 1166 
+		elementNodeTbl[861][0-8]: 1035 1036 1047 1046 1156 1157 1168 1167 
+		elementNodeTbl[862][0-8]: 1036 1037 1048 1047 1157 1158 1169 1168 
+		elementNodeTbl[863][0-8]: 1037 1038 1049 1048 1158 1159 1170 1169 
+		elementNodeTbl[864][0-8]: 1038 1039 1050 1049 1159 1160 1171 1170 
+		elementNodeTbl[865][0-8]: 1039 1040 1051 1050 1160 1161 1172 1171 
+		elementNodeTbl[866][0-8]: 1040 1041 1052 1051 1161 1162 1173 1172 
+		elementNodeTbl[867][0-8]: 1041 1042 1053 1052 1162 1163 1174 1173 
+		elementNodeTbl[868][0-8]: 1042 1043 1054 1053 1163 1164 1175 1174 
+		elementNodeTbl[869][0-8]: 1043 1044 1055 1054 1164 1165 1176 1175 
+		elementNodeTbl[870][0-8]: 1045 1046 1057 1056 1166 1167 1178 1177 
+		elementNodeTbl[871][0-8]: 1046 1047 1058 1057 1167 1168 1179 1178 
+		elementNodeTbl[872][0-8]: 1047 1048 1059 1058 1168 1169 1180 1179 
+		elementNodeTbl[873][0-8]: 1048 1049 1060 1059 1169 1170 1181 1180 
+		elementNodeTbl[874][0-8]: 1049 1050 1061 1060 1170 1171 1182 1181 
+		elementNodeTbl[875][0-8]: 1050 1051 1062 1061 1171 1172 1183 1182 
+		elementNodeTbl[876][0-8]: 1051 1052 1063 1062 1172 1173 1184 1183 
+		elementNodeTbl[877][0-8]: 1052 1053 1064 1063 1173 1174 1185 1184 
+		elementNodeTbl[878][0-8]: 1053 1054 1065 1064 1174 1175 1186 1185 
+		elementNodeTbl[879][0-8]: 1054 1055 1066 1065 1175 1176 1187 1186 
+		elementNodeTbl[880][0-8]: 1056 1057 1068 1067 1177 1178 1189 1188 
+		elementNodeTbl[881][0-8]: 1057 1058 1069 1068 1178 1179 1190 1189 
+		elementNodeTbl[882][0-8]: 1058 1059 1070 1069 1179 1180 1191 1190 
+		elementNodeTbl[883][0-8]: 1059 1060 1071 1070 1180 1181 1192 1191 
+		elementNodeTbl[884][0-8]: 1060 1061 1072 1071 1181 1182 1193 1192 
+		elementNodeTbl[885][0-8]: 1061 1062 1073 1072 1182 1183 1194 1193 
+		elementNodeTbl[886][0-8]: 1062 1063 1074 1073 1183 1184 1195 1194 
+		elementNodeTbl[887][0-8]: 1063 1064 1075 1074 1184 1185 1196 1195 
+		elementNodeTbl[888][0-8]: 1064 1065 1076 1075 1185 1186 1197 1196 
+		elementNodeTbl[889][0-8]: 1065 1066 1077 1076 1186 1187 1198 1197 
+		elementNodeTbl[890][0-8]: 1067 1068 1079 1078 1188 1189 1200 1199 
+		elementNodeTbl[891][0-8]: 1068 1069 1080 1079 1189 1190 1201 1200 
+		elementNodeTbl[892][0-8]: 1069 1070 1081 1080 1190 1191 1202 1201 
+		elementNodeTbl[893][0-8]: 1070 1071 1082 1081 1191 1192 1203 1202 
+		elementNodeTbl[894][0-8]: 1071 1072 1083 1082 1192 1193 1204 1203 
+		elementNodeTbl[895][0-8]: 1072 1073 1084 1083 1193 1194 1205 1204 
+		elementNodeTbl[896][0-8]: 1073 1074 1085 1084 1194 1195 1206 1205 
+		elementNodeTbl[897][0-8]: 1074 1075 1086 1085 1195 1196 1207 1206 
+		elementNodeTbl[898][0-8]: 1075 1076 1087 1086 1196 1197 1208 1207 
+		elementNodeTbl[899][0-8]: 1076 1077 1088 1087 1197 1198 1209 1208 
+		elementNodeTbl[900][0-8]: 1089 1090 1101 1100 1210 1211 1222 1221 
+		elementNodeTbl[901][0-8]: 1090 1091 1102 1101 1211 1212 1223 1222 
+		elementNodeTbl[902][0-8]: 1091 1092 1103 1102 1212 1213 1224 1223 
+		elementNodeTbl[903][0-8]: 1092 1093 1104 1103 1213 1214 1225 1224 
+		elementNodeTbl[904][0-8]: 1093 1094 1105 1104 1214 1215 1226 1225 
+		elementNodeTbl[905][0-8]: 1094 1095 1106 1105 1215 1216 1227 1226 
+		elementNodeTbl[906][0-8]: 1095 1096 1107 1106 1216 1217 1228 1227 
+		elementNodeTbl[907][0-8]: 1096 1097 1108 1107 1217 1218 1229 1228 
+		elementNodeTbl[908][0-8]: 1097 1098 1109 1108 1218 1219 1230 1229 
+		elementNodeTbl[909][0-8]: 1098 1099 1110 1109 1219 1220 1231 1230 
+		elementNodeTbl[910][0-8]: 1100 1101 1112 1111 1221 1222 1233 1232 
+		elementNodeTbl[911][0-8]: 1101 1102 1113 1112 1222 1223 1234 1233 
+		elementNodeTbl[912][0-8]: 1102 1103 1114 1113 1223 1224 1235 1234 
+		elementNodeTbl[913][0-8]: 1103 1104 1115 1114 1224 1225 1236 1235 
+		elementNodeTbl[914][0-8]: 1104 1105 1116 1115 1225 1226 1237 1236 
+		elementNodeTbl[915][0-8]: 1105 1106 1117 1116 1226 1227 1238 1237 
+		elementNodeTbl[916][0-8]: 1106 1107 1118 1117 1227 1228 1239 1238 
+		elementNodeTbl[917][0-8]: 1107 1108 1119 1118 1228 1229 1240 1239 
+		elementNodeTbl[918][0-8]: 1108 1109 1120 1119 1229 1230 1241 1240 
+		elementNodeTbl[919][0-8]: 1109 1110 1121 1120 1230 1231 1242 1241 
+		elementNodeTbl[920][0-8]: 1111 1112 1123 1122 1232 1233 1244 1243 
+		elementNodeTbl[921][0-8]: 1112 1113 1124 1123 1233 1234 1245 1244 
+		elementNodeTbl[922][0-8]: 1113 1114 1125 1124 1234 1235 1246 1245 
+		elementNodeTbl[923][0-8]: 1114 1115 1126 1125 1235 1236 1247 1246 
+		elementNodeTbl[924][0-8]: 1115 1116 1127 1126 1236 1237 1248 1247 
+		elementNodeTbl[925][0-8]: 1116 1117 1128 1127 1237 1238 1249 1248 
+		elementNodeTbl[926][0-8]: 1117 1118 1129 1128 1238 1239 1250 1249 
+		elementNodeTbl[927][0-8]: 1118 1119 1130 1129 1239 1240 1251 1250 
+		elementNodeTbl[928][0-8]: 1119 1120 1131 1130 1240 1241 1252 1251 
+		elementNodeTbl[929][0-8]: 1120 1121 1132 1131 1241 1242 1253 1252 
+		elementNodeTbl[930][0-8]: 1122 1123 1134 1133 1243 1244 1255 1254 
+		elementNodeTbl[931][0-8]: 1123 1124 1135 1134 1244 1245 1256 1255 
+		elementNodeTbl[932][0-8]: 1124 1125 1136 1135 1245 1246 1257 1256 
+		elementNodeTbl[933][0-8]: 1125 1126 1137 1136 1246 1247 1258 1257 
+		elementNodeTbl[934][0-8]: 1126 1127 1138 1137 1247 1248 1259 1258 
+		elementNodeTbl[935][0-8]: 1127 1128 1139 1138 1248 1249 1260 1259 
+		elementNodeTbl[936][0-8]: 1128 1129 1140 1139 1249 1250 1261 1260 
+		elementNodeTbl[937][0-8]: 1129 1130 1141 1140 1250 1251 1262 1261 
+		elementNodeTbl[938][0-8]: 1130 1131 1142 1141 1251 1252 1263 1262 
+		elementNodeTbl[939][0-8]: 1131 1132 1143 1142 1252 1253 1264 1263 
+		elementNodeTbl[940][0-8]: 1133 1134 1145 1144 1254 1255 1266 1265 
+		elementNodeTbl[941][0-8]: 1134 1135 1146 1145 1255 1256 1267 1266 
+		elementNodeTbl[942][0-8]: 1135 1136 1147 1146 1256 1257 1268 1267 
+		elementNodeTbl[943][0-8]: 1136 1137 1148 1147 1257 1258 1269 1268 
+		elementNodeTbl[944][0-8]: 1137 1138 1149 1148 1258 1259 1270 1269 
+		elementNodeTbl[945][0-8]: 1138 1139 1150 1149 1259 1260 1271 1270 
+		elementNodeTbl[946][0-8]: 1139 1140 1151 1150 1260 1261 1272 1271 
+		elementNodeTbl[947][0-8]: 1140 1141 1152 1151 1261 1262 1273 1272 
+		elementNodeTbl[948][0-8]: 1141 1142 1153 1152 1262 1263 1274 1273 
+		elementNodeTbl[949][0-8]: 1142 1143 1154 1153 1263 1264 1275 1274 
+		elementNodeTbl[950][0-8]: 1144 1145 1156 1155 1265 1266 1277 1276 
+		elementNodeTbl[951][0-8]: 1145 1146 1157 1156 1266 1267 1278 1277 
+		elementNodeTbl[952][0-8]: 1146 1147 1158 1157 1267 1268 1279 1278 
+		elementNodeTbl[953][0-8]: 1147 1148 1159 1158 1268 1269 1280 1279 
+		elementNodeTbl[954][0-8]: 1148 1149 1160 1159 1269 1270 1281 1280 
+		elementNodeTbl[955][0-8]: 1149 1150 1161 1160 1270 1271 1282 1281 
+		elementNodeTbl[956][0-8]: 1150 1151 1162 1161 1271 1272 1283 1282 
+		elementNodeTbl[957][0-8]: 1151 1152 1163 1162 1272 1273 1284 1283 
+		elementNodeTbl[958][0-8]: 1152 1153 1164 1163 1273 1274 1285 1284 
+		elementNodeTbl[959][0-8]: 1153 1154 1165 1164 1274 1275 1286 1285 
+		elementNodeTbl[960][0-8]: 1155 1156 1167 1166 1276 1277 1288 1287 
+		elementNodeTbl[961][0-8]: 1156 1157 1168 1167 1277 1278 1289 1288 
+		elementNodeTbl[962][0-8]: 1157 1158 1169 1168 1278 1279 1290 1289 
+		elementNodeTbl[963][0-8]: 1158 1159 1170 1169 1279 1280 1291 1290 
+		elementNodeTbl[964][0-8]: 1159 1160 1171 1170 1280 1281 1292 1291 
+		elementNodeTbl[965][0-8]: 1160 1161 1172 1171 1281 1282 1293 1292 
+		elementNodeTbl[966][0-8]: 1161 1162 1173 1172 1282 1283 1294 1293 
+		elementNodeTbl[967][0-8]: 1162 1163 1174 1173 1283 1284 1295 1294 
+		elementNodeTbl[968][0-8]: 1163 1164 1175 1174 1284 1285 1296 1295 
+		elementNodeTbl[969][0-8]: 1164 1165 1176 1175 1285 1286 1297 1296 
+		elementNodeTbl[970][0-8]: 1166 1167 1178 1177 1287 1288 1299 1298 
+		elementNodeTbl[971][0-8]: 1167 1168 1179 1178 1288 1289 1300 1299 
+		elementNodeTbl[972][0-8]: 1168 1169 1180 1179 1289 1290 1301 1300 
+		elementNodeTbl[973][0-8]: 1169 1170 1181 1180 1290 1291 1302 1301 
+		elementNodeTbl[974][0-8]: 1170 1171 1182 1181 1291 1292 1303 1302 
+		elementNodeTbl[975][0-8]: 1171 1172 1183 1182 1292 1293 1304 1303 
+		elementNodeTbl[976][0-8]: 1172 1173 1184 1183 1293 1294 1305 1304 
+		elementNodeTbl[977][0-8]: 1173 1174 1185 1184 1294 1295 1306 1305 
+		elementNodeTbl[978][0-8]: 1174 1175 1186 1185 1295 1296 1307 1306 
+		elementNodeTbl[979][0-8]: 1175 1176 1187 1186 1296 1297 1308 1307 
+		elementNodeTbl[980][0-8]: 1177 1178 1189 1188 1298 1299 1310 1309 
+		elementNodeTbl[981][0-8]: 1178 1179 1190 1189 1299 1300 1311 1310 
+		elementNodeTbl[982][0-8]: 1179 1180 1191 1190 1300 1301 1312 1311 
+		elementNodeTbl[983][0-8]: 1180 1181 1192 1191 1301 1302 1313 1312 
+		elementNodeTbl[984][0-8]: 1181 1182 1193 1192 1302 1303 1314 1313 
+		elementNodeTbl[985][0-8]: 1182 1183 1194 1193 1303 1304 1315 1314 
+		elementNodeTbl[986][0-8]: 1183 1184 1195 1194 1304 1305 1316 1315 
+		elementNodeTbl[987][0-8]: 1184 1185 1196 1195 1305 1306 1317 1316 
+		elementNodeTbl[988][0-8]: 1185 1186 1197 1196 1306 1307 1318 1317 
+		elementNodeTbl[989][0-8]: 1186 1187 1198 1197 1307 1308 1319 1318 
+		elementNodeTbl[990][0-8]: 1188 1189 1200 1199 1309 1310 1321 1320 
+		elementNodeTbl[991][0-8]: 1189 1190 1201 1200 1310 1311 1322 1321 
+		elementNodeTbl[992][0-8]: 1190 1191 1202 1201 1311 1312 1323 1322 
+		elementNodeTbl[993][0-8]: 1191 1192 1203 1202 1312 1313 1324 1323 
+		elementNodeTbl[994][0-8]: 1192 1193 1204 1203 1313 1314 1325 1324 
+		elementNodeTbl[995][0-8]: 1193 1194 1205 1204 1314 1315 1326 1325 
+		elementNodeTbl[996][0-8]: 1194 1195 1206 1205 1315 1316 1327 1326 
+		elementNodeTbl[997][0-8]: 1195 1196 1207 1206 1316 1317 1328 1327 
+		elementNodeTbl[998][0-8]: 1196 1197 1208 1207 1317 1318 1329 1328 
+		elementNodeTbl[999][0-8]: 1197 1198 1209 1208 1318 1319 1330 1329 
+	procNbrCnt: 0
+	procNbrTbl (ptr): (nil)
+	elementShadowInfo->procShadowedCnt (ptr): (nil)
+	elementShadowInfo->procShadowedTbl (ptr): (nil)
+	elementShadowInfo->procShadowCnt (ptr): (nil)
+	elementShadowInfo->procShadowTbl (ptr): (nil)
+	nodeShadowInfo->procShadowedCnt (ptr): (nil)
+	nodeShadowInfo->procShadowedTbl (ptr): (nil)
+	nodeShadowInfo->procShadowCnt (ptr): (nil)
+	nodeShadowInfo->procShadowTbl (ptr): (nil)
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testMeshCoarsener_Hexa.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testMeshCoarsener_Hexa.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2643 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x80602d8)
+Stg_Component (ptr): 0x80602d8
+Stg_Object (ptr): 0x80602d8
+	Stg_Class (ptr): 0x80602d8
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7eca1dd
+		_print (func ptr): 0xb7ecaa6a
+		_copy (func ptr): 0xb7ecbc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ec951c
+	_construct (func ptr): 0xb7eca00e
+	_build (func ptr): 0xb7ecc322
+	_initialise (func ptr): 0xb7ecd214
+	_execute (func ptr): 0xb7ecd219
+	_destroy (func ptr): 0xb7eca1d8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Mesh-Construct
+	build function name: Mesh-Build
+	initialise function name: Mesh-Initialise
+	execute function name: Mesh-Execute
+	destroy function name: Mesh-Destroy
+	dictionary (ptr): 0x805c560
+	layout (ptr): 0x805ff90
+Extension (ptr):0x80606a8
+Stg_Object (ptr): 0x80606a8
+	Stg_Class (ptr): 0x80606a8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e42018
+		_print (func ptr): 0xb7e42066
+		_copy (func ptr): 0xb7e42200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x8060708
+Stg_ObjectList (ptr):0x8060708
+	Stg_Class (ptr): 0x8060708
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e73f3e
+		_print (func ptr): 0xb7e73f75
+		_copy (func ptr): 0xb7e74217
+	_append(func ptr): 0xb7e74e7b
+	_prepend(func ptr): 0xb7e74f41
+	_replaceAll(func ptr): 0xb7e75005
+	_replace(func ptr): 0xb7e750be
+	_insertBefore(func ptr): 0xb7e7525b
+	_insertAfter(func ptr): 0xb7e75416
+	_remove(func ptr): 0xb7e755d3
+	_getIndex(func ptr): 0xb7e75679
+	_get(func ptr): 0xb7e75727
+	_allocMoreMemory(func ptr): 0xb7e758fa
+	_insertAtIndex(func ptr): 0xb7e75980
+	_removeByIndex(func ptr): 0xb7e759fe
+	_deleteAllObjects(func ptr): 0xb7e7587b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+Extension (ptr):0x80607a8
+Stg_Object (ptr): 0x80607a8
+	Stg_Class (ptr): 0x80607a8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e42018
+		_print (func ptr): 0xb7e42066
+		_copy (func ptr): 0xb7e42200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x8060808
+Stg_ObjectList (ptr):0x8060808
+	Stg_Class (ptr): 0x8060808
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e73f3e
+		_print (func ptr): 0xb7e73f75
+		_copy (func ptr): 0xb7e74217
+	_append(func ptr): 0xb7e74e7b
+	_prepend(func ptr): 0xb7e74f41
+	_replaceAll(func ptr): 0xb7e75005
+	_replace(func ptr): 0xb7e750be
+	_insertBefore(func ptr): 0xb7e7525b
+	_insertAfter(func ptr): 0xb7e75416
+	_remove(func ptr): 0xb7e755d3
+	_getIndex(func ptr): 0xb7e75679
+	_get(func ptr): 0xb7e75727
+	_allocMoreMemory(func ptr): 0xb7e758fa
+	_insertAtIndex(func ptr): 0xb7e75980
+	_removeByIndex(func ptr): 0xb7e759fe
+	_deleteAllObjects(func ptr): 0xb7e7587b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+	node (ptr): 0x8061c00
+	nodeLocalCount: 726
+	nodeDomainCount: 726
+	nodeShadowCount: 0
+	nodeGlobalCount: 1331
+	nodeCoord (ptr): 0x80639a8
+	nodeCoord[0-726]:   (0.00,0.00,0.00), (0.10,0.00,0.00), (0.20,0.00,0.00), (0.30,0.00,0.00), (0.40,0.00,0.00), (0.50,0.00,0.00), (0.00,0.10,0.00), (0.10,0.10,0.00), (0.20,0.10,0.00), (0.30,0.10,0.00), (0.40,0.10,0.00), (0.50,0.10,0.00), (0.00,0.20,0.00), (0.10,0.20,0.00), (0.20,0.20,0.00), (0.30,0.20,0.00), (0.40,0.20,0.00), (0.50,0.20,0.00), (0.00,0.30,0.00), (0.10,0.30,0.00), (0.20,0.30,0.00), (0.30,0.30,0.00), (0.40,0.30,0.00), (0.50,0.30,0.00), (0.00,0.40,0.00), (0.10,0.40,0.00), (0.20,0.40,0.00), (0.30,0.40,0.00), (0.40,0.40,0.00), (0.50,0.40,0.00), (0.00,0.50,0.00), (0.10,0.50,0.00), (0.20,0.50,0.00), (0.30,0.50,0.00), (0.40,0.50,0.00), (0.50,0.50,0.00), (0.00,0.60,0.00), (0.10,0.60,0.00), (0.20,0.60,0.00), (0.30,0.60,0.00), (0.40,0.60,0.00), (0.50,0.60,0.00), (0.00,0.70,0.00), (0.10,0.70,0.00), (0.20,0.70,0.00), (0.30,0.70,0.00), (0.40,0.70,0.00), (0.50,0.70,0.00), (0.00,0.80,0.00), (0.10,0.80,0.00), (0.20,0.80,0.00), (0.30,0.80,0.00), (0.40,0.80,0.00), (0.50,0.80,0.00), (0.00,0.90,0.00), (0.10,0.90,0.00), (0.20,0.90,0.00), (0.30,0.90,0.00), (0.40,0.90,0.00), (0.50,0.90,0.00), (0.00,1.00,0.00), (0.10,1.00,0.00), (0.20,1.00,0.00), (0.30,1.00,0.00), (0.40,1.00,0.00), (0.50,1.00,0.00), (0.00,0.00,0.10), (0.10,0.00,0.10), (0.20,0.00,0.10), (0.30,0.00,0.10), (0.40,0.00,0.10), (0.50,0.00,0.10), (0.00,0.10,0.10), (0.10,0.10,0.10), (0.20,0.10,0.10), (0.30,0.10,0.10), (0.40,0.10,0.10), (0.50,0.10,0.10), (0.00,0.20,0.10), (0.10,0.20,0.10), (0.20,0.20,0.10), (0.30,0.20,0.10), (0.40,0.20,0.10), (0.50,0.20,0.10), (0.00,0.30,0.10), (0.10,0.30,0.10), (0.20,0.30,0.10), (0.30,0.30,0.10), (0.40,0.30,0.10), (0.50,0.30,0.10), (0.00,0.40,0.10), (0.10,0.40,0.10), (0.20,0.40,0.10), (0.30,0.40,0.10), (0.40,0.40,0.10), (0.50,0.40,0.10), (0.00,0.50,0.10), (0.10,0.50,0.10), (0.20,0.50,0.10), (0.30,0.50,0.10), (0.40,0.50,0.10), (0.50,0.50,0.10), (0.00,0.60,0.10), (0.10,0.60,0.10), (0.20,0.60,0.10), (0.30,0.60,0.10), (0.40,0.60,0.10), (0.50,0.60,0.10), (0.00,0.70,0.10), (0.10,0.70,0.10), (0.20,0.70,0.10), (0.30,0.70,0.10), (0.40,0.70,0.10), (0.50,0.70,0.10), (0.00,0.80,0.10), (0.10,0.80,0.10), (0.20,0.80,0.10), (0.30,0.80,0.10), (0.40,0.80,0.10), (0.50,0.80,0.10), (0.00,0.90,0.10), (0.10,0.90,0.10), (0.20,0.90,0.10), (0.30,0.90,0.10), (0.40,0.90,0.10), (0.50,0.90,0.10), (0.00,1.00,0.10), (0.10,1.00,0.10), (0.20,1.00,0.10), (0.30,1.00,0.10), (0.40,1.00,0.10), (0.50,1.00,0.10), (0.00,0.00,0.20), (0.10,0.00,0.20), (0.20,0.00,0.20), (0.30,0.00,0.20), (0.40,0.00,0.20), (0.50,0.00,0.20), (0.00,0.10,0.20), (0.10,0.10,0.20), (0.20,0.10,0.20), (0.30,0.10,0.20), (0.40,0.10,0.20), (0.50,0.10,0.20), (0.00,0.20,0.20), (0.10,0.20,0.20), (0.20,0.20,0.20), (0.30,0.20,0.20), (0.40,0.20,0.20), (0.50,0.20,0.20), (0.00,0.30,0.20), (0.10,0.30,0.20), (0.20,0.30,0.20), (0.30,0.30,0.20), (0.40,0.30,0.20), (0.50,0.30,0.20), (0.00,0.40,0.20), (0.10,0.40,0.20), (0.20,0.40,0.20), (0.30,0.40,0.20), (0.40,0.40,0.20), (0.50,0.40,0.20), (0.00,0.50,0.20), (0.10,0.50,0.20), (0.20,0.50,0.20), (0.30,0.50,0.20), (0.40,0.50,0.20), (0.50,0.50,0.20), (0.00,0.60,0.20), (0.10,0.60,0.20), (0.20,0.60,0.20), (0.30,0.60,0.20), (0.40,0.60,0.20), (0.50,0.60,0.20), (0.00,0.70,0.20), (0.10,0.70,0.20), (0.20,0.70,0.20), (0.30,0.70,0.20), (0.40,0.70,0.20), (0.50,0.70,0.20), (0.00,0.80,0.20), (0.10,0.80,0.20), (0.20,0.80,0.20), (0.30,0.80,0.20), (0.40,0.80,0.20), (0.50,0.80,0.20), (0.00,0.90,0.20), (0.10,0.90,0.20), (0.20,0.90,0.20), (0.30,0.90,0.20), (0.40,0.90,0.20), (0.50,0.90,0.20), (0.00,1.00,0.20), (0.10,1.00,0.20), (0.20,1.00,0.20), (0.30,1.00,0.20), (0.40,1.00,0.20), (0.50,1.00,0.20), (0.00,0.00,0.30), (0.10,0.00,0.30), (0.20,0.00,0.30), (0.30,0.00,0.30), (0.40,0.00,0.30), (0.50,0.00,0.30), (0.00,0.10,0.30), (0.10,0.10,0.30), (0.20,0.10,0.30), (0.30,0.10,0.30), (0.40,0.10,0.30), (0.50,0.10,0.30), (0.00,0.20,0.30), (0.10,0.20,0.30), (0.20,0.20,0.30), (0.30,0.20,0.30), (0.40,0.20,0.30), (0.50,0.20,0.30), (0.00,0.30,0.30), (0.10,0.30,0.30), (0.20,0.30,0.30), (0.30,0.30,0.30), (0.40,0.30,0.30), (0.50,0.30,0.30), (0.00,0.40,0.30), (0.10,0.40,0.30), (0.20,0.40,0.30), (0.30,0.40,0.30), (0.40,0.40,0.30), (0.50,0.40,0.30), (0.00,0.50,0.30), (0.10,0.50,0.30), (0.20,0.50,0.30), (0.30,0.50,0.30), (0.40,0.50,0.30), (0.50,0.50,0.30), (0.00,0.60,0.30), (0.10,0.60,0.30), (0.20,0.60,0.30), (0.30,0.60,0.30), (0.40,0.60,0.30), (0.50,0.60,0.30), (0.00,0.70,0.30), (0.10,0.70,0.30), (0.20,0.70,0.30), (0.30,0.70,0.30), (0.40,0.70,0.30), (0.50,0.70,0.30), (0.00,0.80,0.30), (0.10,0.80,0.30), (0.20,0.80,0.30), (0.30,0.80,0.30), (0.40,0.80,0.30), (0.50,0.80,0.30), (0.00,0.90,0.30), (0.10,0.90,0.30), (0.20,0.90,0.30), (0.30,0.90,0.30), (0.40,0.90,0.30), (0.50,0.90,0.30), (0.00,1.00,0.30), (0.10,1.00,0.30), (0.20,1.00,0.30), (0.30,1.00,0.30), (0.40,1.00,0.30), (0.50,1.00,0.30), (0.00,0.00,0.40), (0.10,0.00,0.40), (0.20,0.00,0.40), (0.30,0.00,0.40), (0.40,0.00,0.40), (0.50,0.00,0.40), (0.00,0.10,0.40), (0.10,0.10,0.40), (0.20,0.10,0.40), (0.30,0.10,0.40), (0.40,0.10,0.40), (0.50,0.10,0.40), (0.00,0.20,0.40), (0.10,0.20,0.40), (0.20,0.20,0.40), (0.30,0.20,0.40), (0.40,0.20,0.40), (0.50,0.20,0.40), (0.00,0.30,0.40), (0.10,0.30,0.40), (0.20,0.30,0.40), (0.30,0.30,0.40), (0.40,0.30,0.40), (0.50,0.30,0.40), (0.00,0.40,0.40), (0.10,0.40,0.40), (0.20,0.40,0.40), (0.30,0.40,0.40), (0.40,0.40,0.40), (0.50,0.40,0.40), (0.00,0.50,0.40), (0.10,0.50,0.40), (0.20,0.50,0.40), (0.30,0.50,0.40), (0.40,0.50,0.40), (0.50,0.50,0.40), (0.00,0.60,0.40), (0.10,0.60,0.40), (0.20,0.60,0.40), (0.30,0.60,0.40), (0.40,0.60,0.40), (0.50,0.60,0.40), (0.00,0.70,0.40), (0.10,0.70,0.40), (0.20,0.70,0.40), (0.30,0.70,0.40), (0.40,0.70,0.40), (0.50,0.70,0.40), (0.00,0.80,0.40), (0.10,0.80,0.40), (0.20,0.80,0.40), (0.30,0.80,0.40), (0.40,0.80,0.40), (0.50,0.80,0.40), (0.00,0.90,0.40), (0.10,0.90,0.40), (0.20,0.90,0.40), (0.30,0.90,0.40), (0.40,0.90,0.40), (0.50,0.90,0.40), (0.00,1.00,0.40), (0.10,1.00,0.40), (0.20,1.00,0.40), (0.30,1.00,0.40), (0.40,1.00,0.40), (0.50,1.00,0.40), (0.00,0.00,0.50), (0.10,0.00,0.50), (0.20,0.00,0.50), (0.30,0.00,0.50), (0.40,0.00,0.50), (0.50,0.00,0.50), (0.00,0.10,0.50), (0.10,0.10,0.50), (0.20,0.10,0.50), (0.30,0.10,0.50), (0.40,0.10,0.50), (0.50,0.10,0.50), (0.00,0.20,0.50), (0.10,0.20,0.50), (0.20,0.20,0.50), (0.30,0.20,0.50), (0.40,0.20,0.50), (0.50,0.20,0.50), (0.00,0.30,0.50), (0.10,0.30,0.50), (0.20,0.30,0.50), (0.30,0.30,0.50), (0.40,0.30,0.50), (0.50,0.30,0.50), (0.00,0.40,0.50), (0.10,0.40,0.50), (0.20,0.40,0.50), (0.30,0.40,0.50), (0.40,0.40,0.50), (0.50,0.40,0.50), (0.00,0.50,0.50), (0.10,0.50,0.50), (0.20,0.50,0.50), (0.30,0.50,0.50), (0.40,0.50,0.50), (0.50,0.50,0.50), (0.00,0.60,0.50), (0.10,0.60,0.50), (0.20,0.60,0.50), (0.30,0.60,0.50), (0.40,0.60,0.50), (0.50,0.60,0.50), (0.00,0.70,0.50), (0.10,0.70,0.50), (0.20,0.70,0.50), (0.30,0.70,0.50), (0.40,0.70,0.50), (0.50,0.70,0.50), (0.00,0.80,0.50), (0.10,0.80,0.50), (0.20,0.80,0.50), (0.30,0.80,0.50), (0.40,0.80,0.50), (0.50,0.80,0.50), (0.00,0.90,0.50), (0.10,0.90,0.50), (0.20,0.90,0.50), (0.30,0.90,0.50), (0.40,0.90,0.50), (0.50,0.90,0.50), (0.00,1.00,0.50), (0.10,1.00,0.50), (0.20,1.00,0.50), (0.30,1.00,0.50), (0.40,1.00,0.50), (0.50,1.00,0.50), (0.00,0.00,0.60), (0.10,0.00,0.60), (0.20,0.00,0.60), (0.30,0.00,0.60), (0.40,0.00,0.60), (0.50,0.00,0.60), (0.00,0.10,0.60), (0.10,0.10,0.60), (0.20,0.10,0.60), (0.30,0.10,0.60), (0.40,0.10,0.60), (0.50,0.10,0.60), (0.00,0.20,0.60), (0.10,0.20,0.60), (0.20,0.20,0.60), (0.30,0.20,0.60), (0.40,0.20,0.60), (0.50,0.20,0.60), (0.00,0.30,0.60), (0.10,0.30,0.60), (0.20,0.30,0.60), (0.30,0.30,0.60), (0.40,0.30,0.60), (0.50,0.30,0.60), (0.00,0.40,0.60), (0.10,0.40,0.60), (0.20,0.40,0.60), (0.30,0.40,0.60), (0.40,0.40,0.60), (0.50,0.40,0.60), (0.00,0.50,0.60), (0.10,0.50,0.60), (0.20,0.50,0.60), (0.30,0.50,0.60), (0.40,0.50,0.60), (0.50,0.50,0.60), (0.00,0.60,0.60), (0.10,0.60,0.60), (0.20,0.60,0.60), (0.30,0.60,0.60), (0.40,0.60,0.60), (0.50,0.60,0.60), (0.00,0.70,0.60), (0.10,0.70,0.60), (0.20,0.70,0.60), (0.30,0.70,0.60), (0.40,0.70,0.60), (0.50,0.70,0.60), (0.00,0.80,0.60), (0.10,0.80,0.60), (0.20,0.80,0.60), (0.30,0.80,0.60), (0.40,0.80,0.60), (0.50,0.80,0.60), (0.00,0.90,0.60), (0.10,0.90,0.60), (0.20,0.90,0.60), (0.30,0.90,0.60), (0.40,0.90,0.60), (0.50,0.90,0.60), (0.00,1.00,0.60), (0.10,1.00,0.60), (0.20,1.00,0.60), (0.30,1.00,0.60), (0.40,1.00,0.60), (0.50,1.00,0.60), (0.00,0.00,0.70), (0.10,0.00,0.70), (0.20,0.00,0.70), (0.30,0.00,0.70), (0.40,0.00,0.70), (0.50,0.00,0.70), (0.00,0.10,0.70), (0.10,0.10,0.70), (0.20,0.10,0.70), (0.30,0.10,0.70), (0.40,0.10,0.70), (0.50,0.10,0.70), (0.00,0.20,0.70), (0.10,0.20,0.70), (0.20,0.20,0.70), (0.30,0.20,0.70), (0.40,0.20,0.70), (0.50,0.20,0.70), (0.00,0.30,0.70), (0.10,0.30,0.70), (0.20,0.30,0.70), (0.30,0.30,0.70), (0.40,0.30,0.70), (0.50,0.30,0.70), (0.00,0.40,0.70), (0.10,0.40,0.70), (0.20,0.40,0.70), (0.30,0.40,0.70), (0.40,0.40,0.70), (0.50,0.40,0.70), (0.00,0.50,0.70), (0.10,0.50,0.70), (0.20,0.50,0.70), (0.30,0.50,0.70), (0.40,0.50,0.70), (0.50,0.50,0.70), (0.00,0.60,0.70), (0.10,0.60,0.70), (0.20,0.60,0.70), (0.30,0.60,0.70), (0.40,0.60,0.70), (0.50,0.60,0.70), (0.00,0.70,0.70), (0.10,0.70,0.70), (0.20,0.70,0.70), (0.30,0.70,0.70), (0.40,0.70,0.70), (0.50,0.70,0.70), (0.00,0.80,0.70), (0.10,0.80,0.70), (0.20,0.80,0.70), (0.30,0.80,0.70), (0.40,0.80,0.70), (0.50,0.80,0.70), (0.00,0.90,0.70), (0.10,0.90,0.70), (0.20,0.90,0.70), (0.30,0.90,0.70), (0.40,0.90,0.70), (0.50,0.90,0.70), (0.00,1.00,0.70), (0.10,1.00,0.70), (0.20,1.00,0.70), (0.30,1.00,0.70), (0.40,1.00,0.70), (0.50,1.00,0.70), (0.00,0.00,0.80), (0.10,0.00,0.80), (0.20,0.00,0.80), (0.30,0.00,0.80), (0.40,0.00,0.80), (0.50,0.00,0.80), (0.00,0.10,0.80), (0.10,0.10,0.80), (0.20,0.10,0.80), (0.30,0.10,0.80), (0.40,0.10,0.80), (0.50,0.10,0.80), (0.00,0.20,0.80), (0.10,0.20,0.80), (0.20,0.20,0.80), (0.30,0.20,0.80), (0.40,0.20,0.80), (0.50,0.20,0.80), (0.00,0.30,0.80), (0.10,0.30,0.80), (0.20,0.30,0.80), (0.30,0.30,0.80), (0.40,0.30,0.80), (0.50,0.30,0.80), (0.00,0.40,0.80), (0.10,0.40,0.80), (0.20,0.40,0.80), (0.30,0.40,0.80), (0.40,0.40,0.80), (0.50,0.40,0.80), (0.00,0.50,0.80), (0.10,0.50,0.80), (0.20,0.50,0.80), (0.30,0.50,0.80), (0.40,0.50,0.80), (0.50,0.50,0.80), (0.00,0.60,0.80), (0.10,0.60,0.80), (0.20,0.60,0.80), (0.30,0.60,0.80), (0.40,0.60,0.80), (0.50,0.60,0.80), (0.00,0.70,0.80), (0.10,0.70,0.80), (0.20,0.70,0.80), (0.30,0.70,0.80), (0.40,0.70,0.80), (0.50,0.70,0.80), (0.00,0.80,0.80), (0.10,0.80,0.80), (0.20,0.80,0.80), (0.30,0.80,0.80), (0.40,0.80,0.80), (0.50,0.80,0.80), (0.00,0.90,0.80), (0.10,0.90,0.80), (0.20,0.90,0.80), (0.30,0.90,0.80), (0.40,0.90,0.80), (0.50,0.90,0.80), (0.00,1.00,0.80), (0.10,1.00,0.80), (0.20,1.00,0.80), (0.30,1.00,0.80), (0.40,1.00,0.80), (0.50,1.00,0.80), (0.00,0.00,0.90), (0.10,0.00,0.90), (0.20,0.00,0.90), (0.30,0.00,0.90), (0.40,0.00,0.90), (0.50,0.00,0.90), (0.00,0.10,0.90), (0.10,0.10,0.90), (0.20,0.10,0.90), (0.30,0.10,0.90), (0.40,0.10,0.90), (0.50,0.10,0.90), (0.00,0.20,0.90), (0.10,0.20,0.90), (0.20,0.20,0.90), (0.30,0.20,0.90), (0.40,0.20,0.90), (0.50,0.20,0.90), (0.00,0.30,0.90), (0.10,0.30,0.90), (0.20,0.30,0.90), (0.30,0.30,0.90), (0.40,0.30,0.90), (0.50,0.30,0.90), (0.00,0.40,0.90), (0.10,0.40,0.90), (0.20,0.40,0.90), (0.30,0.40,0.90), (0.40,0.40,0.90), (0.50,0.40,0.90), (0.00,0.50,0.90), (0.10,0.50,0.90), (0.20,0.50,0.90), (0.30,0.50,0.90), (0.40,0.50,0.90), (0.50,0.50,0.90), (0.00,0.60,0.90), (0.10,0.60,0.90), (0.20,0.60,0.90), (0.30,0.60,0.90), (0.40,0.60,0.90), (0.50,0.60,0.90), (0.00,0.70,0.90), (0.10,0.70,0.90), (0.20,0.70,0.90), (0.30,0.70,0.90), (0.40,0.70,0.90), (0.50,0.70,0.90), (0.00,0.80,0.90), (0.10,0.80,0.90), (0.20,0.80,0.90), (0.30,0.80,0.90), (0.40,0.80,0.90), (0.50,0.80,0.90), (0.00,0.90,0.90), (0.10,0.90,0.90), (0.20,0.90,0.90), (0.30,0.90,0.90), (0.40,0.90,0.90), (0.50,0.90,0.90), (0.00,1.00,0.90), (0.10,1.00,0.90), (0.20,1.00,0.90), (0.30,1.00,0.90), (0.40,1.00,0.90), (0.50,1.00,0.90), (0.00,0.00,1.00), (0.10,0.00,1.00), (0.20,0.00,1.00), (0.30,0.00,1.00), (0.40,0.00,1.00), (0.50,0.00,1.00), (0.00,0.10,1.00), (0.10,0.10,1.00), (0.20,0.10,1.00), (0.30,0.10,1.00), (0.40,0.10,1.00), (0.50,0.10,1.00), (0.00,0.20,1.00), (0.10,0.20,1.00), (0.20,0.20,1.00), (0.30,0.20,1.00), (0.40,0.20,1.00), (0.50,0.20,1.00), (0.00,0.30,1.00), (0.10,0.30,1.00), (0.20,0.30,1.00), (0.30,0.30,1.00), (0.40,0.30,1.00), (0.50,0.30,1.00), (0.00,0.40,1.00), (0.10,0.40,1.00), (0.20,0.40,1.00), (0.30,0.40,1.00), (0.40,0.40,1.00), (0.50,0.40,1.00), (0.00,0.50,1.00), (0.10,0.50,1.00), (0.20,0.50,1.00), (0.30,0.50,1.00), (0.40,0.50,1.00), (0.50,0.50,1.00), (0.00,0.60,1.00), (0.10,0.60,1.00), (0.20,0.60,1.00), (0.30,0.60,1.00), (0.40,0.60,1.00), (0.50,0.60,1.00), (0.00,0.70,1.00), (0.10,0.70,1.00), (0.20,0.70,1.00), (0.30,0.70,1.00), (0.40,0.70,1.00), (0.50,0.70,1.00), (0.00,0.80,1.00), (0.10,0.80,1.00), (0.20,0.80,1.00), (0.30,0.80,1.00), (0.40,0.80,1.00), (0.50,0.80,1.00), (0.00,0.90,1.00), (0.10,0.90,1.00), (0.20,0.90,1.00), (0.30,0.90,1.00), (0.40,0.90,1.00), (0.50,0.90,1.00), (0.00,1.00,1.00), (0.10,1.00,1.00), (0.20,1.00,1.00), (0.30,1.00,1.00), (0.40,1.00,1.00), (0.50,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8067dc8
+	nodeL2G[0-726]:   000 001 002 003 004 005 011 012 013 014 015 016 022 023 024 025 026 027 033 034 035 036 037 038 044 045 046 047 048 049 055 056 057 058 059 060 066 067 068 069 070 071 077 078 079 080 081 082 088 089 090 091 092 093 099 100 101 102 103 104 110 111 112 113 114 115 121 122 123 124 125 126 132 133 134 135 136 137 143 144 145 146 147 148 154 155 156 157 158 159 165 166 167 168 169 170 176 177 178 179 180 181 187 188 189 190 191 192 198 199 200 201 202 203 209 210 211 212 213 214 220 221 222 223 224 225 231 232 233 234 235 236 242 243 244 245 246 247 253 254 255 256 257 258 264 265 266 267 268 269 275 276 277 278 279 280 286 287 288 289 290 291 297 298 299 300 301 302 308 309 310 311 312 313 319 320 321 322 323 324 330 331 332 333 334 335 341 342 343 344 345 346 352 353 354 355 356 357 363 364 365 366 367 368 374 375 376 377 378 379 385 386 387 388 389 390 396 397 398 399 400 401 407 408 409 410 411 412 418 419 420 421 422 423 429 430 431 432 433 434 440 441 442 443 444 445 451 452 453 454 455 456 462 463 464 465 466 467 473 474 475 476 477 478 484 485 486 487 488 489 495 496 497 498 499 500 506 507 508 509 510 511 517 518 519 520 521 522 528 529 530 531 532 533 539 540 541 542 543 544 550 551 552 553 554 555 561 562 563 564 565 566 572 573 574 575 576 577 583 584 585 586 587 588 594 595 596 597 598 599 605 606 607 608 609 610 616 617 618 619 620 621 627 628 629 630 631 632 638 639 640 641 642 643 649 650 651 652 653 654 660 661 662 663 664 665 671 672 673 674 675 676 682 683 684 685 686 687 693 694 695 696 697 698 704 705 706 707 708 709 715 716 717 718 719 720 726 727 728 729 730 731 737 738 739 740 741 742 748 749 750 751 752 753 759 760 761 762 763 764 770 771 772 773 774 775 781 782 783 784 785 786 792 793 794 795 796 797 803 804 805 806 807 808 814 815 816 817 818 819 825 826 827 828 829 830 836 837 838 839 840 841 847 848 849 850 851 852 858 859 860 861 862 863 869 870 871 872 873 874 880 881 882 883 884 885 891 892 893 894 895 896 902 903 904 905 906 907 913 914 915 916 917 918 924 925 926 927 928 929 935 936 937 938 939 940 946 947 948 949 950 951 957 958 959 960 961 962 968 969 970 971 972 973 979 980 981 982 983 984 990 991 992 993 994 995 1001 1002 1003 1004 1005 1006 1012 1013 1014 1015 1016 1017 1023 1024 1025 1026 1027 1028 1034 1035 1036 1037 1038 1039 1045 1046 1047 1048 1049 1050 1056 1057 1058 1059 1060 1061 1067 1068 1069 1070 1071 1072 1078 1079 1080 1081 1082 1083 1089 1090 1091 1092 1093 1094 1100 1101 1102 1103 1104 1105 1111 1112 1113 1114 1115 1116 1122 1123 1124 1125 1126 1127 1133 1134 1135 1136 1137 1138 1144 1145 1146 1147 1148 1149 1155 1156 1157 1158 1159 1160 1166 1167 1168 1169 1170 1171 1177 1178 1179 1180 1181 1182 1188 1189 1190 1191 1192 1193 1199 1200 1201 1202 1203 1204 1210 1211 1212 1213 1214 1215 1221 1222 1223 1224 1225 1226 1232 1233 1234 1235 1236 1237 1243 1244 1245 1246 1247 1248 1254 1255 1256 1257 1258 1259 1265 1266 1267 1268 1269 1270 1276 1277 1278 1279 1280 1281 1287 1288 1289 1290 1291 1292 1298 1299 1300 1301 1302 1303 1309 1310 1311 1312 1313 1314 1320 1321 1322 1323 1324 1325 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8067dc8
+	nodeD2G[0-726]:   000 001 002 003 004 005 011 012 013 014 015 016 022 023 024 025 026 027 033 034 035 036 037 038 044 045 046 047 048 049 055 056 057 058 059 060 066 067 068 069 070 071 077 078 079 080 081 082 088 089 090 091 092 093 099 100 101 102 103 104 110 111 112 113 114 115 121 122 123 124 125 126 132 133 134 135 136 137 143 144 145 146 147 148 154 155 156 157 158 159 165 166 167 168 169 170 176 177 178 179 180 181 187 188 189 190 191 192 198 199 200 201 202 203 209 210 211 212 213 214 220 221 222 223 224 225 231 232 233 234 235 236 242 243 244 245 246 247 253 254 255 256 257 258 264 265 266 267 268 269 275 276 277 278 279 280 286 287 288 289 290 291 297 298 299 300 301 302 308 309 310 311 312 313 319 320 321 322 323 324 330 331 332 333 334 335 341 342 343 344 345 346 352 353 354 355 356 357 363 364 365 366 367 368 374 375 376 377 378 379 385 386 387 388 389 390 396 397 398 399 400 401 407 408 409 410 411 412 418 419 420 421 422 423 429 430 431 432 433 434 440 441 442 443 444 445 451 452 453 454 455 456 462 463 464 465 466 467 473 474 475 476 477 478 484 485 486 487 488 489 495 496 497 498 499 500 506 507 508 509 510 511 517 518 519 520 521 522 528 529 530 531 532 533 539 540 541 542 543 544 550 551 552 553 554 555 561 562 563 564 565 566 572 573 574 575 576 577 583 584 585 586 587 588 594 595 596 597 598 599 605 606 607 608 609 610 616 617 618 619 620 621 627 628 629 630 631 632 638 639 640 641 642 643 649 650 651 652 653 654 660 661 662 663 664 665 671 672 673 674 675 676 682 683 684 685 686 687 693 694 695 696 697 698 704 705 706 707 708 709 715 716 717 718 719 720 726 727 728 729 730 731 737 738 739 740 741 742 748 749 750 751 752 753 759 760 761 762 763 764 770 771 772 773 774 775 781 782 783 784 785 786 792 793 794 795 796 797 803 804 805 806 807 808 814 815 816 817 818 819 825 826 827 828 829 830 836 837 838 839 840 841 847 848 849 850 851 852 858 859 860 861 862 863 869 870 871 872 873 874 880 881 882 883 884 885 891 892 893 894 895 896 902 903 904 905 906 907 913 914 915 916 917 918 924 925 926 927 928 929 935 936 937 938 939 940 946 947 948 949 950 951 957 958 959 960 961 962 968 969 970 971 972 973 979 980 981 982 983 984 990 991 992 993 994 995 1001 1002 1003 1004 1005 1006 1012 1013 1014 1015 1016 1017 1023 1024 1025 1026 1027 1028 1034 1035 1036 1037 1038 1039 1045 1046 1047 1048 1049 1050 1056 1057 1058 1059 1060 1061 1067 1068 1069 1070 1071 1072 1078 1079 1080 1081 1082 1083 1089 1090 1091 1092 1093 1094 1100 1101 1102 1103 1104 1105 1111 1112 1113 1114 1115 1116 1122 1123 1124 1125 1126 1127 1133 1134 1135 1136 1137 1138 1144 1145 1146 1147 1148 1149 1155 1156 1157 1158 1159 1160 1166 1167 1168 1169 1170 1171 1177 1178 1179 1180 1181 1182 1188 1189 1190 1191 1192 1193 1199 1200 1201 1202 1203 1204 1210 1211 1212 1213 1214 1215 1221 1222 1223 1224 1225 1226 1232 1233 1234 1235 1236 1237 1243 1244 1245 1246 1247 1248 1254 1255 1256 1257 1258 1259 1265 1266 1267 1268 1269 1270 1276 1277 1278 1279 1280 1281 1287 1288 1289 1290 1291 1292 1298 1299 1300 1301 1302 1303 1309 1310 1311 1312 1313 1314 1320 1321 1322 1323 1324 1325 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8068930
+	nodeG2L[0-1331]:   000 001 002 003 004 005 1331 1331 1331 1331 1331 006 007 008 009 010 011 1331 1331 1331 1331 1331 012 013 014 015 016 017 1331 1331 1331 1331 1331 018 019 020 021 022 023 1331 1331 1331 1331 1331 024 025 026 027 028 029 1331 1331 1331 1331 1331 030 031 032 033 034 035 1331 1331 1331 1331 1331 036 037 038 039 040 041 1331 1331 1331 1331 1331 042 043 044 045 046 047 1331 1331 1331 1331 1331 048 049 050 051 052 053 1331 1331 1331 1331 1331 054 055 056 057 058 059 1331 1331 1331 1331 1331 060 061 062 063 064 065 1331 1331 1331 1331 1331 066 067 068 069 070 071 1331 1331 1331 1331 1331 072 073 074 075 076 077 1331 1331 1331 1331 1331 078 079 080 081 082 083 1331 1331 1331 1331 1331 084 085 086 087 088 089 1331 1331 1331 1331 1331 090 091 092 093 094 095 1331 1331 1331 1331 1331 096 097 098 099 100 101 1331 1331 1331 1331 1331 102 103 104 105 106 107 1331 1331 1331 1331 1331 108 109 110 111 112 113 1331 1331 1331 1331 1331 114 115 116 117 118 119 1331 1331 1331 1331 1331 120 121 122 123 124 125 1331 1331 1331 1331 1331 126 127 128 129 130 131 1331 1331 1331 1331 1331 132 133 134 135 136 137 1331 1331 1331 1331 1331 138 139 140 141 142 143 1331 1331 1331 1331 1331 144 145 146 147 148 149 1331 1331 1331 1331 1331 150 151 152 153 154 155 1331 1331 1331 1331 1331 156 157 158 159 160 161 1331 1331 1331 1331 1331 162 163 164 165 166 167 1331 1331 1331 1331 1331 168 169 170 171 172 173 1331 1331 1331 1331 1331 174 175 176 177 178 179 1331 1331 1331 1331 1331 180 181 182 183 184 185 1331 1331 1331 1331 1331 186 187 188 189 190 191 1331 1331 1331 1331 1331 192 193 194 195 196 197 1331 1331 1331 1331 1331 198 199 200 201 202 203 1331 1331 1331 1331 1331 204 205 206 207 208 209 1331 1331 1331 1331 1331 210 211 212 213 214 215 1331 1331 1331 1331 1331 216 217 218 219 220 221 1331 1331 1331 1331 1331 222 223 224 225 226 227 1331 1331 1331 1331 1331 228 229 230 231 232 233 1331 1331 1331 1331 1331 234 235 236 237 238 239 1331 1331 1331 1331 1331 240 241 242 243 244 245 1331 1331 1331 1331 1331 246 247 248 249 250 251 1331 1331 1331 1331 1331 252 253 254 255 256 257 1331 1331 1331 1331 1331 258 259 260 261 262 263 1331 1331 1331 1331 1331 264 265 266 267 268 269 1331 1331 1331 1331 1331 270 271 272 273 274 275 1331 1331 1331 1331 1331 276 277 278 279 280 281 1331 1331 1331 1331 1331 282 283 284 285 286 287 1331 1331 1331 1331 1331 288 289 290 291 292 293 1331 1331 1331 1331 1331 294 295 296 297 298 299 1331 1331 1331 1331 1331 300 301 302 303 304 305 1331 1331 1331 1331 1331 306 307 308 309 310 311 1331 1331 1331 1331 1331 312 313 314 315 316 317 1331 1331 1331 1331 1331 318 319 320 321 322 323 1331 1331 1331 1331 1331 324 325 326 327 328 329 1331 1331 1331 1331 1331 330 331 332 333 334 335 1331 1331 1331 1331 1331 336 337 338 339 340 341 1331 1331 1331 1331 1331 342 343 344 345 346 347 1331 1331 1331 1331 1331 348 349 350 351 352 353 1331 1331 1331 1331 1331 354 355 356 357 358 359 1331 1331 1331 1331 1331 360 361 362 363 364 365 1331 1331 1331 1331 1331 366 367 368 369 370 371 1331 1331 1331 1331 1331 372 373 374 375 376 377 1331 1331 1331 1331 1331 378 379 380 381 382 383 1331 1331 1331 1331 1331 384 385 386 387 388 389 1331 1331 1331 1331 1331 390 391 392 393 394 395 1331 1331 1331 1331 1331 396 397 398 399 400 401 1331 1331 1331 1331 1331 402 403 404 405 406 407 1331 1331 1331 1331 1331 408 409 410 411 412 413 1331 1331 1331 1331 1331 414 415 416 417 418 419 1331 1331 1331 1331 1331 420 421 422 423 424 425 1331 1331 1331 1331 1331 426 427 428 429 430 431 1331 1331 1331 1331 1331 432 433 434 435 436 437 1331 1331 1331 1331 1331 438 439 440 441 442 443 1331 1331 1331 1331 1331 444 445 446 447 448 449 1331 1331 1331 1331 1331 450 451 452 453 454 455 1331 1331 1331 1331 1331 456 457 458 459 460 461 1331 1331 1331 1331 1331 462 463 464 465 466 467 1331 1331 1331 1331 1331 468 469 470 471 472 473 1331 1331 1331 1331 1331 474 475 476 477 478 479 1331 1331 1331 1331 1331 480 481 482 483 484 485 1331 1331 1331 1331 1331 486 487 488 489 490 491 1331 1331 1331 1331 1331 492 493 494 495 496 497 1331 1331 1331 1331 1331 498 499 500 501 502 503 1331 1331 1331 1331 1331 504 505 506 507 508 509 1331 1331 1331 1331 1331 510 511 512 513 514 515 1331 1331 1331 1331 1331 516 517 518 519 520 521 1331 1331 1331 1331 1331 522 523 524 525 526 527 1331 1331 1331 1331 1331 528 529 530 531 532 533 1331 1331 1331 1331 1331 534 535 536 537 538 539 1331 1331 1331 1331 1331 540 541 542 543 544 545 1331 1331 1331 1331 1331 546 547 548 549 550 551 1331 1331 1331 1331 1331 552 553 554 555 556 557 1331 1331 1331 1331 1331 558 559 560 561 562 563 1331 1331 1331 1331 1331 564 565 566 567 568 569 1331 1331 1331 1331 1331 570 571 572 573 574 575 1331 1331 1331 1331 1331 576 577 578 579 580 581 1331 1331 1331 1331 1331 582 583 584 585 586 587 1331 1331 1331 1331 1331 588 589 590 591 592 593 1331 1331 1331 1331 1331 594 595 596 597 598 599 1331 1331 1331 1331 1331 600 601 602 603 604 605 1331 1331 1331 1331 1331 606 607 608 609 610 611 1331 1331 1331 1331 1331 612 613 614 615 616 617 1331 1331 1331 1331 1331 618 619 620 621 622 623 1331 1331 1331 1331 1331 624 625 626 627 628 629 1331 1331 1331 1331 1331 630 631 632 633 634 635 1331 1331 1331 1331 1331 636 637 638 639 640 641 1331 1331 1331 1331 1331 642 643 644 645 646 647 1331 1331 1331 1331 1331 648 649 650 651 652 653 1331 1331 1331 1331 1331 654 655 656 657 658 659 1331 1331 1331 1331 1331 660 661 662 663 664 665 1331 1331 1331 1331 1331 666 667 668 669 670 671 1331 1331 1331 1331 1331 672 673 674 675 676 677 1331 1331 1331 1331 1331 678 679 680 681 682 683 1331 1331 1331 1331 1331 684 685 686 687 688 689 1331 1331 1331 1331 1331 690 691 692 693 694 695 1331 1331 1331 1331 1331 696 697 698 699 700 701 1331 1331 1331 1331 1331 702 703 704 705 706 707 1331 1331 1331 1331 1331 708 709 710 711 712 713 1331 1331 1331 1331 1331 714 715 716 717 718 719 1331 1331 1331 1331 1331 720 721 722 723 724 725 1331 1331 1331 1331 1331 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8068930
+	nodeG2D[0-1331]:   000 001 002 003 004 005 1331 1331 1331 1331 1331 006 007 008 009 010 011 1331 1331 1331 1331 1331 012 013 014 015 016 017 1331 1331 1331 1331 1331 018 019 020 021 022 023 1331 1331 1331 1331 1331 024 025 026 027 028 029 1331 1331 1331 1331 1331 030 031 032 033 034 035 1331 1331 1331 1331 1331 036 037 038 039 040 041 1331 1331 1331 1331 1331 042 043 044 045 046 047 1331 1331 1331 1331 1331 048 049 050 051 052 053 1331 1331 1331 1331 1331 054 055 056 057 058 059 1331 1331 1331 1331 1331 060 061 062 063 064 065 1331 1331 1331 1331 1331 066 067 068 069 070 071 1331 1331 1331 1331 1331 072 073 074 075 076 077 1331 1331 1331 1331 1331 078 079 080 081 082 083 1331 1331 1331 1331 1331 084 085 086 087 088 089 1331 1331 1331 1331 1331 090 091 092 093 094 095 1331 1331 1331 1331 1331 096 097 098 099 100 101 1331 1331 1331 1331 1331 102 103 104 105 106 107 1331 1331 1331 1331 1331 108 109 110 111 112 113 1331 1331 1331 1331 1331 114 115 116 117 118 119 1331 1331 1331 1331 1331 120 121 122 123 124 125 1331 1331 1331 1331 1331 126 127 128 129 130 131 1331 1331 1331 1331 1331 132 133 134 135 136 137 1331 1331 1331 1331 1331 138 139 140 141 142 143 1331 1331 1331 1331 1331 144 145 146 147 148 149 1331 1331 1331 1331 1331 150 151 152 153 154 155 1331 1331 1331 1331 1331 156 157 158 159 160 161 1331 1331 1331 1331 1331 162 163 164 165 166 167 1331 1331 1331 1331 1331 168 169 170 171 172 173 1331 1331 1331 1331 1331 174 175 176 177 178 179 1331 1331 1331 1331 1331 180 181 182 183 184 185 1331 1331 1331 1331 1331 186 187 188 189 190 191 1331 1331 1331 1331 1331 192 193 194 195 196 197 1331 1331 1331 1331 1331 198 199 200 201 202 203 1331 1331 1331 1331 1331 204 205 206 207 208 209 1331 1331 1331 1331 1331 210 211 212 213 214 215 1331 1331 1331 1331 1331 216 217 218 219 220 221 1331 1331 1331 1331 1331 222 223 224 225 226 227 1331 1331 1331 1331 1331 228 229 230 231 232 233 1331 1331 1331 1331 1331 234 235 236 237 238 239 1331 1331 1331 1331 1331 240 241 242 243 244 245 1331 1331 1331 1331 1331 246 247 248 249 250 251 1331 1331 1331 1331 1331 252 253 254 255 256 257 1331 1331 1331 1331 1331 258 259 260 261 262 263 1331 1331 1331 1331 1331 264 265 266 267 268 269 1331 1331 1331 1331 1331 270 271 272 273 274 275 1331 1331 1331 1331 1331 276 277 278 279 280 281 1331 1331 1331 1331 1331 282 283 284 285 286 287 1331 1331 1331 1331 1331 288 289 290 291 292 293 1331 1331 1331 1331 1331 294 295 296 297 298 299 1331 1331 1331 1331 1331 300 301 302 303 304 305 1331 1331 1331 1331 1331 306 307 308 309 310 311 1331 1331 1331 1331 1331 312 313 314 315 316 317 1331 1331 1331 1331 1331 318 319 320 321 322 323 1331 1331 1331 1331 1331 324 325 326 327 328 329 1331 1331 1331 1331 1331 330 331 332 333 334 335 1331 1331 1331 1331 1331 336 337 338 339 340 341 1331 1331 1331 1331 1331 342 343 344 345 346 347 1331 1331 1331 1331 1331 348 349 350 351 352 353 1331 1331 1331 1331 1331 354 355 356 357 358 359 1331 1331 1331 1331 1331 360 361 362 363 364 365 1331 1331 1331 1331 1331 366 367 368 369 370 371 1331 1331 1331 1331 1331 372 373 374 375 376 377 1331 1331 1331 1331 1331 378 379 380 381 382 383 1331 1331 1331 1331 1331 384 385 386 387 388 389 1331 1331 1331 1331 1331 390 391 392 393 394 395 1331 1331 1331 1331 1331 396 397 398 399 400 401 1331 1331 1331 1331 1331 402 403 404 405 406 407 1331 1331 1331 1331 1331 408 409 410 411 412 413 1331 1331 1331 1331 1331 414 415 416 417 418 419 1331 1331 1331 1331 1331 420 421 422 423 424 425 1331 1331 1331 1331 1331 426 427 428 429 430 431 1331 1331 1331 1331 1331 432 433 434 435 436 437 1331 1331 1331 1331 1331 438 439 440 441 442 443 1331 1331 1331 1331 1331 444 445 446 447 448 449 1331 1331 1331 1331 1331 450 451 452 453 454 455 1331 1331 1331 1331 1331 456 457 458 459 460 461 1331 1331 1331 1331 1331 462 463 464 465 466 467 1331 1331 1331 1331 1331 468 469 470 471 472 473 1331 1331 1331 1331 1331 474 475 476 477 478 479 1331 1331 1331 1331 1331 480 481 482 483 484 485 1331 1331 1331 1331 1331 486 487 488 489 490 491 1331 1331 1331 1331 1331 492 493 494 495 496 497 1331 1331 1331 1331 1331 498 499 500 501 502 503 1331 1331 1331 1331 1331 504 505 506 507 508 509 1331 1331 1331 1331 1331 510 511 512 513 514 515 1331 1331 1331 1331 1331 516 517 518 519 520 521 1331 1331 1331 1331 1331 522 523 524 525 526 527 1331 1331 1331 1331 1331 528 529 530 531 532 533 1331 1331 1331 1331 1331 534 535 536 537 538 539 1331 1331 1331 1331 1331 540 541 542 543 544 545 1331 1331 1331 1331 1331 546 547 548 549 550 551 1331 1331 1331 1331 1331 552 553 554 555 556 557 1331 1331 1331 1331 1331 558 559 560 561 562 563 1331 1331 1331 1331 1331 564 565 566 567 568 569 1331 1331 1331 1331 1331 570 571 572 573 574 575 1331 1331 1331 1331 1331 576 577 578 579 580 581 1331 1331 1331 1331 1331 582 583 584 585 586 587 1331 1331 1331 1331 1331 588 589 590 591 592 593 1331 1331 1331 1331 1331 594 595 596 597 598 599 1331 1331 1331 1331 1331 600 601 602 603 604 605 1331 1331 1331 1331 1331 606 607 608 609 610 611 1331 1331 1331 1331 1331 612 613 614 615 616 617 1331 1331 1331 1331 1331 618 619 620 621 622 623 1331 1331 1331 1331 1331 624 625 626 627 628 629 1331 1331 1331 1331 1331 630 631 632 633 634 635 1331 1331 1331 1331 1331 636 637 638 639 640 641 1331 1331 1331 1331 1331 642 643 644 645 646 647 1331 1331 1331 1331 1331 648 649 650 651 652 653 1331 1331 1331 1331 1331 654 655 656 657 658 659 1331 1331 1331 1331 1331 660 661 662 663 664 665 1331 1331 1331 1331 1331 666 667 668 669 670 671 1331 1331 1331 1331 1331 672 673 674 675 676 677 1331 1331 1331 1331 1331 678 679 680 681 682 683 1331 1331 1331 1331 1331 684 685 686 687 688 689 1331 1331 1331 1331 1331 690 691 692 693 694 695 1331 1331 1331 1331 1331 696 697 698 699 700 701 1331 1331 1331 1331 1331 702 703 704 705 706 707 1331 1331 1331 1331 1331 708 709 710 711 712 713 1331 1331 1331 1331 1331 714 715 716 717 718 719 1331 1331 1331 1331 1331 720 721 722 723 724 725 1331 1331 1331 1331 1331 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8069e08
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x806a970
+	nodeNeighbourTbl[0-726]:
+		nodeNeighbourTbl[0][0-6]: 001 006 066 1331 1331 1331 
+		nodeNeighbourTbl[1][0-6]: 002 007 067 000 1331 1331 
+		nodeNeighbourTbl[2][0-6]: 003 008 068 001 1331 1331 
+		nodeNeighbourTbl[3][0-6]: 004 009 069 002 1331 1331 
+		nodeNeighbourTbl[4][0-6]: 005 010 070 003 1331 1331 
+		nodeNeighbourTbl[5][0-6]: 1331 011 071 004 1331 1331 
+		nodeNeighbourTbl[6][0-6]: 007 012 072 1331 000 1331 
+		nodeNeighbourTbl[7][0-6]: 008 013 073 006 001 1331 
+		nodeNeighbourTbl[8][0-6]: 009 014 074 007 002 1331 
+		nodeNeighbourTbl[9][0-6]: 010 015 075 008 003 1331 
+		nodeNeighbourTbl[10][0-6]: 011 016 076 009 004 1331 
+		nodeNeighbourTbl[11][0-6]: 1331 017 077 010 005 1331 
+		nodeNeighbourTbl[12][0-6]: 013 018 078 1331 006 1331 
+		nodeNeighbourTbl[13][0-6]: 014 019 079 012 007 1331 
+		nodeNeighbourTbl[14][0-6]: 015 020 080 013 008 1331 
+		nodeNeighbourTbl[15][0-6]: 016 021 081 014 009 1331 
+		nodeNeighbourTbl[16][0-6]: 017 022 082 015 010 1331 
+		nodeNeighbourTbl[17][0-6]: 1331 023 083 016 011 1331 
+		nodeNeighbourTbl[18][0-6]: 019 024 084 1331 012 1331 
+		nodeNeighbourTbl[19][0-6]: 020 025 085 018 013 1331 
+		nodeNeighbourTbl[20][0-6]: 021 026 086 019 014 1331 
+		nodeNeighbourTbl[21][0-6]: 022 027 087 020 015 1331 
+		nodeNeighbourTbl[22][0-6]: 023 028 088 021 016 1331 
+		nodeNeighbourTbl[23][0-6]: 1331 029 089 022 017 1331 
+		nodeNeighbourTbl[24][0-6]: 025 030 090 1331 018 1331 
+		nodeNeighbourTbl[25][0-6]: 026 031 091 024 019 1331 
+		nodeNeighbourTbl[26][0-6]: 027 032 092 025 020 1331 
+		nodeNeighbourTbl[27][0-6]: 028 033 093 026 021 1331 
+		nodeNeighbourTbl[28][0-6]: 029 034 094 027 022 1331 
+		nodeNeighbourTbl[29][0-6]: 1331 035 095 028 023 1331 
+		nodeNeighbourTbl[30][0-6]: 031 036 096 1331 024 1331 
+		nodeNeighbourTbl[31][0-6]: 032 037 097 030 025 1331 
+		nodeNeighbourTbl[32][0-6]: 033 038 098 031 026 1331 
+		nodeNeighbourTbl[33][0-6]: 034 039 099 032 027 1331 
+		nodeNeighbourTbl[34][0-6]: 035 040 100 033 028 1331 
+		nodeNeighbourTbl[35][0-6]: 1331 041 101 034 029 1331 
+		nodeNeighbourTbl[36][0-6]: 037 042 102 1331 030 1331 
+		nodeNeighbourTbl[37][0-6]: 038 043 103 036 031 1331 
+		nodeNeighbourTbl[38][0-6]: 039 044 104 037 032 1331 
+		nodeNeighbourTbl[39][0-6]: 040 045 105 038 033 1331 
+		nodeNeighbourTbl[40][0-6]: 041 046 106 039 034 1331 
+		nodeNeighbourTbl[41][0-6]: 1331 047 107 040 035 1331 
+		nodeNeighbourTbl[42][0-6]: 043 048 108 1331 036 1331 
+		nodeNeighbourTbl[43][0-6]: 044 049 109 042 037 1331 
+		nodeNeighbourTbl[44][0-6]: 045 050 110 043 038 1331 
+		nodeNeighbourTbl[45][0-6]: 046 051 111 044 039 1331 
+		nodeNeighbourTbl[46][0-6]: 047 052 112 045 040 1331 
+		nodeNeighbourTbl[47][0-6]: 1331 053 113 046 041 1331 
+		nodeNeighbourTbl[48][0-6]: 049 054 114 1331 042 1331 
+		nodeNeighbourTbl[49][0-6]: 050 055 115 048 043 1331 
+		nodeNeighbourTbl[50][0-6]: 051 056 116 049 044 1331 
+		nodeNeighbourTbl[51][0-6]: 052 057 117 050 045 1331 
+		nodeNeighbourTbl[52][0-6]: 053 058 118 051 046 1331 
+		nodeNeighbourTbl[53][0-6]: 1331 059 119 052 047 1331 
+		nodeNeighbourTbl[54][0-6]: 055 060 120 1331 048 1331 
+		nodeNeighbourTbl[55][0-6]: 056 061 121 054 049 1331 
+		nodeNeighbourTbl[56][0-6]: 057 062 122 055 050 1331 
+		nodeNeighbourTbl[57][0-6]: 058 063 123 056 051 1331 
+		nodeNeighbourTbl[58][0-6]: 059 064 124 057 052 1331 
+		nodeNeighbourTbl[59][0-6]: 1331 065 125 058 053 1331 
+		nodeNeighbourTbl[60][0-6]: 061 1331 126 1331 054 1331 
+		nodeNeighbourTbl[61][0-6]: 062 1331 127 060 055 1331 
+		nodeNeighbourTbl[62][0-6]: 063 1331 128 061 056 1331 
+		nodeNeighbourTbl[63][0-6]: 064 1331 129 062 057 1331 
+		nodeNeighbourTbl[64][0-6]: 065 1331 130 063 058 1331 
+		nodeNeighbourTbl[65][0-6]: 1331 1331 131 064 059 1331 
+		nodeNeighbourTbl[66][0-6]: 067 072 132 1331 1331 000 
+		nodeNeighbourTbl[67][0-6]: 068 073 133 066 1331 001 
+		nodeNeighbourTbl[68][0-6]: 069 074 134 067 1331 002 
+		nodeNeighbourTbl[69][0-6]: 070 075 135 068 1331 003 
+		nodeNeighbourTbl[70][0-6]: 071 076 136 069 1331 004 
+		nodeNeighbourTbl[71][0-6]: 1331 077 137 070 1331 005 
+		nodeNeighbourTbl[72][0-6]: 073 078 138 1331 066 006 
+		nodeNeighbourTbl[73][0-6]: 074 079 139 072 067 007 
+		nodeNeighbourTbl[74][0-6]: 075 080 140 073 068 008 
+		nodeNeighbourTbl[75][0-6]: 076 081 141 074 069 009 
+		nodeNeighbourTbl[76][0-6]: 077 082 142 075 070 010 
+		nodeNeighbourTbl[77][0-6]: 1331 083 143 076 071 011 
+		nodeNeighbourTbl[78][0-6]: 079 084 144 1331 072 012 
+		nodeNeighbourTbl[79][0-6]: 080 085 145 078 073 013 
+		nodeNeighbourTbl[80][0-6]: 081 086 146 079 074 014 
+		nodeNeighbourTbl[81][0-6]: 082 087 147 080 075 015 
+		nodeNeighbourTbl[82][0-6]: 083 088 148 081 076 016 
+		nodeNeighbourTbl[83][0-6]: 1331 089 149 082 077 017 
+		nodeNeighbourTbl[84][0-6]: 085 090 150 1331 078 018 
+		nodeNeighbourTbl[85][0-6]: 086 091 151 084 079 019 
+		nodeNeighbourTbl[86][0-6]: 087 092 152 085 080 020 
+		nodeNeighbourTbl[87][0-6]: 088 093 153 086 081 021 
+		nodeNeighbourTbl[88][0-6]: 089 094 154 087 082 022 
+		nodeNeighbourTbl[89][0-6]: 1331 095 155 088 083 023 
+		nodeNeighbourTbl[90][0-6]: 091 096 156 1331 084 024 
+		nodeNeighbourTbl[91][0-6]: 092 097 157 090 085 025 
+		nodeNeighbourTbl[92][0-6]: 093 098 158 091 086 026 
+		nodeNeighbourTbl[93][0-6]: 094 099 159 092 087 027 
+		nodeNeighbourTbl[94][0-6]: 095 100 160 093 088 028 
+		nodeNeighbourTbl[95][0-6]: 1331 101 161 094 089 029 
+		nodeNeighbourTbl[96][0-6]: 097 102 162 1331 090 030 
+		nodeNeighbourTbl[97][0-6]: 098 103 163 096 091 031 
+		nodeNeighbourTbl[98][0-6]: 099 104 164 097 092 032 
+		nodeNeighbourTbl[99][0-6]: 100 105 165 098 093 033 
+		nodeNeighbourTbl[100][0-6]: 101 106 166 099 094 034 
+		nodeNeighbourTbl[101][0-6]: 1331 107 167 100 095 035 
+		nodeNeighbourTbl[102][0-6]: 103 108 168 1331 096 036 
+		nodeNeighbourTbl[103][0-6]: 104 109 169 102 097 037 
+		nodeNeighbourTbl[104][0-6]: 105 110 170 103 098 038 
+		nodeNeighbourTbl[105][0-6]: 106 111 171 104 099 039 
+		nodeNeighbourTbl[106][0-6]: 107 112 172 105 100 040 
+		nodeNeighbourTbl[107][0-6]: 1331 113 173 106 101 041 
+		nodeNeighbourTbl[108][0-6]: 109 114 174 1331 102 042 
+		nodeNeighbourTbl[109][0-6]: 110 115 175 108 103 043 
+		nodeNeighbourTbl[110][0-6]: 111 116 176 109 104 044 
+		nodeNeighbourTbl[111][0-6]: 112 117 177 110 105 045 
+		nodeNeighbourTbl[112][0-6]: 113 118 178 111 106 046 
+		nodeNeighbourTbl[113][0-6]: 1331 119 179 112 107 047 
+		nodeNeighbourTbl[114][0-6]: 115 120 180 1331 108 048 
+		nodeNeighbourTbl[115][0-6]: 116 121 181 114 109 049 
+		nodeNeighbourTbl[116][0-6]: 117 122 182 115 110 050 
+		nodeNeighbourTbl[117][0-6]: 118 123 183 116 111 051 
+		nodeNeighbourTbl[118][0-6]: 119 124 184 117 112 052 
+		nodeNeighbourTbl[119][0-6]: 1331 125 185 118 113 053 
+		nodeNeighbourTbl[120][0-6]: 121 126 186 1331 114 054 
+		nodeNeighbourTbl[121][0-6]: 122 127 187 120 115 055 
+		nodeNeighbourTbl[122][0-6]: 123 128 188 121 116 056 
+		nodeNeighbourTbl[123][0-6]: 124 129 189 122 117 057 
+		nodeNeighbourTbl[124][0-6]: 125 130 190 123 118 058 
+		nodeNeighbourTbl[125][0-6]: 1331 131 191 124 119 059 
+		nodeNeighbourTbl[126][0-6]: 127 1331 192 1331 120 060 
+		nodeNeighbourTbl[127][0-6]: 128 1331 193 126 121 061 
+		nodeNeighbourTbl[128][0-6]: 129 1331 194 127 122 062 
+		nodeNeighbourTbl[129][0-6]: 130 1331 195 128 123 063 
+		nodeNeighbourTbl[130][0-6]: 131 1331 196 129 124 064 
+		nodeNeighbourTbl[131][0-6]: 1331 1331 197 130 125 065 
+		nodeNeighbourTbl[132][0-6]: 133 138 198 1331 1331 066 
+		nodeNeighbourTbl[133][0-6]: 134 139 199 132 1331 067 
+		nodeNeighbourTbl[134][0-6]: 135 140 200 133 1331 068 
+		nodeNeighbourTbl[135][0-6]: 136 141 201 134 1331 069 
+		nodeNeighbourTbl[136][0-6]: 137 142 202 135 1331 070 
+		nodeNeighbourTbl[137][0-6]: 1331 143 203 136 1331 071 
+		nodeNeighbourTbl[138][0-6]: 139 144 204 1331 132 072 
+		nodeNeighbourTbl[139][0-6]: 140 145 205 138 133 073 
+		nodeNeighbourTbl[140][0-6]: 141 146 206 139 134 074 
+		nodeNeighbourTbl[141][0-6]: 142 147 207 140 135 075 
+		nodeNeighbourTbl[142][0-6]: 143 148 208 141 136 076 
+		nodeNeighbourTbl[143][0-6]: 1331 149 209 142 137 077 
+		nodeNeighbourTbl[144][0-6]: 145 150 210 1331 138 078 
+		nodeNeighbourTbl[145][0-6]: 146 151 211 144 139 079 
+		nodeNeighbourTbl[146][0-6]: 147 152 212 145 140 080 
+		nodeNeighbourTbl[147][0-6]: 148 153 213 146 141 081 
+		nodeNeighbourTbl[148][0-6]: 149 154 214 147 142 082 
+		nodeNeighbourTbl[149][0-6]: 1331 155 215 148 143 083 
+		nodeNeighbourTbl[150][0-6]: 151 156 216 1331 144 084 
+		nodeNeighbourTbl[151][0-6]: 152 157 217 150 145 085 
+		nodeNeighbourTbl[152][0-6]: 153 158 218 151 146 086 
+		nodeNeighbourTbl[153][0-6]: 154 159 219 152 147 087 
+		nodeNeighbourTbl[154][0-6]: 155 160 220 153 148 088 
+		nodeNeighbourTbl[155][0-6]: 1331 161 221 154 149 089 
+		nodeNeighbourTbl[156][0-6]: 157 162 222 1331 150 090 
+		nodeNeighbourTbl[157][0-6]: 158 163 223 156 151 091 
+		nodeNeighbourTbl[158][0-6]: 159 164 224 157 152 092 
+		nodeNeighbourTbl[159][0-6]: 160 165 225 158 153 093 
+		nodeNeighbourTbl[160][0-6]: 161 166 226 159 154 094 
+		nodeNeighbourTbl[161][0-6]: 1331 167 227 160 155 095 
+		nodeNeighbourTbl[162][0-6]: 163 168 228 1331 156 096 
+		nodeNeighbourTbl[163][0-6]: 164 169 229 162 157 097 
+		nodeNeighbourTbl[164][0-6]: 165 170 230 163 158 098 
+		nodeNeighbourTbl[165][0-6]: 166 171 231 164 159 099 
+		nodeNeighbourTbl[166][0-6]: 167 172 232 165 160 100 
+		nodeNeighbourTbl[167][0-6]: 1331 173 233 166 161 101 
+		nodeNeighbourTbl[168][0-6]: 169 174 234 1331 162 102 
+		nodeNeighbourTbl[169][0-6]: 170 175 235 168 163 103 
+		nodeNeighbourTbl[170][0-6]: 171 176 236 169 164 104 
+		nodeNeighbourTbl[171][0-6]: 172 177 237 170 165 105 
+		nodeNeighbourTbl[172][0-6]: 173 178 238 171 166 106 
+		nodeNeighbourTbl[173][0-6]: 1331 179 239 172 167 107 
+		nodeNeighbourTbl[174][0-6]: 175 180 240 1331 168 108 
+		nodeNeighbourTbl[175][0-6]: 176 181 241 174 169 109 
+		nodeNeighbourTbl[176][0-6]: 177 182 242 175 170 110 
+		nodeNeighbourTbl[177][0-6]: 178 183 243 176 171 111 
+		nodeNeighbourTbl[178][0-6]: 179 184 244 177 172 112 
+		nodeNeighbourTbl[179][0-6]: 1331 185 245 178 173 113 
+		nodeNeighbourTbl[180][0-6]: 181 186 246 1331 174 114 
+		nodeNeighbourTbl[181][0-6]: 182 187 247 180 175 115 
+		nodeNeighbourTbl[182][0-6]: 183 188 248 181 176 116 
+		nodeNeighbourTbl[183][0-6]: 184 189 249 182 177 117 
+		nodeNeighbourTbl[184][0-6]: 185 190 250 183 178 118 
+		nodeNeighbourTbl[185][0-6]: 1331 191 251 184 179 119 
+		nodeNeighbourTbl[186][0-6]: 187 192 252 1331 180 120 
+		nodeNeighbourTbl[187][0-6]: 188 193 253 186 181 121 
+		nodeNeighbourTbl[188][0-6]: 189 194 254 187 182 122 
+		nodeNeighbourTbl[189][0-6]: 190 195 255 188 183 123 
+		nodeNeighbourTbl[190][0-6]: 191 196 256 189 184 124 
+		nodeNeighbourTbl[191][0-6]: 1331 197 257 190 185 125 
+		nodeNeighbourTbl[192][0-6]: 193 1331 258 1331 186 126 
+		nodeNeighbourTbl[193][0-6]: 194 1331 259 192 187 127 
+		nodeNeighbourTbl[194][0-6]: 195 1331 260 193 188 128 
+		nodeNeighbourTbl[195][0-6]: 196 1331 261 194 189 129 
+		nodeNeighbourTbl[196][0-6]: 197 1331 262 195 190 130 
+		nodeNeighbourTbl[197][0-6]: 1331 1331 263 196 191 131 
+		nodeNeighbourTbl[198][0-6]: 199 204 264 1331 1331 132 
+		nodeNeighbourTbl[199][0-6]: 200 205 265 198 1331 133 
+		nodeNeighbourTbl[200][0-6]: 201 206 266 199 1331 134 
+		nodeNeighbourTbl[201][0-6]: 202 207 267 200 1331 135 
+		nodeNeighbourTbl[202][0-6]: 203 208 268 201 1331 136 
+		nodeNeighbourTbl[203][0-6]: 1331 209 269 202 1331 137 
+		nodeNeighbourTbl[204][0-6]: 205 210 270 1331 198 138 
+		nodeNeighbourTbl[205][0-6]: 206 211 271 204 199 139 
+		nodeNeighbourTbl[206][0-6]: 207 212 272 205 200 140 
+		nodeNeighbourTbl[207][0-6]: 208 213 273 206 201 141 
+		nodeNeighbourTbl[208][0-6]: 209 214 274 207 202 142 
+		nodeNeighbourTbl[209][0-6]: 1331 215 275 208 203 143 
+		nodeNeighbourTbl[210][0-6]: 211 216 276 1331 204 144 
+		nodeNeighbourTbl[211][0-6]: 212 217 277 210 205 145 
+		nodeNeighbourTbl[212][0-6]: 213 218 278 211 206 146 
+		nodeNeighbourTbl[213][0-6]: 214 219 279 212 207 147 
+		nodeNeighbourTbl[214][0-6]: 215 220 280 213 208 148 
+		nodeNeighbourTbl[215][0-6]: 1331 221 281 214 209 149 
+		nodeNeighbourTbl[216][0-6]: 217 222 282 1331 210 150 
+		nodeNeighbourTbl[217][0-6]: 218 223 283 216 211 151 
+		nodeNeighbourTbl[218][0-6]: 219 224 284 217 212 152 
+		nodeNeighbourTbl[219][0-6]: 220 225 285 218 213 153 
+		nodeNeighbourTbl[220][0-6]: 221 226 286 219 214 154 
+		nodeNeighbourTbl[221][0-6]: 1331 227 287 220 215 155 
+		nodeNeighbourTbl[222][0-6]: 223 228 288 1331 216 156 
+		nodeNeighbourTbl[223][0-6]: 224 229 289 222 217 157 
+		nodeNeighbourTbl[224][0-6]: 225 230 290 223 218 158 
+		nodeNeighbourTbl[225][0-6]: 226 231 291 224 219 159 
+		nodeNeighbourTbl[226][0-6]: 227 232 292 225 220 160 
+		nodeNeighbourTbl[227][0-6]: 1331 233 293 226 221 161 
+		nodeNeighbourTbl[228][0-6]: 229 234 294 1331 222 162 
+		nodeNeighbourTbl[229][0-6]: 230 235 295 228 223 163 
+		nodeNeighbourTbl[230][0-6]: 231 236 296 229 224 164 
+		nodeNeighbourTbl[231][0-6]: 232 237 297 230 225 165 
+		nodeNeighbourTbl[232][0-6]: 233 238 298 231 226 166 
+		nodeNeighbourTbl[233][0-6]: 1331 239 299 232 227 167 
+		nodeNeighbourTbl[234][0-6]: 235 240 300 1331 228 168 
+		nodeNeighbourTbl[235][0-6]: 236 241 301 234 229 169 
+		nodeNeighbourTbl[236][0-6]: 237 242 302 235 230 170 
+		nodeNeighbourTbl[237][0-6]: 238 243 303 236 231 171 
+		nodeNeighbourTbl[238][0-6]: 239 244 304 237 232 172 
+		nodeNeighbourTbl[239][0-6]: 1331 245 305 238 233 173 
+		nodeNeighbourTbl[240][0-6]: 241 246 306 1331 234 174 
+		nodeNeighbourTbl[241][0-6]: 242 247 307 240 235 175 
+		nodeNeighbourTbl[242][0-6]: 243 248 308 241 236 176 
+		nodeNeighbourTbl[243][0-6]: 244 249 309 242 237 177 
+		nodeNeighbourTbl[244][0-6]: 245 250 310 243 238 178 
+		nodeNeighbourTbl[245][0-6]: 1331 251 311 244 239 179 
+		nodeNeighbourTbl[246][0-6]: 247 252 312 1331 240 180 
+		nodeNeighbourTbl[247][0-6]: 248 253 313 246 241 181 
+		nodeNeighbourTbl[248][0-6]: 249 254 314 247 242 182 
+		nodeNeighbourTbl[249][0-6]: 250 255 315 248 243 183 
+		nodeNeighbourTbl[250][0-6]: 251 256 316 249 244 184 
+		nodeNeighbourTbl[251][0-6]: 1331 257 317 250 245 185 
+		nodeNeighbourTbl[252][0-6]: 253 258 318 1331 246 186 
+		nodeNeighbourTbl[253][0-6]: 254 259 319 252 247 187 
+		nodeNeighbourTbl[254][0-6]: 255 260 320 253 248 188 
+		nodeNeighbourTbl[255][0-6]: 256 261 321 254 249 189 
+		nodeNeighbourTbl[256][0-6]: 257 262 322 255 250 190 
+		nodeNeighbourTbl[257][0-6]: 1331 263 323 256 251 191 
+		nodeNeighbourTbl[258][0-6]: 259 1331 324 1331 252 192 
+		nodeNeighbourTbl[259][0-6]: 260 1331 325 258 253 193 
+		nodeNeighbourTbl[260][0-6]: 261 1331 326 259 254 194 
+		nodeNeighbourTbl[261][0-6]: 262 1331 327 260 255 195 
+		nodeNeighbourTbl[262][0-6]: 263 1331 328 261 256 196 
+		nodeNeighbourTbl[263][0-6]: 1331 1331 329 262 257 197 
+		nodeNeighbourTbl[264][0-6]: 265 270 330 1331 1331 198 
+		nodeNeighbourTbl[265][0-6]: 266 271 331 264 1331 199 
+		nodeNeighbourTbl[266][0-6]: 267 272 332 265 1331 200 
+		nodeNeighbourTbl[267][0-6]: 268 273 333 266 1331 201 
+		nodeNeighbourTbl[268][0-6]: 269 274 334 267 1331 202 
+		nodeNeighbourTbl[269][0-6]: 1331 275 335 268 1331 203 
+		nodeNeighbourTbl[270][0-6]: 271 276 336 1331 264 204 
+		nodeNeighbourTbl[271][0-6]: 272 277 337 270 265 205 
+		nodeNeighbourTbl[272][0-6]: 273 278 338 271 266 206 
+		nodeNeighbourTbl[273][0-6]: 274 279 339 272 267 207 
+		nodeNeighbourTbl[274][0-6]: 275 280 340 273 268 208 
+		nodeNeighbourTbl[275][0-6]: 1331 281 341 274 269 209 
+		nodeNeighbourTbl[276][0-6]: 277 282 342 1331 270 210 
+		nodeNeighbourTbl[277][0-6]: 278 283 343 276 271 211 
+		nodeNeighbourTbl[278][0-6]: 279 284 344 277 272 212 
+		nodeNeighbourTbl[279][0-6]: 280 285 345 278 273 213 
+		nodeNeighbourTbl[280][0-6]: 281 286 346 279 274 214 
+		nodeNeighbourTbl[281][0-6]: 1331 287 347 280 275 215 
+		nodeNeighbourTbl[282][0-6]: 283 288 348 1331 276 216 
+		nodeNeighbourTbl[283][0-6]: 284 289 349 282 277 217 
+		nodeNeighbourTbl[284][0-6]: 285 290 350 283 278 218 
+		nodeNeighbourTbl[285][0-6]: 286 291 351 284 279 219 
+		nodeNeighbourTbl[286][0-6]: 287 292 352 285 280 220 
+		nodeNeighbourTbl[287][0-6]: 1331 293 353 286 281 221 
+		nodeNeighbourTbl[288][0-6]: 289 294 354 1331 282 222 
+		nodeNeighbourTbl[289][0-6]: 290 295 355 288 283 223 
+		nodeNeighbourTbl[290][0-6]: 291 296 356 289 284 224 
+		nodeNeighbourTbl[291][0-6]: 292 297 357 290 285 225 
+		nodeNeighbourTbl[292][0-6]: 293 298 358 291 286 226 
+		nodeNeighbourTbl[293][0-6]: 1331 299 359 292 287 227 
+		nodeNeighbourTbl[294][0-6]: 295 300 360 1331 288 228 
+		nodeNeighbourTbl[295][0-6]: 296 301 361 294 289 229 
+		nodeNeighbourTbl[296][0-6]: 297 302 362 295 290 230 
+		nodeNeighbourTbl[297][0-6]: 298 303 363 296 291 231 
+		nodeNeighbourTbl[298][0-6]: 299 304 364 297 292 232 
+		nodeNeighbourTbl[299][0-6]: 1331 305 365 298 293 233 
+		nodeNeighbourTbl[300][0-6]: 301 306 366 1331 294 234 
+		nodeNeighbourTbl[301][0-6]: 302 307 367 300 295 235 
+		nodeNeighbourTbl[302][0-6]: 303 308 368 301 296 236 
+		nodeNeighbourTbl[303][0-6]: 304 309 369 302 297 237 
+		nodeNeighbourTbl[304][0-6]: 305 310 370 303 298 238 
+		nodeNeighbourTbl[305][0-6]: 1331 311 371 304 299 239 
+		nodeNeighbourTbl[306][0-6]: 307 312 372 1331 300 240 
+		nodeNeighbourTbl[307][0-6]: 308 313 373 306 301 241 
+		nodeNeighbourTbl[308][0-6]: 309 314 374 307 302 242 
+		nodeNeighbourTbl[309][0-6]: 310 315 375 308 303 243 
+		nodeNeighbourTbl[310][0-6]: 311 316 376 309 304 244 
+		nodeNeighbourTbl[311][0-6]: 1331 317 377 310 305 245 
+		nodeNeighbourTbl[312][0-6]: 313 318 378 1331 306 246 
+		nodeNeighbourTbl[313][0-6]: 314 319 379 312 307 247 
+		nodeNeighbourTbl[314][0-6]: 315 320 380 313 308 248 
+		nodeNeighbourTbl[315][0-6]: 316 321 381 314 309 249 
+		nodeNeighbourTbl[316][0-6]: 317 322 382 315 310 250 
+		nodeNeighbourTbl[317][0-6]: 1331 323 383 316 311 251 
+		nodeNeighbourTbl[318][0-6]: 319 324 384 1331 312 252 
+		nodeNeighbourTbl[319][0-6]: 320 325 385 318 313 253 
+		nodeNeighbourTbl[320][0-6]: 321 326 386 319 314 254 
+		nodeNeighbourTbl[321][0-6]: 322 327 387 320 315 255 
+		nodeNeighbourTbl[322][0-6]: 323 328 388 321 316 256 
+		nodeNeighbourTbl[323][0-6]: 1331 329 389 322 317 257 
+		nodeNeighbourTbl[324][0-6]: 325 1331 390 1331 318 258 
+		nodeNeighbourTbl[325][0-6]: 326 1331 391 324 319 259 
+		nodeNeighbourTbl[326][0-6]: 327 1331 392 325 320 260 
+		nodeNeighbourTbl[327][0-6]: 328 1331 393 326 321 261 
+		nodeNeighbourTbl[328][0-6]: 329 1331 394 327 322 262 
+		nodeNeighbourTbl[329][0-6]: 1331 1331 395 328 323 263 
+		nodeNeighbourTbl[330][0-6]: 331 336 396 1331 1331 264 
+		nodeNeighbourTbl[331][0-6]: 332 337 397 330 1331 265 
+		nodeNeighbourTbl[332][0-6]: 333 338 398 331 1331 266 
+		nodeNeighbourTbl[333][0-6]: 334 339 399 332 1331 267 
+		nodeNeighbourTbl[334][0-6]: 335 340 400 333 1331 268 
+		nodeNeighbourTbl[335][0-6]: 1331 341 401 334 1331 269 
+		nodeNeighbourTbl[336][0-6]: 337 342 402 1331 330 270 
+		nodeNeighbourTbl[337][0-6]: 338 343 403 336 331 271 
+		nodeNeighbourTbl[338][0-6]: 339 344 404 337 332 272 
+		nodeNeighbourTbl[339][0-6]: 340 345 405 338 333 273 
+		nodeNeighbourTbl[340][0-6]: 341 346 406 339 334 274 
+		nodeNeighbourTbl[341][0-6]: 1331 347 407 340 335 275 
+		nodeNeighbourTbl[342][0-6]: 343 348 408 1331 336 276 
+		nodeNeighbourTbl[343][0-6]: 344 349 409 342 337 277 
+		nodeNeighbourTbl[344][0-6]: 345 350 410 343 338 278 
+		nodeNeighbourTbl[345][0-6]: 346 351 411 344 339 279 
+		nodeNeighbourTbl[346][0-6]: 347 352 412 345 340 280 
+		nodeNeighbourTbl[347][0-6]: 1331 353 413 346 341 281 
+		nodeNeighbourTbl[348][0-6]: 349 354 414 1331 342 282 
+		nodeNeighbourTbl[349][0-6]: 350 355 415 348 343 283 
+		nodeNeighbourTbl[350][0-6]: 351 356 416 349 344 284 
+		nodeNeighbourTbl[351][0-6]: 352 357 417 350 345 285 
+		nodeNeighbourTbl[352][0-6]: 353 358 418 351 346 286 
+		nodeNeighbourTbl[353][0-6]: 1331 359 419 352 347 287 
+		nodeNeighbourTbl[354][0-6]: 355 360 420 1331 348 288 
+		nodeNeighbourTbl[355][0-6]: 356 361 421 354 349 289 
+		nodeNeighbourTbl[356][0-6]: 357 362 422 355 350 290 
+		nodeNeighbourTbl[357][0-6]: 358 363 423 356 351 291 
+		nodeNeighbourTbl[358][0-6]: 359 364 424 357 352 292 
+		nodeNeighbourTbl[359][0-6]: 1331 365 425 358 353 293 
+		nodeNeighbourTbl[360][0-6]: 361 366 426 1331 354 294 
+		nodeNeighbourTbl[361][0-6]: 362 367 427 360 355 295 
+		nodeNeighbourTbl[362][0-6]: 363 368 428 361 356 296 
+		nodeNeighbourTbl[363][0-6]: 364 369 429 362 357 297 
+		nodeNeighbourTbl[364][0-6]: 365 370 430 363 358 298 
+		nodeNeighbourTbl[365][0-6]: 1331 371 431 364 359 299 
+		nodeNeighbourTbl[366][0-6]: 367 372 432 1331 360 300 
+		nodeNeighbourTbl[367][0-6]: 368 373 433 366 361 301 
+		nodeNeighbourTbl[368][0-6]: 369 374 434 367 362 302 
+		nodeNeighbourTbl[369][0-6]: 370 375 435 368 363 303 
+		nodeNeighbourTbl[370][0-6]: 371 376 436 369 364 304 
+		nodeNeighbourTbl[371][0-6]: 1331 377 437 370 365 305 
+		nodeNeighbourTbl[372][0-6]: 373 378 438 1331 366 306 
+		nodeNeighbourTbl[373][0-6]: 374 379 439 372 367 307 
+		nodeNeighbourTbl[374][0-6]: 375 380 440 373 368 308 
+		nodeNeighbourTbl[375][0-6]: 376 381 441 374 369 309 
+		nodeNeighbourTbl[376][0-6]: 377 382 442 375 370 310 
+		nodeNeighbourTbl[377][0-6]: 1331 383 443 376 371 311 
+		nodeNeighbourTbl[378][0-6]: 379 384 444 1331 372 312 
+		nodeNeighbourTbl[379][0-6]: 380 385 445 378 373 313 
+		nodeNeighbourTbl[380][0-6]: 381 386 446 379 374 314 
+		nodeNeighbourTbl[381][0-6]: 382 387 447 380 375 315 
+		nodeNeighbourTbl[382][0-6]: 383 388 448 381 376 316 
+		nodeNeighbourTbl[383][0-6]: 1331 389 449 382 377 317 
+		nodeNeighbourTbl[384][0-6]: 385 390 450 1331 378 318 
+		nodeNeighbourTbl[385][0-6]: 386 391 451 384 379 319 
+		nodeNeighbourTbl[386][0-6]: 387 392 452 385 380 320 
+		nodeNeighbourTbl[387][0-6]: 388 393 453 386 381 321 
+		nodeNeighbourTbl[388][0-6]: 389 394 454 387 382 322 
+		nodeNeighbourTbl[389][0-6]: 1331 395 455 388 383 323 
+		nodeNeighbourTbl[390][0-6]: 391 1331 456 1331 384 324 
+		nodeNeighbourTbl[391][0-6]: 392 1331 457 390 385 325 
+		nodeNeighbourTbl[392][0-6]: 393 1331 458 391 386 326 
+		nodeNeighbourTbl[393][0-6]: 394 1331 459 392 387 327 
+		nodeNeighbourTbl[394][0-6]: 395 1331 460 393 388 328 
+		nodeNeighbourTbl[395][0-6]: 1331 1331 461 394 389 329 
+		nodeNeighbourTbl[396][0-6]: 397 402 462 1331 1331 330 
+		nodeNeighbourTbl[397][0-6]: 398 403 463 396 1331 331 
+		nodeNeighbourTbl[398][0-6]: 399 404 464 397 1331 332 
+		nodeNeighbourTbl[399][0-6]: 400 405 465 398 1331 333 
+		nodeNeighbourTbl[400][0-6]: 401 406 466 399 1331 334 
+		nodeNeighbourTbl[401][0-6]: 1331 407 467 400 1331 335 
+		nodeNeighbourTbl[402][0-6]: 403 408 468 1331 396 336 
+		nodeNeighbourTbl[403][0-6]: 404 409 469 402 397 337 
+		nodeNeighbourTbl[404][0-6]: 405 410 470 403 398 338 
+		nodeNeighbourTbl[405][0-6]: 406 411 471 404 399 339 
+		nodeNeighbourTbl[406][0-6]: 407 412 472 405 400 340 
+		nodeNeighbourTbl[407][0-6]: 1331 413 473 406 401 341 
+		nodeNeighbourTbl[408][0-6]: 409 414 474 1331 402 342 
+		nodeNeighbourTbl[409][0-6]: 410 415 475 408 403 343 
+		nodeNeighbourTbl[410][0-6]: 411 416 476 409 404 344 
+		nodeNeighbourTbl[411][0-6]: 412 417 477 410 405 345 
+		nodeNeighbourTbl[412][0-6]: 413 418 478 411 406 346 
+		nodeNeighbourTbl[413][0-6]: 1331 419 479 412 407 347 
+		nodeNeighbourTbl[414][0-6]: 415 420 480 1331 408 348 
+		nodeNeighbourTbl[415][0-6]: 416 421 481 414 409 349 
+		nodeNeighbourTbl[416][0-6]: 417 422 482 415 410 350 
+		nodeNeighbourTbl[417][0-6]: 418 423 483 416 411 351 
+		nodeNeighbourTbl[418][0-6]: 419 424 484 417 412 352 
+		nodeNeighbourTbl[419][0-6]: 1331 425 485 418 413 353 
+		nodeNeighbourTbl[420][0-6]: 421 426 486 1331 414 354 
+		nodeNeighbourTbl[421][0-6]: 422 427 487 420 415 355 
+		nodeNeighbourTbl[422][0-6]: 423 428 488 421 416 356 
+		nodeNeighbourTbl[423][0-6]: 424 429 489 422 417 357 
+		nodeNeighbourTbl[424][0-6]: 425 430 490 423 418 358 
+		nodeNeighbourTbl[425][0-6]: 1331 431 491 424 419 359 
+		nodeNeighbourTbl[426][0-6]: 427 432 492 1331 420 360 
+		nodeNeighbourTbl[427][0-6]: 428 433 493 426 421 361 
+		nodeNeighbourTbl[428][0-6]: 429 434 494 427 422 362 
+		nodeNeighbourTbl[429][0-6]: 430 435 495 428 423 363 
+		nodeNeighbourTbl[430][0-6]: 431 436 496 429 424 364 
+		nodeNeighbourTbl[431][0-6]: 1331 437 497 430 425 365 
+		nodeNeighbourTbl[432][0-6]: 433 438 498 1331 426 366 
+		nodeNeighbourTbl[433][0-6]: 434 439 499 432 427 367 
+		nodeNeighbourTbl[434][0-6]: 435 440 500 433 428 368 
+		nodeNeighbourTbl[435][0-6]: 436 441 501 434 429 369 
+		nodeNeighbourTbl[436][0-6]: 437 442 502 435 430 370 
+		nodeNeighbourTbl[437][0-6]: 1331 443 503 436 431 371 
+		nodeNeighbourTbl[438][0-6]: 439 444 504 1331 432 372 
+		nodeNeighbourTbl[439][0-6]: 440 445 505 438 433 373 
+		nodeNeighbourTbl[440][0-6]: 441 446 506 439 434 374 
+		nodeNeighbourTbl[441][0-6]: 442 447 507 440 435 375 
+		nodeNeighbourTbl[442][0-6]: 443 448 508 441 436 376 
+		nodeNeighbourTbl[443][0-6]: 1331 449 509 442 437 377 
+		nodeNeighbourTbl[444][0-6]: 445 450 510 1331 438 378 
+		nodeNeighbourTbl[445][0-6]: 446 451 511 444 439 379 
+		nodeNeighbourTbl[446][0-6]: 447 452 512 445 440 380 
+		nodeNeighbourTbl[447][0-6]: 448 453 513 446 441 381 
+		nodeNeighbourTbl[448][0-6]: 449 454 514 447 442 382 
+		nodeNeighbourTbl[449][0-6]: 1331 455 515 448 443 383 
+		nodeNeighbourTbl[450][0-6]: 451 456 516 1331 444 384 
+		nodeNeighbourTbl[451][0-6]: 452 457 517 450 445 385 
+		nodeNeighbourTbl[452][0-6]: 453 458 518 451 446 386 
+		nodeNeighbourTbl[453][0-6]: 454 459 519 452 447 387 
+		nodeNeighbourTbl[454][0-6]: 455 460 520 453 448 388 
+		nodeNeighbourTbl[455][0-6]: 1331 461 521 454 449 389 
+		nodeNeighbourTbl[456][0-6]: 457 1331 522 1331 450 390 
+		nodeNeighbourTbl[457][0-6]: 458 1331 523 456 451 391 
+		nodeNeighbourTbl[458][0-6]: 459 1331 524 457 452 392 
+		nodeNeighbourTbl[459][0-6]: 460 1331 525 458 453 393 
+		nodeNeighbourTbl[460][0-6]: 461 1331 526 459 454 394 
+		nodeNeighbourTbl[461][0-6]: 1331 1331 527 460 455 395 
+		nodeNeighbourTbl[462][0-6]: 463 468 528 1331 1331 396 
+		nodeNeighbourTbl[463][0-6]: 464 469 529 462 1331 397 
+		nodeNeighbourTbl[464][0-6]: 465 470 530 463 1331 398 
+		nodeNeighbourTbl[465][0-6]: 466 471 531 464 1331 399 
+		nodeNeighbourTbl[466][0-6]: 467 472 532 465 1331 400 
+		nodeNeighbourTbl[467][0-6]: 1331 473 533 466 1331 401 
+		nodeNeighbourTbl[468][0-6]: 469 474 534 1331 462 402 
+		nodeNeighbourTbl[469][0-6]: 470 475 535 468 463 403 
+		nodeNeighbourTbl[470][0-6]: 471 476 536 469 464 404 
+		nodeNeighbourTbl[471][0-6]: 472 477 537 470 465 405 
+		nodeNeighbourTbl[472][0-6]: 473 478 538 471 466 406 
+		nodeNeighbourTbl[473][0-6]: 1331 479 539 472 467 407 
+		nodeNeighbourTbl[474][0-6]: 475 480 540 1331 468 408 
+		nodeNeighbourTbl[475][0-6]: 476 481 541 474 469 409 
+		nodeNeighbourTbl[476][0-6]: 477 482 542 475 470 410 
+		nodeNeighbourTbl[477][0-6]: 478 483 543 476 471 411 
+		nodeNeighbourTbl[478][0-6]: 479 484 544 477 472 412 
+		nodeNeighbourTbl[479][0-6]: 1331 485 545 478 473 413 
+		nodeNeighbourTbl[480][0-6]: 481 486 546 1331 474 414 
+		nodeNeighbourTbl[481][0-6]: 482 487 547 480 475 415 
+		nodeNeighbourTbl[482][0-6]: 483 488 548 481 476 416 
+		nodeNeighbourTbl[483][0-6]: 484 489 549 482 477 417 
+		nodeNeighbourTbl[484][0-6]: 485 490 550 483 478 418 
+		nodeNeighbourTbl[485][0-6]: 1331 491 551 484 479 419 
+		nodeNeighbourTbl[486][0-6]: 487 492 552 1331 480 420 
+		nodeNeighbourTbl[487][0-6]: 488 493 553 486 481 421 
+		nodeNeighbourTbl[488][0-6]: 489 494 554 487 482 422 
+		nodeNeighbourTbl[489][0-6]: 490 495 555 488 483 423 
+		nodeNeighbourTbl[490][0-6]: 491 496 556 489 484 424 
+		nodeNeighbourTbl[491][0-6]: 1331 497 557 490 485 425 
+		nodeNeighbourTbl[492][0-6]: 493 498 558 1331 486 426 
+		nodeNeighbourTbl[493][0-6]: 494 499 559 492 487 427 
+		nodeNeighbourTbl[494][0-6]: 495 500 560 493 488 428 
+		nodeNeighbourTbl[495][0-6]: 496 501 561 494 489 429 
+		nodeNeighbourTbl[496][0-6]: 497 502 562 495 490 430 
+		nodeNeighbourTbl[497][0-6]: 1331 503 563 496 491 431 
+		nodeNeighbourTbl[498][0-6]: 499 504 564 1331 492 432 
+		nodeNeighbourTbl[499][0-6]: 500 505 565 498 493 433 
+		nodeNeighbourTbl[500][0-6]: 501 506 566 499 494 434 
+		nodeNeighbourTbl[501][0-6]: 502 507 567 500 495 435 
+		nodeNeighbourTbl[502][0-6]: 503 508 568 501 496 436 
+		nodeNeighbourTbl[503][0-6]: 1331 509 569 502 497 437 
+		nodeNeighbourTbl[504][0-6]: 505 510 570 1331 498 438 
+		nodeNeighbourTbl[505][0-6]: 506 511 571 504 499 439 
+		nodeNeighbourTbl[506][0-6]: 507 512 572 505 500 440 
+		nodeNeighbourTbl[507][0-6]: 508 513 573 506 501 441 
+		nodeNeighbourTbl[508][0-6]: 509 514 574 507 502 442 
+		nodeNeighbourTbl[509][0-6]: 1331 515 575 508 503 443 
+		nodeNeighbourTbl[510][0-6]: 511 516 576 1331 504 444 
+		nodeNeighbourTbl[511][0-6]: 512 517 577 510 505 445 
+		nodeNeighbourTbl[512][0-6]: 513 518 578 511 506 446 
+		nodeNeighbourTbl[513][0-6]: 514 519 579 512 507 447 
+		nodeNeighbourTbl[514][0-6]: 515 520 580 513 508 448 
+		nodeNeighbourTbl[515][0-6]: 1331 521 581 514 509 449 
+		nodeNeighbourTbl[516][0-6]: 517 522 582 1331 510 450 
+		nodeNeighbourTbl[517][0-6]: 518 523 583 516 511 451 
+		nodeNeighbourTbl[518][0-6]: 519 524 584 517 512 452 
+		nodeNeighbourTbl[519][0-6]: 520 525 585 518 513 453 
+		nodeNeighbourTbl[520][0-6]: 521 526 586 519 514 454 
+		nodeNeighbourTbl[521][0-6]: 1331 527 587 520 515 455 
+		nodeNeighbourTbl[522][0-6]: 523 1331 588 1331 516 456 
+		nodeNeighbourTbl[523][0-6]: 524 1331 589 522 517 457 
+		nodeNeighbourTbl[524][0-6]: 525 1331 590 523 518 458 
+		nodeNeighbourTbl[525][0-6]: 526 1331 591 524 519 459 
+		nodeNeighbourTbl[526][0-6]: 527 1331 592 525 520 460 
+		nodeNeighbourTbl[527][0-6]: 1331 1331 593 526 521 461 
+		nodeNeighbourTbl[528][0-6]: 529 534 594 1331 1331 462 
+		nodeNeighbourTbl[529][0-6]: 530 535 595 528 1331 463 
+		nodeNeighbourTbl[530][0-6]: 531 536 596 529 1331 464 
+		nodeNeighbourTbl[531][0-6]: 532 537 597 530 1331 465 
+		nodeNeighbourTbl[532][0-6]: 533 538 598 531 1331 466 
+		nodeNeighbourTbl[533][0-6]: 1331 539 599 532 1331 467 
+		nodeNeighbourTbl[534][0-6]: 535 540 600 1331 528 468 
+		nodeNeighbourTbl[535][0-6]: 536 541 601 534 529 469 
+		nodeNeighbourTbl[536][0-6]: 537 542 602 535 530 470 
+		nodeNeighbourTbl[537][0-6]: 538 543 603 536 531 471 
+		nodeNeighbourTbl[538][0-6]: 539 544 604 537 532 472 
+		nodeNeighbourTbl[539][0-6]: 1331 545 605 538 533 473 
+		nodeNeighbourTbl[540][0-6]: 541 546 606 1331 534 474 
+		nodeNeighbourTbl[541][0-6]: 542 547 607 540 535 475 
+		nodeNeighbourTbl[542][0-6]: 543 548 608 541 536 476 
+		nodeNeighbourTbl[543][0-6]: 544 549 609 542 537 477 
+		nodeNeighbourTbl[544][0-6]: 545 550 610 543 538 478 
+		nodeNeighbourTbl[545][0-6]: 1331 551 611 544 539 479 
+		nodeNeighbourTbl[546][0-6]: 547 552 612 1331 540 480 
+		nodeNeighbourTbl[547][0-6]: 548 553 613 546 541 481 
+		nodeNeighbourTbl[548][0-6]: 549 554 614 547 542 482 
+		nodeNeighbourTbl[549][0-6]: 550 555 615 548 543 483 
+		nodeNeighbourTbl[550][0-6]: 551 556 616 549 544 484 
+		nodeNeighbourTbl[551][0-6]: 1331 557 617 550 545 485 
+		nodeNeighbourTbl[552][0-6]: 553 558 618 1331 546 486 
+		nodeNeighbourTbl[553][0-6]: 554 559 619 552 547 487 
+		nodeNeighbourTbl[554][0-6]: 555 560 620 553 548 488 
+		nodeNeighbourTbl[555][0-6]: 556 561 621 554 549 489 
+		nodeNeighbourTbl[556][0-6]: 557 562 622 555 550 490 
+		nodeNeighbourTbl[557][0-6]: 1331 563 623 556 551 491 
+		nodeNeighbourTbl[558][0-6]: 559 564 624 1331 552 492 
+		nodeNeighbourTbl[559][0-6]: 560 565 625 558 553 493 
+		nodeNeighbourTbl[560][0-6]: 561 566 626 559 554 494 
+		nodeNeighbourTbl[561][0-6]: 562 567 627 560 555 495 
+		nodeNeighbourTbl[562][0-6]: 563 568 628 561 556 496 
+		nodeNeighbourTbl[563][0-6]: 1331 569 629 562 557 497 
+		nodeNeighbourTbl[564][0-6]: 565 570 630 1331 558 498 
+		nodeNeighbourTbl[565][0-6]: 566 571 631 564 559 499 
+		nodeNeighbourTbl[566][0-6]: 567 572 632 565 560 500 
+		nodeNeighbourTbl[567][0-6]: 568 573 633 566 561 501 
+		nodeNeighbourTbl[568][0-6]: 569 574 634 567 562 502 
+		nodeNeighbourTbl[569][0-6]: 1331 575 635 568 563 503 
+		nodeNeighbourTbl[570][0-6]: 571 576 636 1331 564 504 
+		nodeNeighbourTbl[571][0-6]: 572 577 637 570 565 505 
+		nodeNeighbourTbl[572][0-6]: 573 578 638 571 566 506 
+		nodeNeighbourTbl[573][0-6]: 574 579 639 572 567 507 
+		nodeNeighbourTbl[574][0-6]: 575 580 640 573 568 508 
+		nodeNeighbourTbl[575][0-6]: 1331 581 641 574 569 509 
+		nodeNeighbourTbl[576][0-6]: 577 582 642 1331 570 510 
+		nodeNeighbourTbl[577][0-6]: 578 583 643 576 571 511 
+		nodeNeighbourTbl[578][0-6]: 579 584 644 577 572 512 
+		nodeNeighbourTbl[579][0-6]: 580 585 645 578 573 513 
+		nodeNeighbourTbl[580][0-6]: 581 586 646 579 574 514 
+		nodeNeighbourTbl[581][0-6]: 1331 587 647 580 575 515 
+		nodeNeighbourTbl[582][0-6]: 583 588 648 1331 576 516 
+		nodeNeighbourTbl[583][0-6]: 584 589 649 582 577 517 
+		nodeNeighbourTbl[584][0-6]: 585 590 650 583 578 518 
+		nodeNeighbourTbl[585][0-6]: 586 591 651 584 579 519 
+		nodeNeighbourTbl[586][0-6]: 587 592 652 585 580 520 
+		nodeNeighbourTbl[587][0-6]: 1331 593 653 586 581 521 
+		nodeNeighbourTbl[588][0-6]: 589 1331 654 1331 582 522 
+		nodeNeighbourTbl[589][0-6]: 590 1331 655 588 583 523 
+		nodeNeighbourTbl[590][0-6]: 591 1331 656 589 584 524 
+		nodeNeighbourTbl[591][0-6]: 592 1331 657 590 585 525 
+		nodeNeighbourTbl[592][0-6]: 593 1331 658 591 586 526 
+		nodeNeighbourTbl[593][0-6]: 1331 1331 659 592 587 527 
+		nodeNeighbourTbl[594][0-6]: 595 600 660 1331 1331 528 
+		nodeNeighbourTbl[595][0-6]: 596 601 661 594 1331 529 
+		nodeNeighbourTbl[596][0-6]: 597 602 662 595 1331 530 
+		nodeNeighbourTbl[597][0-6]: 598 603 663 596 1331 531 
+		nodeNeighbourTbl[598][0-6]: 599 604 664 597 1331 532 
+		nodeNeighbourTbl[599][0-6]: 1331 605 665 598 1331 533 
+		nodeNeighbourTbl[600][0-6]: 601 606 666 1331 594 534 
+		nodeNeighbourTbl[601][0-6]: 602 607 667 600 595 535 
+		nodeNeighbourTbl[602][0-6]: 603 608 668 601 596 536 
+		nodeNeighbourTbl[603][0-6]: 604 609 669 602 597 537 
+		nodeNeighbourTbl[604][0-6]: 605 610 670 603 598 538 
+		nodeNeighbourTbl[605][0-6]: 1331 611 671 604 599 539 
+		nodeNeighbourTbl[606][0-6]: 607 612 672 1331 600 540 
+		nodeNeighbourTbl[607][0-6]: 608 613 673 606 601 541 
+		nodeNeighbourTbl[608][0-6]: 609 614 674 607 602 542 
+		nodeNeighbourTbl[609][0-6]: 610 615 675 608 603 543 
+		nodeNeighbourTbl[610][0-6]: 611 616 676 609 604 544 
+		nodeNeighbourTbl[611][0-6]: 1331 617 677 610 605 545 
+		nodeNeighbourTbl[612][0-6]: 613 618 678 1331 606 546 
+		nodeNeighbourTbl[613][0-6]: 614 619 679 612 607 547 
+		nodeNeighbourTbl[614][0-6]: 615 620 680 613 608 548 
+		nodeNeighbourTbl[615][0-6]: 616 621 681 614 609 549 
+		nodeNeighbourTbl[616][0-6]: 617 622 682 615 610 550 
+		nodeNeighbourTbl[617][0-6]: 1331 623 683 616 611 551 
+		nodeNeighbourTbl[618][0-6]: 619 624 684 1331 612 552 
+		nodeNeighbourTbl[619][0-6]: 620 625 685 618 613 553 
+		nodeNeighbourTbl[620][0-6]: 621 626 686 619 614 554 
+		nodeNeighbourTbl[621][0-6]: 622 627 687 620 615 555 
+		nodeNeighbourTbl[622][0-6]: 623 628 688 621 616 556 
+		nodeNeighbourTbl[623][0-6]: 1331 629 689 622 617 557 
+		nodeNeighbourTbl[624][0-6]: 625 630 690 1331 618 558 
+		nodeNeighbourTbl[625][0-6]: 626 631 691 624 619 559 
+		nodeNeighbourTbl[626][0-6]: 627 632 692 625 620 560 
+		nodeNeighbourTbl[627][0-6]: 628 633 693 626 621 561 
+		nodeNeighbourTbl[628][0-6]: 629 634 694 627 622 562 
+		nodeNeighbourTbl[629][0-6]: 1331 635 695 628 623 563 
+		nodeNeighbourTbl[630][0-6]: 631 636 696 1331 624 564 
+		nodeNeighbourTbl[631][0-6]: 632 637 697 630 625 565 
+		nodeNeighbourTbl[632][0-6]: 633 638 698 631 626 566 
+		nodeNeighbourTbl[633][0-6]: 634 639 699 632 627 567 
+		nodeNeighbourTbl[634][0-6]: 635 640 700 633 628 568 
+		nodeNeighbourTbl[635][0-6]: 1331 641 701 634 629 569 
+		nodeNeighbourTbl[636][0-6]: 637 642 702 1331 630 570 
+		nodeNeighbourTbl[637][0-6]: 638 643 703 636 631 571 
+		nodeNeighbourTbl[638][0-6]: 639 644 704 637 632 572 
+		nodeNeighbourTbl[639][0-6]: 640 645 705 638 633 573 
+		nodeNeighbourTbl[640][0-6]: 641 646 706 639 634 574 
+		nodeNeighbourTbl[641][0-6]: 1331 647 707 640 635 575 
+		nodeNeighbourTbl[642][0-6]: 643 648 708 1331 636 576 
+		nodeNeighbourTbl[643][0-6]: 644 649 709 642 637 577 
+		nodeNeighbourTbl[644][0-6]: 645 650 710 643 638 578 
+		nodeNeighbourTbl[645][0-6]: 646 651 711 644 639 579 
+		nodeNeighbourTbl[646][0-6]: 647 652 712 645 640 580 
+		nodeNeighbourTbl[647][0-6]: 1331 653 713 646 641 581 
+		nodeNeighbourTbl[648][0-6]: 649 654 714 1331 642 582 
+		nodeNeighbourTbl[649][0-6]: 650 655 715 648 643 583 
+		nodeNeighbourTbl[650][0-6]: 651 656 716 649 644 584 
+		nodeNeighbourTbl[651][0-6]: 652 657 717 650 645 585 
+		nodeNeighbourTbl[652][0-6]: 653 658 718 651 646 586 
+		nodeNeighbourTbl[653][0-6]: 1331 659 719 652 647 587 
+		nodeNeighbourTbl[654][0-6]: 655 1331 720 1331 648 588 
+		nodeNeighbourTbl[655][0-6]: 656 1331 721 654 649 589 
+		nodeNeighbourTbl[656][0-6]: 657 1331 722 655 650 590 
+		nodeNeighbourTbl[657][0-6]: 658 1331 723 656 651 591 
+		nodeNeighbourTbl[658][0-6]: 659 1331 724 657 652 592 
+		nodeNeighbourTbl[659][0-6]: 1331 1331 725 658 653 593 
+		nodeNeighbourTbl[660][0-6]: 661 666 1331 1331 1331 594 
+		nodeNeighbourTbl[661][0-6]: 662 667 1331 660 1331 595 
+		nodeNeighbourTbl[662][0-6]: 663 668 1331 661 1331 596 
+		nodeNeighbourTbl[663][0-6]: 664 669 1331 662 1331 597 
+		nodeNeighbourTbl[664][0-6]: 665 670 1331 663 1331 598 
+		nodeNeighbourTbl[665][0-6]: 1331 671 1331 664 1331 599 
+		nodeNeighbourTbl[666][0-6]: 667 672 1331 1331 660 600 
+		nodeNeighbourTbl[667][0-6]: 668 673 1331 666 661 601 
+		nodeNeighbourTbl[668][0-6]: 669 674 1331 667 662 602 
+		nodeNeighbourTbl[669][0-6]: 670 675 1331 668 663 603 
+		nodeNeighbourTbl[670][0-6]: 671 676 1331 669 664 604 
+		nodeNeighbourTbl[671][0-6]: 1331 677 1331 670 665 605 
+		nodeNeighbourTbl[672][0-6]: 673 678 1331 1331 666 606 
+		nodeNeighbourTbl[673][0-6]: 674 679 1331 672 667 607 
+		nodeNeighbourTbl[674][0-6]: 675 680 1331 673 668 608 
+		nodeNeighbourTbl[675][0-6]: 676 681 1331 674 669 609 
+		nodeNeighbourTbl[676][0-6]: 677 682 1331 675 670 610 
+		nodeNeighbourTbl[677][0-6]: 1331 683 1331 676 671 611 
+		nodeNeighbourTbl[678][0-6]: 679 684 1331 1331 672 612 
+		nodeNeighbourTbl[679][0-6]: 680 685 1331 678 673 613 
+		nodeNeighbourTbl[680][0-6]: 681 686 1331 679 674 614 
+		nodeNeighbourTbl[681][0-6]: 682 687 1331 680 675 615 
+		nodeNeighbourTbl[682][0-6]: 683 688 1331 681 676 616 
+		nodeNeighbourTbl[683][0-6]: 1331 689 1331 682 677 617 
+		nodeNeighbourTbl[684][0-6]: 685 690 1331 1331 678 618 
+		nodeNeighbourTbl[685][0-6]: 686 691 1331 684 679 619 
+		nodeNeighbourTbl[686][0-6]: 687 692 1331 685 680 620 
+		nodeNeighbourTbl[687][0-6]: 688 693 1331 686 681 621 
+		nodeNeighbourTbl[688][0-6]: 689 694 1331 687 682 622 
+		nodeNeighbourTbl[689][0-6]: 1331 695 1331 688 683 623 
+		nodeNeighbourTbl[690][0-6]: 691 696 1331 1331 684 624 
+		nodeNeighbourTbl[691][0-6]: 692 697 1331 690 685 625 
+		nodeNeighbourTbl[692][0-6]: 693 698 1331 691 686 626 
+		nodeNeighbourTbl[693][0-6]: 694 699 1331 692 687 627 
+		nodeNeighbourTbl[694][0-6]: 695 700 1331 693 688 628 
+		nodeNeighbourTbl[695][0-6]: 1331 701 1331 694 689 629 
+		nodeNeighbourTbl[696][0-6]: 697 702 1331 1331 690 630 
+		nodeNeighbourTbl[697][0-6]: 698 703 1331 696 691 631 
+		nodeNeighbourTbl[698][0-6]: 699 704 1331 697 692 632 
+		nodeNeighbourTbl[699][0-6]: 700 705 1331 698 693 633 
+		nodeNeighbourTbl[700][0-6]: 701 706 1331 699 694 634 
+		nodeNeighbourTbl[701][0-6]: 1331 707 1331 700 695 635 
+		nodeNeighbourTbl[702][0-6]: 703 708 1331 1331 696 636 
+		nodeNeighbourTbl[703][0-6]: 704 709 1331 702 697 637 
+		nodeNeighbourTbl[704][0-6]: 705 710 1331 703 698 638 
+		nodeNeighbourTbl[705][0-6]: 706 711 1331 704 699 639 
+		nodeNeighbourTbl[706][0-6]: 707 712 1331 705 700 640 
+		nodeNeighbourTbl[707][0-6]: 1331 713 1331 706 701 641 
+		nodeNeighbourTbl[708][0-6]: 709 714 1331 1331 702 642 
+		nodeNeighbourTbl[709][0-6]: 710 715 1331 708 703 643 
+		nodeNeighbourTbl[710][0-6]: 711 716 1331 709 704 644 
+		nodeNeighbourTbl[711][0-6]: 712 717 1331 710 705 645 
+		nodeNeighbourTbl[712][0-6]: 713 718 1331 711 706 646 
+		nodeNeighbourTbl[713][0-6]: 1331 719 1331 712 707 647 
+		nodeNeighbourTbl[714][0-6]: 715 720 1331 1331 708 648 
+		nodeNeighbourTbl[715][0-6]: 716 721 1331 714 709 649 
+		nodeNeighbourTbl[716][0-6]: 717 722 1331 715 710 650 
+		nodeNeighbourTbl[717][0-6]: 718 723 1331 716 711 651 
+		nodeNeighbourTbl[718][0-6]: 719 724 1331 717 712 652 
+		nodeNeighbourTbl[719][0-6]: 1331 725 1331 718 713 653 
+		nodeNeighbourTbl[720][0-6]: 721 1331 1331 1331 714 654 
+		nodeNeighbourTbl[721][0-6]: 722 1331 1331 720 715 655 
+		nodeNeighbourTbl[722][0-6]: 723 1331 1331 721 716 656 
+		nodeNeighbourTbl[723][0-6]: 724 1331 1331 722 717 657 
+		nodeNeighbourTbl[724][0-6]: 725 1331 1331 723 718 658 
+		nodeNeighbourTbl[725][0-6]: 1331 1331 1331 724 719 659 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8070898
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8071400
+	nodeElementTbl[0-726]:
+		nodeElementTbl[0][0-8]: 1000 1000 1000 1000 1000 1000 1000 000 
+		nodeElementTbl[1][0-8]: 1000 1000 1000 1000 1000 1000 000 001 
+		nodeElementTbl[2][0-8]: 1000 1000 1000 1000 1000 1000 001 002 
+		nodeElementTbl[3][0-8]: 1000 1000 1000 1000 1000 1000 002 003 
+		nodeElementTbl[4][0-8]: 1000 1000 1000 1000 1000 1000 003 004 
+		nodeElementTbl[5][0-8]: 1000 1000 1000 1000 1000 1000 004 1000 
+		nodeElementTbl[6][0-8]: 1000 1000 1000 1000 1000 000 1000 005 
+		nodeElementTbl[7][0-8]: 1000 1000 1000 1000 000 001 005 006 
+		nodeElementTbl[8][0-8]: 1000 1000 1000 1000 001 002 006 007 
+		nodeElementTbl[9][0-8]: 1000 1000 1000 1000 002 003 007 008 
+		nodeElementTbl[10][0-8]: 1000 1000 1000 1000 003 004 008 009 
+		nodeElementTbl[11][0-8]: 1000 1000 1000 1000 004 1000 009 1000 
+		nodeElementTbl[12][0-8]: 1000 1000 1000 1000 1000 005 1000 010 
+		nodeElementTbl[13][0-8]: 1000 1000 1000 1000 005 006 010 011 
+		nodeElementTbl[14][0-8]: 1000 1000 1000 1000 006 007 011 012 
+		nodeElementTbl[15][0-8]: 1000 1000 1000 1000 007 008 012 013 
+		nodeElementTbl[16][0-8]: 1000 1000 1000 1000 008 009 013 014 
+		nodeElementTbl[17][0-8]: 1000 1000 1000 1000 009 1000 014 1000 
+		nodeElementTbl[18][0-8]: 1000 1000 1000 1000 1000 010 1000 015 
+		nodeElementTbl[19][0-8]: 1000 1000 1000 1000 010 011 015 016 
+		nodeElementTbl[20][0-8]: 1000 1000 1000 1000 011 012 016 017 
+		nodeElementTbl[21][0-8]: 1000 1000 1000 1000 012 013 017 018 
+		nodeElementTbl[22][0-8]: 1000 1000 1000 1000 013 014 018 019 
+		nodeElementTbl[23][0-8]: 1000 1000 1000 1000 014 1000 019 1000 
+		nodeElementTbl[24][0-8]: 1000 1000 1000 1000 1000 015 1000 020 
+		nodeElementTbl[25][0-8]: 1000 1000 1000 1000 015 016 020 021 
+		nodeElementTbl[26][0-8]: 1000 1000 1000 1000 016 017 021 022 
+		nodeElementTbl[27][0-8]: 1000 1000 1000 1000 017 018 022 023 
+		nodeElementTbl[28][0-8]: 1000 1000 1000 1000 018 019 023 024 
+		nodeElementTbl[29][0-8]: 1000 1000 1000 1000 019 1000 024 1000 
+		nodeElementTbl[30][0-8]: 1000 1000 1000 1000 1000 020 1000 025 
+		nodeElementTbl[31][0-8]: 1000 1000 1000 1000 020 021 025 026 
+		nodeElementTbl[32][0-8]: 1000 1000 1000 1000 021 022 026 027 
+		nodeElementTbl[33][0-8]: 1000 1000 1000 1000 022 023 027 028 
+		nodeElementTbl[34][0-8]: 1000 1000 1000 1000 023 024 028 029 
+		nodeElementTbl[35][0-8]: 1000 1000 1000 1000 024 1000 029 1000 
+		nodeElementTbl[36][0-8]: 1000 1000 1000 1000 1000 025 1000 030 
+		nodeElementTbl[37][0-8]: 1000 1000 1000 1000 025 026 030 031 
+		nodeElementTbl[38][0-8]: 1000 1000 1000 1000 026 027 031 032 
+		nodeElementTbl[39][0-8]: 1000 1000 1000 1000 027 028 032 033 
+		nodeElementTbl[40][0-8]: 1000 1000 1000 1000 028 029 033 034 
+		nodeElementTbl[41][0-8]: 1000 1000 1000 1000 029 1000 034 1000 
+		nodeElementTbl[42][0-8]: 1000 1000 1000 1000 1000 030 1000 035 
+		nodeElementTbl[43][0-8]: 1000 1000 1000 1000 030 031 035 036 
+		nodeElementTbl[44][0-8]: 1000 1000 1000 1000 031 032 036 037 
+		nodeElementTbl[45][0-8]: 1000 1000 1000 1000 032 033 037 038 
+		nodeElementTbl[46][0-8]: 1000 1000 1000 1000 033 034 038 039 
+		nodeElementTbl[47][0-8]: 1000 1000 1000 1000 034 1000 039 1000 
+		nodeElementTbl[48][0-8]: 1000 1000 1000 1000 1000 035 1000 040 
+		nodeElementTbl[49][0-8]: 1000 1000 1000 1000 035 036 040 041 
+		nodeElementTbl[50][0-8]: 1000 1000 1000 1000 036 037 041 042 
+		nodeElementTbl[51][0-8]: 1000 1000 1000 1000 037 038 042 043 
+		nodeElementTbl[52][0-8]: 1000 1000 1000 1000 038 039 043 044 
+		nodeElementTbl[53][0-8]: 1000 1000 1000 1000 039 1000 044 1000 
+		nodeElementTbl[54][0-8]: 1000 1000 1000 1000 1000 040 1000 045 
+		nodeElementTbl[55][0-8]: 1000 1000 1000 1000 040 041 045 046 
+		nodeElementTbl[56][0-8]: 1000 1000 1000 1000 041 042 046 047 
+		nodeElementTbl[57][0-8]: 1000 1000 1000 1000 042 043 047 048 
+		nodeElementTbl[58][0-8]: 1000 1000 1000 1000 043 044 048 049 
+		nodeElementTbl[59][0-8]: 1000 1000 1000 1000 044 1000 049 1000 
+		nodeElementTbl[60][0-8]: 1000 1000 1000 1000 1000 045 1000 1000 
+		nodeElementTbl[61][0-8]: 1000 1000 1000 1000 045 046 1000 1000 
+		nodeElementTbl[62][0-8]: 1000 1000 1000 1000 046 047 1000 1000 
+		nodeElementTbl[63][0-8]: 1000 1000 1000 1000 047 048 1000 1000 
+		nodeElementTbl[64][0-8]: 1000 1000 1000 1000 048 049 1000 1000 
+		nodeElementTbl[65][0-8]: 1000 1000 1000 1000 049 1000 1000 1000 
+		nodeElementTbl[66][0-8]: 1000 1000 1000 000 1000 1000 1000 050 
+		nodeElementTbl[67][0-8]: 1000 1000 000 001 1000 1000 050 051 
+		nodeElementTbl[68][0-8]: 1000 1000 001 002 1000 1000 051 052 
+		nodeElementTbl[69][0-8]: 1000 1000 002 003 1000 1000 052 053 
+		nodeElementTbl[70][0-8]: 1000 1000 003 004 1000 1000 053 054 
+		nodeElementTbl[71][0-8]: 1000 1000 004 1000 1000 1000 054 1000 
+		nodeElementTbl[72][0-8]: 1000 000 1000 005 1000 050 1000 055 
+		nodeElementTbl[73][0-8]: 000 001 005 006 050 051 055 056 
+		nodeElementTbl[74][0-8]: 001 002 006 007 051 052 056 057 
+		nodeElementTbl[75][0-8]: 002 003 007 008 052 053 057 058 
+		nodeElementTbl[76][0-8]: 003 004 008 009 053 054 058 059 
+		nodeElementTbl[77][0-8]: 004 1000 009 1000 054 1000 059 1000 
+		nodeElementTbl[78][0-8]: 1000 005 1000 010 1000 055 1000 060 
+		nodeElementTbl[79][0-8]: 005 006 010 011 055 056 060 061 
+		nodeElementTbl[80][0-8]: 006 007 011 012 056 057 061 062 
+		nodeElementTbl[81][0-8]: 007 008 012 013 057 058 062 063 
+		nodeElementTbl[82][0-8]: 008 009 013 014 058 059 063 064 
+		nodeElementTbl[83][0-8]: 009 1000 014 1000 059 1000 064 1000 
+		nodeElementTbl[84][0-8]: 1000 010 1000 015 1000 060 1000 065 
+		nodeElementTbl[85][0-8]: 010 011 015 016 060 061 065 066 
+		nodeElementTbl[86][0-8]: 011 012 016 017 061 062 066 067 
+		nodeElementTbl[87][0-8]: 012 013 017 018 062 063 067 068 
+		nodeElementTbl[88][0-8]: 013 014 018 019 063 064 068 069 
+		nodeElementTbl[89][0-8]: 014 1000 019 1000 064 1000 069 1000 
+		nodeElementTbl[90][0-8]: 1000 015 1000 020 1000 065 1000 070 
+		nodeElementTbl[91][0-8]: 015 016 020 021 065 066 070 071 
+		nodeElementTbl[92][0-8]: 016 017 021 022 066 067 071 072 
+		nodeElementTbl[93][0-8]: 017 018 022 023 067 068 072 073 
+		nodeElementTbl[94][0-8]: 018 019 023 024 068 069 073 074 
+		nodeElementTbl[95][0-8]: 019 1000 024 1000 069 1000 074 1000 
+		nodeElementTbl[96][0-8]: 1000 020 1000 025 1000 070 1000 075 
+		nodeElementTbl[97][0-8]: 020 021 025 026 070 071 075 076 
+		nodeElementTbl[98][0-8]: 021 022 026 027 071 072 076 077 
+		nodeElementTbl[99][0-8]: 022 023 027 028 072 073 077 078 
+		nodeElementTbl[100][0-8]: 023 024 028 029 073 074 078 079 
+		nodeElementTbl[101][0-8]: 024 1000 029 1000 074 1000 079 1000 
+		nodeElementTbl[102][0-8]: 1000 025 1000 030 1000 075 1000 080 
+		nodeElementTbl[103][0-8]: 025 026 030 031 075 076 080 081 
+		nodeElementTbl[104][0-8]: 026 027 031 032 076 077 081 082 
+		nodeElementTbl[105][0-8]: 027 028 032 033 077 078 082 083 
+		nodeElementTbl[106][0-8]: 028 029 033 034 078 079 083 084 
+		nodeElementTbl[107][0-8]: 029 1000 034 1000 079 1000 084 1000 
+		nodeElementTbl[108][0-8]: 1000 030 1000 035 1000 080 1000 085 
+		nodeElementTbl[109][0-8]: 030 031 035 036 080 081 085 086 
+		nodeElementTbl[110][0-8]: 031 032 036 037 081 082 086 087 
+		nodeElementTbl[111][0-8]: 032 033 037 038 082 083 087 088 
+		nodeElementTbl[112][0-8]: 033 034 038 039 083 084 088 089 
+		nodeElementTbl[113][0-8]: 034 1000 039 1000 084 1000 089 1000 
+		nodeElementTbl[114][0-8]: 1000 035 1000 040 1000 085 1000 090 
+		nodeElementTbl[115][0-8]: 035 036 040 041 085 086 090 091 
+		nodeElementTbl[116][0-8]: 036 037 041 042 086 087 091 092 
+		nodeElementTbl[117][0-8]: 037 038 042 043 087 088 092 093 
+		nodeElementTbl[118][0-8]: 038 039 043 044 088 089 093 094 
+		nodeElementTbl[119][0-8]: 039 1000 044 1000 089 1000 094 1000 
+		nodeElementTbl[120][0-8]: 1000 040 1000 045 1000 090 1000 095 
+		nodeElementTbl[121][0-8]: 040 041 045 046 090 091 095 096 
+		nodeElementTbl[122][0-8]: 041 042 046 047 091 092 096 097 
+		nodeElementTbl[123][0-8]: 042 043 047 048 092 093 097 098 
+		nodeElementTbl[124][0-8]: 043 044 048 049 093 094 098 099 
+		nodeElementTbl[125][0-8]: 044 1000 049 1000 094 1000 099 1000 
+		nodeElementTbl[126][0-8]: 1000 045 1000 1000 1000 095 1000 1000 
+		nodeElementTbl[127][0-8]: 045 046 1000 1000 095 096 1000 1000 
+		nodeElementTbl[128][0-8]: 046 047 1000 1000 096 097 1000 1000 
+		nodeElementTbl[129][0-8]: 047 048 1000 1000 097 098 1000 1000 
+		nodeElementTbl[130][0-8]: 048 049 1000 1000 098 099 1000 1000 
+		nodeElementTbl[131][0-8]: 049 1000 1000 1000 099 1000 1000 1000 
+		nodeElementTbl[132][0-8]: 1000 1000 1000 050 1000 1000 1000 100 
+		nodeElementTbl[133][0-8]: 1000 1000 050 051 1000 1000 100 101 
+		nodeElementTbl[134][0-8]: 1000 1000 051 052 1000 1000 101 102 
+		nodeElementTbl[135][0-8]: 1000 1000 052 053 1000 1000 102 103 
+		nodeElementTbl[136][0-8]: 1000 1000 053 054 1000 1000 103 104 
+		nodeElementTbl[137][0-8]: 1000 1000 054 1000 1000 1000 104 1000 
+		nodeElementTbl[138][0-8]: 1000 050 1000 055 1000 100 1000 105 
+		nodeElementTbl[139][0-8]: 050 051 055 056 100 101 105 106 
+		nodeElementTbl[140][0-8]: 051 052 056 057 101 102 106 107 
+		nodeElementTbl[141][0-8]: 052 053 057 058 102 103 107 108 
+		nodeElementTbl[142][0-8]: 053 054 058 059 103 104 108 109 
+		nodeElementTbl[143][0-8]: 054 1000 059 1000 104 1000 109 1000 
+		nodeElementTbl[144][0-8]: 1000 055 1000 060 1000 105 1000 110 
+		nodeElementTbl[145][0-8]: 055 056 060 061 105 106 110 111 
+		nodeElementTbl[146][0-8]: 056 057 061 062 106 107 111 112 
+		nodeElementTbl[147][0-8]: 057 058 062 063 107 108 112 113 
+		nodeElementTbl[148][0-8]: 058 059 063 064 108 109 113 114 
+		nodeElementTbl[149][0-8]: 059 1000 064 1000 109 1000 114 1000 
+		nodeElementTbl[150][0-8]: 1000 060 1000 065 1000 110 1000 115 
+		nodeElementTbl[151][0-8]: 060 061 065 066 110 111 115 116 
+		nodeElementTbl[152][0-8]: 061 062 066 067 111 112 116 117 
+		nodeElementTbl[153][0-8]: 062 063 067 068 112 113 117 118 
+		nodeElementTbl[154][0-8]: 063 064 068 069 113 114 118 119 
+		nodeElementTbl[155][0-8]: 064 1000 069 1000 114 1000 119 1000 
+		nodeElementTbl[156][0-8]: 1000 065 1000 070 1000 115 1000 120 
+		nodeElementTbl[157][0-8]: 065 066 070 071 115 116 120 121 
+		nodeElementTbl[158][0-8]: 066 067 071 072 116 117 121 122 
+		nodeElementTbl[159][0-8]: 067 068 072 073 117 118 122 123 
+		nodeElementTbl[160][0-8]: 068 069 073 074 118 119 123 124 
+		nodeElementTbl[161][0-8]: 069 1000 074 1000 119 1000 124 1000 
+		nodeElementTbl[162][0-8]: 1000 070 1000 075 1000 120 1000 125 
+		nodeElementTbl[163][0-8]: 070 071 075 076 120 121 125 126 
+		nodeElementTbl[164][0-8]: 071 072 076 077 121 122 126 127 
+		nodeElementTbl[165][0-8]: 072 073 077 078 122 123 127 128 
+		nodeElementTbl[166][0-8]: 073 074 078 079 123 124 128 129 
+		nodeElementTbl[167][0-8]: 074 1000 079 1000 124 1000 129 1000 
+		nodeElementTbl[168][0-8]: 1000 075 1000 080 1000 125 1000 130 
+		nodeElementTbl[169][0-8]: 075 076 080 081 125 126 130 131 
+		nodeElementTbl[170][0-8]: 076 077 081 082 126 127 131 132 
+		nodeElementTbl[171][0-8]: 077 078 082 083 127 128 132 133 
+		nodeElementTbl[172][0-8]: 078 079 083 084 128 129 133 134 
+		nodeElementTbl[173][0-8]: 079 1000 084 1000 129 1000 134 1000 
+		nodeElementTbl[174][0-8]: 1000 080 1000 085 1000 130 1000 135 
+		nodeElementTbl[175][0-8]: 080 081 085 086 130 131 135 136 
+		nodeElementTbl[176][0-8]: 081 082 086 087 131 132 136 137 
+		nodeElementTbl[177][0-8]: 082 083 087 088 132 133 137 138 
+		nodeElementTbl[178][0-8]: 083 084 088 089 133 134 138 139 
+		nodeElementTbl[179][0-8]: 084 1000 089 1000 134 1000 139 1000 
+		nodeElementTbl[180][0-8]: 1000 085 1000 090 1000 135 1000 140 
+		nodeElementTbl[181][0-8]: 085 086 090 091 135 136 140 141 
+		nodeElementTbl[182][0-8]: 086 087 091 092 136 137 141 142 
+		nodeElementTbl[183][0-8]: 087 088 092 093 137 138 142 143 
+		nodeElementTbl[184][0-8]: 088 089 093 094 138 139 143 144 
+		nodeElementTbl[185][0-8]: 089 1000 094 1000 139 1000 144 1000 
+		nodeElementTbl[186][0-8]: 1000 090 1000 095 1000 140 1000 145 
+		nodeElementTbl[187][0-8]: 090 091 095 096 140 141 145 146 
+		nodeElementTbl[188][0-8]: 091 092 096 097 141 142 146 147 
+		nodeElementTbl[189][0-8]: 092 093 097 098 142 143 147 148 
+		nodeElementTbl[190][0-8]: 093 094 098 099 143 144 148 149 
+		nodeElementTbl[191][0-8]: 094 1000 099 1000 144 1000 149 1000 
+		nodeElementTbl[192][0-8]: 1000 095 1000 1000 1000 145 1000 1000 
+		nodeElementTbl[193][0-8]: 095 096 1000 1000 145 146 1000 1000 
+		nodeElementTbl[194][0-8]: 096 097 1000 1000 146 147 1000 1000 
+		nodeElementTbl[195][0-8]: 097 098 1000 1000 147 148 1000 1000 
+		nodeElementTbl[196][0-8]: 098 099 1000 1000 148 149 1000 1000 
+		nodeElementTbl[197][0-8]: 099 1000 1000 1000 149 1000 1000 1000 
+		nodeElementTbl[198][0-8]: 1000 1000 1000 100 1000 1000 1000 150 
+		nodeElementTbl[199][0-8]: 1000 1000 100 101 1000 1000 150 151 
+		nodeElementTbl[200][0-8]: 1000 1000 101 102 1000 1000 151 152 
+		nodeElementTbl[201][0-8]: 1000 1000 102 103 1000 1000 152 153 
+		nodeElementTbl[202][0-8]: 1000 1000 103 104 1000 1000 153 154 
+		nodeElementTbl[203][0-8]: 1000 1000 104 1000 1000 1000 154 1000 
+		nodeElementTbl[204][0-8]: 1000 100 1000 105 1000 150 1000 155 
+		nodeElementTbl[205][0-8]: 100 101 105 106 150 151 155 156 
+		nodeElementTbl[206][0-8]: 101 102 106 107 151 152 156 157 
+		nodeElementTbl[207][0-8]: 102 103 107 108 152 153 157 158 
+		nodeElementTbl[208][0-8]: 103 104 108 109 153 154 158 159 
+		nodeElementTbl[209][0-8]: 104 1000 109 1000 154 1000 159 1000 
+		nodeElementTbl[210][0-8]: 1000 105 1000 110 1000 155 1000 160 
+		nodeElementTbl[211][0-8]: 105 106 110 111 155 156 160 161 
+		nodeElementTbl[212][0-8]: 106 107 111 112 156 157 161 162 
+		nodeElementTbl[213][0-8]: 107 108 112 113 157 158 162 163 
+		nodeElementTbl[214][0-8]: 108 109 113 114 158 159 163 164 
+		nodeElementTbl[215][0-8]: 109 1000 114 1000 159 1000 164 1000 
+		nodeElementTbl[216][0-8]: 1000 110 1000 115 1000 160 1000 165 
+		nodeElementTbl[217][0-8]: 110 111 115 116 160 161 165 166 
+		nodeElementTbl[218][0-8]: 111 112 116 117 161 162 166 167 
+		nodeElementTbl[219][0-8]: 112 113 117 118 162 163 167 168 
+		nodeElementTbl[220][0-8]: 113 114 118 119 163 164 168 169 
+		nodeElementTbl[221][0-8]: 114 1000 119 1000 164 1000 169 1000 
+		nodeElementTbl[222][0-8]: 1000 115 1000 120 1000 165 1000 170 
+		nodeElementTbl[223][0-8]: 115 116 120 121 165 166 170 171 
+		nodeElementTbl[224][0-8]: 116 117 121 122 166 167 171 172 
+		nodeElementTbl[225][0-8]: 117 118 122 123 167 168 172 173 
+		nodeElementTbl[226][0-8]: 118 119 123 124 168 169 173 174 
+		nodeElementTbl[227][0-8]: 119 1000 124 1000 169 1000 174 1000 
+		nodeElementTbl[228][0-8]: 1000 120 1000 125 1000 170 1000 175 
+		nodeElementTbl[229][0-8]: 120 121 125 126 170 171 175 176 
+		nodeElementTbl[230][0-8]: 121 122 126 127 171 172 176 177 
+		nodeElementTbl[231][0-8]: 122 123 127 128 172 173 177 178 
+		nodeElementTbl[232][0-8]: 123 124 128 129 173 174 178 179 
+		nodeElementTbl[233][0-8]: 124 1000 129 1000 174 1000 179 1000 
+		nodeElementTbl[234][0-8]: 1000 125 1000 130 1000 175 1000 180 
+		nodeElementTbl[235][0-8]: 125 126 130 131 175 176 180 181 
+		nodeElementTbl[236][0-8]: 126 127 131 132 176 177 181 182 
+		nodeElementTbl[237][0-8]: 127 128 132 133 177 178 182 183 
+		nodeElementTbl[238][0-8]: 128 129 133 134 178 179 183 184 
+		nodeElementTbl[239][0-8]: 129 1000 134 1000 179 1000 184 1000 
+		nodeElementTbl[240][0-8]: 1000 130 1000 135 1000 180 1000 185 
+		nodeElementTbl[241][0-8]: 130 131 135 136 180 181 185 186 
+		nodeElementTbl[242][0-8]: 131 132 136 137 181 182 186 187 
+		nodeElementTbl[243][0-8]: 132 133 137 138 182 183 187 188 
+		nodeElementTbl[244][0-8]: 133 134 138 139 183 184 188 189 
+		nodeElementTbl[245][0-8]: 134 1000 139 1000 184 1000 189 1000 
+		nodeElementTbl[246][0-8]: 1000 135 1000 140 1000 185 1000 190 
+		nodeElementTbl[247][0-8]: 135 136 140 141 185 186 190 191 
+		nodeElementTbl[248][0-8]: 136 137 141 142 186 187 191 192 
+		nodeElementTbl[249][0-8]: 137 138 142 143 187 188 192 193 
+		nodeElementTbl[250][0-8]: 138 139 143 144 188 189 193 194 
+		nodeElementTbl[251][0-8]: 139 1000 144 1000 189 1000 194 1000 
+		nodeElementTbl[252][0-8]: 1000 140 1000 145 1000 190 1000 195 
+		nodeElementTbl[253][0-8]: 140 141 145 146 190 191 195 196 
+		nodeElementTbl[254][0-8]: 141 142 146 147 191 192 196 197 
+		nodeElementTbl[255][0-8]: 142 143 147 148 192 193 197 198 
+		nodeElementTbl[256][0-8]: 143 144 148 149 193 194 198 199 
+		nodeElementTbl[257][0-8]: 144 1000 149 1000 194 1000 199 1000 
+		nodeElementTbl[258][0-8]: 1000 145 1000 1000 1000 195 1000 1000 
+		nodeElementTbl[259][0-8]: 145 146 1000 1000 195 196 1000 1000 
+		nodeElementTbl[260][0-8]: 146 147 1000 1000 196 197 1000 1000 
+		nodeElementTbl[261][0-8]: 147 148 1000 1000 197 198 1000 1000 
+		nodeElementTbl[262][0-8]: 148 149 1000 1000 198 199 1000 1000 
+		nodeElementTbl[263][0-8]: 149 1000 1000 1000 199 1000 1000 1000 
+		nodeElementTbl[264][0-8]: 1000 1000 1000 150 1000 1000 1000 200 
+		nodeElementTbl[265][0-8]: 1000 1000 150 151 1000 1000 200 201 
+		nodeElementTbl[266][0-8]: 1000 1000 151 152 1000 1000 201 202 
+		nodeElementTbl[267][0-8]: 1000 1000 152 153 1000 1000 202 203 
+		nodeElementTbl[268][0-8]: 1000 1000 153 154 1000 1000 203 204 
+		nodeElementTbl[269][0-8]: 1000 1000 154 1000 1000 1000 204 1000 
+		nodeElementTbl[270][0-8]: 1000 150 1000 155 1000 200 1000 205 
+		nodeElementTbl[271][0-8]: 150 151 155 156 200 201 205 206 
+		nodeElementTbl[272][0-8]: 151 152 156 157 201 202 206 207 
+		nodeElementTbl[273][0-8]: 152 153 157 158 202 203 207 208 
+		nodeElementTbl[274][0-8]: 153 154 158 159 203 204 208 209 
+		nodeElementTbl[275][0-8]: 154 1000 159 1000 204 1000 209 1000 
+		nodeElementTbl[276][0-8]: 1000 155 1000 160 1000 205 1000 210 
+		nodeElementTbl[277][0-8]: 155 156 160 161 205 206 210 211 
+		nodeElementTbl[278][0-8]: 156 157 161 162 206 207 211 212 
+		nodeElementTbl[279][0-8]: 157 158 162 163 207 208 212 213 
+		nodeElementTbl[280][0-8]: 158 159 163 164 208 209 213 214 
+		nodeElementTbl[281][0-8]: 159 1000 164 1000 209 1000 214 1000 
+		nodeElementTbl[282][0-8]: 1000 160 1000 165 1000 210 1000 215 
+		nodeElementTbl[283][0-8]: 160 161 165 166 210 211 215 216 
+		nodeElementTbl[284][0-8]: 161 162 166 167 211 212 216 217 
+		nodeElementTbl[285][0-8]: 162 163 167 168 212 213 217 218 
+		nodeElementTbl[286][0-8]: 163 164 168 169 213 214 218 219 
+		nodeElementTbl[287][0-8]: 164 1000 169 1000 214 1000 219 1000 
+		nodeElementTbl[288][0-8]: 1000 165 1000 170 1000 215 1000 220 
+		nodeElementTbl[289][0-8]: 165 166 170 171 215 216 220 221 
+		nodeElementTbl[290][0-8]: 166 167 171 172 216 217 221 222 
+		nodeElementTbl[291][0-8]: 167 168 172 173 217 218 222 223 
+		nodeElementTbl[292][0-8]: 168 169 173 174 218 219 223 224 
+		nodeElementTbl[293][0-8]: 169 1000 174 1000 219 1000 224 1000 
+		nodeElementTbl[294][0-8]: 1000 170 1000 175 1000 220 1000 225 
+		nodeElementTbl[295][0-8]: 170 171 175 176 220 221 225 226 
+		nodeElementTbl[296][0-8]: 171 172 176 177 221 222 226 227 
+		nodeElementTbl[297][0-8]: 172 173 177 178 222 223 227 228 
+		nodeElementTbl[298][0-8]: 173 174 178 179 223 224 228 229 
+		nodeElementTbl[299][0-8]: 174 1000 179 1000 224 1000 229 1000 
+		nodeElementTbl[300][0-8]: 1000 175 1000 180 1000 225 1000 230 
+		nodeElementTbl[301][0-8]: 175 176 180 181 225 226 230 231 
+		nodeElementTbl[302][0-8]: 176 177 181 182 226 227 231 232 
+		nodeElementTbl[303][0-8]: 177 178 182 183 227 228 232 233 
+		nodeElementTbl[304][0-8]: 178 179 183 184 228 229 233 234 
+		nodeElementTbl[305][0-8]: 179 1000 184 1000 229 1000 234 1000 
+		nodeElementTbl[306][0-8]: 1000 180 1000 185 1000 230 1000 235 
+		nodeElementTbl[307][0-8]: 180 181 185 186 230 231 235 236 
+		nodeElementTbl[308][0-8]: 181 182 186 187 231 232 236 237 
+		nodeElementTbl[309][0-8]: 182 183 187 188 232 233 237 238 
+		nodeElementTbl[310][0-8]: 183 184 188 189 233 234 238 239 
+		nodeElementTbl[311][0-8]: 184 1000 189 1000 234 1000 239 1000 
+		nodeElementTbl[312][0-8]: 1000 185 1000 190 1000 235 1000 240 
+		nodeElementTbl[313][0-8]: 185 186 190 191 235 236 240 241 
+		nodeElementTbl[314][0-8]: 186 187 191 192 236 237 241 242 
+		nodeElementTbl[315][0-8]: 187 188 192 193 237 238 242 243 
+		nodeElementTbl[316][0-8]: 188 189 193 194 238 239 243 244 
+		nodeElementTbl[317][0-8]: 189 1000 194 1000 239 1000 244 1000 
+		nodeElementTbl[318][0-8]: 1000 190 1000 195 1000 240 1000 245 
+		nodeElementTbl[319][0-8]: 190 191 195 196 240 241 245 246 
+		nodeElementTbl[320][0-8]: 191 192 196 197 241 242 246 247 
+		nodeElementTbl[321][0-8]: 192 193 197 198 242 243 247 248 
+		nodeElementTbl[322][0-8]: 193 194 198 199 243 244 248 249 
+		nodeElementTbl[323][0-8]: 194 1000 199 1000 244 1000 249 1000 
+		nodeElementTbl[324][0-8]: 1000 195 1000 1000 1000 245 1000 1000 
+		nodeElementTbl[325][0-8]: 195 196 1000 1000 245 246 1000 1000 
+		nodeElementTbl[326][0-8]: 196 197 1000 1000 246 247 1000 1000 
+		nodeElementTbl[327][0-8]: 197 198 1000 1000 247 248 1000 1000 
+		nodeElementTbl[328][0-8]: 198 199 1000 1000 248 249 1000 1000 
+		nodeElementTbl[329][0-8]: 199 1000 1000 1000 249 1000 1000 1000 
+		nodeElementTbl[330][0-8]: 1000 1000 1000 200 1000 1000 1000 250 
+		nodeElementTbl[331][0-8]: 1000 1000 200 201 1000 1000 250 251 
+		nodeElementTbl[332][0-8]: 1000 1000 201 202 1000 1000 251 252 
+		nodeElementTbl[333][0-8]: 1000 1000 202 203 1000 1000 252 253 
+		nodeElementTbl[334][0-8]: 1000 1000 203 204 1000 1000 253 254 
+		nodeElementTbl[335][0-8]: 1000 1000 204 1000 1000 1000 254 1000 
+		nodeElementTbl[336][0-8]: 1000 200 1000 205 1000 250 1000 255 
+		nodeElementTbl[337][0-8]: 200 201 205 206 250 251 255 256 
+		nodeElementTbl[338][0-8]: 201 202 206 207 251 252 256 257 
+		nodeElementTbl[339][0-8]: 202 203 207 208 252 253 257 258 
+		nodeElementTbl[340][0-8]: 203 204 208 209 253 254 258 259 
+		nodeElementTbl[341][0-8]: 204 1000 209 1000 254 1000 259 1000 
+		nodeElementTbl[342][0-8]: 1000 205 1000 210 1000 255 1000 260 
+		nodeElementTbl[343][0-8]: 205 206 210 211 255 256 260 261 
+		nodeElementTbl[344][0-8]: 206 207 211 212 256 257 261 262 
+		nodeElementTbl[345][0-8]: 207 208 212 213 257 258 262 263 
+		nodeElementTbl[346][0-8]: 208 209 213 214 258 259 263 264 
+		nodeElementTbl[347][0-8]: 209 1000 214 1000 259 1000 264 1000 
+		nodeElementTbl[348][0-8]: 1000 210 1000 215 1000 260 1000 265 
+		nodeElementTbl[349][0-8]: 210 211 215 216 260 261 265 266 
+		nodeElementTbl[350][0-8]: 211 212 216 217 261 262 266 267 
+		nodeElementTbl[351][0-8]: 212 213 217 218 262 263 267 268 
+		nodeElementTbl[352][0-8]: 213 214 218 219 263 264 268 269 
+		nodeElementTbl[353][0-8]: 214 1000 219 1000 264 1000 269 1000 
+		nodeElementTbl[354][0-8]: 1000 215 1000 220 1000 265 1000 270 
+		nodeElementTbl[355][0-8]: 215 216 220 221 265 266 270 271 
+		nodeElementTbl[356][0-8]: 216 217 221 222 266 267 271 272 
+		nodeElementTbl[357][0-8]: 217 218 222 223 267 268 272 273 
+		nodeElementTbl[358][0-8]: 218 219 223 224 268 269 273 274 
+		nodeElementTbl[359][0-8]: 219 1000 224 1000 269 1000 274 1000 
+		nodeElementTbl[360][0-8]: 1000 220 1000 225 1000 270 1000 275 
+		nodeElementTbl[361][0-8]: 220 221 225 226 270 271 275 276 
+		nodeElementTbl[362][0-8]: 221 222 226 227 271 272 276 277 
+		nodeElementTbl[363][0-8]: 222 223 227 228 272 273 277 278 
+		nodeElementTbl[364][0-8]: 223 224 228 229 273 274 278 279 
+		nodeElementTbl[365][0-8]: 224 1000 229 1000 274 1000 279 1000 
+		nodeElementTbl[366][0-8]: 1000 225 1000 230 1000 275 1000 280 
+		nodeElementTbl[367][0-8]: 225 226 230 231 275 276 280 281 
+		nodeElementTbl[368][0-8]: 226 227 231 232 276 277 281 282 
+		nodeElementTbl[369][0-8]: 227 228 232 233 277 278 282 283 
+		nodeElementTbl[370][0-8]: 228 229 233 234 278 279 283 284 
+		nodeElementTbl[371][0-8]: 229 1000 234 1000 279 1000 284 1000 
+		nodeElementTbl[372][0-8]: 1000 230 1000 235 1000 280 1000 285 
+		nodeElementTbl[373][0-8]: 230 231 235 236 280 281 285 286 
+		nodeElementTbl[374][0-8]: 231 232 236 237 281 282 286 287 
+		nodeElementTbl[375][0-8]: 232 233 237 238 282 283 287 288 
+		nodeElementTbl[376][0-8]: 233 234 238 239 283 284 288 289 
+		nodeElementTbl[377][0-8]: 234 1000 239 1000 284 1000 289 1000 
+		nodeElementTbl[378][0-8]: 1000 235 1000 240 1000 285 1000 290 
+		nodeElementTbl[379][0-8]: 235 236 240 241 285 286 290 291 
+		nodeElementTbl[380][0-8]: 236 237 241 242 286 287 291 292 
+		nodeElementTbl[381][0-8]: 237 238 242 243 287 288 292 293 
+		nodeElementTbl[382][0-8]: 238 239 243 244 288 289 293 294 
+		nodeElementTbl[383][0-8]: 239 1000 244 1000 289 1000 294 1000 
+		nodeElementTbl[384][0-8]: 1000 240 1000 245 1000 290 1000 295 
+		nodeElementTbl[385][0-8]: 240 241 245 246 290 291 295 296 
+		nodeElementTbl[386][0-8]: 241 242 246 247 291 292 296 297 
+		nodeElementTbl[387][0-8]: 242 243 247 248 292 293 297 298 
+		nodeElementTbl[388][0-8]: 243 244 248 249 293 294 298 299 
+		nodeElementTbl[389][0-8]: 244 1000 249 1000 294 1000 299 1000 
+		nodeElementTbl[390][0-8]: 1000 245 1000 1000 1000 295 1000 1000 
+		nodeElementTbl[391][0-8]: 245 246 1000 1000 295 296 1000 1000 
+		nodeElementTbl[392][0-8]: 246 247 1000 1000 296 297 1000 1000 
+		nodeElementTbl[393][0-8]: 247 248 1000 1000 297 298 1000 1000 
+		nodeElementTbl[394][0-8]: 248 249 1000 1000 298 299 1000 1000 
+		nodeElementTbl[395][0-8]: 249 1000 1000 1000 299 1000 1000 1000 
+		nodeElementTbl[396][0-8]: 1000 1000 1000 250 1000 1000 1000 300 
+		nodeElementTbl[397][0-8]: 1000 1000 250 251 1000 1000 300 301 
+		nodeElementTbl[398][0-8]: 1000 1000 251 252 1000 1000 301 302 
+		nodeElementTbl[399][0-8]: 1000 1000 252 253 1000 1000 302 303 
+		nodeElementTbl[400][0-8]: 1000 1000 253 254 1000 1000 303 304 
+		nodeElementTbl[401][0-8]: 1000 1000 254 1000 1000 1000 304 1000 
+		nodeElementTbl[402][0-8]: 1000 250 1000 255 1000 300 1000 305 
+		nodeElementTbl[403][0-8]: 250 251 255 256 300 301 305 306 
+		nodeElementTbl[404][0-8]: 251 252 256 257 301 302 306 307 
+		nodeElementTbl[405][0-8]: 252 253 257 258 302 303 307 308 
+		nodeElementTbl[406][0-8]: 253 254 258 259 303 304 308 309 
+		nodeElementTbl[407][0-8]: 254 1000 259 1000 304 1000 309 1000 
+		nodeElementTbl[408][0-8]: 1000 255 1000 260 1000 305 1000 310 
+		nodeElementTbl[409][0-8]: 255 256 260 261 305 306 310 311 
+		nodeElementTbl[410][0-8]: 256 257 261 262 306 307 311 312 
+		nodeElementTbl[411][0-8]: 257 258 262 263 307 308 312 313 
+		nodeElementTbl[412][0-8]: 258 259 263 264 308 309 313 314 
+		nodeElementTbl[413][0-8]: 259 1000 264 1000 309 1000 314 1000 
+		nodeElementTbl[414][0-8]: 1000 260 1000 265 1000 310 1000 315 
+		nodeElementTbl[415][0-8]: 260 261 265 266 310 311 315 316 
+		nodeElementTbl[416][0-8]: 261 262 266 267 311 312 316 317 
+		nodeElementTbl[417][0-8]: 262 263 267 268 312 313 317 318 
+		nodeElementTbl[418][0-8]: 263 264 268 269 313 314 318 319 
+		nodeElementTbl[419][0-8]: 264 1000 269 1000 314 1000 319 1000 
+		nodeElementTbl[420][0-8]: 1000 265 1000 270 1000 315 1000 320 
+		nodeElementTbl[421][0-8]: 265 266 270 271 315 316 320 321 
+		nodeElementTbl[422][0-8]: 266 267 271 272 316 317 321 322 
+		nodeElementTbl[423][0-8]: 267 268 272 273 317 318 322 323 
+		nodeElementTbl[424][0-8]: 268 269 273 274 318 319 323 324 
+		nodeElementTbl[425][0-8]: 269 1000 274 1000 319 1000 324 1000 
+		nodeElementTbl[426][0-8]: 1000 270 1000 275 1000 320 1000 325 
+		nodeElementTbl[427][0-8]: 270 271 275 276 320 321 325 326 
+		nodeElementTbl[428][0-8]: 271 272 276 277 321 322 326 327 
+		nodeElementTbl[429][0-8]: 272 273 277 278 322 323 327 328 
+		nodeElementTbl[430][0-8]: 273 274 278 279 323 324 328 329 
+		nodeElementTbl[431][0-8]: 274 1000 279 1000 324 1000 329 1000 
+		nodeElementTbl[432][0-8]: 1000 275 1000 280 1000 325 1000 330 
+		nodeElementTbl[433][0-8]: 275 276 280 281 325 326 330 331 
+		nodeElementTbl[434][0-8]: 276 277 281 282 326 327 331 332 
+		nodeElementTbl[435][0-8]: 277 278 282 283 327 328 332 333 
+		nodeElementTbl[436][0-8]: 278 279 283 284 328 329 333 334 
+		nodeElementTbl[437][0-8]: 279 1000 284 1000 329 1000 334 1000 
+		nodeElementTbl[438][0-8]: 1000 280 1000 285 1000 330 1000 335 
+		nodeElementTbl[439][0-8]: 280 281 285 286 330 331 335 336 
+		nodeElementTbl[440][0-8]: 281 282 286 287 331 332 336 337 
+		nodeElementTbl[441][0-8]: 282 283 287 288 332 333 337 338 
+		nodeElementTbl[442][0-8]: 283 284 288 289 333 334 338 339 
+		nodeElementTbl[443][0-8]: 284 1000 289 1000 334 1000 339 1000 
+		nodeElementTbl[444][0-8]: 1000 285 1000 290 1000 335 1000 340 
+		nodeElementTbl[445][0-8]: 285 286 290 291 335 336 340 341 
+		nodeElementTbl[446][0-8]: 286 287 291 292 336 337 341 342 
+		nodeElementTbl[447][0-8]: 287 288 292 293 337 338 342 343 
+		nodeElementTbl[448][0-8]: 288 289 293 294 338 339 343 344 
+		nodeElementTbl[449][0-8]: 289 1000 294 1000 339 1000 344 1000 
+		nodeElementTbl[450][0-8]: 1000 290 1000 295 1000 340 1000 345 
+		nodeElementTbl[451][0-8]: 290 291 295 296 340 341 345 346 
+		nodeElementTbl[452][0-8]: 291 292 296 297 341 342 346 347 
+		nodeElementTbl[453][0-8]: 292 293 297 298 342 343 347 348 
+		nodeElementTbl[454][0-8]: 293 294 298 299 343 344 348 349 
+		nodeElementTbl[455][0-8]: 294 1000 299 1000 344 1000 349 1000 
+		nodeElementTbl[456][0-8]: 1000 295 1000 1000 1000 345 1000 1000 
+		nodeElementTbl[457][0-8]: 295 296 1000 1000 345 346 1000 1000 
+		nodeElementTbl[458][0-8]: 296 297 1000 1000 346 347 1000 1000 
+		nodeElementTbl[459][0-8]: 297 298 1000 1000 347 348 1000 1000 
+		nodeElementTbl[460][0-8]: 298 299 1000 1000 348 349 1000 1000 
+		nodeElementTbl[461][0-8]: 299 1000 1000 1000 349 1000 1000 1000 
+		nodeElementTbl[462][0-8]: 1000 1000 1000 300 1000 1000 1000 350 
+		nodeElementTbl[463][0-8]: 1000 1000 300 301 1000 1000 350 351 
+		nodeElementTbl[464][0-8]: 1000 1000 301 302 1000 1000 351 352 
+		nodeElementTbl[465][0-8]: 1000 1000 302 303 1000 1000 352 353 
+		nodeElementTbl[466][0-8]: 1000 1000 303 304 1000 1000 353 354 
+		nodeElementTbl[467][0-8]: 1000 1000 304 1000 1000 1000 354 1000 
+		nodeElementTbl[468][0-8]: 1000 300 1000 305 1000 350 1000 355 
+		nodeElementTbl[469][0-8]: 300 301 305 306 350 351 355 356 
+		nodeElementTbl[470][0-8]: 301 302 306 307 351 352 356 357 
+		nodeElementTbl[471][0-8]: 302 303 307 308 352 353 357 358 
+		nodeElementTbl[472][0-8]: 303 304 308 309 353 354 358 359 
+		nodeElementTbl[473][0-8]: 304 1000 309 1000 354 1000 359 1000 
+		nodeElementTbl[474][0-8]: 1000 305 1000 310 1000 355 1000 360 
+		nodeElementTbl[475][0-8]: 305 306 310 311 355 356 360 361 
+		nodeElementTbl[476][0-8]: 306 307 311 312 356 357 361 362 
+		nodeElementTbl[477][0-8]: 307 308 312 313 357 358 362 363 
+		nodeElementTbl[478][0-8]: 308 309 313 314 358 359 363 364 
+		nodeElementTbl[479][0-8]: 309 1000 314 1000 359 1000 364 1000 
+		nodeElementTbl[480][0-8]: 1000 310 1000 315 1000 360 1000 365 
+		nodeElementTbl[481][0-8]: 310 311 315 316 360 361 365 366 
+		nodeElementTbl[482][0-8]: 311 312 316 317 361 362 366 367 
+		nodeElementTbl[483][0-8]: 312 313 317 318 362 363 367 368 
+		nodeElementTbl[484][0-8]: 313 314 318 319 363 364 368 369 
+		nodeElementTbl[485][0-8]: 314 1000 319 1000 364 1000 369 1000 
+		nodeElementTbl[486][0-8]: 1000 315 1000 320 1000 365 1000 370 
+		nodeElementTbl[487][0-8]: 315 316 320 321 365 366 370 371 
+		nodeElementTbl[488][0-8]: 316 317 321 322 366 367 371 372 
+		nodeElementTbl[489][0-8]: 317 318 322 323 367 368 372 373 
+		nodeElementTbl[490][0-8]: 318 319 323 324 368 369 373 374 
+		nodeElementTbl[491][0-8]: 319 1000 324 1000 369 1000 374 1000 
+		nodeElementTbl[492][0-8]: 1000 320 1000 325 1000 370 1000 375 
+		nodeElementTbl[493][0-8]: 320 321 325 326 370 371 375 376 
+		nodeElementTbl[494][0-8]: 321 322 326 327 371 372 376 377 
+		nodeElementTbl[495][0-8]: 322 323 327 328 372 373 377 378 
+		nodeElementTbl[496][0-8]: 323 324 328 329 373 374 378 379 
+		nodeElementTbl[497][0-8]: 324 1000 329 1000 374 1000 379 1000 
+		nodeElementTbl[498][0-8]: 1000 325 1000 330 1000 375 1000 380 
+		nodeElementTbl[499][0-8]: 325 326 330 331 375 376 380 381 
+		nodeElementTbl[500][0-8]: 326 327 331 332 376 377 381 382 
+		nodeElementTbl[501][0-8]: 327 328 332 333 377 378 382 383 
+		nodeElementTbl[502][0-8]: 328 329 333 334 378 379 383 384 
+		nodeElementTbl[503][0-8]: 329 1000 334 1000 379 1000 384 1000 
+		nodeElementTbl[504][0-8]: 1000 330 1000 335 1000 380 1000 385 
+		nodeElementTbl[505][0-8]: 330 331 335 336 380 381 385 386 
+		nodeElementTbl[506][0-8]: 331 332 336 337 381 382 386 387 
+		nodeElementTbl[507][0-8]: 332 333 337 338 382 383 387 388 
+		nodeElementTbl[508][0-8]: 333 334 338 339 383 384 388 389 
+		nodeElementTbl[509][0-8]: 334 1000 339 1000 384 1000 389 1000 
+		nodeElementTbl[510][0-8]: 1000 335 1000 340 1000 385 1000 390 
+		nodeElementTbl[511][0-8]: 335 336 340 341 385 386 390 391 
+		nodeElementTbl[512][0-8]: 336 337 341 342 386 387 391 392 
+		nodeElementTbl[513][0-8]: 337 338 342 343 387 388 392 393 
+		nodeElementTbl[514][0-8]: 338 339 343 344 388 389 393 394 
+		nodeElementTbl[515][0-8]: 339 1000 344 1000 389 1000 394 1000 
+		nodeElementTbl[516][0-8]: 1000 340 1000 345 1000 390 1000 395 
+		nodeElementTbl[517][0-8]: 340 341 345 346 390 391 395 396 
+		nodeElementTbl[518][0-8]: 341 342 346 347 391 392 396 397 
+		nodeElementTbl[519][0-8]: 342 343 347 348 392 393 397 398 
+		nodeElementTbl[520][0-8]: 343 344 348 349 393 394 398 399 
+		nodeElementTbl[521][0-8]: 344 1000 349 1000 394 1000 399 1000 
+		nodeElementTbl[522][0-8]: 1000 345 1000 1000 1000 395 1000 1000 
+		nodeElementTbl[523][0-8]: 345 346 1000 1000 395 396 1000 1000 
+		nodeElementTbl[524][0-8]: 346 347 1000 1000 396 397 1000 1000 
+		nodeElementTbl[525][0-8]: 347 348 1000 1000 397 398 1000 1000 
+		nodeElementTbl[526][0-8]: 348 349 1000 1000 398 399 1000 1000 
+		nodeElementTbl[527][0-8]: 349 1000 1000 1000 399 1000 1000 1000 
+		nodeElementTbl[528][0-8]: 1000 1000 1000 350 1000 1000 1000 400 
+		nodeElementTbl[529][0-8]: 1000 1000 350 351 1000 1000 400 401 
+		nodeElementTbl[530][0-8]: 1000 1000 351 352 1000 1000 401 402 
+		nodeElementTbl[531][0-8]: 1000 1000 352 353 1000 1000 402 403 
+		nodeElementTbl[532][0-8]: 1000 1000 353 354 1000 1000 403 404 
+		nodeElementTbl[533][0-8]: 1000 1000 354 1000 1000 1000 404 1000 
+		nodeElementTbl[534][0-8]: 1000 350 1000 355 1000 400 1000 405 
+		nodeElementTbl[535][0-8]: 350 351 355 356 400 401 405 406 
+		nodeElementTbl[536][0-8]: 351 352 356 357 401 402 406 407 
+		nodeElementTbl[537][0-8]: 352 353 357 358 402 403 407 408 
+		nodeElementTbl[538][0-8]: 353 354 358 359 403 404 408 409 
+		nodeElementTbl[539][0-8]: 354 1000 359 1000 404 1000 409 1000 
+		nodeElementTbl[540][0-8]: 1000 355 1000 360 1000 405 1000 410 
+		nodeElementTbl[541][0-8]: 355 356 360 361 405 406 410 411 
+		nodeElementTbl[542][0-8]: 356 357 361 362 406 407 411 412 
+		nodeElementTbl[543][0-8]: 357 358 362 363 407 408 412 413 
+		nodeElementTbl[544][0-8]: 358 359 363 364 408 409 413 414 
+		nodeElementTbl[545][0-8]: 359 1000 364 1000 409 1000 414 1000 
+		nodeElementTbl[546][0-8]: 1000 360 1000 365 1000 410 1000 415 
+		nodeElementTbl[547][0-8]: 360 361 365 366 410 411 415 416 
+		nodeElementTbl[548][0-8]: 361 362 366 367 411 412 416 417 
+		nodeElementTbl[549][0-8]: 362 363 367 368 412 413 417 418 
+		nodeElementTbl[550][0-8]: 363 364 368 369 413 414 418 419 
+		nodeElementTbl[551][0-8]: 364 1000 369 1000 414 1000 419 1000 
+		nodeElementTbl[552][0-8]: 1000 365 1000 370 1000 415 1000 420 
+		nodeElementTbl[553][0-8]: 365 366 370 371 415 416 420 421 
+		nodeElementTbl[554][0-8]: 366 367 371 372 416 417 421 422 
+		nodeElementTbl[555][0-8]: 367 368 372 373 417 418 422 423 
+		nodeElementTbl[556][0-8]: 368 369 373 374 418 419 423 424 
+		nodeElementTbl[557][0-8]: 369 1000 374 1000 419 1000 424 1000 
+		nodeElementTbl[558][0-8]: 1000 370 1000 375 1000 420 1000 425 
+		nodeElementTbl[559][0-8]: 370 371 375 376 420 421 425 426 
+		nodeElementTbl[560][0-8]: 371 372 376 377 421 422 426 427 
+		nodeElementTbl[561][0-8]: 372 373 377 378 422 423 427 428 
+		nodeElementTbl[562][0-8]: 373 374 378 379 423 424 428 429 
+		nodeElementTbl[563][0-8]: 374 1000 379 1000 424 1000 429 1000 
+		nodeElementTbl[564][0-8]: 1000 375 1000 380 1000 425 1000 430 
+		nodeElementTbl[565][0-8]: 375 376 380 381 425 426 430 431 
+		nodeElementTbl[566][0-8]: 376 377 381 382 426 427 431 432 
+		nodeElementTbl[567][0-8]: 377 378 382 383 427 428 432 433 
+		nodeElementTbl[568][0-8]: 378 379 383 384 428 429 433 434 
+		nodeElementTbl[569][0-8]: 379 1000 384 1000 429 1000 434 1000 
+		nodeElementTbl[570][0-8]: 1000 380 1000 385 1000 430 1000 435 
+		nodeElementTbl[571][0-8]: 380 381 385 386 430 431 435 436 
+		nodeElementTbl[572][0-8]: 381 382 386 387 431 432 436 437 
+		nodeElementTbl[573][0-8]: 382 383 387 388 432 433 437 438 
+		nodeElementTbl[574][0-8]: 383 384 388 389 433 434 438 439 
+		nodeElementTbl[575][0-8]: 384 1000 389 1000 434 1000 439 1000 
+		nodeElementTbl[576][0-8]: 1000 385 1000 390 1000 435 1000 440 
+		nodeElementTbl[577][0-8]: 385 386 390 391 435 436 440 441 
+		nodeElementTbl[578][0-8]: 386 387 391 392 436 437 441 442 
+		nodeElementTbl[579][0-8]: 387 388 392 393 437 438 442 443 
+		nodeElementTbl[580][0-8]: 388 389 393 394 438 439 443 444 
+		nodeElementTbl[581][0-8]: 389 1000 394 1000 439 1000 444 1000 
+		nodeElementTbl[582][0-8]: 1000 390 1000 395 1000 440 1000 445 
+		nodeElementTbl[583][0-8]: 390 391 395 396 440 441 445 446 
+		nodeElementTbl[584][0-8]: 391 392 396 397 441 442 446 447 
+		nodeElementTbl[585][0-8]: 392 393 397 398 442 443 447 448 
+		nodeElementTbl[586][0-8]: 393 394 398 399 443 444 448 449 
+		nodeElementTbl[587][0-8]: 394 1000 399 1000 444 1000 449 1000 
+		nodeElementTbl[588][0-8]: 1000 395 1000 1000 1000 445 1000 1000 
+		nodeElementTbl[589][0-8]: 395 396 1000 1000 445 446 1000 1000 
+		nodeElementTbl[590][0-8]: 396 397 1000 1000 446 447 1000 1000 
+		nodeElementTbl[591][0-8]: 397 398 1000 1000 447 448 1000 1000 
+		nodeElementTbl[592][0-8]: 398 399 1000 1000 448 449 1000 1000 
+		nodeElementTbl[593][0-8]: 399 1000 1000 1000 449 1000 1000 1000 
+		nodeElementTbl[594][0-8]: 1000 1000 1000 400 1000 1000 1000 450 
+		nodeElementTbl[595][0-8]: 1000 1000 400 401 1000 1000 450 451 
+		nodeElementTbl[596][0-8]: 1000 1000 401 402 1000 1000 451 452 
+		nodeElementTbl[597][0-8]: 1000 1000 402 403 1000 1000 452 453 
+		nodeElementTbl[598][0-8]: 1000 1000 403 404 1000 1000 453 454 
+		nodeElementTbl[599][0-8]: 1000 1000 404 1000 1000 1000 454 1000 
+		nodeElementTbl[600][0-8]: 1000 400 1000 405 1000 450 1000 455 
+		nodeElementTbl[601][0-8]: 400 401 405 406 450 451 455 456 
+		nodeElementTbl[602][0-8]: 401 402 406 407 451 452 456 457 
+		nodeElementTbl[603][0-8]: 402 403 407 408 452 453 457 458 
+		nodeElementTbl[604][0-8]: 403 404 408 409 453 454 458 459 
+		nodeElementTbl[605][0-8]: 404 1000 409 1000 454 1000 459 1000 
+		nodeElementTbl[606][0-8]: 1000 405 1000 410 1000 455 1000 460 
+		nodeElementTbl[607][0-8]: 405 406 410 411 455 456 460 461 
+		nodeElementTbl[608][0-8]: 406 407 411 412 456 457 461 462 
+		nodeElementTbl[609][0-8]: 407 408 412 413 457 458 462 463 
+		nodeElementTbl[610][0-8]: 408 409 413 414 458 459 463 464 
+		nodeElementTbl[611][0-8]: 409 1000 414 1000 459 1000 464 1000 
+		nodeElementTbl[612][0-8]: 1000 410 1000 415 1000 460 1000 465 
+		nodeElementTbl[613][0-8]: 410 411 415 416 460 461 465 466 
+		nodeElementTbl[614][0-8]: 411 412 416 417 461 462 466 467 
+		nodeElementTbl[615][0-8]: 412 413 417 418 462 463 467 468 
+		nodeElementTbl[616][0-8]: 413 414 418 419 463 464 468 469 
+		nodeElementTbl[617][0-8]: 414 1000 419 1000 464 1000 469 1000 
+		nodeElementTbl[618][0-8]: 1000 415 1000 420 1000 465 1000 470 
+		nodeElementTbl[619][0-8]: 415 416 420 421 465 466 470 471 
+		nodeElementTbl[620][0-8]: 416 417 421 422 466 467 471 472 
+		nodeElementTbl[621][0-8]: 417 418 422 423 467 468 472 473 
+		nodeElementTbl[622][0-8]: 418 419 423 424 468 469 473 474 
+		nodeElementTbl[623][0-8]: 419 1000 424 1000 469 1000 474 1000 
+		nodeElementTbl[624][0-8]: 1000 420 1000 425 1000 470 1000 475 
+		nodeElementTbl[625][0-8]: 420 421 425 426 470 471 475 476 
+		nodeElementTbl[626][0-8]: 421 422 426 427 471 472 476 477 
+		nodeElementTbl[627][0-8]: 422 423 427 428 472 473 477 478 
+		nodeElementTbl[628][0-8]: 423 424 428 429 473 474 478 479 
+		nodeElementTbl[629][0-8]: 424 1000 429 1000 474 1000 479 1000 
+		nodeElementTbl[630][0-8]: 1000 425 1000 430 1000 475 1000 480 
+		nodeElementTbl[631][0-8]: 425 426 430 431 475 476 480 481 
+		nodeElementTbl[632][0-8]: 426 427 431 432 476 477 481 482 
+		nodeElementTbl[633][0-8]: 427 428 432 433 477 478 482 483 
+		nodeElementTbl[634][0-8]: 428 429 433 434 478 479 483 484 
+		nodeElementTbl[635][0-8]: 429 1000 434 1000 479 1000 484 1000 
+		nodeElementTbl[636][0-8]: 1000 430 1000 435 1000 480 1000 485 
+		nodeElementTbl[637][0-8]: 430 431 435 436 480 481 485 486 
+		nodeElementTbl[638][0-8]: 431 432 436 437 481 482 486 487 
+		nodeElementTbl[639][0-8]: 432 433 437 438 482 483 487 488 
+		nodeElementTbl[640][0-8]: 433 434 438 439 483 484 488 489 
+		nodeElementTbl[641][0-8]: 434 1000 439 1000 484 1000 489 1000 
+		nodeElementTbl[642][0-8]: 1000 435 1000 440 1000 485 1000 490 
+		nodeElementTbl[643][0-8]: 435 436 440 441 485 486 490 491 
+		nodeElementTbl[644][0-8]: 436 437 441 442 486 487 491 492 
+		nodeElementTbl[645][0-8]: 437 438 442 443 487 488 492 493 
+		nodeElementTbl[646][0-8]: 438 439 443 444 488 489 493 494 
+		nodeElementTbl[647][0-8]: 439 1000 444 1000 489 1000 494 1000 
+		nodeElementTbl[648][0-8]: 1000 440 1000 445 1000 490 1000 495 
+		nodeElementTbl[649][0-8]: 440 441 445 446 490 491 495 496 
+		nodeElementTbl[650][0-8]: 441 442 446 447 491 492 496 497 
+		nodeElementTbl[651][0-8]: 442 443 447 448 492 493 497 498 
+		nodeElementTbl[652][0-8]: 443 444 448 449 493 494 498 499 
+		nodeElementTbl[653][0-8]: 444 1000 449 1000 494 1000 499 1000 
+		nodeElementTbl[654][0-8]: 1000 445 1000 1000 1000 495 1000 1000 
+		nodeElementTbl[655][0-8]: 445 446 1000 1000 495 496 1000 1000 
+		nodeElementTbl[656][0-8]: 446 447 1000 1000 496 497 1000 1000 
+		nodeElementTbl[657][0-8]: 447 448 1000 1000 497 498 1000 1000 
+		nodeElementTbl[658][0-8]: 448 449 1000 1000 498 499 1000 1000 
+		nodeElementTbl[659][0-8]: 449 1000 1000 1000 499 1000 1000 1000 
+		nodeElementTbl[660][0-8]: 1000 1000 1000 450 1000 1000 1000 1000 
+		nodeElementTbl[661][0-8]: 1000 1000 450 451 1000 1000 1000 1000 
+		nodeElementTbl[662][0-8]: 1000 1000 451 452 1000 1000 1000 1000 
+		nodeElementTbl[663][0-8]: 1000 1000 452 453 1000 1000 1000 1000 
+		nodeElementTbl[664][0-8]: 1000 1000 453 454 1000 1000 1000 1000 
+		nodeElementTbl[665][0-8]: 1000 1000 454 1000 1000 1000 1000 1000 
+		nodeElementTbl[666][0-8]: 1000 450 1000 455 1000 1000 1000 1000 
+		nodeElementTbl[667][0-8]: 450 451 455 456 1000 1000 1000 1000 
+		nodeElementTbl[668][0-8]: 451 452 456 457 1000 1000 1000 1000 
+		nodeElementTbl[669][0-8]: 452 453 457 458 1000 1000 1000 1000 
+		nodeElementTbl[670][0-8]: 453 454 458 459 1000 1000 1000 1000 
+		nodeElementTbl[671][0-8]: 454 1000 459 1000 1000 1000 1000 1000 
+		nodeElementTbl[672][0-8]: 1000 455 1000 460 1000 1000 1000 1000 
+		nodeElementTbl[673][0-8]: 455 456 460 461 1000 1000 1000 1000 
+		nodeElementTbl[674][0-8]: 456 457 461 462 1000 1000 1000 1000 
+		nodeElementTbl[675][0-8]: 457 458 462 463 1000 1000 1000 1000 
+		nodeElementTbl[676][0-8]: 458 459 463 464 1000 1000 1000 1000 
+		nodeElementTbl[677][0-8]: 459 1000 464 1000 1000 1000 1000 1000 
+		nodeElementTbl[678][0-8]: 1000 460 1000 465 1000 1000 1000 1000 
+		nodeElementTbl[679][0-8]: 460 461 465 466 1000 1000 1000 1000 
+		nodeElementTbl[680][0-8]: 461 462 466 467 1000 1000 1000 1000 
+		nodeElementTbl[681][0-8]: 462 463 467 468 1000 1000 1000 1000 
+		nodeElementTbl[682][0-8]: 463 464 468 469 1000 1000 1000 1000 
+		nodeElementTbl[683][0-8]: 464 1000 469 1000 1000 1000 1000 1000 
+		nodeElementTbl[684][0-8]: 1000 465 1000 470 1000 1000 1000 1000 
+		nodeElementTbl[685][0-8]: 465 466 470 471 1000 1000 1000 1000 
+		nodeElementTbl[686][0-8]: 466 467 471 472 1000 1000 1000 1000 
+		nodeElementTbl[687][0-8]: 467 468 472 473 1000 1000 1000 1000 
+		nodeElementTbl[688][0-8]: 468 469 473 474 1000 1000 1000 1000 
+		nodeElementTbl[689][0-8]: 469 1000 474 1000 1000 1000 1000 1000 
+		nodeElementTbl[690][0-8]: 1000 470 1000 475 1000 1000 1000 1000 
+		nodeElementTbl[691][0-8]: 470 471 475 476 1000 1000 1000 1000 
+		nodeElementTbl[692][0-8]: 471 472 476 477 1000 1000 1000 1000 
+		nodeElementTbl[693][0-8]: 472 473 477 478 1000 1000 1000 1000 
+		nodeElementTbl[694][0-8]: 473 474 478 479 1000 1000 1000 1000 
+		nodeElementTbl[695][0-8]: 474 1000 479 1000 1000 1000 1000 1000 
+		nodeElementTbl[696][0-8]: 1000 475 1000 480 1000 1000 1000 1000 
+		nodeElementTbl[697][0-8]: 475 476 480 481 1000 1000 1000 1000 
+		nodeElementTbl[698][0-8]: 476 477 481 482 1000 1000 1000 1000 
+		nodeElementTbl[699][0-8]: 477 478 482 483 1000 1000 1000 1000 
+		nodeElementTbl[700][0-8]: 478 479 483 484 1000 1000 1000 1000 
+		nodeElementTbl[701][0-8]: 479 1000 484 1000 1000 1000 1000 1000 
+		nodeElementTbl[702][0-8]: 1000 480 1000 485 1000 1000 1000 1000 
+		nodeElementTbl[703][0-8]: 480 481 485 486 1000 1000 1000 1000 
+		nodeElementTbl[704][0-8]: 481 482 486 487 1000 1000 1000 1000 
+		nodeElementTbl[705][0-8]: 482 483 487 488 1000 1000 1000 1000 
+		nodeElementTbl[706][0-8]: 483 484 488 489 1000 1000 1000 1000 
+		nodeElementTbl[707][0-8]: 484 1000 489 1000 1000 1000 1000 1000 
+		nodeElementTbl[708][0-8]: 1000 485 1000 490 1000 1000 1000 1000 
+		nodeElementTbl[709][0-8]: 485 486 490 491 1000 1000 1000 1000 
+		nodeElementTbl[710][0-8]: 486 487 491 492 1000 1000 1000 1000 
+		nodeElementTbl[711][0-8]: 487 488 492 493 1000 1000 1000 1000 
+		nodeElementTbl[712][0-8]: 488 489 493 494 1000 1000 1000 1000 
+		nodeElementTbl[713][0-8]: 489 1000 494 1000 1000 1000 1000 1000 
+		nodeElementTbl[714][0-8]: 1000 490 1000 495 1000 1000 1000 1000 
+		nodeElementTbl[715][0-8]: 490 491 495 496 1000 1000 1000 1000 
+		nodeElementTbl[716][0-8]: 491 492 496 497 1000 1000 1000 1000 
+		nodeElementTbl[717][0-8]: 492 493 497 498 1000 1000 1000 1000 
+		nodeElementTbl[718][0-8]: 493 494 498 499 1000 1000 1000 1000 
+		nodeElementTbl[719][0-8]: 494 1000 499 1000 1000 1000 1000 1000 
+		nodeElementTbl[720][0-8]: 1000 495 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[721][0-8]: 495 496 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[722][0-8]: 496 497 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[723][0-8]: 497 498 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[724][0-8]: 498 499 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[725][0-8]: 499 1000 1000 1000 1000 1000 1000 1000 
+	element (ptr): 0x806f8e8
+	elementLocalCount: 500
+	elementDomainCount: 500
+	elementShadowCount: 0
+	elementGlobalCount: 1000
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x8077a28
+	elementL2G[0-500]:   000 001 002 003 004 010 011 012 013 014 020 021 022 023 024 030 031 032 033 034 040 041 042 043 044 050 051 052 053 054 060 061 062 063 064 070 071 072 073 074 080 081 082 083 084 090 091 092 093 094 100 101 102 103 104 110 111 112 113 114 120 121 122 123 124 130 131 132 133 134 140 141 142 143 144 150 151 152 153 154 160 161 162 163 164 170 171 172 173 174 180 181 182 183 184 190 191 192 193 194 200 201 202 203 204 210 211 212 213 214 220 221 222 223 224 230 231 232 233 234 240 241 242 243 244 250 251 252 253 254 260 261 262 263 264 270 271 272 273 274 280 281 282 283 284 290 291 292 293 294 300 301 302 303 304 310 311 312 313 314 320 321 322 323 324 330 331 332 333 334 340 341 342 343 344 350 351 352 353 354 360 361 362 363 364 370 371 372 373 374 380 381 382 383 384 390 391 392 393 394 400 401 402 403 404 410 411 412 413 414 420 421 422 423 424 430 431 432 433 434 440 441 442 443 444 450 451 452 453 454 460 461 462 463 464 470 471 472 473 474 480 481 482 483 484 490 491 492 493 494 500 501 502 503 504 510 511 512 513 514 520 521 522 523 524 530 531 532 533 534 540 541 542 543 544 550 551 552 553 554 560 561 562 563 564 570 571 572 573 574 580 581 582 583 584 590 591 592 593 594 600 601 602 603 604 610 611 612 613 614 620 621 622 623 624 630 631 632 633 634 640 641 642 643 644 650 651 652 653 654 660 661 662 663 664 670 671 672 673 674 680 681 682 683 684 690 691 692 693 694 700 701 702 703 704 710 711 712 713 714 720 721 722 723 724 730 731 732 733 734 740 741 742 743 744 750 751 752 753 754 760 761 762 763 764 770 771 772 773 774 780 781 782 783 784 790 791 792 793 794 800 801 802 803 804 810 811 812 813 814 820 821 822 823 824 830 831 832 833 834 840 841 842 843 844 850 851 852 853 854 860 861 862 863 864 870 871 872 873 874 880 881 882 883 884 890 891 892 893 894 900 901 902 903 904 910 911 912 913 914 920 921 922 923 924 930 931 932 933 934 940 941 942 943 944 950 951 952 953 954 960 961 962 963 964 970 971 972 973 974 980 981 982 983 984 990 991 992 993 994 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x8077a28
+	elementD2G[0-500]:   000 001 002 003 004 010 011 012 013 014 020 021 022 023 024 030 031 032 033 034 040 041 042 043 044 050 051 052 053 054 060 061 062 063 064 070 071 072 073 074 080 081 082 083 084 090 091 092 093 094 100 101 102 103 104 110 111 112 113 114 120 121 122 123 124 130 131 132 133 134 140 141 142 143 144 150 151 152 153 154 160 161 162 163 164 170 171 172 173 174 180 181 182 183 184 190 191 192 193 194 200 201 202 203 204 210 211 212 213 214 220 221 222 223 224 230 231 232 233 234 240 241 242 243 244 250 251 252 253 254 260 261 262 263 264 270 271 272 273 274 280 281 282 283 284 290 291 292 293 294 300 301 302 303 304 310 311 312 313 314 320 321 322 323 324 330 331 332 333 334 340 341 342 343 344 350 351 352 353 354 360 361 362 363 364 370 371 372 373 374 380 381 382 383 384 390 391 392 393 394 400 401 402 403 404 410 411 412 413 414 420 421 422 423 424 430 431 432 433 434 440 441 442 443 444 450 451 452 453 454 460 461 462 463 464 470 471 472 473 474 480 481 482 483 484 490 491 492 493 494 500 501 502 503 504 510 511 512 513 514 520 521 522 523 524 530 531 532 533 534 540 541 542 543 544 550 551 552 553 554 560 561 562 563 564 570 571 572 573 574 580 581 582 583 584 590 591 592 593 594 600 601 602 603 604 610 611 612 613 614 620 621 622 623 624 630 631 632 633 634 640 641 642 643 644 650 651 652 653 654 660 661 662 663 664 670 671 672 673 674 680 681 682 683 684 690 691 692 693 694 700 701 702 703 704 710 711 712 713 714 720 721 722 723 724 730 731 732 733 734 740 741 742 743 744 750 751 752 753 754 760 761 762 763 764 770 771 772 773 774 780 781 782 783 784 790 791 792 793 794 800 801 802 803 804 810 811 812 813 814 820 821 822 823 824 830 831 832 833 834 840 841 842 843 844 850 851 852 853 854 860 861 862 863 864 870 871 872 873 874 880 881 882 883 884 890 891 892 893 894 900 901 902 903 904 910 911 912 913 914 920 921 922 923 924 930 931 932 933 934 940 941 942 943 944 950 951 952 953 954 960 961 962 963 964 970 971 972 973 974 980 981 982 983 984 990 991 992 993 994 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8078208
+	elementG2L[0-1000]:   000 001 002 003 004 1000 1000 1000 1000 1000 005 006 007 008 009 1000 1000 1000 1000 1000 010 011 012 013 014 1000 1000 1000 1000 1000 015 016 017 018 019 1000 1000 1000 1000 1000 020 021 022 023 024 1000 1000 1000 1000 1000 025 026 027 028 029 1000 1000 1000 1000 1000 030 031 032 033 034 1000 1000 1000 1000 1000 035 036 037 038 039 1000 1000 1000 1000 1000 040 041 042 043 044 1000 1000 1000 1000 1000 045 046 047 048 049 1000 1000 1000 1000 1000 050 051 052 053 054 1000 1000 1000 1000 1000 055 056 057 058 059 1000 1000 1000 1000 1000 060 061 062 063 064 1000 1000 1000 1000 1000 065 066 067 068 069 1000 1000 1000 1000 1000 070 071 072 073 074 1000 1000 1000 1000 1000 075 076 077 078 079 1000 1000 1000 1000 1000 080 081 082 083 084 1000 1000 1000 1000 1000 085 086 087 088 089 1000 1000 1000 1000 1000 090 091 092 093 094 1000 1000 1000 1000 1000 095 096 097 098 099 1000 1000 1000 1000 1000 100 101 102 103 104 1000 1000 1000 1000 1000 105 106 107 108 109 1000 1000 1000 1000 1000 110 111 112 113 114 1000 1000 1000 1000 1000 115 116 117 118 119 1000 1000 1000 1000 1000 120 121 122 123 124 1000 1000 1000 1000 1000 125 126 127 128 129 1000 1000 1000 1000 1000 130 131 132 133 134 1000 1000 1000 1000 1000 135 136 137 138 139 1000 1000 1000 1000 1000 140 141 142 143 144 1000 1000 1000 1000 1000 145 146 147 148 149 1000 1000 1000 1000 1000 150 151 152 153 154 1000 1000 1000 1000 1000 155 156 157 158 159 1000 1000 1000 1000 1000 160 161 162 163 164 1000 1000 1000 1000 1000 165 166 167 168 169 1000 1000 1000 1000 1000 170 171 172 173 174 1000 1000 1000 1000 1000 175 176 177 178 179 1000 1000 1000 1000 1000 180 181 182 183 184 1000 1000 1000 1000 1000 185 186 187 188 189 1000 1000 1000 1000 1000 190 191 192 193 194 1000 1000 1000 1000 1000 195 196 197 198 199 1000 1000 1000 1000 1000 200 201 202 203 204 1000 1000 1000 1000 1000 205 206 207 208 209 1000 1000 1000 1000 1000 210 211 212 213 214 1000 1000 1000 1000 1000 215 216 217 218 219 1000 1000 1000 1000 1000 220 221 222 223 224 1000 1000 1000 1000 1000 225 226 227 228 229 1000 1000 1000 1000 1000 230 231 232 233 234 1000 1000 1000 1000 1000 235 236 237 238 239 1000 1000 1000 1000 1000 240 241 242 243 244 1000 1000 1000 1000 1000 245 246 247 248 249 1000 1000 1000 1000 1000 250 251 252 253 254 1000 1000 1000 1000 1000 255 256 257 258 259 1000 1000 1000 1000 1000 260 261 262 263 264 1000 1000 1000 1000 1000 265 266 267 268 269 1000 1000 1000 1000 1000 270 271 272 273 274 1000 1000 1000 1000 1000 275 276 277 278 279 1000 1000 1000 1000 1000 280 281 282 283 284 1000 1000 1000 1000 1000 285 286 287 288 289 1000 1000 1000 1000 1000 290 291 292 293 294 1000 1000 1000 1000 1000 295 296 297 298 299 1000 1000 1000 1000 1000 300 301 302 303 304 1000 1000 1000 1000 1000 305 306 307 308 309 1000 1000 1000 1000 1000 310 311 312 313 314 1000 1000 1000 1000 1000 315 316 317 318 319 1000 1000 1000 1000 1000 320 321 322 323 324 1000 1000 1000 1000 1000 325 326 327 328 329 1000 1000 1000 1000 1000 330 331 332 333 334 1000 1000 1000 1000 1000 335 336 337 338 339 1000 1000 1000 1000 1000 340 341 342 343 344 1000 1000 1000 1000 1000 345 346 347 348 349 1000 1000 1000 1000 1000 350 351 352 353 354 1000 1000 1000 1000 1000 355 356 357 358 359 1000 1000 1000 1000 1000 360 361 362 363 364 1000 1000 1000 1000 1000 365 366 367 368 369 1000 1000 1000 1000 1000 370 371 372 373 374 1000 1000 1000 1000 1000 375 376 377 378 379 1000 1000 1000 1000 1000 380 381 382 383 384 1000 1000 1000 1000 1000 385 386 387 388 389 1000 1000 1000 1000 1000 390 391 392 393 394 1000 1000 1000 1000 1000 395 396 397 398 399 1000 1000 1000 1000 1000 400 401 402 403 404 1000 1000 1000 1000 1000 405 406 407 408 409 1000 1000 1000 1000 1000 410 411 412 413 414 1000 1000 1000 1000 1000 415 416 417 418 419 1000 1000 1000 1000 1000 420 421 422 423 424 1000 1000 1000 1000 1000 425 426 427 428 429 1000 1000 1000 1000 1000 430 431 432 433 434 1000 1000 1000 1000 1000 435 436 437 438 439 1000 1000 1000 1000 1000 440 441 442 443 444 1000 1000 1000 1000 1000 445 446 447 448 449 1000 1000 1000 1000 1000 450 451 452 453 454 1000 1000 1000 1000 1000 455 456 457 458 459 1000 1000 1000 1000 1000 460 461 462 463 464 1000 1000 1000 1000 1000 465 466 467 468 469 1000 1000 1000 1000 1000 470 471 472 473 474 1000 1000 1000 1000 1000 475 476 477 478 479 1000 1000 1000 1000 1000 480 481 482 483 484 1000 1000 1000 1000 1000 485 486 487 488 489 1000 1000 1000 1000 1000 490 491 492 493 494 1000 1000 1000 1000 1000 495 496 497 498 499 1000 1000 1000 1000 1000 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8078208
+	elementG2D[0-1000]:   000 001 002 003 004 1000 1000 1000 1000 1000 005 006 007 008 009 1000 1000 1000 1000 1000 010 011 012 013 014 1000 1000 1000 1000 1000 015 016 017 018 019 1000 1000 1000 1000 1000 020 021 022 023 024 1000 1000 1000 1000 1000 025 026 027 028 029 1000 1000 1000 1000 1000 030 031 032 033 034 1000 1000 1000 1000 1000 035 036 037 038 039 1000 1000 1000 1000 1000 040 041 042 043 044 1000 1000 1000 1000 1000 045 046 047 048 049 1000 1000 1000 1000 1000 050 051 052 053 054 1000 1000 1000 1000 1000 055 056 057 058 059 1000 1000 1000 1000 1000 060 061 062 063 064 1000 1000 1000 1000 1000 065 066 067 068 069 1000 1000 1000 1000 1000 070 071 072 073 074 1000 1000 1000 1000 1000 075 076 077 078 079 1000 1000 1000 1000 1000 080 081 082 083 084 1000 1000 1000 1000 1000 085 086 087 088 089 1000 1000 1000 1000 1000 090 091 092 093 094 1000 1000 1000 1000 1000 095 096 097 098 099 1000 1000 1000 1000 1000 100 101 102 103 104 1000 1000 1000 1000 1000 105 106 107 108 109 1000 1000 1000 1000 1000 110 111 112 113 114 1000 1000 1000 1000 1000 115 116 117 118 119 1000 1000 1000 1000 1000 120 121 122 123 124 1000 1000 1000 1000 1000 125 126 127 128 129 1000 1000 1000 1000 1000 130 131 132 133 134 1000 1000 1000 1000 1000 135 136 137 138 139 1000 1000 1000 1000 1000 140 141 142 143 144 1000 1000 1000 1000 1000 145 146 147 148 149 1000 1000 1000 1000 1000 150 151 152 153 154 1000 1000 1000 1000 1000 155 156 157 158 159 1000 1000 1000 1000 1000 160 161 162 163 164 1000 1000 1000 1000 1000 165 166 167 168 169 1000 1000 1000 1000 1000 170 171 172 173 174 1000 1000 1000 1000 1000 175 176 177 178 179 1000 1000 1000 1000 1000 180 181 182 183 184 1000 1000 1000 1000 1000 185 186 187 188 189 1000 1000 1000 1000 1000 190 191 192 193 194 1000 1000 1000 1000 1000 195 196 197 198 199 1000 1000 1000 1000 1000 200 201 202 203 204 1000 1000 1000 1000 1000 205 206 207 208 209 1000 1000 1000 1000 1000 210 211 212 213 214 1000 1000 1000 1000 1000 215 216 217 218 219 1000 1000 1000 1000 1000 220 221 222 223 224 1000 1000 1000 1000 1000 225 226 227 228 229 1000 1000 1000 1000 1000 230 231 232 233 234 1000 1000 1000 1000 1000 235 236 237 238 239 1000 1000 1000 1000 1000 240 241 242 243 244 1000 1000 1000 1000 1000 245 246 247 248 249 1000 1000 1000 1000 1000 250 251 252 253 254 1000 1000 1000 1000 1000 255 256 257 258 259 1000 1000 1000 1000 1000 260 261 262 263 264 1000 1000 1000 1000 1000 265 266 267 268 269 1000 1000 1000 1000 1000 270 271 272 273 274 1000 1000 1000 1000 1000 275 276 277 278 279 1000 1000 1000 1000 1000 280 281 282 283 284 1000 1000 1000 1000 1000 285 286 287 288 289 1000 1000 1000 1000 1000 290 291 292 293 294 1000 1000 1000 1000 1000 295 296 297 298 299 1000 1000 1000 1000 1000 300 301 302 303 304 1000 1000 1000 1000 1000 305 306 307 308 309 1000 1000 1000 1000 1000 310 311 312 313 314 1000 1000 1000 1000 1000 315 316 317 318 319 1000 1000 1000 1000 1000 320 321 322 323 324 1000 1000 1000 1000 1000 325 326 327 328 329 1000 1000 1000 1000 1000 330 331 332 333 334 1000 1000 1000 1000 1000 335 336 337 338 339 1000 1000 1000 1000 1000 340 341 342 343 344 1000 1000 1000 1000 1000 345 346 347 348 349 1000 1000 1000 1000 1000 350 351 352 353 354 1000 1000 1000 1000 1000 355 356 357 358 359 1000 1000 1000 1000 1000 360 361 362 363 364 1000 1000 1000 1000 1000 365 366 367 368 369 1000 1000 1000 1000 1000 370 371 372 373 374 1000 1000 1000 1000 1000 375 376 377 378 379 1000 1000 1000 1000 1000 380 381 382 383 384 1000 1000 1000 1000 1000 385 386 387 388 389 1000 1000 1000 1000 1000 390 391 392 393 394 1000 1000 1000 1000 1000 395 396 397 398 399 1000 1000 1000 1000 1000 400 401 402 403 404 1000 1000 1000 1000 1000 405 406 407 408 409 1000 1000 1000 1000 1000 410 411 412 413 414 1000 1000 1000 1000 1000 415 416 417 418 419 1000 1000 1000 1000 1000 420 421 422 423 424 1000 1000 1000 1000 1000 425 426 427 428 429 1000 1000 1000 1000 1000 430 431 432 433 434 1000 1000 1000 1000 1000 435 436 437 438 439 1000 1000 1000 1000 1000 440 441 442 443 444 1000 1000 1000 1000 1000 445 446 447 448 449 1000 1000 1000 1000 1000 450 451 452 453 454 1000 1000 1000 1000 1000 455 456 457 458 459 1000 1000 1000 1000 1000 460 461 462 463 464 1000 1000 1000 1000 1000 465 466 467 468 469 1000 1000 1000 1000 1000 470 471 472 473 474 1000 1000 1000 1000 1000 475 476 477 478 479 1000 1000 1000 1000 1000 480 481 482 483 484 1000 1000 1000 1000 1000 485 486 487 488 489 1000 1000 1000 1000 1000 490 491 492 493 494 1000 1000 1000 1000 1000 495 496 497 498 499 1000 1000 1000 1000 1000 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x80791b8
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8079998
+	elementNeighbourTbl[0-500]:
+		elementNeighbourTbl[0][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 1000 005 006 1000 1000 1000 1000 050 051 1000 055 056 
+		elementNeighbourTbl[1][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 002 005 006 007 1000 1000 1000 050 051 052 055 056 057 
+		elementNeighbourTbl[2][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 003 006 007 008 1000 1000 1000 051 052 053 056 057 058 
+		elementNeighbourTbl[3][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 004 007 008 009 1000 1000 1000 052 053 054 057 058 059 
+		elementNeighbourTbl[4][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 1000 008 009 1000 1000 1000 1000 053 054 1000 058 059 1000 
+		elementNeighbourTbl[5][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 1000 006 1000 010 011 1000 050 051 1000 055 056 1000 060 061 
+		elementNeighbourTbl[6][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 002 005 007 010 011 012 050 051 052 055 056 057 060 061 062 
+		elementNeighbourTbl[7][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 002 003 006 008 011 012 013 051 052 053 056 057 058 061 062 063 
+		elementNeighbourTbl[8][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 003 004 007 009 012 013 014 052 053 054 057 058 059 062 063 064 
+		elementNeighbourTbl[9][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 004 1000 008 1000 013 014 1000 053 054 1000 058 059 1000 063 064 1000 
+		elementNeighbourTbl[10][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 006 1000 011 1000 015 016 1000 055 056 1000 060 061 1000 065 066 
+		elementNeighbourTbl[11][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 006 007 010 012 015 016 017 055 056 057 060 061 062 065 066 067 
+		elementNeighbourTbl[12][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 006 007 008 011 013 016 017 018 056 057 058 061 062 063 066 067 068 
+		elementNeighbourTbl[13][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 007 008 009 012 014 017 018 019 057 058 059 062 063 064 067 068 069 
+		elementNeighbourTbl[14][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 008 009 1000 013 1000 018 019 1000 058 059 1000 063 064 1000 068 069 1000 
+		elementNeighbourTbl[15][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 1000 016 1000 020 021 1000 060 061 1000 065 066 1000 070 071 
+		elementNeighbourTbl[16][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 012 015 017 020 021 022 060 061 062 065 066 067 070 071 072 
+		elementNeighbourTbl[17][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 011 012 013 016 018 021 022 023 061 062 063 066 067 068 071 072 073 
+		elementNeighbourTbl[18][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 012 013 014 017 019 022 023 024 062 063 064 067 068 069 072 073 074 
+		elementNeighbourTbl[19][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 013 014 1000 018 1000 023 024 1000 063 064 1000 068 069 1000 073 074 1000 
+		elementNeighbourTbl[20][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 015 016 1000 021 1000 025 026 1000 065 066 1000 070 071 1000 075 076 
+		elementNeighbourTbl[21][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 015 016 017 020 022 025 026 027 065 066 067 070 071 072 075 076 077 
+		elementNeighbourTbl[22][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 016 017 018 021 023 026 027 028 066 067 068 071 072 073 076 077 078 
+		elementNeighbourTbl[23][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 017 018 019 022 024 027 028 029 067 068 069 072 073 074 077 078 079 
+		elementNeighbourTbl[24][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 018 019 1000 023 1000 028 029 1000 068 069 1000 073 074 1000 078 079 1000 
+		elementNeighbourTbl[25][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 1000 026 1000 030 031 1000 070 071 1000 075 076 1000 080 081 
+		elementNeighbourTbl[26][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 022 025 027 030 031 032 070 071 072 075 076 077 080 081 082 
+		elementNeighbourTbl[27][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 021 022 023 026 028 031 032 033 071 072 073 076 077 078 081 082 083 
+		elementNeighbourTbl[28][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 022 023 024 027 029 032 033 034 072 073 074 077 078 079 082 083 084 
+		elementNeighbourTbl[29][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 023 024 1000 028 1000 033 034 1000 073 074 1000 078 079 1000 083 084 1000 
+		elementNeighbourTbl[30][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 025 026 1000 031 1000 035 036 1000 075 076 1000 080 081 1000 085 086 
+		elementNeighbourTbl[31][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 025 026 027 030 032 035 036 037 075 076 077 080 081 082 085 086 087 
+		elementNeighbourTbl[32][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 026 027 028 031 033 036 037 038 076 077 078 081 082 083 086 087 088 
+		elementNeighbourTbl[33][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 027 028 029 032 034 037 038 039 077 078 079 082 083 084 087 088 089 
+		elementNeighbourTbl[34][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 028 029 1000 033 1000 038 039 1000 078 079 1000 083 084 1000 088 089 1000 
+		elementNeighbourTbl[35][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 1000 036 1000 040 041 1000 080 081 1000 085 086 1000 090 091 
+		elementNeighbourTbl[36][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 032 035 037 040 041 042 080 081 082 085 086 087 090 091 092 
+		elementNeighbourTbl[37][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 031 032 033 036 038 041 042 043 081 082 083 086 087 088 091 092 093 
+		elementNeighbourTbl[38][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 032 033 034 037 039 042 043 044 082 083 084 087 088 089 092 093 094 
+		elementNeighbourTbl[39][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 033 034 1000 038 1000 043 044 1000 083 084 1000 088 089 1000 093 094 1000 
+		elementNeighbourTbl[40][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 035 036 1000 041 1000 045 046 1000 085 086 1000 090 091 1000 095 096 
+		elementNeighbourTbl[41][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 035 036 037 040 042 045 046 047 085 086 087 090 091 092 095 096 097 
+		elementNeighbourTbl[42][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 036 037 038 041 043 046 047 048 086 087 088 091 092 093 096 097 098 
+		elementNeighbourTbl[43][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 037 038 039 042 044 047 048 049 087 088 089 092 093 094 097 098 099 
+		elementNeighbourTbl[44][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 038 039 1000 043 1000 048 049 1000 088 089 1000 093 094 1000 098 099 1000 
+		elementNeighbourTbl[45][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 1000 046 1000 1000 1000 1000 090 091 1000 095 096 1000 1000 1000 
+		elementNeighbourTbl[46][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 042 045 047 1000 1000 1000 090 091 092 095 096 097 1000 1000 1000 
+		elementNeighbourTbl[47][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 041 042 043 046 048 1000 1000 1000 091 092 093 096 097 098 1000 1000 1000 
+		elementNeighbourTbl[48][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 042 043 044 047 049 1000 1000 1000 092 093 094 097 098 099 1000 1000 1000 
+		elementNeighbourTbl[49][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 043 044 1000 048 1000 1000 1000 1000 093 094 1000 098 099 1000 1000 1000 1000 
+		elementNeighbourTbl[50][0-26]: 1000 1000 1000 1000 000 001 1000 005 006 1000 1000 1000 1000 051 1000 055 056 1000 1000 1000 1000 100 101 1000 105 106 
+		elementNeighbourTbl[51][0-26]: 1000 1000 1000 000 001 002 005 006 007 1000 1000 1000 050 052 055 056 057 1000 1000 1000 100 101 102 105 106 107 
+		elementNeighbourTbl[52][0-26]: 1000 1000 1000 001 002 003 006 007 008 1000 1000 1000 051 053 056 057 058 1000 1000 1000 101 102 103 106 107 108 
+		elementNeighbourTbl[53][0-26]: 1000 1000 1000 002 003 004 007 008 009 1000 1000 1000 052 054 057 058 059 1000 1000 1000 102 103 104 107 108 109 
+		elementNeighbourTbl[54][0-26]: 1000 1000 1000 003 004 1000 008 009 1000 1000 1000 1000 053 1000 058 059 1000 1000 1000 1000 103 104 1000 108 109 1000 
+		elementNeighbourTbl[55][0-26]: 1000 000 001 1000 005 006 1000 010 011 1000 050 051 1000 056 1000 060 061 1000 100 101 1000 105 106 1000 110 111 
+		elementNeighbourTbl[56][0-26]: 000 001 002 005 006 007 010 011 012 050 051 052 055 057 060 061 062 100 101 102 105 106 107 110 111 112 
+		elementNeighbourTbl[57][0-26]: 001 002 003 006 007 008 011 012 013 051 052 053 056 058 061 062 063 101 102 103 106 107 108 111 112 113 
+		elementNeighbourTbl[58][0-26]: 002 003 004 007 008 009 012 013 014 052 053 054 057 059 062 063 064 102 103 104 107 108 109 112 113 114 
+		elementNeighbourTbl[59][0-26]: 003 004 1000 008 009 1000 013 014 1000 053 054 1000 058 1000 063 064 1000 103 104 1000 108 109 1000 113 114 1000 
+		elementNeighbourTbl[60][0-26]: 1000 005 006 1000 010 011 1000 015 016 1000 055 056 1000 061 1000 065 066 1000 105 106 1000 110 111 1000 115 116 
+		elementNeighbourTbl[61][0-26]: 005 006 007 010 011 012 015 016 017 055 056 057 060 062 065 066 067 105 106 107 110 111 112 115 116 117 
+		elementNeighbourTbl[62][0-26]: 006 007 008 011 012 013 016 017 018 056 057 058 061 063 066 067 068 106 107 108 111 112 113 116 117 118 
+		elementNeighbourTbl[63][0-26]: 007 008 009 012 013 014 017 018 019 057 058 059 062 064 067 068 069 107 108 109 112 113 114 117 118 119 
+		elementNeighbourTbl[64][0-26]: 008 009 1000 013 014 1000 018 019 1000 058 059 1000 063 1000 068 069 1000 108 109 1000 113 114 1000 118 119 1000 
+		elementNeighbourTbl[65][0-26]: 1000 010 011 1000 015 016 1000 020 021 1000 060 061 1000 066 1000 070 071 1000 110 111 1000 115 116 1000 120 121 
+		elementNeighbourTbl[66][0-26]: 010 011 012 015 016 017 020 021 022 060 061 062 065 067 070 071 072 110 111 112 115 116 117 120 121 122 
+		elementNeighbourTbl[67][0-26]: 011 012 013 016 017 018 021 022 023 061 062 063 066 068 071 072 073 111 112 113 116 117 118 121 122 123 
+		elementNeighbourTbl[68][0-26]: 012 013 014 017 018 019 022 023 024 062 063 064 067 069 072 073 074 112 113 114 117 118 119 122 123 124 
+		elementNeighbourTbl[69][0-26]: 013 014 1000 018 019 1000 023 024 1000 063 064 1000 068 1000 073 074 1000 113 114 1000 118 119 1000 123 124 1000 
+		elementNeighbourTbl[70][0-26]: 1000 015 016 1000 020 021 1000 025 026 1000 065 066 1000 071 1000 075 076 1000 115 116 1000 120 121 1000 125 126 
+		elementNeighbourTbl[71][0-26]: 015 016 017 020 021 022 025 026 027 065 066 067 070 072 075 076 077 115 116 117 120 121 122 125 126 127 
+		elementNeighbourTbl[72][0-26]: 016 017 018 021 022 023 026 027 028 066 067 068 071 073 076 077 078 116 117 118 121 122 123 126 127 128 
+		elementNeighbourTbl[73][0-26]: 017 018 019 022 023 024 027 028 029 067 068 069 072 074 077 078 079 117 118 119 122 123 124 127 128 129 
+		elementNeighbourTbl[74][0-26]: 018 019 1000 023 024 1000 028 029 1000 068 069 1000 073 1000 078 079 1000 118 119 1000 123 124 1000 128 129 1000 
+		elementNeighbourTbl[75][0-26]: 1000 020 021 1000 025 026 1000 030 031 1000 070 071 1000 076 1000 080 081 1000 120 121 1000 125 126 1000 130 131 
+		elementNeighbourTbl[76][0-26]: 020 021 022 025 026 027 030 031 032 070 071 072 075 077 080 081 082 120 121 122 125 126 127 130 131 132 
+		elementNeighbourTbl[77][0-26]: 021 022 023 026 027 028 031 032 033 071 072 073 076 078 081 082 083 121 122 123 126 127 128 131 132 133 
+		elementNeighbourTbl[78][0-26]: 022 023 024 027 028 029 032 033 034 072 073 074 077 079 082 083 084 122 123 124 127 128 129 132 133 134 
+		elementNeighbourTbl[79][0-26]: 023 024 1000 028 029 1000 033 034 1000 073 074 1000 078 1000 083 084 1000 123 124 1000 128 129 1000 133 134 1000 
+		elementNeighbourTbl[80][0-26]: 1000 025 026 1000 030 031 1000 035 036 1000 075 076 1000 081 1000 085 086 1000 125 126 1000 130 131 1000 135 136 
+		elementNeighbourTbl[81][0-26]: 025 026 027 030 031 032 035 036 037 075 076 077 080 082 085 086 087 125 126 127 130 131 132 135 136 137 
+		elementNeighbourTbl[82][0-26]: 026 027 028 031 032 033 036 037 038 076 077 078 081 083 086 087 088 126 127 128 131 132 133 136 137 138 
+		elementNeighbourTbl[83][0-26]: 027 028 029 032 033 034 037 038 039 077 078 079 082 084 087 088 089 127 128 129 132 133 134 137 138 139 
+		elementNeighbourTbl[84][0-26]: 028 029 1000 033 034 1000 038 039 1000 078 079 1000 083 1000 088 089 1000 128 129 1000 133 134 1000 138 139 1000 
+		elementNeighbourTbl[85][0-26]: 1000 030 031 1000 035 036 1000 040 041 1000 080 081 1000 086 1000 090 091 1000 130 131 1000 135 136 1000 140 141 
+		elementNeighbourTbl[86][0-26]: 030 031 032 035 036 037 040 041 042 080 081 082 085 087 090 091 092 130 131 132 135 136 137 140 141 142 
+		elementNeighbourTbl[87][0-26]: 031 032 033 036 037 038 041 042 043 081 082 083 086 088 091 092 093 131 132 133 136 137 138 141 142 143 
+		elementNeighbourTbl[88][0-26]: 032 033 034 037 038 039 042 043 044 082 083 084 087 089 092 093 094 132 133 134 137 138 139 142 143 144 
+		elementNeighbourTbl[89][0-26]: 033 034 1000 038 039 1000 043 044 1000 083 084 1000 088 1000 093 094 1000 133 134 1000 138 139 1000 143 144 1000 
+		elementNeighbourTbl[90][0-26]: 1000 035 036 1000 040 041 1000 045 046 1000 085 086 1000 091 1000 095 096 1000 135 136 1000 140 141 1000 145 146 
+		elementNeighbourTbl[91][0-26]: 035 036 037 040 041 042 045 046 047 085 086 087 090 092 095 096 097 135 136 137 140 141 142 145 146 147 
+		elementNeighbourTbl[92][0-26]: 036 037 038 041 042 043 046 047 048 086 087 088 091 093 096 097 098 136 137 138 141 142 143 146 147 148 
+		elementNeighbourTbl[93][0-26]: 037 038 039 042 043 044 047 048 049 087 088 089 092 094 097 098 099 137 138 139 142 143 144 147 148 149 
+		elementNeighbourTbl[94][0-26]: 038 039 1000 043 044 1000 048 049 1000 088 089 1000 093 1000 098 099 1000 138 139 1000 143 144 1000 148 149 1000 
+		elementNeighbourTbl[95][0-26]: 1000 040 041 1000 045 046 1000 1000 1000 1000 090 091 1000 096 1000 1000 1000 1000 140 141 1000 145 146 1000 1000 1000 
+		elementNeighbourTbl[96][0-26]: 040 041 042 045 046 047 1000 1000 1000 090 091 092 095 097 1000 1000 1000 140 141 142 145 146 147 1000 1000 1000 
+		elementNeighbourTbl[97][0-26]: 041 042 043 046 047 048 1000 1000 1000 091 092 093 096 098 1000 1000 1000 141 142 143 146 147 148 1000 1000 1000 
+		elementNeighbourTbl[98][0-26]: 042 043 044 047 048 049 1000 1000 1000 092 093 094 097 099 1000 1000 1000 142 143 144 147 148 149 1000 1000 1000 
+		elementNeighbourTbl[99][0-26]: 043 044 1000 048 049 1000 1000 1000 1000 093 094 1000 098 1000 1000 1000 1000 143 144 1000 148 149 1000 1000 1000 1000 
+		elementNeighbourTbl[100][0-26]: 1000 1000 1000 1000 050 051 1000 055 056 1000 1000 1000 1000 101 1000 105 106 1000 1000 1000 1000 150 151 1000 155 156 
+		elementNeighbourTbl[101][0-26]: 1000 1000 1000 050 051 052 055 056 057 1000 1000 1000 100 102 105 106 107 1000 1000 1000 150 151 152 155 156 157 
+		elementNeighbourTbl[102][0-26]: 1000 1000 1000 051 052 053 056 057 058 1000 1000 1000 101 103 106 107 108 1000 1000 1000 151 152 153 156 157 158 
+		elementNeighbourTbl[103][0-26]: 1000 1000 1000 052 053 054 057 058 059 1000 1000 1000 102 104 107 108 109 1000 1000 1000 152 153 154 157 158 159 
+		elementNeighbourTbl[104][0-26]: 1000 1000 1000 053 054 1000 058 059 1000 1000 1000 1000 103 1000 108 109 1000 1000 1000 1000 153 154 1000 158 159 1000 
+		elementNeighbourTbl[105][0-26]: 1000 050 051 1000 055 056 1000 060 061 1000 100 101 1000 106 1000 110 111 1000 150 151 1000 155 156 1000 160 161 
+		elementNeighbourTbl[106][0-26]: 050 051 052 055 056 057 060 061 062 100 101 102 105 107 110 111 112 150 151 152 155 156 157 160 161 162 
+		elementNeighbourTbl[107][0-26]: 051 052 053 056 057 058 061 062 063 101 102 103 106 108 111 112 113 151 152 153 156 157 158 161 162 163 
+		elementNeighbourTbl[108][0-26]: 052 053 054 057 058 059 062 063 064 102 103 104 107 109 112 113 114 152 153 154 157 158 159 162 163 164 
+		elementNeighbourTbl[109][0-26]: 053 054 1000 058 059 1000 063 064 1000 103 104 1000 108 1000 113 114 1000 153 154 1000 158 159 1000 163 164 1000 
+		elementNeighbourTbl[110][0-26]: 1000 055 056 1000 060 061 1000 065 066 1000 105 106 1000 111 1000 115 116 1000 155 156 1000 160 161 1000 165 166 
+		elementNeighbourTbl[111][0-26]: 055 056 057 060 061 062 065 066 067 105 106 107 110 112 115 116 117 155 156 157 160 161 162 165 166 167 
+		elementNeighbourTbl[112][0-26]: 056 057 058 061 062 063 066 067 068 106 107 108 111 113 116 117 118 156 157 158 161 162 163 166 167 168 
+		elementNeighbourTbl[113][0-26]: 057 058 059 062 063 064 067 068 069 107 108 109 112 114 117 118 119 157 158 159 162 163 164 167 168 169 
+		elementNeighbourTbl[114][0-26]: 058 059 1000 063 064 1000 068 069 1000 108 109 1000 113 1000 118 119 1000 158 159 1000 163 164 1000 168 169 1000 
+		elementNeighbourTbl[115][0-26]: 1000 060 061 1000 065 066 1000 070 071 1000 110 111 1000 116 1000 120 121 1000 160 161 1000 165 166 1000 170 171 
+		elementNeighbourTbl[116][0-26]: 060 061 062 065 066 067 070 071 072 110 111 112 115 117 120 121 122 160 161 162 165 166 167 170 171 172 
+		elementNeighbourTbl[117][0-26]: 061 062 063 066 067 068 071 072 073 111 112 113 116 118 121 122 123 161 162 163 166 167 168 171 172 173 
+		elementNeighbourTbl[118][0-26]: 062 063 064 067 068 069 072 073 074 112 113 114 117 119 122 123 124 162 163 164 167 168 169 172 173 174 
+		elementNeighbourTbl[119][0-26]: 063 064 1000 068 069 1000 073 074 1000 113 114 1000 118 1000 123 124 1000 163 164 1000 168 169 1000 173 174 1000 
+		elementNeighbourTbl[120][0-26]: 1000 065 066 1000 070 071 1000 075 076 1000 115 116 1000 121 1000 125 126 1000 165 166 1000 170 171 1000 175 176 
+		elementNeighbourTbl[121][0-26]: 065 066 067 070 071 072 075 076 077 115 116 117 120 122 125 126 127 165 166 167 170 171 172 175 176 177 
+		elementNeighbourTbl[122][0-26]: 066 067 068 071 072 073 076 077 078 116 117 118 121 123 126 127 128 166 167 168 171 172 173 176 177 178 
+		elementNeighbourTbl[123][0-26]: 067 068 069 072 073 074 077 078 079 117 118 119 122 124 127 128 129 167 168 169 172 173 174 177 178 179 
+		elementNeighbourTbl[124][0-26]: 068 069 1000 073 074 1000 078 079 1000 118 119 1000 123 1000 128 129 1000 168 169 1000 173 174 1000 178 179 1000 
+		elementNeighbourTbl[125][0-26]: 1000 070 071 1000 075 076 1000 080 081 1000 120 121 1000 126 1000 130 131 1000 170 171 1000 175 176 1000 180 181 
+		elementNeighbourTbl[126][0-26]: 070 071 072 075 076 077 080 081 082 120 121 122 125 127 130 131 132 170 171 172 175 176 177 180 181 182 
+		elementNeighbourTbl[127][0-26]: 071 072 073 076 077 078 081 082 083 121 122 123 126 128 131 132 133 171 172 173 176 177 178 181 182 183 
+		elementNeighbourTbl[128][0-26]: 072 073 074 077 078 079 082 083 084 122 123 124 127 129 132 133 134 172 173 174 177 178 179 182 183 184 
+		elementNeighbourTbl[129][0-26]: 073 074 1000 078 079 1000 083 084 1000 123 124 1000 128 1000 133 134 1000 173 174 1000 178 179 1000 183 184 1000 
+		elementNeighbourTbl[130][0-26]: 1000 075 076 1000 080 081 1000 085 086 1000 125 126 1000 131 1000 135 136 1000 175 176 1000 180 181 1000 185 186 
+		elementNeighbourTbl[131][0-26]: 075 076 077 080 081 082 085 086 087 125 126 127 130 132 135 136 137 175 176 177 180 181 182 185 186 187 
+		elementNeighbourTbl[132][0-26]: 076 077 078 081 082 083 086 087 088 126 127 128 131 133 136 137 138 176 177 178 181 182 183 186 187 188 
+		elementNeighbourTbl[133][0-26]: 077 078 079 082 083 084 087 088 089 127 128 129 132 134 137 138 139 177 178 179 182 183 184 187 188 189 
+		elementNeighbourTbl[134][0-26]: 078 079 1000 083 084 1000 088 089 1000 128 129 1000 133 1000 138 139 1000 178 179 1000 183 184 1000 188 189 1000 
+		elementNeighbourTbl[135][0-26]: 1000 080 081 1000 085 086 1000 090 091 1000 130 131 1000 136 1000 140 141 1000 180 181 1000 185 186 1000 190 191 
+		elementNeighbourTbl[136][0-26]: 080 081 082 085 086 087 090 091 092 130 131 132 135 137 140 141 142 180 181 182 185 186 187 190 191 192 
+		elementNeighbourTbl[137][0-26]: 081 082 083 086 087 088 091 092 093 131 132 133 136 138 141 142 143 181 182 183 186 187 188 191 192 193 
+		elementNeighbourTbl[138][0-26]: 082 083 084 087 088 089 092 093 094 132 133 134 137 139 142 143 144 182 183 184 187 188 189 192 193 194 
+		elementNeighbourTbl[139][0-26]: 083 084 1000 088 089 1000 093 094 1000 133 134 1000 138 1000 143 144 1000 183 184 1000 188 189 1000 193 194 1000 
+		elementNeighbourTbl[140][0-26]: 1000 085 086 1000 090 091 1000 095 096 1000 135 136 1000 141 1000 145 146 1000 185 186 1000 190 191 1000 195 196 
+		elementNeighbourTbl[141][0-26]: 085 086 087 090 091 092 095 096 097 135 136 137 140 142 145 146 147 185 186 187 190 191 192 195 196 197 
+		elementNeighbourTbl[142][0-26]: 086 087 088 091 092 093 096 097 098 136 137 138 141 143 146 147 148 186 187 188 191 192 193 196 197 198 
+		elementNeighbourTbl[143][0-26]: 087 088 089 092 093 094 097 098 099 137 138 139 142 144 147 148 149 187 188 189 192 193 194 197 198 199 
+		elementNeighbourTbl[144][0-26]: 088 089 1000 093 094 1000 098 099 1000 138 139 1000 143 1000 148 149 1000 188 189 1000 193 194 1000 198 199 1000 
+		elementNeighbourTbl[145][0-26]: 1000 090 091 1000 095 096 1000 1000 1000 1000 140 141 1000 146 1000 1000 1000 1000 190 191 1000 195 196 1000 1000 1000 
+		elementNeighbourTbl[146][0-26]: 090 091 092 095 096 097 1000 1000 1000 140 141 142 145 147 1000 1000 1000 190 191 192 195 196 197 1000 1000 1000 
+		elementNeighbourTbl[147][0-26]: 091 092 093 096 097 098 1000 1000 1000 141 142 143 146 148 1000 1000 1000 191 192 193 196 197 198 1000 1000 1000 
+		elementNeighbourTbl[148][0-26]: 092 093 094 097 098 099 1000 1000 1000 142 143 144 147 149 1000 1000 1000 192 193 194 197 198 199 1000 1000 1000 
+		elementNeighbourTbl[149][0-26]: 093 094 1000 098 099 1000 1000 1000 1000 143 144 1000 148 1000 1000 1000 1000 193 194 1000 198 199 1000 1000 1000 1000 
+		elementNeighbourTbl[150][0-26]: 1000 1000 1000 1000 100 101 1000 105 106 1000 1000 1000 1000 151 1000 155 156 1000 1000 1000 1000 200 201 1000 205 206 
+		elementNeighbourTbl[151][0-26]: 1000 1000 1000 100 101 102 105 106 107 1000 1000 1000 150 152 155 156 157 1000 1000 1000 200 201 202 205 206 207 
+		elementNeighbourTbl[152][0-26]: 1000 1000 1000 101 102 103 106 107 108 1000 1000 1000 151 153 156 157 158 1000 1000 1000 201 202 203 206 207 208 
+		elementNeighbourTbl[153][0-26]: 1000 1000 1000 102 103 104 107 108 109 1000 1000 1000 152 154 157 158 159 1000 1000 1000 202 203 204 207 208 209 
+		elementNeighbourTbl[154][0-26]: 1000 1000 1000 103 104 1000 108 109 1000 1000 1000 1000 153 1000 158 159 1000 1000 1000 1000 203 204 1000 208 209 1000 
+		elementNeighbourTbl[155][0-26]: 1000 100 101 1000 105 106 1000 110 111 1000 150 151 1000 156 1000 160 161 1000 200 201 1000 205 206 1000 210 211 
+		elementNeighbourTbl[156][0-26]: 100 101 102 105 106 107 110 111 112 150 151 152 155 157 160 161 162 200 201 202 205 206 207 210 211 212 
+		elementNeighbourTbl[157][0-26]: 101 102 103 106 107 108 111 112 113 151 152 153 156 158 161 162 163 201 202 203 206 207 208 211 212 213 
+		elementNeighbourTbl[158][0-26]: 102 103 104 107 108 109 112 113 114 152 153 154 157 159 162 163 164 202 203 204 207 208 209 212 213 214 
+		elementNeighbourTbl[159][0-26]: 103 104 1000 108 109 1000 113 114 1000 153 154 1000 158 1000 163 164 1000 203 204 1000 208 209 1000 213 214 1000 
+		elementNeighbourTbl[160][0-26]: 1000 105 106 1000 110 111 1000 115 116 1000 155 156 1000 161 1000 165 166 1000 205 206 1000 210 211 1000 215 216 
+		elementNeighbourTbl[161][0-26]: 105 106 107 110 111 112 115 116 117 155 156 157 160 162 165 166 167 205 206 207 210 211 212 215 216 217 
+		elementNeighbourTbl[162][0-26]: 106 107 108 111 112 113 116 117 118 156 157 158 161 163 166 167 168 206 207 208 211 212 213 216 217 218 
+		elementNeighbourTbl[163][0-26]: 107 108 109 112 113 114 117 118 119 157 158 159 162 164 167 168 169 207 208 209 212 213 214 217 218 219 
+		elementNeighbourTbl[164][0-26]: 108 109 1000 113 114 1000 118 119 1000 158 159 1000 163 1000 168 169 1000 208 209 1000 213 214 1000 218 219 1000 
+		elementNeighbourTbl[165][0-26]: 1000 110 111 1000 115 116 1000 120 121 1000 160 161 1000 166 1000 170 171 1000 210 211 1000 215 216 1000 220 221 
+		elementNeighbourTbl[166][0-26]: 110 111 112 115 116 117 120 121 122 160 161 162 165 167 170 171 172 210 211 212 215 216 217 220 221 222 
+		elementNeighbourTbl[167][0-26]: 111 112 113 116 117 118 121 122 123 161 162 163 166 168 171 172 173 211 212 213 216 217 218 221 222 223 
+		elementNeighbourTbl[168][0-26]: 112 113 114 117 118 119 122 123 124 162 163 164 167 169 172 173 174 212 213 214 217 218 219 222 223 224 
+		elementNeighbourTbl[169][0-26]: 113 114 1000 118 119 1000 123 124 1000 163 164 1000 168 1000 173 174 1000 213 214 1000 218 219 1000 223 224 1000 
+		elementNeighbourTbl[170][0-26]: 1000 115 116 1000 120 121 1000 125 126 1000 165 166 1000 171 1000 175 176 1000 215 216 1000 220 221 1000 225 226 
+		elementNeighbourTbl[171][0-26]: 115 116 117 120 121 122 125 126 127 165 166 167 170 172 175 176 177 215 216 217 220 221 222 225 226 227 
+		elementNeighbourTbl[172][0-26]: 116 117 118 121 122 123 126 127 128 166 167 168 171 173 176 177 178 216 217 218 221 222 223 226 227 228 
+		elementNeighbourTbl[173][0-26]: 117 118 119 122 123 124 127 128 129 167 168 169 172 174 177 178 179 217 218 219 222 223 224 227 228 229 
+		elementNeighbourTbl[174][0-26]: 118 119 1000 123 124 1000 128 129 1000 168 169 1000 173 1000 178 179 1000 218 219 1000 223 224 1000 228 229 1000 
+		elementNeighbourTbl[175][0-26]: 1000 120 121 1000 125 126 1000 130 131 1000 170 171 1000 176 1000 180 181 1000 220 221 1000 225 226 1000 230 231 
+		elementNeighbourTbl[176][0-26]: 120 121 122 125 126 127 130 131 132 170 171 172 175 177 180 181 182 220 221 222 225 226 227 230 231 232 
+		elementNeighbourTbl[177][0-26]: 121 122 123 126 127 128 131 132 133 171 172 173 176 178 181 182 183 221 222 223 226 227 228 231 232 233 
+		elementNeighbourTbl[178][0-26]: 122 123 124 127 128 129 132 133 134 172 173 174 177 179 182 183 184 222 223 224 227 228 229 232 233 234 
+		elementNeighbourTbl[179][0-26]: 123 124 1000 128 129 1000 133 134 1000 173 174 1000 178 1000 183 184 1000 223 224 1000 228 229 1000 233 234 1000 
+		elementNeighbourTbl[180][0-26]: 1000 125 126 1000 130 131 1000 135 136 1000 175 176 1000 181 1000 185 186 1000 225 226 1000 230 231 1000 235 236 
+		elementNeighbourTbl[181][0-26]: 125 126 127 130 131 132 135 136 137 175 176 177 180 182 185 186 187 225 226 227 230 231 232 235 236 237 
+		elementNeighbourTbl[182][0-26]: 126 127 128 131 132 133 136 137 138 176 177 178 181 183 186 187 188 226 227 228 231 232 233 236 237 238 
+		elementNeighbourTbl[183][0-26]: 127 128 129 132 133 134 137 138 139 177 178 179 182 184 187 188 189 227 228 229 232 233 234 237 238 239 
+		elementNeighbourTbl[184][0-26]: 128 129 1000 133 134 1000 138 139 1000 178 179 1000 183 1000 188 189 1000 228 229 1000 233 234 1000 238 239 1000 
+		elementNeighbourTbl[185][0-26]: 1000 130 131 1000 135 136 1000 140 141 1000 180 181 1000 186 1000 190 191 1000 230 231 1000 235 236 1000 240 241 
+		elementNeighbourTbl[186][0-26]: 130 131 132 135 136 137 140 141 142 180 181 182 185 187 190 191 192 230 231 232 235 236 237 240 241 242 
+		elementNeighbourTbl[187][0-26]: 131 132 133 136 137 138 141 142 143 181 182 183 186 188 191 192 193 231 232 233 236 237 238 241 242 243 
+		elementNeighbourTbl[188][0-26]: 132 133 134 137 138 139 142 143 144 182 183 184 187 189 192 193 194 232 233 234 237 238 239 242 243 244 
+		elementNeighbourTbl[189][0-26]: 133 134 1000 138 139 1000 143 144 1000 183 184 1000 188 1000 193 194 1000 233 234 1000 238 239 1000 243 244 1000 
+		elementNeighbourTbl[190][0-26]: 1000 135 136 1000 140 141 1000 145 146 1000 185 186 1000 191 1000 195 196 1000 235 236 1000 240 241 1000 245 246 
+		elementNeighbourTbl[191][0-26]: 135 136 137 140 141 142 145 146 147 185 186 187 190 192 195 196 197 235 236 237 240 241 242 245 246 247 
+		elementNeighbourTbl[192][0-26]: 136 137 138 141 142 143 146 147 148 186 187 188 191 193 196 197 198 236 237 238 241 242 243 246 247 248 
+		elementNeighbourTbl[193][0-26]: 137 138 139 142 143 144 147 148 149 187 188 189 192 194 197 198 199 237 238 239 242 243 244 247 248 249 
+		elementNeighbourTbl[194][0-26]: 138 139 1000 143 144 1000 148 149 1000 188 189 1000 193 1000 198 199 1000 238 239 1000 243 244 1000 248 249 1000 
+		elementNeighbourTbl[195][0-26]: 1000 140 141 1000 145 146 1000 1000 1000 1000 190 191 1000 196 1000 1000 1000 1000 240 241 1000 245 246 1000 1000 1000 
+		elementNeighbourTbl[196][0-26]: 140 141 142 145 146 147 1000 1000 1000 190 191 192 195 197 1000 1000 1000 240 241 242 245 246 247 1000 1000 1000 
+		elementNeighbourTbl[197][0-26]: 141 142 143 146 147 148 1000 1000 1000 191 192 193 196 198 1000 1000 1000 241 242 243 246 247 248 1000 1000 1000 
+		elementNeighbourTbl[198][0-26]: 142 143 144 147 148 149 1000 1000 1000 192 193 194 197 199 1000 1000 1000 242 243 244 247 248 249 1000 1000 1000 
+		elementNeighbourTbl[199][0-26]: 143 144 1000 148 149 1000 1000 1000 1000 193 194 1000 198 1000 1000 1000 1000 243 244 1000 248 249 1000 1000 1000 1000 
+		elementNeighbourTbl[200][0-26]: 1000 1000 1000 1000 150 151 1000 155 156 1000 1000 1000 1000 201 1000 205 206 1000 1000 1000 1000 250 251 1000 255 256 
+		elementNeighbourTbl[201][0-26]: 1000 1000 1000 150 151 152 155 156 157 1000 1000 1000 200 202 205 206 207 1000 1000 1000 250 251 252 255 256 257 
+		elementNeighbourTbl[202][0-26]: 1000 1000 1000 151 152 153 156 157 158 1000 1000 1000 201 203 206 207 208 1000 1000 1000 251 252 253 256 257 258 
+		elementNeighbourTbl[203][0-26]: 1000 1000 1000 152 153 154 157 158 159 1000 1000 1000 202 204 207 208 209 1000 1000 1000 252 253 254 257 258 259 
+		elementNeighbourTbl[204][0-26]: 1000 1000 1000 153 154 1000 158 159 1000 1000 1000 1000 203 1000 208 209 1000 1000 1000 1000 253 254 1000 258 259 1000 
+		elementNeighbourTbl[205][0-26]: 1000 150 151 1000 155 156 1000 160 161 1000 200 201 1000 206 1000 210 211 1000 250 251 1000 255 256 1000 260 261 
+		elementNeighbourTbl[206][0-26]: 150 151 152 155 156 157 160 161 162 200 201 202 205 207 210 211 212 250 251 252 255 256 257 260 261 262 
+		elementNeighbourTbl[207][0-26]: 151 152 153 156 157 158 161 162 163 201 202 203 206 208 211 212 213 251 252 253 256 257 258 261 262 263 
+		elementNeighbourTbl[208][0-26]: 152 153 154 157 158 159 162 163 164 202 203 204 207 209 212 213 214 252 253 254 257 258 259 262 263 264 
+		elementNeighbourTbl[209][0-26]: 153 154 1000 158 159 1000 163 164 1000 203 204 1000 208 1000 213 214 1000 253 254 1000 258 259 1000 263 264 1000 
+		elementNeighbourTbl[210][0-26]: 1000 155 156 1000 160 161 1000 165 166 1000 205 206 1000 211 1000 215 216 1000 255 256 1000 260 261 1000 265 266 
+		elementNeighbourTbl[211][0-26]: 155 156 157 160 161 162 165 166 167 205 206 207 210 212 215 216 217 255 256 257 260 261 262 265 266 267 
+		elementNeighbourTbl[212][0-26]: 156 157 158 161 162 163 166 167 168 206 207 208 211 213 216 217 218 256 257 258 261 262 263 266 267 268 
+		elementNeighbourTbl[213][0-26]: 157 158 159 162 163 164 167 168 169 207 208 209 212 214 217 218 219 257 258 259 262 263 264 267 268 269 
+		elementNeighbourTbl[214][0-26]: 158 159 1000 163 164 1000 168 169 1000 208 209 1000 213 1000 218 219 1000 258 259 1000 263 264 1000 268 269 1000 
+		elementNeighbourTbl[215][0-26]: 1000 160 161 1000 165 166 1000 170 171 1000 210 211 1000 216 1000 220 221 1000 260 261 1000 265 266 1000 270 271 
+		elementNeighbourTbl[216][0-26]: 160 161 162 165 166 167 170 171 172 210 211 212 215 217 220 221 222 260 261 262 265 266 267 270 271 272 
+		elementNeighbourTbl[217][0-26]: 161 162 163 166 167 168 171 172 173 211 212 213 216 218 221 222 223 261 262 263 266 267 268 271 272 273 
+		elementNeighbourTbl[218][0-26]: 162 163 164 167 168 169 172 173 174 212 213 214 217 219 222 223 224 262 263 264 267 268 269 272 273 274 
+		elementNeighbourTbl[219][0-26]: 163 164 1000 168 169 1000 173 174 1000 213 214 1000 218 1000 223 224 1000 263 264 1000 268 269 1000 273 274 1000 
+		elementNeighbourTbl[220][0-26]: 1000 165 166 1000 170 171 1000 175 176 1000 215 216 1000 221 1000 225 226 1000 265 266 1000 270 271 1000 275 276 
+		elementNeighbourTbl[221][0-26]: 165 166 167 170 171 172 175 176 177 215 216 217 220 222 225 226 227 265 266 267 270 271 272 275 276 277 
+		elementNeighbourTbl[222][0-26]: 166 167 168 171 172 173 176 177 178 216 217 218 221 223 226 227 228 266 267 268 271 272 273 276 277 278 
+		elementNeighbourTbl[223][0-26]: 167 168 169 172 173 174 177 178 179 217 218 219 222 224 227 228 229 267 268 269 272 273 274 277 278 279 
+		elementNeighbourTbl[224][0-26]: 168 169 1000 173 174 1000 178 179 1000 218 219 1000 223 1000 228 229 1000 268 269 1000 273 274 1000 278 279 1000 
+		elementNeighbourTbl[225][0-26]: 1000 170 171 1000 175 176 1000 180 181 1000 220 221 1000 226 1000 230 231 1000 270 271 1000 275 276 1000 280 281 
+		elementNeighbourTbl[226][0-26]: 170 171 172 175 176 177 180 181 182 220 221 222 225 227 230 231 232 270 271 272 275 276 277 280 281 282 
+		elementNeighbourTbl[227][0-26]: 171 172 173 176 177 178 181 182 183 221 222 223 226 228 231 232 233 271 272 273 276 277 278 281 282 283 
+		elementNeighbourTbl[228][0-26]: 172 173 174 177 178 179 182 183 184 222 223 224 227 229 232 233 234 272 273 274 277 278 279 282 283 284 
+		elementNeighbourTbl[229][0-26]: 173 174 1000 178 179 1000 183 184 1000 223 224 1000 228 1000 233 234 1000 273 274 1000 278 279 1000 283 284 1000 
+		elementNeighbourTbl[230][0-26]: 1000 175 176 1000 180 181 1000 185 186 1000 225 226 1000 231 1000 235 236 1000 275 276 1000 280 281 1000 285 286 
+		elementNeighbourTbl[231][0-26]: 175 176 177 180 181 182 185 186 187 225 226 227 230 232 235 236 237 275 276 277 280 281 282 285 286 287 
+		elementNeighbourTbl[232][0-26]: 176 177 178 181 182 183 186 187 188 226 227 228 231 233 236 237 238 276 277 278 281 282 283 286 287 288 
+		elementNeighbourTbl[233][0-26]: 177 178 179 182 183 184 187 188 189 227 228 229 232 234 237 238 239 277 278 279 282 283 284 287 288 289 
+		elementNeighbourTbl[234][0-26]: 178 179 1000 183 184 1000 188 189 1000 228 229 1000 233 1000 238 239 1000 278 279 1000 283 284 1000 288 289 1000 
+		elementNeighbourTbl[235][0-26]: 1000 180 181 1000 185 186 1000 190 191 1000 230 231 1000 236 1000 240 241 1000 280 281 1000 285 286 1000 290 291 
+		elementNeighbourTbl[236][0-26]: 180 181 182 185 186 187 190 191 192 230 231 232 235 237 240 241 242 280 281 282 285 286 287 290 291 292 
+		elementNeighbourTbl[237][0-26]: 181 182 183 186 187 188 191 192 193 231 232 233 236 238 241 242 243 281 282 283 286 287 288 291 292 293 
+		elementNeighbourTbl[238][0-26]: 182 183 184 187 188 189 192 193 194 232 233 234 237 239 242 243 244 282 283 284 287 288 289 292 293 294 
+		elementNeighbourTbl[239][0-26]: 183 184 1000 188 189 1000 193 194 1000 233 234 1000 238 1000 243 244 1000 283 284 1000 288 289 1000 293 294 1000 
+		elementNeighbourTbl[240][0-26]: 1000 185 186 1000 190 191 1000 195 196 1000 235 236 1000 241 1000 245 246 1000 285 286 1000 290 291 1000 295 296 
+		elementNeighbourTbl[241][0-26]: 185 186 187 190 191 192 195 196 197 235 236 237 240 242 245 246 247 285 286 287 290 291 292 295 296 297 
+		elementNeighbourTbl[242][0-26]: 186 187 188 191 192 193 196 197 198 236 237 238 241 243 246 247 248 286 287 288 291 292 293 296 297 298 
+		elementNeighbourTbl[243][0-26]: 187 188 189 192 193 194 197 198 199 237 238 239 242 244 247 248 249 287 288 289 292 293 294 297 298 299 
+		elementNeighbourTbl[244][0-26]: 188 189 1000 193 194 1000 198 199 1000 238 239 1000 243 1000 248 249 1000 288 289 1000 293 294 1000 298 299 1000 
+		elementNeighbourTbl[245][0-26]: 1000 190 191 1000 195 196 1000 1000 1000 1000 240 241 1000 246 1000 1000 1000 1000 290 291 1000 295 296 1000 1000 1000 
+		elementNeighbourTbl[246][0-26]: 190 191 192 195 196 197 1000 1000 1000 240 241 242 245 247 1000 1000 1000 290 291 292 295 296 297 1000 1000 1000 
+		elementNeighbourTbl[247][0-26]: 191 192 193 196 197 198 1000 1000 1000 241 242 243 246 248 1000 1000 1000 291 292 293 296 297 298 1000 1000 1000 
+		elementNeighbourTbl[248][0-26]: 192 193 194 197 198 199 1000 1000 1000 242 243 244 247 249 1000 1000 1000 292 293 294 297 298 299 1000 1000 1000 
+		elementNeighbourTbl[249][0-26]: 193 194 1000 198 199 1000 1000 1000 1000 243 244 1000 248 1000 1000 1000 1000 293 294 1000 298 299 1000 1000 1000 1000 
+		elementNeighbourTbl[250][0-26]: 1000 1000 1000 1000 200 201 1000 205 206 1000 1000 1000 1000 251 1000 255 256 1000 1000 1000 1000 300 301 1000 305 306 
+		elementNeighbourTbl[251][0-26]: 1000 1000 1000 200 201 202 205 206 207 1000 1000 1000 250 252 255 256 257 1000 1000 1000 300 301 302 305 306 307 
+		elementNeighbourTbl[252][0-26]: 1000 1000 1000 201 202 203 206 207 208 1000 1000 1000 251 253 256 257 258 1000 1000 1000 301 302 303 306 307 308 
+		elementNeighbourTbl[253][0-26]: 1000 1000 1000 202 203 204 207 208 209 1000 1000 1000 252 254 257 258 259 1000 1000 1000 302 303 304 307 308 309 
+		elementNeighbourTbl[254][0-26]: 1000 1000 1000 203 204 1000 208 209 1000 1000 1000 1000 253 1000 258 259 1000 1000 1000 1000 303 304 1000 308 309 1000 
+		elementNeighbourTbl[255][0-26]: 1000 200 201 1000 205 206 1000 210 211 1000 250 251 1000 256 1000 260 261 1000 300 301 1000 305 306 1000 310 311 
+		elementNeighbourTbl[256][0-26]: 200 201 202 205 206 207 210 211 212 250 251 252 255 257 260 261 262 300 301 302 305 306 307 310 311 312 
+		elementNeighbourTbl[257][0-26]: 201 202 203 206 207 208 211 212 213 251 252 253 256 258 261 262 263 301 302 303 306 307 308 311 312 313 
+		elementNeighbourTbl[258][0-26]: 202 203 204 207 208 209 212 213 214 252 253 254 257 259 262 263 264 302 303 304 307 308 309 312 313 314 
+		elementNeighbourTbl[259][0-26]: 203 204 1000 208 209 1000 213 214 1000 253 254 1000 258 1000 263 264 1000 303 304 1000 308 309 1000 313 314 1000 
+		elementNeighbourTbl[260][0-26]: 1000 205 206 1000 210 211 1000 215 216 1000 255 256 1000 261 1000 265 266 1000 305 306 1000 310 311 1000 315 316 
+		elementNeighbourTbl[261][0-26]: 205 206 207 210 211 212 215 216 217 255 256 257 260 262 265 266 267 305 306 307 310 311 312 315 316 317 
+		elementNeighbourTbl[262][0-26]: 206 207 208 211 212 213 216 217 218 256 257 258 261 263 266 267 268 306 307 308 311 312 313 316 317 318 
+		elementNeighbourTbl[263][0-26]: 207 208 209 212 213 214 217 218 219 257 258 259 262 264 267 268 269 307 308 309 312 313 314 317 318 319 
+		elementNeighbourTbl[264][0-26]: 208 209 1000 213 214 1000 218 219 1000 258 259 1000 263 1000 268 269 1000 308 309 1000 313 314 1000 318 319 1000 
+		elementNeighbourTbl[265][0-26]: 1000 210 211 1000 215 216 1000 220 221 1000 260 261 1000 266 1000 270 271 1000 310 311 1000 315 316 1000 320 321 
+		elementNeighbourTbl[266][0-26]: 210 211 212 215 216 217 220 221 222 260 261 262 265 267 270 271 272 310 311 312 315 316 317 320 321 322 
+		elementNeighbourTbl[267][0-26]: 211 212 213 216 217 218 221 222 223 261 262 263 266 268 271 272 273 311 312 313 316 317 318 321 322 323 
+		elementNeighbourTbl[268][0-26]: 212 213 214 217 218 219 222 223 224 262 263 264 267 269 272 273 274 312 313 314 317 318 319 322 323 324 
+		elementNeighbourTbl[269][0-26]: 213 214 1000 218 219 1000 223 224 1000 263 264 1000 268 1000 273 274 1000 313 314 1000 318 319 1000 323 324 1000 
+		elementNeighbourTbl[270][0-26]: 1000 215 216 1000 220 221 1000 225 226 1000 265 266 1000 271 1000 275 276 1000 315 316 1000 320 321 1000 325 326 
+		elementNeighbourTbl[271][0-26]: 215 216 217 220 221 222 225 226 227 265 266 267 270 272 275 276 277 315 316 317 320 321 322 325 326 327 
+		elementNeighbourTbl[272][0-26]: 216 217 218 221 222 223 226 227 228 266 267 268 271 273 276 277 278 316 317 318 321 322 323 326 327 328 
+		elementNeighbourTbl[273][0-26]: 217 218 219 222 223 224 227 228 229 267 268 269 272 274 277 278 279 317 318 319 322 323 324 327 328 329 
+		elementNeighbourTbl[274][0-26]: 218 219 1000 223 224 1000 228 229 1000 268 269 1000 273 1000 278 279 1000 318 319 1000 323 324 1000 328 329 1000 
+		elementNeighbourTbl[275][0-26]: 1000 220 221 1000 225 226 1000 230 231 1000 270 271 1000 276 1000 280 281 1000 320 321 1000 325 326 1000 330 331 
+		elementNeighbourTbl[276][0-26]: 220 221 222 225 226 227 230 231 232 270 271 272 275 277 280 281 282 320 321 322 325 326 327 330 331 332 
+		elementNeighbourTbl[277][0-26]: 221 222 223 226 227 228 231 232 233 271 272 273 276 278 281 282 283 321 322 323 326 327 328 331 332 333 
+		elementNeighbourTbl[278][0-26]: 222 223 224 227 228 229 232 233 234 272 273 274 277 279 282 283 284 322 323 324 327 328 329 332 333 334 
+		elementNeighbourTbl[279][0-26]: 223 224 1000 228 229 1000 233 234 1000 273 274 1000 278 1000 283 284 1000 323 324 1000 328 329 1000 333 334 1000 
+		elementNeighbourTbl[280][0-26]: 1000 225 226 1000 230 231 1000 235 236 1000 275 276 1000 281 1000 285 286 1000 325 326 1000 330 331 1000 335 336 
+		elementNeighbourTbl[281][0-26]: 225 226 227 230 231 232 235 236 237 275 276 277 280 282 285 286 287 325 326 327 330 331 332 335 336 337 
+		elementNeighbourTbl[282][0-26]: 226 227 228 231 232 233 236 237 238 276 277 278 281 283 286 287 288 326 327 328 331 332 333 336 337 338 
+		elementNeighbourTbl[283][0-26]: 227 228 229 232 233 234 237 238 239 277 278 279 282 284 287 288 289 327 328 329 332 333 334 337 338 339 
+		elementNeighbourTbl[284][0-26]: 228 229 1000 233 234 1000 238 239 1000 278 279 1000 283 1000 288 289 1000 328 329 1000 333 334 1000 338 339 1000 
+		elementNeighbourTbl[285][0-26]: 1000 230 231 1000 235 236 1000 240 241 1000 280 281 1000 286 1000 290 291 1000 330 331 1000 335 336 1000 340 341 
+		elementNeighbourTbl[286][0-26]: 230 231 232 235 236 237 240 241 242 280 281 282 285 287 290 291 292 330 331 332 335 336 337 340 341 342 
+		elementNeighbourTbl[287][0-26]: 231 232 233 236 237 238 241 242 243 281 282 283 286 288 291 292 293 331 332 333 336 337 338 341 342 343 
+		elementNeighbourTbl[288][0-26]: 232 233 234 237 238 239 242 243 244 282 283 284 287 289 292 293 294 332 333 334 337 338 339 342 343 344 
+		elementNeighbourTbl[289][0-26]: 233 234 1000 238 239 1000 243 244 1000 283 284 1000 288 1000 293 294 1000 333 334 1000 338 339 1000 343 344 1000 
+		elementNeighbourTbl[290][0-26]: 1000 235 236 1000 240 241 1000 245 246 1000 285 286 1000 291 1000 295 296 1000 335 336 1000 340 341 1000 345 346 
+		elementNeighbourTbl[291][0-26]: 235 236 237 240 241 242 245 246 247 285 286 287 290 292 295 296 297 335 336 337 340 341 342 345 346 347 
+		elementNeighbourTbl[292][0-26]: 236 237 238 241 242 243 246 247 248 286 287 288 291 293 296 297 298 336 337 338 341 342 343 346 347 348 
+		elementNeighbourTbl[293][0-26]: 237 238 239 242 243 244 247 248 249 287 288 289 292 294 297 298 299 337 338 339 342 343 344 347 348 349 
+		elementNeighbourTbl[294][0-26]: 238 239 1000 243 244 1000 248 249 1000 288 289 1000 293 1000 298 299 1000 338 339 1000 343 344 1000 348 349 1000 
+		elementNeighbourTbl[295][0-26]: 1000 240 241 1000 245 246 1000 1000 1000 1000 290 291 1000 296 1000 1000 1000 1000 340 341 1000 345 346 1000 1000 1000 
+		elementNeighbourTbl[296][0-26]: 240 241 242 245 246 247 1000 1000 1000 290 291 292 295 297 1000 1000 1000 340 341 342 345 346 347 1000 1000 1000 
+		elementNeighbourTbl[297][0-26]: 241 242 243 246 247 248 1000 1000 1000 291 292 293 296 298 1000 1000 1000 341 342 343 346 347 348 1000 1000 1000 
+		elementNeighbourTbl[298][0-26]: 242 243 244 247 248 249 1000 1000 1000 292 293 294 297 299 1000 1000 1000 342 343 344 347 348 349 1000 1000 1000 
+		elementNeighbourTbl[299][0-26]: 243 244 1000 248 249 1000 1000 1000 1000 293 294 1000 298 1000 1000 1000 1000 343 344 1000 348 349 1000 1000 1000 1000 
+		elementNeighbourTbl[300][0-26]: 1000 1000 1000 1000 250 251 1000 255 256 1000 1000 1000 1000 301 1000 305 306 1000 1000 1000 1000 350 351 1000 355 356 
+		elementNeighbourTbl[301][0-26]: 1000 1000 1000 250 251 252 255 256 257 1000 1000 1000 300 302 305 306 307 1000 1000 1000 350 351 352 355 356 357 
+		elementNeighbourTbl[302][0-26]: 1000 1000 1000 251 252 253 256 257 258 1000 1000 1000 301 303 306 307 308 1000 1000 1000 351 352 353 356 357 358 
+		elementNeighbourTbl[303][0-26]: 1000 1000 1000 252 253 254 257 258 259 1000 1000 1000 302 304 307 308 309 1000 1000 1000 352 353 354 357 358 359 
+		elementNeighbourTbl[304][0-26]: 1000 1000 1000 253 254 1000 258 259 1000 1000 1000 1000 303 1000 308 309 1000 1000 1000 1000 353 354 1000 358 359 1000 
+		elementNeighbourTbl[305][0-26]: 1000 250 251 1000 255 256 1000 260 261 1000 300 301 1000 306 1000 310 311 1000 350 351 1000 355 356 1000 360 361 
+		elementNeighbourTbl[306][0-26]: 250 251 252 255 256 257 260 261 262 300 301 302 305 307 310 311 312 350 351 352 355 356 357 360 361 362 
+		elementNeighbourTbl[307][0-26]: 251 252 253 256 257 258 261 262 263 301 302 303 306 308 311 312 313 351 352 353 356 357 358 361 362 363 
+		elementNeighbourTbl[308][0-26]: 252 253 254 257 258 259 262 263 264 302 303 304 307 309 312 313 314 352 353 354 357 358 359 362 363 364 
+		elementNeighbourTbl[309][0-26]: 253 254 1000 258 259 1000 263 264 1000 303 304 1000 308 1000 313 314 1000 353 354 1000 358 359 1000 363 364 1000 
+		elementNeighbourTbl[310][0-26]: 1000 255 256 1000 260 261 1000 265 266 1000 305 306 1000 311 1000 315 316 1000 355 356 1000 360 361 1000 365 366 
+		elementNeighbourTbl[311][0-26]: 255 256 257 260 261 262 265 266 267 305 306 307 310 312 315 316 317 355 356 357 360 361 362 365 366 367 
+		elementNeighbourTbl[312][0-26]: 256 257 258 261 262 263 266 267 268 306 307 308 311 313 316 317 318 356 357 358 361 362 363 366 367 368 
+		elementNeighbourTbl[313][0-26]: 257 258 259 262 263 264 267 268 269 307 308 309 312 314 317 318 319 357 358 359 362 363 364 367 368 369 
+		elementNeighbourTbl[314][0-26]: 258 259 1000 263 264 1000 268 269 1000 308 309 1000 313 1000 318 319 1000 358 359 1000 363 364 1000 368 369 1000 
+		elementNeighbourTbl[315][0-26]: 1000 260 261 1000 265 266 1000 270 271 1000 310 311 1000 316 1000 320 321 1000 360 361 1000 365 366 1000 370 371 
+		elementNeighbourTbl[316][0-26]: 260 261 262 265 266 267 270 271 272 310 311 312 315 317 320 321 322 360 361 362 365 366 367 370 371 372 
+		elementNeighbourTbl[317][0-26]: 261 262 263 266 267 268 271 272 273 311 312 313 316 318 321 322 323 361 362 363 366 367 368 371 372 373 
+		elementNeighbourTbl[318][0-26]: 262 263 264 267 268 269 272 273 274 312 313 314 317 319 322 323 324 362 363 364 367 368 369 372 373 374 
+		elementNeighbourTbl[319][0-26]: 263 264 1000 268 269 1000 273 274 1000 313 314 1000 318 1000 323 324 1000 363 364 1000 368 369 1000 373 374 1000 
+		elementNeighbourTbl[320][0-26]: 1000 265 266 1000 270 271 1000 275 276 1000 315 316 1000 321 1000 325 326 1000 365 366 1000 370 371 1000 375 376 
+		elementNeighbourTbl[321][0-26]: 265 266 267 270 271 272 275 276 277 315 316 317 320 322 325 326 327 365 366 367 370 371 372 375 376 377 
+		elementNeighbourTbl[322][0-26]: 266 267 268 271 272 273 276 277 278 316 317 318 321 323 326 327 328 366 367 368 371 372 373 376 377 378 
+		elementNeighbourTbl[323][0-26]: 267 268 269 272 273 274 277 278 279 317 318 319 322 324 327 328 329 367 368 369 372 373 374 377 378 379 
+		elementNeighbourTbl[324][0-26]: 268 269 1000 273 274 1000 278 279 1000 318 319 1000 323 1000 328 329 1000 368 369 1000 373 374 1000 378 379 1000 
+		elementNeighbourTbl[325][0-26]: 1000 270 271 1000 275 276 1000 280 281 1000 320 321 1000 326 1000 330 331 1000 370 371 1000 375 376 1000 380 381 
+		elementNeighbourTbl[326][0-26]: 270 271 272 275 276 277 280 281 282 320 321 322 325 327 330 331 332 370 371 372 375 376 377 380 381 382 
+		elementNeighbourTbl[327][0-26]: 271 272 273 276 277 278 281 282 283 321 322 323 326 328 331 332 333 371 372 373 376 377 378 381 382 383 
+		elementNeighbourTbl[328][0-26]: 272 273 274 277 278 279 282 283 284 322 323 324 327 329 332 333 334 372 373 374 377 378 379 382 383 384 
+		elementNeighbourTbl[329][0-26]: 273 274 1000 278 279 1000 283 284 1000 323 324 1000 328 1000 333 334 1000 373 374 1000 378 379 1000 383 384 1000 
+		elementNeighbourTbl[330][0-26]: 1000 275 276 1000 280 281 1000 285 286 1000 325 326 1000 331 1000 335 336 1000 375 376 1000 380 381 1000 385 386 
+		elementNeighbourTbl[331][0-26]: 275 276 277 280 281 282 285 286 287 325 326 327 330 332 335 336 337 375 376 377 380 381 382 385 386 387 
+		elementNeighbourTbl[332][0-26]: 276 277 278 281 282 283 286 287 288 326 327 328 331 333 336 337 338 376 377 378 381 382 383 386 387 388 
+		elementNeighbourTbl[333][0-26]: 277 278 279 282 283 284 287 288 289 327 328 329 332 334 337 338 339 377 378 379 382 383 384 387 388 389 
+		elementNeighbourTbl[334][0-26]: 278 279 1000 283 284 1000 288 289 1000 328 329 1000 333 1000 338 339 1000 378 379 1000 383 384 1000 388 389 1000 
+		elementNeighbourTbl[335][0-26]: 1000 280 281 1000 285 286 1000 290 291 1000 330 331 1000 336 1000 340 341 1000 380 381 1000 385 386 1000 390 391 
+		elementNeighbourTbl[336][0-26]: 280 281 282 285 286 287 290 291 292 330 331 332 335 337 340 341 342 380 381 382 385 386 387 390 391 392 
+		elementNeighbourTbl[337][0-26]: 281 282 283 286 287 288 291 292 293 331 332 333 336 338 341 342 343 381 382 383 386 387 388 391 392 393 
+		elementNeighbourTbl[338][0-26]: 282 283 284 287 288 289 292 293 294 332 333 334 337 339 342 343 344 382 383 384 387 388 389 392 393 394 
+		elementNeighbourTbl[339][0-26]: 283 284 1000 288 289 1000 293 294 1000 333 334 1000 338 1000 343 344 1000 383 384 1000 388 389 1000 393 394 1000 
+		elementNeighbourTbl[340][0-26]: 1000 285 286 1000 290 291 1000 295 296 1000 335 336 1000 341 1000 345 346 1000 385 386 1000 390 391 1000 395 396 
+		elementNeighbourTbl[341][0-26]: 285 286 287 290 291 292 295 296 297 335 336 337 340 342 345 346 347 385 386 387 390 391 392 395 396 397 
+		elementNeighbourTbl[342][0-26]: 286 287 288 291 292 293 296 297 298 336 337 338 341 343 346 347 348 386 387 388 391 392 393 396 397 398 
+		elementNeighbourTbl[343][0-26]: 287 288 289 292 293 294 297 298 299 337 338 339 342 344 347 348 349 387 388 389 392 393 394 397 398 399 
+		elementNeighbourTbl[344][0-26]: 288 289 1000 293 294 1000 298 299 1000 338 339 1000 343 1000 348 349 1000 388 389 1000 393 394 1000 398 399 1000 
+		elementNeighbourTbl[345][0-26]: 1000 290 291 1000 295 296 1000 1000 1000 1000 340 341 1000 346 1000 1000 1000 1000 390 391 1000 395 396 1000 1000 1000 
+		elementNeighbourTbl[346][0-26]: 290 291 292 295 296 297 1000 1000 1000 340 341 342 345 347 1000 1000 1000 390 391 392 395 396 397 1000 1000 1000 
+		elementNeighbourTbl[347][0-26]: 291 292 293 296 297 298 1000 1000 1000 341 342 343 346 348 1000 1000 1000 391 392 393 396 397 398 1000 1000 1000 
+		elementNeighbourTbl[348][0-26]: 292 293 294 297 298 299 1000 1000 1000 342 343 344 347 349 1000 1000 1000 392 393 394 397 398 399 1000 1000 1000 
+		elementNeighbourTbl[349][0-26]: 293 294 1000 298 299 1000 1000 1000 1000 343 344 1000 348 1000 1000 1000 1000 393 394 1000 398 399 1000 1000 1000 1000 
+		elementNeighbourTbl[350][0-26]: 1000 1000 1000 1000 300 301 1000 305 306 1000 1000 1000 1000 351 1000 355 356 1000 1000 1000 1000 400 401 1000 405 406 
+		elementNeighbourTbl[351][0-26]: 1000 1000 1000 300 301 302 305 306 307 1000 1000 1000 350 352 355 356 357 1000 1000 1000 400 401 402 405 406 407 
+		elementNeighbourTbl[352][0-26]: 1000 1000 1000 301 302 303 306 307 308 1000 1000 1000 351 353 356 357 358 1000 1000 1000 401 402 403 406 407 408 
+		elementNeighbourTbl[353][0-26]: 1000 1000 1000 302 303 304 307 308 309 1000 1000 1000 352 354 357 358 359 1000 1000 1000 402 403 404 407 408 409 
+		elementNeighbourTbl[354][0-26]: 1000 1000 1000 303 304 1000 308 309 1000 1000 1000 1000 353 1000 358 359 1000 1000 1000 1000 403 404 1000 408 409 1000 
+		elementNeighbourTbl[355][0-26]: 1000 300 301 1000 305 306 1000 310 311 1000 350 351 1000 356 1000 360 361 1000 400 401 1000 405 406 1000 410 411 
+		elementNeighbourTbl[356][0-26]: 300 301 302 305 306 307 310 311 312 350 351 352 355 357 360 361 362 400 401 402 405 406 407 410 411 412 
+		elementNeighbourTbl[357][0-26]: 301 302 303 306 307 308 311 312 313 351 352 353 356 358 361 362 363 401 402 403 406 407 408 411 412 413 
+		elementNeighbourTbl[358][0-26]: 302 303 304 307 308 309 312 313 314 352 353 354 357 359 362 363 364 402 403 404 407 408 409 412 413 414 
+		elementNeighbourTbl[359][0-26]: 303 304 1000 308 309 1000 313 314 1000 353 354 1000 358 1000 363 364 1000 403 404 1000 408 409 1000 413 414 1000 
+		elementNeighbourTbl[360][0-26]: 1000 305 306 1000 310 311 1000 315 316 1000 355 356 1000 361 1000 365 366 1000 405 406 1000 410 411 1000 415 416 
+		elementNeighbourTbl[361][0-26]: 305 306 307 310 311 312 315 316 317 355 356 357 360 362 365 366 367 405 406 407 410 411 412 415 416 417 
+		elementNeighbourTbl[362][0-26]: 306 307 308 311 312 313 316 317 318 356 357 358 361 363 366 367 368 406 407 408 411 412 413 416 417 418 
+		elementNeighbourTbl[363][0-26]: 307 308 309 312 313 314 317 318 319 357 358 359 362 364 367 368 369 407 408 409 412 413 414 417 418 419 
+		elementNeighbourTbl[364][0-26]: 308 309 1000 313 314 1000 318 319 1000 358 359 1000 363 1000 368 369 1000 408 409 1000 413 414 1000 418 419 1000 
+		elementNeighbourTbl[365][0-26]: 1000 310 311 1000 315 316 1000 320 321 1000 360 361 1000 366 1000 370 371 1000 410 411 1000 415 416 1000 420 421 
+		elementNeighbourTbl[366][0-26]: 310 311 312 315 316 317 320 321 322 360 361 362 365 367 370 371 372 410 411 412 415 416 417 420 421 422 
+		elementNeighbourTbl[367][0-26]: 311 312 313 316 317 318 321 322 323 361 362 363 366 368 371 372 373 411 412 413 416 417 418 421 422 423 
+		elementNeighbourTbl[368][0-26]: 312 313 314 317 318 319 322 323 324 362 363 364 367 369 372 373 374 412 413 414 417 418 419 422 423 424 
+		elementNeighbourTbl[369][0-26]: 313 314 1000 318 319 1000 323 324 1000 363 364 1000 368 1000 373 374 1000 413 414 1000 418 419 1000 423 424 1000 
+		elementNeighbourTbl[370][0-26]: 1000 315 316 1000 320 321 1000 325 326 1000 365 366 1000 371 1000 375 376 1000 415 416 1000 420 421 1000 425 426 
+		elementNeighbourTbl[371][0-26]: 315 316 317 320 321 322 325 326 327 365 366 367 370 372 375 376 377 415 416 417 420 421 422 425 426 427 
+		elementNeighbourTbl[372][0-26]: 316 317 318 321 322 323 326 327 328 366 367 368 371 373 376 377 378 416 417 418 421 422 423 426 427 428 
+		elementNeighbourTbl[373][0-26]: 317 318 319 322 323 324 327 328 329 367 368 369 372 374 377 378 379 417 418 419 422 423 424 427 428 429 
+		elementNeighbourTbl[374][0-26]: 318 319 1000 323 324 1000 328 329 1000 368 369 1000 373 1000 378 379 1000 418 419 1000 423 424 1000 428 429 1000 
+		elementNeighbourTbl[375][0-26]: 1000 320 321 1000 325 326 1000 330 331 1000 370 371 1000 376 1000 380 381 1000 420 421 1000 425 426 1000 430 431 
+		elementNeighbourTbl[376][0-26]: 320 321 322 325 326 327 330 331 332 370 371 372 375 377 380 381 382 420 421 422 425 426 427 430 431 432 
+		elementNeighbourTbl[377][0-26]: 321 322 323 326 327 328 331 332 333 371 372 373 376 378 381 382 383 421 422 423 426 427 428 431 432 433 
+		elementNeighbourTbl[378][0-26]: 322 323 324 327 328 329 332 333 334 372 373 374 377 379 382 383 384 422 423 424 427 428 429 432 433 434 
+		elementNeighbourTbl[379][0-26]: 323 324 1000 328 329 1000 333 334 1000 373 374 1000 378 1000 383 384 1000 423 424 1000 428 429 1000 433 434 1000 
+		elementNeighbourTbl[380][0-26]: 1000 325 326 1000 330 331 1000 335 336 1000 375 376 1000 381 1000 385 386 1000 425 426 1000 430 431 1000 435 436 
+		elementNeighbourTbl[381][0-26]: 325 326 327 330 331 332 335 336 337 375 376 377 380 382 385 386 387 425 426 427 430 431 432 435 436 437 
+		elementNeighbourTbl[382][0-26]: 326 327 328 331 332 333 336 337 338 376 377 378 381 383 386 387 388 426 427 428 431 432 433 436 437 438 
+		elementNeighbourTbl[383][0-26]: 327 328 329 332 333 334 337 338 339 377 378 379 382 384 387 388 389 427 428 429 432 433 434 437 438 439 
+		elementNeighbourTbl[384][0-26]: 328 329 1000 333 334 1000 338 339 1000 378 379 1000 383 1000 388 389 1000 428 429 1000 433 434 1000 438 439 1000 
+		elementNeighbourTbl[385][0-26]: 1000 330 331 1000 335 336 1000 340 341 1000 380 381 1000 386 1000 390 391 1000 430 431 1000 435 436 1000 440 441 
+		elementNeighbourTbl[386][0-26]: 330 331 332 335 336 337 340 341 342 380 381 382 385 387 390 391 392 430 431 432 435 436 437 440 441 442 
+		elementNeighbourTbl[387][0-26]: 331 332 333 336 337 338 341 342 343 381 382 383 386 388 391 392 393 431 432 433 436 437 438 441 442 443 
+		elementNeighbourTbl[388][0-26]: 332 333 334 337 338 339 342 343 344 382 383 384 387 389 392 393 394 432 433 434 437 438 439 442 443 444 
+		elementNeighbourTbl[389][0-26]: 333 334 1000 338 339 1000 343 344 1000 383 384 1000 388 1000 393 394 1000 433 434 1000 438 439 1000 443 444 1000 
+		elementNeighbourTbl[390][0-26]: 1000 335 336 1000 340 341 1000 345 346 1000 385 386 1000 391 1000 395 396 1000 435 436 1000 440 441 1000 445 446 
+		elementNeighbourTbl[391][0-26]: 335 336 337 340 341 342 345 346 347 385 386 387 390 392 395 396 397 435 436 437 440 441 442 445 446 447 
+		elementNeighbourTbl[392][0-26]: 336 337 338 341 342 343 346 347 348 386 387 388 391 393 396 397 398 436 437 438 441 442 443 446 447 448 
+		elementNeighbourTbl[393][0-26]: 337 338 339 342 343 344 347 348 349 387 388 389 392 394 397 398 399 437 438 439 442 443 444 447 448 449 
+		elementNeighbourTbl[394][0-26]: 338 339 1000 343 344 1000 348 349 1000 388 389 1000 393 1000 398 399 1000 438 439 1000 443 444 1000 448 449 1000 
+		elementNeighbourTbl[395][0-26]: 1000 340 341 1000 345 346 1000 1000 1000 1000 390 391 1000 396 1000 1000 1000 1000 440 441 1000 445 446 1000 1000 1000 
+		elementNeighbourTbl[396][0-26]: 340 341 342 345 346 347 1000 1000 1000 390 391 392 395 397 1000 1000 1000 440 441 442 445 446 447 1000 1000 1000 
+		elementNeighbourTbl[397][0-26]: 341 342 343 346 347 348 1000 1000 1000 391 392 393 396 398 1000 1000 1000 441 442 443 446 447 448 1000 1000 1000 
+		elementNeighbourTbl[398][0-26]: 342 343 344 347 348 349 1000 1000 1000 392 393 394 397 399 1000 1000 1000 442 443 444 447 448 449 1000 1000 1000 
+		elementNeighbourTbl[399][0-26]: 343 344 1000 348 349 1000 1000 1000 1000 393 394 1000 398 1000 1000 1000 1000 443 444 1000 448 449 1000 1000 1000 1000 
+		elementNeighbourTbl[400][0-26]: 1000 1000 1000 1000 350 351 1000 355 356 1000 1000 1000 1000 401 1000 405 406 1000 1000 1000 1000 450 451 1000 455 456 
+		elementNeighbourTbl[401][0-26]: 1000 1000 1000 350 351 352 355 356 357 1000 1000 1000 400 402 405 406 407 1000 1000 1000 450 451 452 455 456 457 
+		elementNeighbourTbl[402][0-26]: 1000 1000 1000 351 352 353 356 357 358 1000 1000 1000 401 403 406 407 408 1000 1000 1000 451 452 453 456 457 458 
+		elementNeighbourTbl[403][0-26]: 1000 1000 1000 352 353 354 357 358 359 1000 1000 1000 402 404 407 408 409 1000 1000 1000 452 453 454 457 458 459 
+		elementNeighbourTbl[404][0-26]: 1000 1000 1000 353 354 1000 358 359 1000 1000 1000 1000 403 1000 408 409 1000 1000 1000 1000 453 454 1000 458 459 1000 
+		elementNeighbourTbl[405][0-26]: 1000 350 351 1000 355 356 1000 360 361 1000 400 401 1000 406 1000 410 411 1000 450 451 1000 455 456 1000 460 461 
+		elementNeighbourTbl[406][0-26]: 350 351 352 355 356 357 360 361 362 400 401 402 405 407 410 411 412 450 451 452 455 456 457 460 461 462 
+		elementNeighbourTbl[407][0-26]: 351 352 353 356 357 358 361 362 363 401 402 403 406 408 411 412 413 451 452 453 456 457 458 461 462 463 
+		elementNeighbourTbl[408][0-26]: 352 353 354 357 358 359 362 363 364 402 403 404 407 409 412 413 414 452 453 454 457 458 459 462 463 464 
+		elementNeighbourTbl[409][0-26]: 353 354 1000 358 359 1000 363 364 1000 403 404 1000 408 1000 413 414 1000 453 454 1000 458 459 1000 463 464 1000 
+		elementNeighbourTbl[410][0-26]: 1000 355 356 1000 360 361 1000 365 366 1000 405 406 1000 411 1000 415 416 1000 455 456 1000 460 461 1000 465 466 
+		elementNeighbourTbl[411][0-26]: 355 356 357 360 361 362 365 366 367 405 406 407 410 412 415 416 417 455 456 457 460 461 462 465 466 467 
+		elementNeighbourTbl[412][0-26]: 356 357 358 361 362 363 366 367 368 406 407 408 411 413 416 417 418 456 457 458 461 462 463 466 467 468 
+		elementNeighbourTbl[413][0-26]: 357 358 359 362 363 364 367 368 369 407 408 409 412 414 417 418 419 457 458 459 462 463 464 467 468 469 
+		elementNeighbourTbl[414][0-26]: 358 359 1000 363 364 1000 368 369 1000 408 409 1000 413 1000 418 419 1000 458 459 1000 463 464 1000 468 469 1000 
+		elementNeighbourTbl[415][0-26]: 1000 360 361 1000 365 366 1000 370 371 1000 410 411 1000 416 1000 420 421 1000 460 461 1000 465 466 1000 470 471 
+		elementNeighbourTbl[416][0-26]: 360 361 362 365 366 367 370 371 372 410 411 412 415 417 420 421 422 460 461 462 465 466 467 470 471 472 
+		elementNeighbourTbl[417][0-26]: 361 362 363 366 367 368 371 372 373 411 412 413 416 418 421 422 423 461 462 463 466 467 468 471 472 473 
+		elementNeighbourTbl[418][0-26]: 362 363 364 367 368 369 372 373 374 412 413 414 417 419 422 423 424 462 463 464 467 468 469 472 473 474 
+		elementNeighbourTbl[419][0-26]: 363 364 1000 368 369 1000 373 374 1000 413 414 1000 418 1000 423 424 1000 463 464 1000 468 469 1000 473 474 1000 
+		elementNeighbourTbl[420][0-26]: 1000 365 366 1000 370 371 1000 375 376 1000 415 416 1000 421 1000 425 426 1000 465 466 1000 470 471 1000 475 476 
+		elementNeighbourTbl[421][0-26]: 365 366 367 370 371 372 375 376 377 415 416 417 420 422 425 426 427 465 466 467 470 471 472 475 476 477 
+		elementNeighbourTbl[422][0-26]: 366 367 368 371 372 373 376 377 378 416 417 418 421 423 426 427 428 466 467 468 471 472 473 476 477 478 
+		elementNeighbourTbl[423][0-26]: 367 368 369 372 373 374 377 378 379 417 418 419 422 424 427 428 429 467 468 469 472 473 474 477 478 479 
+		elementNeighbourTbl[424][0-26]: 368 369 1000 373 374 1000 378 379 1000 418 419 1000 423 1000 428 429 1000 468 469 1000 473 474 1000 478 479 1000 
+		elementNeighbourTbl[425][0-26]: 1000 370 371 1000 375 376 1000 380 381 1000 420 421 1000 426 1000 430 431 1000 470 471 1000 475 476 1000 480 481 
+		elementNeighbourTbl[426][0-26]: 370 371 372 375 376 377 380 381 382 420 421 422 425 427 430 431 432 470 471 472 475 476 477 480 481 482 
+		elementNeighbourTbl[427][0-26]: 371 372 373 376 377 378 381 382 383 421 422 423 426 428 431 432 433 471 472 473 476 477 478 481 482 483 
+		elementNeighbourTbl[428][0-26]: 372 373 374 377 378 379 382 383 384 422 423 424 427 429 432 433 434 472 473 474 477 478 479 482 483 484 
+		elementNeighbourTbl[429][0-26]: 373 374 1000 378 379 1000 383 384 1000 423 424 1000 428 1000 433 434 1000 473 474 1000 478 479 1000 483 484 1000 
+		elementNeighbourTbl[430][0-26]: 1000 375 376 1000 380 381 1000 385 386 1000 425 426 1000 431 1000 435 436 1000 475 476 1000 480 481 1000 485 486 
+		elementNeighbourTbl[431][0-26]: 375 376 377 380 381 382 385 386 387 425 426 427 430 432 435 436 437 475 476 477 480 481 482 485 486 487 
+		elementNeighbourTbl[432][0-26]: 376 377 378 381 382 383 386 387 388 426 427 428 431 433 436 437 438 476 477 478 481 482 483 486 487 488 
+		elementNeighbourTbl[433][0-26]: 377 378 379 382 383 384 387 388 389 427 428 429 432 434 437 438 439 477 478 479 482 483 484 487 488 489 
+		elementNeighbourTbl[434][0-26]: 378 379 1000 383 384 1000 388 389 1000 428 429 1000 433 1000 438 439 1000 478 479 1000 483 484 1000 488 489 1000 
+		elementNeighbourTbl[435][0-26]: 1000 380 381 1000 385 386 1000 390 391 1000 430 431 1000 436 1000 440 441 1000 480 481 1000 485 486 1000 490 491 
+		elementNeighbourTbl[436][0-26]: 380 381 382 385 386 387 390 391 392 430 431 432 435 437 440 441 442 480 481 482 485 486 487 490 491 492 
+		elementNeighbourTbl[437][0-26]: 381 382 383 386 387 388 391 392 393 431 432 433 436 438 441 442 443 481 482 483 486 487 488 491 492 493 
+		elementNeighbourTbl[438][0-26]: 382 383 384 387 388 389 392 393 394 432 433 434 437 439 442 443 444 482 483 484 487 488 489 492 493 494 
+		elementNeighbourTbl[439][0-26]: 383 384 1000 388 389 1000 393 394 1000 433 434 1000 438 1000 443 444 1000 483 484 1000 488 489 1000 493 494 1000 
+		elementNeighbourTbl[440][0-26]: 1000 385 386 1000 390 391 1000 395 396 1000 435 436 1000 441 1000 445 446 1000 485 486 1000 490 491 1000 495 496 
+		elementNeighbourTbl[441][0-26]: 385 386 387 390 391 392 395 396 397 435 436 437 440 442 445 446 447 485 486 487 490 491 492 495 496 497 
+		elementNeighbourTbl[442][0-26]: 386 387 388 391 392 393 396 397 398 436 437 438 441 443 446 447 448 486 487 488 491 492 493 496 497 498 
+		elementNeighbourTbl[443][0-26]: 387 388 389 392 393 394 397 398 399 437 438 439 442 444 447 448 449 487 488 489 492 493 494 497 498 499 
+		elementNeighbourTbl[444][0-26]: 388 389 1000 393 394 1000 398 399 1000 438 439 1000 443 1000 448 449 1000 488 489 1000 493 494 1000 498 499 1000 
+		elementNeighbourTbl[445][0-26]: 1000 390 391 1000 395 396 1000 1000 1000 1000 440 441 1000 446 1000 1000 1000 1000 490 491 1000 495 496 1000 1000 1000 
+		elementNeighbourTbl[446][0-26]: 390 391 392 395 396 397 1000 1000 1000 440 441 442 445 447 1000 1000 1000 490 491 492 495 496 497 1000 1000 1000 
+		elementNeighbourTbl[447][0-26]: 391 392 393 396 397 398 1000 1000 1000 441 442 443 446 448 1000 1000 1000 491 492 493 496 497 498 1000 1000 1000 
+		elementNeighbourTbl[448][0-26]: 392 393 394 397 398 399 1000 1000 1000 442 443 444 447 449 1000 1000 1000 492 493 494 497 498 499 1000 1000 1000 
+		elementNeighbourTbl[449][0-26]: 393 394 1000 398 399 1000 1000 1000 1000 443 444 1000 448 1000 1000 1000 1000 493 494 1000 498 499 1000 1000 1000 1000 
+		elementNeighbourTbl[450][0-26]: 1000 1000 1000 1000 400 401 1000 405 406 1000 1000 1000 1000 451 1000 455 456 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[451][0-26]: 1000 1000 1000 400 401 402 405 406 407 1000 1000 1000 450 452 455 456 457 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[452][0-26]: 1000 1000 1000 401 402 403 406 407 408 1000 1000 1000 451 453 456 457 458 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[453][0-26]: 1000 1000 1000 402 403 404 407 408 409 1000 1000 1000 452 454 457 458 459 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[454][0-26]: 1000 1000 1000 403 404 1000 408 409 1000 1000 1000 1000 453 1000 458 459 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[455][0-26]: 1000 400 401 1000 405 406 1000 410 411 1000 450 451 1000 456 1000 460 461 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[456][0-26]: 400 401 402 405 406 407 410 411 412 450 451 452 455 457 460 461 462 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[457][0-26]: 401 402 403 406 407 408 411 412 413 451 452 453 456 458 461 462 463 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[458][0-26]: 402 403 404 407 408 409 412 413 414 452 453 454 457 459 462 463 464 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[459][0-26]: 403 404 1000 408 409 1000 413 414 1000 453 454 1000 458 1000 463 464 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[460][0-26]: 1000 405 406 1000 410 411 1000 415 416 1000 455 456 1000 461 1000 465 466 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[461][0-26]: 405 406 407 410 411 412 415 416 417 455 456 457 460 462 465 466 467 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[462][0-26]: 406 407 408 411 412 413 416 417 418 456 457 458 461 463 466 467 468 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[463][0-26]: 407 408 409 412 413 414 417 418 419 457 458 459 462 464 467 468 469 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[464][0-26]: 408 409 1000 413 414 1000 418 419 1000 458 459 1000 463 1000 468 469 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[465][0-26]: 1000 410 411 1000 415 416 1000 420 421 1000 460 461 1000 466 1000 470 471 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[466][0-26]: 410 411 412 415 416 417 420 421 422 460 461 462 465 467 470 471 472 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[467][0-26]: 411 412 413 416 417 418 421 422 423 461 462 463 466 468 471 472 473 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[468][0-26]: 412 413 414 417 418 419 422 423 424 462 463 464 467 469 472 473 474 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[469][0-26]: 413 414 1000 418 419 1000 423 424 1000 463 464 1000 468 1000 473 474 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[470][0-26]: 1000 415 416 1000 420 421 1000 425 426 1000 465 466 1000 471 1000 475 476 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[471][0-26]: 415 416 417 420 421 422 425 426 427 465 466 467 470 472 475 476 477 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[472][0-26]: 416 417 418 421 422 423 426 427 428 466 467 468 471 473 476 477 478 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[473][0-26]: 417 418 419 422 423 424 427 428 429 467 468 469 472 474 477 478 479 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[474][0-26]: 418 419 1000 423 424 1000 428 429 1000 468 469 1000 473 1000 478 479 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[475][0-26]: 1000 420 421 1000 425 426 1000 430 431 1000 470 471 1000 476 1000 480 481 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[476][0-26]: 420 421 422 425 426 427 430 431 432 470 471 472 475 477 480 481 482 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[477][0-26]: 421 422 423 426 427 428 431 432 433 471 472 473 476 478 481 482 483 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[478][0-26]: 422 423 424 427 428 429 432 433 434 472 473 474 477 479 482 483 484 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[479][0-26]: 423 424 1000 428 429 1000 433 434 1000 473 474 1000 478 1000 483 484 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[480][0-26]: 1000 425 426 1000 430 431 1000 435 436 1000 475 476 1000 481 1000 485 486 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[481][0-26]: 425 426 427 430 431 432 435 436 437 475 476 477 480 482 485 486 487 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[482][0-26]: 426 427 428 431 432 433 436 437 438 476 477 478 481 483 486 487 488 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[483][0-26]: 427 428 429 432 433 434 437 438 439 477 478 479 482 484 487 488 489 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[484][0-26]: 428 429 1000 433 434 1000 438 439 1000 478 479 1000 483 1000 488 489 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[485][0-26]: 1000 430 431 1000 435 436 1000 440 441 1000 480 481 1000 486 1000 490 491 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[486][0-26]: 430 431 432 435 436 437 440 441 442 480 481 482 485 487 490 491 492 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[487][0-26]: 431 432 433 436 437 438 441 442 443 481 482 483 486 488 491 492 493 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[488][0-26]: 432 433 434 437 438 439 442 443 444 482 483 484 487 489 492 493 494 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[489][0-26]: 433 434 1000 438 439 1000 443 444 1000 483 484 1000 488 1000 493 494 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[490][0-26]: 1000 435 436 1000 440 441 1000 445 446 1000 485 486 1000 491 1000 495 496 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[491][0-26]: 435 436 437 440 441 442 445 446 447 485 486 487 490 492 495 496 497 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[492][0-26]: 436 437 438 441 442 443 446 447 448 486 487 488 491 493 496 497 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[493][0-26]: 437 438 439 442 443 444 447 448 449 487 488 489 492 494 497 498 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[494][0-26]: 438 439 1000 443 444 1000 448 449 1000 488 489 1000 493 1000 498 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[495][0-26]: 1000 440 441 1000 445 446 1000 1000 1000 1000 490 491 1000 496 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[496][0-26]: 440 441 442 445 446 447 1000 1000 1000 490 491 492 495 497 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[497][0-26]: 441 442 443 446 447 448 1000 1000 1000 491 492 493 496 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[498][0-26]: 442 443 444 447 448 449 1000 1000 1000 492 493 494 497 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[499][0-26]: 443 444 1000 448 449 1000 1000 1000 1000 493 494 1000 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8086c98
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8087478
+	elementNodeTbl[0-500]:
+		elementNodeTbl[0][0-8]: 000 001 007 006 066 067 073 072 
+		elementNodeTbl[1][0-8]: 001 002 008 007 067 068 074 073 
+		elementNodeTbl[2][0-8]: 002 003 009 008 068 069 075 074 
+		elementNodeTbl[3][0-8]: 003 004 010 009 069 070 076 075 
+		elementNodeTbl[4][0-8]: 004 005 011 010 070 071 077 076 
+		elementNodeTbl[5][0-8]: 006 007 013 012 072 073 079 078 
+		elementNodeTbl[6][0-8]: 007 008 014 013 073 074 080 079 
+		elementNodeTbl[7][0-8]: 008 009 015 014 074 075 081 080 
+		elementNodeTbl[8][0-8]: 009 010 016 015 075 076 082 081 
+		elementNodeTbl[9][0-8]: 010 011 017 016 076 077 083 082 
+		elementNodeTbl[10][0-8]: 012 013 019 018 078 079 085 084 
+		elementNodeTbl[11][0-8]: 013 014 020 019 079 080 086 085 
+		elementNodeTbl[12][0-8]: 014 015 021 020 080 081 087 086 
+		elementNodeTbl[13][0-8]: 015 016 022 021 081 082 088 087 
+		elementNodeTbl[14][0-8]: 016 017 023 022 082 083 089 088 
+		elementNodeTbl[15][0-8]: 018 019 025 024 084 085 091 090 
+		elementNodeTbl[16][0-8]: 019 020 026 025 085 086 092 091 
+		elementNodeTbl[17][0-8]: 020 021 027 026 086 087 093 092 
+		elementNodeTbl[18][0-8]: 021 022 028 027 087 088 094 093 
+		elementNodeTbl[19][0-8]: 022 023 029 028 088 089 095 094 
+		elementNodeTbl[20][0-8]: 024 025 031 030 090 091 097 096 
+		elementNodeTbl[21][0-8]: 025 026 032 031 091 092 098 097 
+		elementNodeTbl[22][0-8]: 026 027 033 032 092 093 099 098 
+		elementNodeTbl[23][0-8]: 027 028 034 033 093 094 100 099 
+		elementNodeTbl[24][0-8]: 028 029 035 034 094 095 101 100 
+		elementNodeTbl[25][0-8]: 030 031 037 036 096 097 103 102 
+		elementNodeTbl[26][0-8]: 031 032 038 037 097 098 104 103 
+		elementNodeTbl[27][0-8]: 032 033 039 038 098 099 105 104 
+		elementNodeTbl[28][0-8]: 033 034 040 039 099 100 106 105 
+		elementNodeTbl[29][0-8]: 034 035 041 040 100 101 107 106 
+		elementNodeTbl[30][0-8]: 036 037 043 042 102 103 109 108 
+		elementNodeTbl[31][0-8]: 037 038 044 043 103 104 110 109 
+		elementNodeTbl[32][0-8]: 038 039 045 044 104 105 111 110 
+		elementNodeTbl[33][0-8]: 039 040 046 045 105 106 112 111 
+		elementNodeTbl[34][0-8]: 040 041 047 046 106 107 113 112 
+		elementNodeTbl[35][0-8]: 042 043 049 048 108 109 115 114 
+		elementNodeTbl[36][0-8]: 043 044 050 049 109 110 116 115 
+		elementNodeTbl[37][0-8]: 044 045 051 050 110 111 117 116 
+		elementNodeTbl[38][0-8]: 045 046 052 051 111 112 118 117 
+		elementNodeTbl[39][0-8]: 046 047 053 052 112 113 119 118 
+		elementNodeTbl[40][0-8]: 048 049 055 054 114 115 121 120 
+		elementNodeTbl[41][0-8]: 049 050 056 055 115 116 122 121 
+		elementNodeTbl[42][0-8]: 050 051 057 056 116 117 123 122 
+		elementNodeTbl[43][0-8]: 051 052 058 057 117 118 124 123 
+		elementNodeTbl[44][0-8]: 052 053 059 058 118 119 125 124 
+		elementNodeTbl[45][0-8]: 054 055 061 060 120 121 127 126 
+		elementNodeTbl[46][0-8]: 055 056 062 061 121 122 128 127 
+		elementNodeTbl[47][0-8]: 056 057 063 062 122 123 129 128 
+		elementNodeTbl[48][0-8]: 057 058 064 063 123 124 130 129 
+		elementNodeTbl[49][0-8]: 058 059 065 064 124 125 131 130 
+		elementNodeTbl[50][0-8]: 066 067 073 072 132 133 139 138 
+		elementNodeTbl[51][0-8]: 067 068 074 073 133 134 140 139 
+		elementNodeTbl[52][0-8]: 068 069 075 074 134 135 141 140 
+		elementNodeTbl[53][0-8]: 069 070 076 075 135 136 142 141 
+		elementNodeTbl[54][0-8]: 070 071 077 076 136 137 143 142 
+		elementNodeTbl[55][0-8]: 072 073 079 078 138 139 145 144 
+		elementNodeTbl[56][0-8]: 073 074 080 079 139 140 146 145 
+		elementNodeTbl[57][0-8]: 074 075 081 080 140 141 147 146 
+		elementNodeTbl[58][0-8]: 075 076 082 081 141 142 148 147 
+		elementNodeTbl[59][0-8]: 076 077 083 082 142 143 149 148 
+		elementNodeTbl[60][0-8]: 078 079 085 084 144 145 151 150 
+		elementNodeTbl[61][0-8]: 079 080 086 085 145 146 152 151 
+		elementNodeTbl[62][0-8]: 080 081 087 086 146 147 153 152 
+		elementNodeTbl[63][0-8]: 081 082 088 087 147 148 154 153 
+		elementNodeTbl[64][0-8]: 082 083 089 088 148 149 155 154 
+		elementNodeTbl[65][0-8]: 084 085 091 090 150 151 157 156 
+		elementNodeTbl[66][0-8]: 085 086 092 091 151 152 158 157 
+		elementNodeTbl[67][0-8]: 086 087 093 092 152 153 159 158 
+		elementNodeTbl[68][0-8]: 087 088 094 093 153 154 160 159 
+		elementNodeTbl[69][0-8]: 088 089 095 094 154 155 161 160 
+		elementNodeTbl[70][0-8]: 090 091 097 096 156 157 163 162 
+		elementNodeTbl[71][0-8]: 091 092 098 097 157 158 164 163 
+		elementNodeTbl[72][0-8]: 092 093 099 098 158 159 165 164 
+		elementNodeTbl[73][0-8]: 093 094 100 099 159 160 166 165 
+		elementNodeTbl[74][0-8]: 094 095 101 100 160 161 167 166 
+		elementNodeTbl[75][0-8]: 096 097 103 102 162 163 169 168 
+		elementNodeTbl[76][0-8]: 097 098 104 103 163 164 170 169 
+		elementNodeTbl[77][0-8]: 098 099 105 104 164 165 171 170 
+		elementNodeTbl[78][0-8]: 099 100 106 105 165 166 172 171 
+		elementNodeTbl[79][0-8]: 100 101 107 106 166 167 173 172 
+		elementNodeTbl[80][0-8]: 102 103 109 108 168 169 175 174 
+		elementNodeTbl[81][0-8]: 103 104 110 109 169 170 176 175 
+		elementNodeTbl[82][0-8]: 104 105 111 110 170 171 177 176 
+		elementNodeTbl[83][0-8]: 105 106 112 111 171 172 178 177 
+		elementNodeTbl[84][0-8]: 106 107 113 112 172 173 179 178 
+		elementNodeTbl[85][0-8]: 108 109 115 114 174 175 181 180 
+		elementNodeTbl[86][0-8]: 109 110 116 115 175 176 182 181 
+		elementNodeTbl[87][0-8]: 110 111 117 116 176 177 183 182 
+		elementNodeTbl[88][0-8]: 111 112 118 117 177 178 184 183 
+		elementNodeTbl[89][0-8]: 112 113 119 118 178 179 185 184 
+		elementNodeTbl[90][0-8]: 114 115 121 120 180 181 187 186 
+		elementNodeTbl[91][0-8]: 115 116 122 121 181 182 188 187 
+		elementNodeTbl[92][0-8]: 116 117 123 122 182 183 189 188 
+		elementNodeTbl[93][0-8]: 117 118 124 123 183 184 190 189 
+		elementNodeTbl[94][0-8]: 118 119 125 124 184 185 191 190 
+		elementNodeTbl[95][0-8]: 120 121 127 126 186 187 193 192 
+		elementNodeTbl[96][0-8]: 121 122 128 127 187 188 194 193 
+		elementNodeTbl[97][0-8]: 122 123 129 128 188 189 195 194 
+		elementNodeTbl[98][0-8]: 123 124 130 129 189 190 196 195 
+		elementNodeTbl[99][0-8]: 124 125 131 130 190 191 197 196 
+		elementNodeTbl[100][0-8]: 132 133 139 138 198 199 205 204 
+		elementNodeTbl[101][0-8]: 133 134 140 139 199 200 206 205 
+		elementNodeTbl[102][0-8]: 134 135 141 140 200 201 207 206 
+		elementNodeTbl[103][0-8]: 135 136 142 141 201 202 208 207 
+		elementNodeTbl[104][0-8]: 136 137 143 142 202 203 209 208 
+		elementNodeTbl[105][0-8]: 138 139 145 144 204 205 211 210 
+		elementNodeTbl[106][0-8]: 139 140 146 145 205 206 212 211 
+		elementNodeTbl[107][0-8]: 140 141 147 146 206 207 213 212 
+		elementNodeTbl[108][0-8]: 141 142 148 147 207 208 214 213 
+		elementNodeTbl[109][0-8]: 142 143 149 148 208 209 215 214 
+		elementNodeTbl[110][0-8]: 144 145 151 150 210 211 217 216 
+		elementNodeTbl[111][0-8]: 145 146 152 151 211 212 218 217 
+		elementNodeTbl[112][0-8]: 146 147 153 152 212 213 219 218 
+		elementNodeTbl[113][0-8]: 147 148 154 153 213 214 220 219 
+		elementNodeTbl[114][0-8]: 148 149 155 154 214 215 221 220 
+		elementNodeTbl[115][0-8]: 150 151 157 156 216 217 223 222 
+		elementNodeTbl[116][0-8]: 151 152 158 157 217 218 224 223 
+		elementNodeTbl[117][0-8]: 152 153 159 158 218 219 225 224 
+		elementNodeTbl[118][0-8]: 153 154 160 159 219 220 226 225 
+		elementNodeTbl[119][0-8]: 154 155 161 160 220 221 227 226 
+		elementNodeTbl[120][0-8]: 156 157 163 162 222 223 229 228 
+		elementNodeTbl[121][0-8]: 157 158 164 163 223 224 230 229 
+		elementNodeTbl[122][0-8]: 158 159 165 164 224 225 231 230 
+		elementNodeTbl[123][0-8]: 159 160 166 165 225 226 232 231 
+		elementNodeTbl[124][0-8]: 160 161 167 166 226 227 233 232 
+		elementNodeTbl[125][0-8]: 162 163 169 168 228 229 235 234 
+		elementNodeTbl[126][0-8]: 163 164 170 169 229 230 236 235 
+		elementNodeTbl[127][0-8]: 164 165 171 170 230 231 237 236 
+		elementNodeTbl[128][0-8]: 165 166 172 171 231 232 238 237 
+		elementNodeTbl[129][0-8]: 166 167 173 172 232 233 239 238 
+		elementNodeTbl[130][0-8]: 168 169 175 174 234 235 241 240 
+		elementNodeTbl[131][0-8]: 169 170 176 175 235 236 242 241 
+		elementNodeTbl[132][0-8]: 170 171 177 176 236 237 243 242 
+		elementNodeTbl[133][0-8]: 171 172 178 177 237 238 244 243 
+		elementNodeTbl[134][0-8]: 172 173 179 178 238 239 245 244 
+		elementNodeTbl[135][0-8]: 174 175 181 180 240 241 247 246 
+		elementNodeTbl[136][0-8]: 175 176 182 181 241 242 248 247 
+		elementNodeTbl[137][0-8]: 176 177 183 182 242 243 249 248 
+		elementNodeTbl[138][0-8]: 177 178 184 183 243 244 250 249 
+		elementNodeTbl[139][0-8]: 178 179 185 184 244 245 251 250 
+		elementNodeTbl[140][0-8]: 180 181 187 186 246 247 253 252 
+		elementNodeTbl[141][0-8]: 181 182 188 187 247 248 254 253 
+		elementNodeTbl[142][0-8]: 182 183 189 188 248 249 255 254 
+		elementNodeTbl[143][0-8]: 183 184 190 189 249 250 256 255 
+		elementNodeTbl[144][0-8]: 184 185 191 190 250 251 257 256 
+		elementNodeTbl[145][0-8]: 186 187 193 192 252 253 259 258 
+		elementNodeTbl[146][0-8]: 187 188 194 193 253 254 260 259 
+		elementNodeTbl[147][0-8]: 188 189 195 194 254 255 261 260 
+		elementNodeTbl[148][0-8]: 189 190 196 195 255 256 262 261 
+		elementNodeTbl[149][0-8]: 190 191 197 196 256 257 263 262 
+		elementNodeTbl[150][0-8]: 198 199 205 204 264 265 271 270 
+		elementNodeTbl[151][0-8]: 199 200 206 205 265 266 272 271 
+		elementNodeTbl[152][0-8]: 200 201 207 206 266 267 273 272 
+		elementNodeTbl[153][0-8]: 201 202 208 207 267 268 274 273 
+		elementNodeTbl[154][0-8]: 202 203 209 208 268 269 275 274 
+		elementNodeTbl[155][0-8]: 204 205 211 210 270 271 277 276 
+		elementNodeTbl[156][0-8]: 205 206 212 211 271 272 278 277 
+		elementNodeTbl[157][0-8]: 206 207 213 212 272 273 279 278 
+		elementNodeTbl[158][0-8]: 207 208 214 213 273 274 280 279 
+		elementNodeTbl[159][0-8]: 208 209 215 214 274 275 281 280 
+		elementNodeTbl[160][0-8]: 210 211 217 216 276 277 283 282 
+		elementNodeTbl[161][0-8]: 211 212 218 217 277 278 284 283 
+		elementNodeTbl[162][0-8]: 212 213 219 218 278 279 285 284 
+		elementNodeTbl[163][0-8]: 213 214 220 219 279 280 286 285 
+		elementNodeTbl[164][0-8]: 214 215 221 220 280 281 287 286 
+		elementNodeTbl[165][0-8]: 216 217 223 222 282 283 289 288 
+		elementNodeTbl[166][0-8]: 217 218 224 223 283 284 290 289 
+		elementNodeTbl[167][0-8]: 218 219 225 224 284 285 291 290 
+		elementNodeTbl[168][0-8]: 219 220 226 225 285 286 292 291 
+		elementNodeTbl[169][0-8]: 220 221 227 226 286 287 293 292 
+		elementNodeTbl[170][0-8]: 222 223 229 228 288 289 295 294 
+		elementNodeTbl[171][0-8]: 223 224 230 229 289 290 296 295 
+		elementNodeTbl[172][0-8]: 224 225 231 230 290 291 297 296 
+		elementNodeTbl[173][0-8]: 225 226 232 231 291 292 298 297 
+		elementNodeTbl[174][0-8]: 226 227 233 232 292 293 299 298 
+		elementNodeTbl[175][0-8]: 228 229 235 234 294 295 301 300 
+		elementNodeTbl[176][0-8]: 229 230 236 235 295 296 302 301 
+		elementNodeTbl[177][0-8]: 230 231 237 236 296 297 303 302 
+		elementNodeTbl[178][0-8]: 231 232 238 237 297 298 304 303 
+		elementNodeTbl[179][0-8]: 232 233 239 238 298 299 305 304 
+		elementNodeTbl[180][0-8]: 234 235 241 240 300 301 307 306 
+		elementNodeTbl[181][0-8]: 235 236 242 241 301 302 308 307 
+		elementNodeTbl[182][0-8]: 236 237 243 242 302 303 309 308 
+		elementNodeTbl[183][0-8]: 237 238 244 243 303 304 310 309 
+		elementNodeTbl[184][0-8]: 238 239 245 244 304 305 311 310 
+		elementNodeTbl[185][0-8]: 240 241 247 246 306 307 313 312 
+		elementNodeTbl[186][0-8]: 241 242 248 247 307 308 314 313 
+		elementNodeTbl[187][0-8]: 242 243 249 248 308 309 315 314 
+		elementNodeTbl[188][0-8]: 243 244 250 249 309 310 316 315 
+		elementNodeTbl[189][0-8]: 244 245 251 250 310 311 317 316 
+		elementNodeTbl[190][0-8]: 246 247 253 252 312 313 319 318 
+		elementNodeTbl[191][0-8]: 247 248 254 253 313 314 320 319 
+		elementNodeTbl[192][0-8]: 248 249 255 254 314 315 321 320 
+		elementNodeTbl[193][0-8]: 249 250 256 255 315 316 322 321 
+		elementNodeTbl[194][0-8]: 250 251 257 256 316 317 323 322 
+		elementNodeTbl[195][0-8]: 252 253 259 258 318 319 325 324 
+		elementNodeTbl[196][0-8]: 253 254 260 259 319 320 326 325 
+		elementNodeTbl[197][0-8]: 254 255 261 260 320 321 327 326 
+		elementNodeTbl[198][0-8]: 255 256 262 261 321 322 328 327 
+		elementNodeTbl[199][0-8]: 256 257 263 262 322 323 329 328 
+		elementNodeTbl[200][0-8]: 264 265 271 270 330 331 337 336 
+		elementNodeTbl[201][0-8]: 265 266 272 271 331 332 338 337 
+		elementNodeTbl[202][0-8]: 266 267 273 272 332 333 339 338 
+		elementNodeTbl[203][0-8]: 267 268 274 273 333 334 340 339 
+		elementNodeTbl[204][0-8]: 268 269 275 274 334 335 341 340 
+		elementNodeTbl[205][0-8]: 270 271 277 276 336 337 343 342 
+		elementNodeTbl[206][0-8]: 271 272 278 277 337 338 344 343 
+		elementNodeTbl[207][0-8]: 272 273 279 278 338 339 345 344 
+		elementNodeTbl[208][0-8]: 273 274 280 279 339 340 346 345 
+		elementNodeTbl[209][0-8]: 274 275 281 280 340 341 347 346 
+		elementNodeTbl[210][0-8]: 276 277 283 282 342 343 349 348 
+		elementNodeTbl[211][0-8]: 277 278 284 283 343 344 350 349 
+		elementNodeTbl[212][0-8]: 278 279 285 284 344 345 351 350 
+		elementNodeTbl[213][0-8]: 279 280 286 285 345 346 352 351 
+		elementNodeTbl[214][0-8]: 280 281 287 286 346 347 353 352 
+		elementNodeTbl[215][0-8]: 282 283 289 288 348 349 355 354 
+		elementNodeTbl[216][0-8]: 283 284 290 289 349 350 356 355 
+		elementNodeTbl[217][0-8]: 284 285 291 290 350 351 357 356 
+		elementNodeTbl[218][0-8]: 285 286 292 291 351 352 358 357 
+		elementNodeTbl[219][0-8]: 286 287 293 292 352 353 359 358 
+		elementNodeTbl[220][0-8]: 288 289 295 294 354 355 361 360 
+		elementNodeTbl[221][0-8]: 289 290 296 295 355 356 362 361 
+		elementNodeTbl[222][0-8]: 290 291 297 296 356 357 363 362 
+		elementNodeTbl[223][0-8]: 291 292 298 297 357 358 364 363 
+		elementNodeTbl[224][0-8]: 292 293 299 298 358 359 365 364 
+		elementNodeTbl[225][0-8]: 294 295 301 300 360 361 367 366 
+		elementNodeTbl[226][0-8]: 295 296 302 301 361 362 368 367 
+		elementNodeTbl[227][0-8]: 296 297 303 302 362 363 369 368 
+		elementNodeTbl[228][0-8]: 297 298 304 303 363 364 370 369 
+		elementNodeTbl[229][0-8]: 298 299 305 304 364 365 371 370 
+		elementNodeTbl[230][0-8]: 300 301 307 306 366 367 373 372 
+		elementNodeTbl[231][0-8]: 301 302 308 307 367 368 374 373 
+		elementNodeTbl[232][0-8]: 302 303 309 308 368 369 375 374 
+		elementNodeTbl[233][0-8]: 303 304 310 309 369 370 376 375 
+		elementNodeTbl[234][0-8]: 304 305 311 310 370 371 377 376 
+		elementNodeTbl[235][0-8]: 306 307 313 312 372 373 379 378 
+		elementNodeTbl[236][0-8]: 307 308 314 313 373 374 380 379 
+		elementNodeTbl[237][0-8]: 308 309 315 314 374 375 381 380 
+		elementNodeTbl[238][0-8]: 309 310 316 315 375 376 382 381 
+		elementNodeTbl[239][0-8]: 310 311 317 316 376 377 383 382 
+		elementNodeTbl[240][0-8]: 312 313 319 318 378 379 385 384 
+		elementNodeTbl[241][0-8]: 313 314 320 319 379 380 386 385 
+		elementNodeTbl[242][0-8]: 314 315 321 320 380 381 387 386 
+		elementNodeTbl[243][0-8]: 315 316 322 321 381 382 388 387 
+		elementNodeTbl[244][0-8]: 316 317 323 322 382 383 389 388 
+		elementNodeTbl[245][0-8]: 318 319 325 324 384 385 391 390 
+		elementNodeTbl[246][0-8]: 319 320 326 325 385 386 392 391 
+		elementNodeTbl[247][0-8]: 320 321 327 326 386 387 393 392 
+		elementNodeTbl[248][0-8]: 321 322 328 327 387 388 394 393 
+		elementNodeTbl[249][0-8]: 322 323 329 328 388 389 395 394 
+		elementNodeTbl[250][0-8]: 330 331 337 336 396 397 403 402 
+		elementNodeTbl[251][0-8]: 331 332 338 337 397 398 404 403 
+		elementNodeTbl[252][0-8]: 332 333 339 338 398 399 405 404 
+		elementNodeTbl[253][0-8]: 333 334 340 339 399 400 406 405 
+		elementNodeTbl[254][0-8]: 334 335 341 340 400 401 407 406 
+		elementNodeTbl[255][0-8]: 336 337 343 342 402 403 409 408 
+		elementNodeTbl[256][0-8]: 337 338 344 343 403 404 410 409 
+		elementNodeTbl[257][0-8]: 338 339 345 344 404 405 411 410 
+		elementNodeTbl[258][0-8]: 339 340 346 345 405 406 412 411 
+		elementNodeTbl[259][0-8]: 340 341 347 346 406 407 413 412 
+		elementNodeTbl[260][0-8]: 342 343 349 348 408 409 415 414 
+		elementNodeTbl[261][0-8]: 343 344 350 349 409 410 416 415 
+		elementNodeTbl[262][0-8]: 344 345 351 350 410 411 417 416 
+		elementNodeTbl[263][0-8]: 345 346 352 351 411 412 418 417 
+		elementNodeTbl[264][0-8]: 346 347 353 352 412 413 419 418 
+		elementNodeTbl[265][0-8]: 348 349 355 354 414 415 421 420 
+		elementNodeTbl[266][0-8]: 349 350 356 355 415 416 422 421 
+		elementNodeTbl[267][0-8]: 350 351 357 356 416 417 423 422 
+		elementNodeTbl[268][0-8]: 351 352 358 357 417 418 424 423 
+		elementNodeTbl[269][0-8]: 352 353 359 358 418 419 425 424 
+		elementNodeTbl[270][0-8]: 354 355 361 360 420 421 427 426 
+		elementNodeTbl[271][0-8]: 355 356 362 361 421 422 428 427 
+		elementNodeTbl[272][0-8]: 356 357 363 362 422 423 429 428 
+		elementNodeTbl[273][0-8]: 357 358 364 363 423 424 430 429 
+		elementNodeTbl[274][0-8]: 358 359 365 364 424 425 431 430 
+		elementNodeTbl[275][0-8]: 360 361 367 366 426 427 433 432 
+		elementNodeTbl[276][0-8]: 361 362 368 367 427 428 434 433 
+		elementNodeTbl[277][0-8]: 362 363 369 368 428 429 435 434 
+		elementNodeTbl[278][0-8]: 363 364 370 369 429 430 436 435 
+		elementNodeTbl[279][0-8]: 364 365 371 370 430 431 437 436 
+		elementNodeTbl[280][0-8]: 366 367 373 372 432 433 439 438 
+		elementNodeTbl[281][0-8]: 367 368 374 373 433 434 440 439 
+		elementNodeTbl[282][0-8]: 368 369 375 374 434 435 441 440 
+		elementNodeTbl[283][0-8]: 369 370 376 375 435 436 442 441 
+		elementNodeTbl[284][0-8]: 370 371 377 376 436 437 443 442 
+		elementNodeTbl[285][0-8]: 372 373 379 378 438 439 445 444 
+		elementNodeTbl[286][0-8]: 373 374 380 379 439 440 446 445 
+		elementNodeTbl[287][0-8]: 374 375 381 380 440 441 447 446 
+		elementNodeTbl[288][0-8]: 375 376 382 381 441 442 448 447 
+		elementNodeTbl[289][0-8]: 376 377 383 382 442 443 449 448 
+		elementNodeTbl[290][0-8]: 378 379 385 384 444 445 451 450 
+		elementNodeTbl[291][0-8]: 379 380 386 385 445 446 452 451 
+		elementNodeTbl[292][0-8]: 380 381 387 386 446 447 453 452 
+		elementNodeTbl[293][0-8]: 381 382 388 387 447 448 454 453 
+		elementNodeTbl[294][0-8]: 382 383 389 388 448 449 455 454 
+		elementNodeTbl[295][0-8]: 384 385 391 390 450 451 457 456 
+		elementNodeTbl[296][0-8]: 385 386 392 391 451 452 458 457 
+		elementNodeTbl[297][0-8]: 386 387 393 392 452 453 459 458 
+		elementNodeTbl[298][0-8]: 387 388 394 393 453 454 460 459 
+		elementNodeTbl[299][0-8]: 388 389 395 394 454 455 461 460 
+		elementNodeTbl[300][0-8]: 396 397 403 402 462 463 469 468 
+		elementNodeTbl[301][0-8]: 397 398 404 403 463 464 470 469 
+		elementNodeTbl[302][0-8]: 398 399 405 404 464 465 471 470 
+		elementNodeTbl[303][0-8]: 399 400 406 405 465 466 472 471 
+		elementNodeTbl[304][0-8]: 400 401 407 406 466 467 473 472 
+		elementNodeTbl[305][0-8]: 402 403 409 408 468 469 475 474 
+		elementNodeTbl[306][0-8]: 403 404 410 409 469 470 476 475 
+		elementNodeTbl[307][0-8]: 404 405 411 410 470 471 477 476 
+		elementNodeTbl[308][0-8]: 405 406 412 411 471 472 478 477 
+		elementNodeTbl[309][0-8]: 406 407 413 412 472 473 479 478 
+		elementNodeTbl[310][0-8]: 408 409 415 414 474 475 481 480 
+		elementNodeTbl[311][0-8]: 409 410 416 415 475 476 482 481 
+		elementNodeTbl[312][0-8]: 410 411 417 416 476 477 483 482 
+		elementNodeTbl[313][0-8]: 411 412 418 417 477 478 484 483 
+		elementNodeTbl[314][0-8]: 412 413 419 418 478 479 485 484 
+		elementNodeTbl[315][0-8]: 414 415 421 420 480 481 487 486 
+		elementNodeTbl[316][0-8]: 415 416 422 421 481 482 488 487 
+		elementNodeTbl[317][0-8]: 416 417 423 422 482 483 489 488 
+		elementNodeTbl[318][0-8]: 417 418 424 423 483 484 490 489 
+		elementNodeTbl[319][0-8]: 418 419 425 424 484 485 491 490 
+		elementNodeTbl[320][0-8]: 420 421 427 426 486 487 493 492 
+		elementNodeTbl[321][0-8]: 421 422 428 427 487 488 494 493 
+		elementNodeTbl[322][0-8]: 422 423 429 428 488 489 495 494 
+		elementNodeTbl[323][0-8]: 423 424 430 429 489 490 496 495 
+		elementNodeTbl[324][0-8]: 424 425 431 430 490 491 497 496 
+		elementNodeTbl[325][0-8]: 426 427 433 432 492 493 499 498 
+		elementNodeTbl[326][0-8]: 427 428 434 433 493 494 500 499 
+		elementNodeTbl[327][0-8]: 428 429 435 434 494 495 501 500 
+		elementNodeTbl[328][0-8]: 429 430 436 435 495 496 502 501 
+		elementNodeTbl[329][0-8]: 430 431 437 436 496 497 503 502 
+		elementNodeTbl[330][0-8]: 432 433 439 438 498 499 505 504 
+		elementNodeTbl[331][0-8]: 433 434 440 439 499 500 506 505 
+		elementNodeTbl[332][0-8]: 434 435 441 440 500 501 507 506 
+		elementNodeTbl[333][0-8]: 435 436 442 441 501 502 508 507 
+		elementNodeTbl[334][0-8]: 436 437 443 442 502 503 509 508 
+		elementNodeTbl[335][0-8]: 438 439 445 444 504 505 511 510 
+		elementNodeTbl[336][0-8]: 439 440 446 445 505 506 512 511 
+		elementNodeTbl[337][0-8]: 440 441 447 446 506 507 513 512 
+		elementNodeTbl[338][0-8]: 441 442 448 447 507 508 514 513 
+		elementNodeTbl[339][0-8]: 442 443 449 448 508 509 515 514 
+		elementNodeTbl[340][0-8]: 444 445 451 450 510 511 517 516 
+		elementNodeTbl[341][0-8]: 445 446 452 451 511 512 518 517 
+		elementNodeTbl[342][0-8]: 446 447 453 452 512 513 519 518 
+		elementNodeTbl[343][0-8]: 447 448 454 453 513 514 520 519 
+		elementNodeTbl[344][0-8]: 448 449 455 454 514 515 521 520 
+		elementNodeTbl[345][0-8]: 450 451 457 456 516 517 523 522 
+		elementNodeTbl[346][0-8]: 451 452 458 457 517 518 524 523 
+		elementNodeTbl[347][0-8]: 452 453 459 458 518 519 525 524 
+		elementNodeTbl[348][0-8]: 453 454 460 459 519 520 526 525 
+		elementNodeTbl[349][0-8]: 454 455 461 460 520 521 527 526 
+		elementNodeTbl[350][0-8]: 462 463 469 468 528 529 535 534 
+		elementNodeTbl[351][0-8]: 463 464 470 469 529 530 536 535 
+		elementNodeTbl[352][0-8]: 464 465 471 470 530 531 537 536 
+		elementNodeTbl[353][0-8]: 465 466 472 471 531 532 538 537 
+		elementNodeTbl[354][0-8]: 466 467 473 472 532 533 539 538 
+		elementNodeTbl[355][0-8]: 468 469 475 474 534 535 541 540 
+		elementNodeTbl[356][0-8]: 469 470 476 475 535 536 542 541 
+		elementNodeTbl[357][0-8]: 470 471 477 476 536 537 543 542 
+		elementNodeTbl[358][0-8]: 471 472 478 477 537 538 544 543 
+		elementNodeTbl[359][0-8]: 472 473 479 478 538 539 545 544 
+		elementNodeTbl[360][0-8]: 474 475 481 480 540 541 547 546 
+		elementNodeTbl[361][0-8]: 475 476 482 481 541 542 548 547 
+		elementNodeTbl[362][0-8]: 476 477 483 482 542 543 549 548 
+		elementNodeTbl[363][0-8]: 477 478 484 483 543 544 550 549 
+		elementNodeTbl[364][0-8]: 478 479 485 484 544 545 551 550 
+		elementNodeTbl[365][0-8]: 480 481 487 486 546 547 553 552 
+		elementNodeTbl[366][0-8]: 481 482 488 487 547 548 554 553 
+		elementNodeTbl[367][0-8]: 482 483 489 488 548 549 555 554 
+		elementNodeTbl[368][0-8]: 483 484 490 489 549 550 556 555 
+		elementNodeTbl[369][0-8]: 484 485 491 490 550 551 557 556 
+		elementNodeTbl[370][0-8]: 486 487 493 492 552 553 559 558 
+		elementNodeTbl[371][0-8]: 487 488 494 493 553 554 560 559 
+		elementNodeTbl[372][0-8]: 488 489 495 494 554 555 561 560 
+		elementNodeTbl[373][0-8]: 489 490 496 495 555 556 562 561 
+		elementNodeTbl[374][0-8]: 490 491 497 496 556 557 563 562 
+		elementNodeTbl[375][0-8]: 492 493 499 498 558 559 565 564 
+		elementNodeTbl[376][0-8]: 493 494 500 499 559 560 566 565 
+		elementNodeTbl[377][0-8]: 494 495 501 500 560 561 567 566 
+		elementNodeTbl[378][0-8]: 495 496 502 501 561 562 568 567 
+		elementNodeTbl[379][0-8]: 496 497 503 502 562 563 569 568 
+		elementNodeTbl[380][0-8]: 498 499 505 504 564 565 571 570 
+		elementNodeTbl[381][0-8]: 499 500 506 505 565 566 572 571 
+		elementNodeTbl[382][0-8]: 500 501 507 506 566 567 573 572 
+		elementNodeTbl[383][0-8]: 501 502 508 507 567 568 574 573 
+		elementNodeTbl[384][0-8]: 502 503 509 508 568 569 575 574 
+		elementNodeTbl[385][0-8]: 504 505 511 510 570 571 577 576 
+		elementNodeTbl[386][0-8]: 505 506 512 511 571 572 578 577 
+		elementNodeTbl[387][0-8]: 506 507 513 512 572 573 579 578 
+		elementNodeTbl[388][0-8]: 507 508 514 513 573 574 580 579 
+		elementNodeTbl[389][0-8]: 508 509 515 514 574 575 581 580 
+		elementNodeTbl[390][0-8]: 510 511 517 516 576 577 583 582 
+		elementNodeTbl[391][0-8]: 511 512 518 517 577 578 584 583 
+		elementNodeTbl[392][0-8]: 512 513 519 518 578 579 585 584 
+		elementNodeTbl[393][0-8]: 513 514 520 519 579 580 586 585 
+		elementNodeTbl[394][0-8]: 514 515 521 520 580 581 587 586 
+		elementNodeTbl[395][0-8]: 516 517 523 522 582 583 589 588 
+		elementNodeTbl[396][0-8]: 517 518 524 523 583 584 590 589 
+		elementNodeTbl[397][0-8]: 518 519 525 524 584 585 591 590 
+		elementNodeTbl[398][0-8]: 519 520 526 525 585 586 592 591 
+		elementNodeTbl[399][0-8]: 520 521 527 526 586 587 593 592 
+		elementNodeTbl[400][0-8]: 528 529 535 534 594 595 601 600 
+		elementNodeTbl[401][0-8]: 529 530 536 535 595 596 602 601 
+		elementNodeTbl[402][0-8]: 530 531 537 536 596 597 603 602 
+		elementNodeTbl[403][0-8]: 531 532 538 537 597 598 604 603 
+		elementNodeTbl[404][0-8]: 532 533 539 538 598 599 605 604 
+		elementNodeTbl[405][0-8]: 534 535 541 540 600 601 607 606 
+		elementNodeTbl[406][0-8]: 535 536 542 541 601 602 608 607 
+		elementNodeTbl[407][0-8]: 536 537 543 542 602 603 609 608 
+		elementNodeTbl[408][0-8]: 537 538 544 543 603 604 610 609 
+		elementNodeTbl[409][0-8]: 538 539 545 544 604 605 611 610 
+		elementNodeTbl[410][0-8]: 540 541 547 546 606 607 613 612 
+		elementNodeTbl[411][0-8]: 541 542 548 547 607 608 614 613 
+		elementNodeTbl[412][0-8]: 542 543 549 548 608 609 615 614 
+		elementNodeTbl[413][0-8]: 543 544 550 549 609 610 616 615 
+		elementNodeTbl[414][0-8]: 544 545 551 550 610 611 617 616 
+		elementNodeTbl[415][0-8]: 546 547 553 552 612 613 619 618 
+		elementNodeTbl[416][0-8]: 547 548 554 553 613 614 620 619 
+		elementNodeTbl[417][0-8]: 548 549 555 554 614 615 621 620 
+		elementNodeTbl[418][0-8]: 549 550 556 555 615 616 622 621 
+		elementNodeTbl[419][0-8]: 550 551 557 556 616 617 623 622 
+		elementNodeTbl[420][0-8]: 552 553 559 558 618 619 625 624 
+		elementNodeTbl[421][0-8]: 553 554 560 559 619 620 626 625 
+		elementNodeTbl[422][0-8]: 554 555 561 560 620 621 627 626 
+		elementNodeTbl[423][0-8]: 555 556 562 561 621 622 628 627 
+		elementNodeTbl[424][0-8]: 556 557 563 562 622 623 629 628 
+		elementNodeTbl[425][0-8]: 558 559 565 564 624 625 631 630 
+		elementNodeTbl[426][0-8]: 559 560 566 565 625 626 632 631 
+		elementNodeTbl[427][0-8]: 560 561 567 566 626 627 633 632 
+		elementNodeTbl[428][0-8]: 561 562 568 567 627 628 634 633 
+		elementNodeTbl[429][0-8]: 562 563 569 568 628 629 635 634 
+		elementNodeTbl[430][0-8]: 564 565 571 570 630 631 637 636 
+		elementNodeTbl[431][0-8]: 565 566 572 571 631 632 638 637 
+		elementNodeTbl[432][0-8]: 566 567 573 572 632 633 639 638 
+		elementNodeTbl[433][0-8]: 567 568 574 573 633 634 640 639 
+		elementNodeTbl[434][0-8]: 568 569 575 574 634 635 641 640 
+		elementNodeTbl[435][0-8]: 570 571 577 576 636 637 643 642 
+		elementNodeTbl[436][0-8]: 571 572 578 577 637 638 644 643 
+		elementNodeTbl[437][0-8]: 572 573 579 578 638 639 645 644 
+		elementNodeTbl[438][0-8]: 573 574 580 579 639 640 646 645 
+		elementNodeTbl[439][0-8]: 574 575 581 580 640 641 647 646 
+		elementNodeTbl[440][0-8]: 576 577 583 582 642 643 649 648 
+		elementNodeTbl[441][0-8]: 577 578 584 583 643 644 650 649 
+		elementNodeTbl[442][0-8]: 578 579 585 584 644 645 651 650 
+		elementNodeTbl[443][0-8]: 579 580 586 585 645 646 652 651 
+		elementNodeTbl[444][0-8]: 580 581 587 586 646 647 653 652 
+		elementNodeTbl[445][0-8]: 582 583 589 588 648 649 655 654 
+		elementNodeTbl[446][0-8]: 583 584 590 589 649 650 656 655 
+		elementNodeTbl[447][0-8]: 584 585 591 590 650 651 657 656 
+		elementNodeTbl[448][0-8]: 585 586 592 591 651 652 658 657 
+		elementNodeTbl[449][0-8]: 586 587 593 592 652 653 659 658 
+		elementNodeTbl[450][0-8]: 594 595 601 600 660 661 667 666 
+		elementNodeTbl[451][0-8]: 595 596 602 601 661 662 668 667 
+		elementNodeTbl[452][0-8]: 596 597 603 602 662 663 669 668 
+		elementNodeTbl[453][0-8]: 597 598 604 603 663 664 670 669 
+		elementNodeTbl[454][0-8]: 598 599 605 604 664 665 671 670 
+		elementNodeTbl[455][0-8]: 600 601 607 606 666 667 673 672 
+		elementNodeTbl[456][0-8]: 601 602 608 607 667 668 674 673 
+		elementNodeTbl[457][0-8]: 602 603 609 608 668 669 675 674 
+		elementNodeTbl[458][0-8]: 603 604 610 609 669 670 676 675 
+		elementNodeTbl[459][0-8]: 604 605 611 610 670 671 677 676 
+		elementNodeTbl[460][0-8]: 606 607 613 612 672 673 679 678 
+		elementNodeTbl[461][0-8]: 607 608 614 613 673 674 680 679 
+		elementNodeTbl[462][0-8]: 608 609 615 614 674 675 681 680 
+		elementNodeTbl[463][0-8]: 609 610 616 615 675 676 682 681 
+		elementNodeTbl[464][0-8]: 610 611 617 616 676 677 683 682 
+		elementNodeTbl[465][0-8]: 612 613 619 618 678 679 685 684 
+		elementNodeTbl[466][0-8]: 613 614 620 619 679 680 686 685 
+		elementNodeTbl[467][0-8]: 614 615 621 620 680 681 687 686 
+		elementNodeTbl[468][0-8]: 615 616 622 621 681 682 688 687 
+		elementNodeTbl[469][0-8]: 616 617 623 622 682 683 689 688 
+		elementNodeTbl[470][0-8]: 618 619 625 624 684 685 691 690 
+		elementNodeTbl[471][0-8]: 619 620 626 625 685 686 692 691 
+		elementNodeTbl[472][0-8]: 620 621 627 626 686 687 693 692 
+		elementNodeTbl[473][0-8]: 621 622 628 627 687 688 694 693 
+		elementNodeTbl[474][0-8]: 622 623 629 628 688 689 695 694 
+		elementNodeTbl[475][0-8]: 624 625 631 630 690 691 697 696 
+		elementNodeTbl[476][0-8]: 625 626 632 631 691 692 698 697 
+		elementNodeTbl[477][0-8]: 626 627 633 632 692 693 699 698 
+		elementNodeTbl[478][0-8]: 627 628 634 633 693 694 700 699 
+		elementNodeTbl[479][0-8]: 628 629 635 634 694 695 701 700 
+		elementNodeTbl[480][0-8]: 630 631 637 636 696 697 703 702 
+		elementNodeTbl[481][0-8]: 631 632 638 637 697 698 704 703 
+		elementNodeTbl[482][0-8]: 632 633 639 638 698 699 705 704 
+		elementNodeTbl[483][0-8]: 633 634 640 639 699 700 706 705 
+		elementNodeTbl[484][0-8]: 634 635 641 640 700 701 707 706 
+		elementNodeTbl[485][0-8]: 636 637 643 642 702 703 709 708 
+		elementNodeTbl[486][0-8]: 637 638 644 643 703 704 710 709 
+		elementNodeTbl[487][0-8]: 638 639 645 644 704 705 711 710 
+		elementNodeTbl[488][0-8]: 639 640 646 645 705 706 712 711 
+		elementNodeTbl[489][0-8]: 640 641 647 646 706 707 713 712 
+		elementNodeTbl[490][0-8]: 642 643 649 648 708 709 715 714 
+		elementNodeTbl[491][0-8]: 643 644 650 649 709 710 716 715 
+		elementNodeTbl[492][0-8]: 644 645 651 650 710 711 717 716 
+		elementNodeTbl[493][0-8]: 645 646 652 651 711 712 718 717 
+		elementNodeTbl[494][0-8]: 646 647 653 652 712 713 719 718 
+		elementNodeTbl[495][0-8]: 648 649 655 654 714 715 721 720 
+		elementNodeTbl[496][0-8]: 649 650 656 655 715 716 722 721 
+		elementNodeTbl[497][0-8]: 650 651 657 656 716 717 723 722 
+		elementNodeTbl[498][0-8]: 651 652 658 657 717 718 724 723 
+		elementNodeTbl[499][0-8]: 652 653 659 658 718 719 725 724 
+	procNbrCnt: 0
+	procNbrTbl (ptr): (nil)
+	elementShadowInfo->procShadowedCnt (ptr): (nil)
+	elementShadowInfo->procShadowedTbl (ptr): (nil)
+	elementShadowInfo->procShadowCnt (ptr): (nil)
+	elementShadowInfo->procShadowTbl (ptr): (nil)
+	nodeShadowInfo->procShadowedCnt (ptr): (nil)
+	nodeShadowInfo->procShadowedTbl (ptr): (nil)
+	nodeShadowInfo->procShadowCnt (ptr): (nil)
+	nodeShadowInfo->procShadowTbl (ptr): (nil)
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testMeshCoarsener_Hexa.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testMeshCoarsener_Hexa.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,2643 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x80602b8)
+Stg_Component (ptr): 0x80602b8
+Stg_Object (ptr): 0x80602b8
+	Stg_Class (ptr): 0x80602b8
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7ecb1dd
+		_print (func ptr): 0xb7ecba6a
+		_copy (func ptr): 0xb7eccc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eca51c
+	_construct (func ptr): 0xb7ecb00e
+	_build (func ptr): 0xb7ecd322
+	_initialise (func ptr): 0xb7ece214
+	_execute (func ptr): 0xb7ece219
+	_destroy (func ptr): 0xb7ecb1d8
+	isConstructed: True
+	isBuilt: True
+	isInitialised: True
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Mesh-Construct
+	build function name: Mesh-Build
+	initialise function name: Mesh-Initialise
+	execute function name: Mesh-Execute
+	destroy function name: Mesh-Destroy
+	dictionary (ptr): 0x805c540
+	layout (ptr): 0x805ff70
+Extension (ptr):0x8060688
+Stg_Object (ptr): 0x8060688
+	Stg_Class (ptr): 0x8060688
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e43018
+		_print (func ptr): 0xb7e43066
+		_copy (func ptr): 0xb7e43200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x80606e8
+Stg_ObjectList (ptr):0x80606e8
+	Stg_Class (ptr): 0x80606e8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e74f3e
+		_print (func ptr): 0xb7e74f75
+		_copy (func ptr): 0xb7e75217
+	_append(func ptr): 0xb7e75e7b
+	_prepend(func ptr): 0xb7e75f41
+	_replaceAll(func ptr): 0xb7e76005
+	_replace(func ptr): 0xb7e760be
+	_insertBefore(func ptr): 0xb7e7625b
+	_insertAfter(func ptr): 0xb7e76416
+	_remove(func ptr): 0xb7e765d3
+	_getIndex(func ptr): 0xb7e76679
+	_get(func ptr): 0xb7e76727
+	_allocMoreMemory(func ptr): 0xb7e768fa
+	_insertAtIndex(func ptr): 0xb7e76980
+	_removeByIndex(func ptr): 0xb7e769fe
+	_deleteAllObjects(func ptr): 0xb7e7687b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+Extension (ptr):0x8060788
+Stg_Object (ptr): 0x8060788
+	Stg_Class (ptr): 0x8060788
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e43018
+		_print (func ptr): 0xb7e43066
+		_copy (func ptr): 0xb7e43200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x80607e8
+Stg_ObjectList (ptr):0x80607e8
+	Stg_Class (ptr): 0x80607e8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e74f3e
+		_print (func ptr): 0xb7e74f75
+		_copy (func ptr): 0xb7e75217
+	_append(func ptr): 0xb7e75e7b
+	_prepend(func ptr): 0xb7e75f41
+	_replaceAll(func ptr): 0xb7e76005
+	_replace(func ptr): 0xb7e760be
+	_insertBefore(func ptr): 0xb7e7625b
+	_insertAfter(func ptr): 0xb7e76416
+	_remove(func ptr): 0xb7e765d3
+	_getIndex(func ptr): 0xb7e76679
+	_get(func ptr): 0xb7e76727
+	_allocMoreMemory(func ptr): 0xb7e768fa
+	_insertAtIndex(func ptr): 0xb7e76980
+	_removeByIndex(func ptr): 0xb7e769fe
+	_deleteAllObjects(func ptr): 0xb7e7687b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 0
+	data[0-0]:
+	_extensionsToExisting (ptr): (nil)
+	_existingObject (ptr): (nil)
+	_array (ptr): (nil)
+	itemSize 0
+	em (ptr) (nil)
+	count 0
+	node (ptr): 0x8061be0
+	nodeLocalCount: 726
+	nodeDomainCount: 726
+	nodeShadowCount: 0
+	nodeGlobalCount: 1331
+	nodeCoord (ptr): 0x8063988
+	nodeCoord[0-726]:   (0.50,0.00,0.00), (0.60,0.00,0.00), (0.70,0.00,0.00), (0.80,0.00,0.00), (0.90,0.00,0.00), (1.00,0.00,0.00), (0.50,0.10,0.00), (0.60,0.10,0.00), (0.70,0.10,0.00), (0.80,0.10,0.00), (0.90,0.10,0.00), (1.00,0.10,0.00), (0.50,0.20,0.00), (0.60,0.20,0.00), (0.70,0.20,0.00), (0.80,0.20,0.00), (0.90,0.20,0.00), (1.00,0.20,0.00), (0.50,0.30,0.00), (0.60,0.30,0.00), (0.70,0.30,0.00), (0.80,0.30,0.00), (0.90,0.30,0.00), (1.00,0.30,0.00), (0.50,0.40,0.00), (0.60,0.40,0.00), (0.70,0.40,0.00), (0.80,0.40,0.00), (0.90,0.40,0.00), (1.00,0.40,0.00), (0.50,0.50,0.00), (0.60,0.50,0.00), (0.70,0.50,0.00), (0.80,0.50,0.00), (0.90,0.50,0.00), (1.00,0.50,0.00), (0.50,0.60,0.00), (0.60,0.60,0.00), (0.70,0.60,0.00), (0.80,0.60,0.00), (0.90,0.60,0.00), (1.00,0.60,0.00), (0.50,0.70,0.00), (0.60,0.70,0.00), (0.70,0.70,0.00), (0.80,0.70,0.00), (0.90,0.70,0.00), (1.00,0.70,0.00), (0.50,0.80,0.00), (0.60,0.80,0.00), (0.70,0.80,0.00), (0.80,0.80,0.00), (0.90,0.80,0.00), (1.00,0.80,0.00), (0.50,0.90,0.00), (0.60,0.90,0.00), (0.70,0.90,0.00), (0.80,0.90,0.00), (0.90,0.90,0.00), (1.00,0.90,0.00), (0.50,1.00,0.00), (0.60,1.00,0.00), (0.70,1.00,0.00), (0.80,1.00,0.00), (0.90,1.00,0.00), (1.00,1.00,0.00), (0.50,0.00,0.10), (0.60,0.00,0.10), (0.70,0.00,0.10), (0.80,0.00,0.10), (0.90,0.00,0.10), (1.00,0.00,0.10), (0.50,0.10,0.10), (0.60,0.10,0.10), (0.70,0.10,0.10), (0.80,0.10,0.10), (0.90,0.10,0.10), (1.00,0.10,0.10), (0.50,0.20,0.10), (0.60,0.20,0.10), (0.70,0.20,0.10), (0.80,0.20,0.10), (0.90,0.20,0.10), (1.00,0.20,0.10), (0.50,0.30,0.10), (0.60,0.30,0.10), (0.70,0.30,0.10), (0.80,0.30,0.10), (0.90,0.30,0.10), (1.00,0.30,0.10), (0.50,0.40,0.10), (0.60,0.40,0.10), (0.70,0.40,0.10), (0.80,0.40,0.10), (0.90,0.40,0.10), (1.00,0.40,0.10), (0.50,0.50,0.10), (0.60,0.50,0.10), (0.70,0.50,0.10), (0.80,0.50,0.10), (0.90,0.50,0.10), (1.00,0.50,0.10), (0.50,0.60,0.10), (0.60,0.60,0.10), (0.70,0.60,0.10), (0.80,0.60,0.10), (0.90,0.60,0.10), (1.00,0.60,0.10), (0.50,0.70,0.10), (0.60,0.70,0.10), (0.70,0.70,0.10), (0.80,0.70,0.10), (0.90,0.70,0.10), (1.00,0.70,0.10), (0.50,0.80,0.10), (0.60,0.80,0.10), (0.70,0.80,0.10), (0.80,0.80,0.10), (0.90,0.80,0.10), (1.00,0.80,0.10), (0.50,0.90,0.10), (0.60,0.90,0.10), (0.70,0.90,0.10), (0.80,0.90,0.10), (0.90,0.90,0.10), (1.00,0.90,0.10), (0.50,1.00,0.10), (0.60,1.00,0.10), (0.70,1.00,0.10), (0.80,1.00,0.10), (0.90,1.00,0.10), (1.00,1.00,0.10), (0.50,0.00,0.20), (0.60,0.00,0.20), (0.70,0.00,0.20), (0.80,0.00,0.20), (0.90,0.00,0.20), (1.00,0.00,0.20), (0.50,0.10,0.20), (0.60,0.10,0.20), (0.70,0.10,0.20), (0.80,0.10,0.20), (0.90,0.10,0.20), (1.00,0.10,0.20), (0.50,0.20,0.20), (0.60,0.20,0.20), (0.70,0.20,0.20), (0.80,0.20,0.20), (0.90,0.20,0.20), (1.00,0.20,0.20), (0.50,0.30,0.20), (0.60,0.30,0.20), (0.70,0.30,0.20), (0.80,0.30,0.20), (0.90,0.30,0.20), (1.00,0.30,0.20), (0.50,0.40,0.20), (0.60,0.40,0.20), (0.70,0.40,0.20), (0.80,0.40,0.20), (0.90,0.40,0.20), (1.00,0.40,0.20), (0.50,0.50,0.20), (0.60,0.50,0.20), (0.70,0.50,0.20), (0.80,0.50,0.20), (0.90,0.50,0.20), (1.00,0.50,0.20), (0.50,0.60,0.20), (0.60,0.60,0.20), (0.70,0.60,0.20), (0.80,0.60,0.20), (0.90,0.60,0.20), (1.00,0.60,0.20), (0.50,0.70,0.20), (0.60,0.70,0.20), (0.70,0.70,0.20), (0.80,0.70,0.20), (0.90,0.70,0.20), (1.00,0.70,0.20), (0.50,0.80,0.20), (0.60,0.80,0.20), (0.70,0.80,0.20), (0.80,0.80,0.20), (0.90,0.80,0.20), (1.00,0.80,0.20), (0.50,0.90,0.20), (0.60,0.90,0.20), (0.70,0.90,0.20), (0.80,0.90,0.20), (0.90,0.90,0.20), (1.00,0.90,0.20), (0.50,1.00,0.20), (0.60,1.00,0.20), (0.70,1.00,0.20), (0.80,1.00,0.20), (0.90,1.00,0.20), (1.00,1.00,0.20), (0.50,0.00,0.30), (0.60,0.00,0.30), (0.70,0.00,0.30), (0.80,0.00,0.30), (0.90,0.00,0.30), (1.00,0.00,0.30), (0.50,0.10,0.30), (0.60,0.10,0.30), (0.70,0.10,0.30), (0.80,0.10,0.30), (0.90,0.10,0.30), (1.00,0.10,0.30), (0.50,0.20,0.30), (0.60,0.20,0.30), (0.70,0.20,0.30), (0.80,0.20,0.30), (0.90,0.20,0.30), (1.00,0.20,0.30), (0.50,0.30,0.30), (0.60,0.30,0.30), (0.70,0.30,0.30), (0.80,0.30,0.30), (0.90,0.30,0.30), (1.00,0.30,0.30), (0.50,0.40,0.30), (0.60,0.40,0.30), (0.70,0.40,0.30), (0.80,0.40,0.30), (0.90,0.40,0.30), (1.00,0.40,0.30), (0.50,0.50,0.30), (0.60,0.50,0.30), (0.70,0.50,0.30), (0.80,0.50,0.30), (0.90,0.50,0.30), (1.00,0.50,0.30), (0.50,0.60,0.30), (0.60,0.60,0.30), (0.70,0.60,0.30), (0.80,0.60,0.30), (0.90,0.60,0.30), (1.00,0.60,0.30), (0.50,0.70,0.30), (0.60,0.70,0.30), (0.70,0.70,0.30), (0.80,0.70,0.30), (0.90,0.70,0.30), (1.00,0.70,0.30), (0.50,0.80,0.30), (0.60,0.80,0.30), (0.70,0.80,0.30), (0.80,0.80,0.30), (0.90,0.80,0.30), (1.00,0.80,0.30), (0.50,0.90,0.30), (0.60,0.90,0.30), (0.70,0.90,0.30), (0.80,0.90,0.30), (0.90,0.90,0.30), (1.00,0.90,0.30), (0.50,1.00,0.30), (0.60,1.00,0.30), (0.70,1.00,0.30), (0.80,1.00,0.30), (0.90,1.00,0.30), (1.00,1.00,0.30), (0.50,0.00,0.40), (0.60,0.00,0.40), (0.70,0.00,0.40), (0.80,0.00,0.40), (0.90,0.00,0.40), (1.00,0.00,0.40), (0.50,0.10,0.40), (0.60,0.10,0.40), (0.70,0.10,0.40), (0.80,0.10,0.40), (0.90,0.10,0.40), (1.00,0.10,0.40), (0.50,0.20,0.40), (0.60,0.20,0.40), (0.70,0.20,0.40), (0.80,0.20,0.40), (0.90,0.20,0.40), (1.00,0.20,0.40), (0.50,0.30,0.40), (0.60,0.30,0.40), (0.70,0.30,0.40), (0.80,0.30,0.40), (0.90,0.30,0.40), (1.00,0.30,0.40), (0.50,0.40,0.40), (0.60,0.40,0.40), (0.70,0.40,0.40), (0.80,0.40,0.40), (0.90,0.40,0.40), (1.00,0.40,0.40), (0.50,0.50,0.40), (0.60,0.50,0.40), (0.70,0.50,0.40), (0.80,0.50,0.40), (0.90,0.50,0.40), (1.00,0.50,0.40), (0.50,0.60,0.40), (0.60,0.60,0.40), (0.70,0.60,0.40), (0.80,0.60,0.40), (0.90,0.60,0.40), (1.00,0.60,0.40), (0.50,0.70,0.40), (0.60,0.70,0.40), (0.70,0.70,0.40), (0.80,0.70,0.40), (0.90,0.70,0.40), (1.00,0.70,0.40), (0.50,0.80,0.40), (0.60,0.80,0.40), (0.70,0.80,0.40), (0.80,0.80,0.40), (0.90,0.80,0.40), (1.00,0.80,0.40), (0.50,0.90,0.40), (0.60,0.90,0.40), (0.70,0.90,0.40), (0.80,0.90,0.40), (0.90,0.90,0.40), (1.00,0.90,0.40), (0.50,1.00,0.40), (0.60,1.00,0.40), (0.70,1.00,0.40), (0.80,1.00,0.40), (0.90,1.00,0.40), (1.00,1.00,0.40), (0.50,0.00,0.50), (0.60,0.00,0.50), (0.70,0.00,0.50), (0.80,0.00,0.50), (0.90,0.00,0.50), (1.00,0.00,0.50), (0.50,0.10,0.50), (0.60,0.10,0.50), (0.70,0.10,0.50), (0.80,0.10,0.50), (0.90,0.10,0.50), (1.00,0.10,0.50), (0.50,0.20,0.50), (0.60,0.20,0.50), (0.70,0.20,0.50), (0.80,0.20,0.50), (0.90,0.20,0.50), (1.00,0.20,0.50), (0.50,0.30,0.50), (0.60,0.30,0.50), (0.70,0.30,0.50), (0.80,0.30,0.50), (0.90,0.30,0.50), (1.00,0.30,0.50), (0.50,0.40,0.50), (0.60,0.40,0.50), (0.70,0.40,0.50), (0.80,0.40,0.50), (0.90,0.40,0.50), (1.00,0.40,0.50), (0.50,0.50,0.50), (0.60,0.50,0.50), (0.70,0.50,0.50), (0.80,0.50,0.50), (0.90,0.50,0.50), (1.00,0.50,0.50), (0.50,0.60,0.50), (0.60,0.60,0.50), (0.70,0.60,0.50), (0.80,0.60,0.50), (0.90,0.60,0.50), (1.00,0.60,0.50), (0.50,0.70,0.50), (0.60,0.70,0.50), (0.70,0.70,0.50), (0.80,0.70,0.50), (0.90,0.70,0.50), (1.00,0.70,0.50), (0.50,0.80,0.50), (0.60,0.80,0.50), (0.70,0.80,0.50), (0.80,0.80,0.50), (0.90,0.80,0.50), (1.00,0.80,0.50), (0.50,0.90,0.50), (0.60,0.90,0.50), (0.70,0.90,0.50), (0.80,0.90,0.50), (0.90,0.90,0.50), (1.00,0.90,0.50), (0.50,1.00,0.50), (0.60,1.00,0.50), (0.70,1.00,0.50), (0.80,1.00,0.50), (0.90,1.00,0.50), (1.00,1.00,0.50), (0.50,0.00,0.60), (0.60,0.00,0.60), (0.70,0.00,0.60), (0.80,0.00,0.60), (0.90,0.00,0.60), (1.00,0.00,0.60), (0.50,0.10,0.60), (0.60,0.10,0.60), (0.70,0.10,0.60), (0.80,0.10,0.60), (0.90,0.10,0.60), (1.00,0.10,0.60), (0.50,0.20,0.60), (0.60,0.20,0.60), (0.70,0.20,0.60), (0.80,0.20,0.60), (0.90,0.20,0.60), (1.00,0.20,0.60), (0.50,0.30,0.60), (0.60,0.30,0.60), (0.70,0.30,0.60), (0.80,0.30,0.60), (0.90,0.30,0.60), (1.00,0.30,0.60), (0.50,0.40,0.60), (0.60,0.40,0.60), (0.70,0.40,0.60), (0.80,0.40,0.60), (0.90,0.40,0.60), (1.00,0.40,0.60), (0.50,0.50,0.60), (0.60,0.50,0.60), (0.70,0.50,0.60), (0.80,0.50,0.60), (0.90,0.50,0.60), (1.00,0.50,0.60), (0.50,0.60,0.60), (0.60,0.60,0.60), (0.70,0.60,0.60), (0.80,0.60,0.60), (0.90,0.60,0.60), (1.00,0.60,0.60), (0.50,0.70,0.60), (0.60,0.70,0.60), (0.70,0.70,0.60), (0.80,0.70,0.60), (0.90,0.70,0.60), (1.00,0.70,0.60), (0.50,0.80,0.60), (0.60,0.80,0.60), (0.70,0.80,0.60), (0.80,0.80,0.60), (0.90,0.80,0.60), (1.00,0.80,0.60), (0.50,0.90,0.60), (0.60,0.90,0.60), (0.70,0.90,0.60), (0.80,0.90,0.60), (0.90,0.90,0.60), (1.00,0.90,0.60), (0.50,1.00,0.60), (0.60,1.00,0.60), (0.70,1.00,0.60), (0.80,1.00,0.60), (0.90,1.00,0.60), (1.00,1.00,0.60), (0.50,0.00,0.70), (0.60,0.00,0.70), (0.70,0.00,0.70), (0.80,0.00,0.70), (0.90,0.00,0.70), (1.00,0.00,0.70), (0.50,0.10,0.70), (0.60,0.10,0.70), (0.70,0.10,0.70), (0.80,0.10,0.70), (0.90,0.10,0.70), (1.00,0.10,0.70), (0.50,0.20,0.70), (0.60,0.20,0.70), (0.70,0.20,0.70), (0.80,0.20,0.70), (0.90,0.20,0.70), (1.00,0.20,0.70), (0.50,0.30,0.70), (0.60,0.30,0.70), (0.70,0.30,0.70), (0.80,0.30,0.70), (0.90,0.30,0.70), (1.00,0.30,0.70), (0.50,0.40,0.70), (0.60,0.40,0.70), (0.70,0.40,0.70), (0.80,0.40,0.70), (0.90,0.40,0.70), (1.00,0.40,0.70), (0.50,0.50,0.70), (0.60,0.50,0.70), (0.70,0.50,0.70), (0.80,0.50,0.70), (0.90,0.50,0.70), (1.00,0.50,0.70), (0.50,0.60,0.70), (0.60,0.60,0.70), (0.70,0.60,0.70), (0.80,0.60,0.70), (0.90,0.60,0.70), (1.00,0.60,0.70), (0.50,0.70,0.70), (0.60,0.70,0.70), (0.70,0.70,0.70), (0.80,0.70,0.70), (0.90,0.70,0.70), (1.00,0.70,0.70), (0.50,0.80,0.70), (0.60,0.80,0.70), (0.70,0.80,0.70), (0.80,0.80,0.70), (0.90,0.80,0.70), (1.00,0.80,0.70), (0.50,0.90,0.70), (0.60,0.90,0.70), (0.70,0.90,0.70), (0.80,0.90,0.70), (0.90,0.90,0.70), (1.00,0.90,0.70), (0.50,1.00,0.70), (0.60,1.00,0.70), (0.70,1.00,0.70), (0.80,1.00,0.70), (0.90,1.00,0.70), (1.00,1.00,0.70), (0.50,0.00,0.80), (0.60,0.00,0.80), (0.70,0.00,0.80), (0.80,0.00,0.80), (0.90,0.00,0.80), (1.00,0.00,0.80), (0.50,0.10,0.80), (0.60,0.10,0.80), (0.70,0.10,0.80), (0.80,0.10,0.80), (0.90,0.10,0.80), (1.00,0.10,0.80), (0.50,0.20,0.80), (0.60,0.20,0.80), (0.70,0.20,0.80), (0.80,0.20,0.80), (0.90,0.20,0.80), (1.00,0.20,0.80), (0.50,0.30,0.80), (0.60,0.30,0.80), (0.70,0.30,0.80), (0.80,0.30,0.80), (0.90,0.30,0.80), (1.00,0.30,0.80), (0.50,0.40,0.80), (0.60,0.40,0.80), (0.70,0.40,0.80), (0.80,0.40,0.80), (0.90,0.40,0.80), (1.00,0.40,0.80), (0.50,0.50,0.80), (0.60,0.50,0.80), (0.70,0.50,0.80), (0.80,0.50,0.80), (0.90,0.50,0.80), (1.00,0.50,0.80), (0.50,0.60,0.80), (0.60,0.60,0.80), (0.70,0.60,0.80), (0.80,0.60,0.80), (0.90,0.60,0.80), (1.00,0.60,0.80), (0.50,0.70,0.80), (0.60,0.70,0.80), (0.70,0.70,0.80), (0.80,0.70,0.80), (0.90,0.70,0.80), (1.00,0.70,0.80), (0.50,0.80,0.80), (0.60,0.80,0.80), (0.70,0.80,0.80), (0.80,0.80,0.80), (0.90,0.80,0.80), (1.00,0.80,0.80), (0.50,0.90,0.80), (0.60,0.90,0.80), (0.70,0.90,0.80), (0.80,0.90,0.80), (0.90,0.90,0.80), (1.00,0.90,0.80), (0.50,1.00,0.80), (0.60,1.00,0.80), (0.70,1.00,0.80), (0.80,1.00,0.80), (0.90,1.00,0.80), (1.00,1.00,0.80), (0.50,0.00,0.90), (0.60,0.00,0.90), (0.70,0.00,0.90), (0.80,0.00,0.90), (0.90,0.00,0.90), (1.00,0.00,0.90), (0.50,0.10,0.90), (0.60,0.10,0.90), (0.70,0.10,0.90), (0.80,0.10,0.90), (0.90,0.10,0.90), (1.00,0.10,0.90), (0.50,0.20,0.90), (0.60,0.20,0.90), (0.70,0.20,0.90), (0.80,0.20,0.90), (0.90,0.20,0.90), (1.00,0.20,0.90), (0.50,0.30,0.90), (0.60,0.30,0.90), (0.70,0.30,0.90), (0.80,0.30,0.90), (0.90,0.30,0.90), (1.00,0.30,0.90), (0.50,0.40,0.90), (0.60,0.40,0.90), (0.70,0.40,0.90), (0.80,0.40,0.90), (0.90,0.40,0.90), (1.00,0.40,0.90), (0.50,0.50,0.90), (0.60,0.50,0.90), (0.70,0.50,0.90), (0.80,0.50,0.90), (0.90,0.50,0.90), (1.00,0.50,0.90), (0.50,0.60,0.90), (0.60,0.60,0.90), (0.70,0.60,0.90), (0.80,0.60,0.90), (0.90,0.60,0.90), (1.00,0.60,0.90), (0.50,0.70,0.90), (0.60,0.70,0.90), (0.70,0.70,0.90), (0.80,0.70,0.90), (0.90,0.70,0.90), (1.00,0.70,0.90), (0.50,0.80,0.90), (0.60,0.80,0.90), (0.70,0.80,0.90), (0.80,0.80,0.90), (0.90,0.80,0.90), (1.00,0.80,0.90), (0.50,0.90,0.90), (0.60,0.90,0.90), (0.70,0.90,0.90), (0.80,0.90,0.90), (0.90,0.90,0.90), (1.00,0.90,0.90), (0.50,1.00,0.90), (0.60,1.00,0.90), (0.70,1.00,0.90), (0.80,1.00,0.90), (0.90,1.00,0.90), (1.00,1.00,0.90), (0.50,0.00,1.00), (0.60,0.00,1.00), (0.70,0.00,1.00), (0.80,0.00,1.00), (0.90,0.00,1.00), (1.00,0.00,1.00), (0.50,0.10,1.00), (0.60,0.10,1.00), (0.70,0.10,1.00), (0.80,0.10,1.00), (0.90,0.10,1.00), (1.00,0.10,1.00), (0.50,0.20,1.00), (0.60,0.20,1.00), (0.70,0.20,1.00), (0.80,0.20,1.00), (0.90,0.20,1.00), (1.00,0.20,1.00), (0.50,0.30,1.00), (0.60,0.30,1.00), (0.70,0.30,1.00), (0.80,0.30,1.00), (0.90,0.30,1.00), (1.00,0.30,1.00), (0.50,0.40,1.00), (0.60,0.40,1.00), (0.70,0.40,1.00), (0.80,0.40,1.00), (0.90,0.40,1.00), (1.00,0.40,1.00), (0.50,0.50,1.00), (0.60,0.50,1.00), (0.70,0.50,1.00), (0.80,0.50,1.00), (0.90,0.50,1.00), (1.00,0.50,1.00), (0.50,0.60,1.00), (0.60,0.60,1.00), (0.70,0.60,1.00), (0.80,0.60,1.00), (0.90,0.60,1.00), (1.00,0.60,1.00), (0.50,0.70,1.00), (0.60,0.70,1.00), (0.70,0.70,1.00), (0.80,0.70,1.00), (0.90,0.70,1.00), (1.00,0.70,1.00), (0.50,0.80,1.00), (0.60,0.80,1.00), (0.70,0.80,1.00), (0.80,0.80,1.00), (0.90,0.80,1.00), (1.00,0.80,1.00), (0.50,0.90,1.00), (0.60,0.90,1.00), (0.70,0.90,1.00), (0.80,0.90,1.00), (0.90,0.90,1.00), (1.00,0.90,1.00), (0.50,1.00,1.00), (0.60,1.00,1.00), (0.70,1.00,1.00), (0.80,1.00,1.00), (0.90,1.00,1.00), (1.00,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8067da8
+	nodeL2G[0-726]:   005 006 007 008 009 010 016 017 018 019 020 021 027 028 029 030 031 032 038 039 040 041 042 043 049 050 051 052 053 054 060 061 062 063 064 065 071 072 073 074 075 076 082 083 084 085 086 087 093 094 095 096 097 098 104 105 106 107 108 109 115 116 117 118 119 120 126 127 128 129 130 131 137 138 139 140 141 142 148 149 150 151 152 153 159 160 161 162 163 164 170 171 172 173 174 175 181 182 183 184 185 186 192 193 194 195 196 197 203 204 205 206 207 208 214 215 216 217 218 219 225 226 227 228 229 230 236 237 238 239 240 241 247 248 249 250 251 252 258 259 260 261 262 263 269 270 271 272 273 274 280 281 282 283 284 285 291 292 293 294 295 296 302 303 304 305 306 307 313 314 315 316 317 318 324 325 326 327 328 329 335 336 337 338 339 340 346 347 348 349 350 351 357 358 359 360 361 362 368 369 370 371 372 373 379 380 381 382 383 384 390 391 392 393 394 395 401 402 403 404 405 406 412 413 414 415 416 417 423 424 425 426 427 428 434 435 436 437 438 439 445 446 447 448 449 450 456 457 458 459 460 461 467 468 469 470 471 472 478 479 480 481 482 483 489 490 491 492 493 494 500 501 502 503 504 505 511 512 513 514 515 516 522 523 524 525 526 527 533 534 535 536 537 538 544 545 546 547 548 549 555 556 557 558 559 560 566 567 568 569 570 571 577 578 579 580 581 582 588 589 590 591 592 593 599 600 601 602 603 604 610 611 612 613 614 615 621 622 623 624 625 626 632 633 634 635 636 637 643 644 645 646 647 648 654 655 656 657 658 659 665 666 667 668 669 670 676 677 678 679 680 681 687 688 689 690 691 692 698 699 700 701 702 703 709 710 711 712 713 714 720 721 722 723 724 725 731 732 733 734 735 736 742 743 744 745 746 747 753 754 755 756 757 758 764 765 766 767 768 769 775 776 777 778 779 780 786 787 788 789 790 791 797 798 799 800 801 802 808 809 810 811 812 813 819 820 821 822 823 824 830 831 832 833 834 835 841 842 843 844 845 846 852 853 854 855 856 857 863 864 865 866 867 868 874 875 876 877 878 879 885 886 887 888 889 890 896 897 898 899 900 901 907 908 909 910 911 912 918 919 920 921 922 923 929 930 931 932 933 934 940 941 942 943 944 945 951 952 953 954 955 956 962 963 964 965 966 967 973 974 975 976 977 978 984 985 986 987 988 989 995 996 997 998 999 1000 1006 1007 1008 1009 1010 1011 1017 1018 1019 1020 1021 1022 1028 1029 1030 1031 1032 1033 1039 1040 1041 1042 1043 1044 1050 1051 1052 1053 1054 1055 1061 1062 1063 1064 1065 1066 1072 1073 1074 1075 1076 1077 1083 1084 1085 1086 1087 1088 1094 1095 1096 1097 1098 1099 1105 1106 1107 1108 1109 1110 1116 1117 1118 1119 1120 1121 1127 1128 1129 1130 1131 1132 1138 1139 1140 1141 1142 1143 1149 1150 1151 1152 1153 1154 1160 1161 1162 1163 1164 1165 1171 1172 1173 1174 1175 1176 1182 1183 1184 1185 1186 1187 1193 1194 1195 1196 1197 1198 1204 1205 1206 1207 1208 1209 1215 1216 1217 1218 1219 1220 1226 1227 1228 1229 1230 1231 1237 1238 1239 1240 1241 1242 1248 1249 1250 1251 1252 1253 1259 1260 1261 1262 1263 1264 1270 1271 1272 1273 1274 1275 1281 1282 1283 1284 1285 1286 1292 1293 1294 1295 1296 1297 1303 1304 1305 1306 1307 1308 1314 1315 1316 1317 1318 1319 1325 1326 1327 1328 1329 1330 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8067da8
+	nodeD2G[0-726]:   005 006 007 008 009 010 016 017 018 019 020 021 027 028 029 030 031 032 038 039 040 041 042 043 049 050 051 052 053 054 060 061 062 063 064 065 071 072 073 074 075 076 082 083 084 085 086 087 093 094 095 096 097 098 104 105 106 107 108 109 115 116 117 118 119 120 126 127 128 129 130 131 137 138 139 140 141 142 148 149 150 151 152 153 159 160 161 162 163 164 170 171 172 173 174 175 181 182 183 184 185 186 192 193 194 195 196 197 203 204 205 206 207 208 214 215 216 217 218 219 225 226 227 228 229 230 236 237 238 239 240 241 247 248 249 250 251 252 258 259 260 261 262 263 269 270 271 272 273 274 280 281 282 283 284 285 291 292 293 294 295 296 302 303 304 305 306 307 313 314 315 316 317 318 324 325 326 327 328 329 335 336 337 338 339 340 346 347 348 349 350 351 357 358 359 360 361 362 368 369 370 371 372 373 379 380 381 382 383 384 390 391 392 393 394 395 401 402 403 404 405 406 412 413 414 415 416 417 423 424 425 426 427 428 434 435 436 437 438 439 445 446 447 448 449 450 456 457 458 459 460 461 467 468 469 470 471 472 478 479 480 481 482 483 489 490 491 492 493 494 500 501 502 503 504 505 511 512 513 514 515 516 522 523 524 525 526 527 533 534 535 536 537 538 544 545 546 547 548 549 555 556 557 558 559 560 566 567 568 569 570 571 577 578 579 580 581 582 588 589 590 591 592 593 599 600 601 602 603 604 610 611 612 613 614 615 621 622 623 624 625 626 632 633 634 635 636 637 643 644 645 646 647 648 654 655 656 657 658 659 665 666 667 668 669 670 676 677 678 679 680 681 687 688 689 690 691 692 698 699 700 701 702 703 709 710 711 712 713 714 720 721 722 723 724 725 731 732 733 734 735 736 742 743 744 745 746 747 753 754 755 756 757 758 764 765 766 767 768 769 775 776 777 778 779 780 786 787 788 789 790 791 797 798 799 800 801 802 808 809 810 811 812 813 819 820 821 822 823 824 830 831 832 833 834 835 841 842 843 844 845 846 852 853 854 855 856 857 863 864 865 866 867 868 874 875 876 877 878 879 885 886 887 888 889 890 896 897 898 899 900 901 907 908 909 910 911 912 918 919 920 921 922 923 929 930 931 932 933 934 940 941 942 943 944 945 951 952 953 954 955 956 962 963 964 965 966 967 973 974 975 976 977 978 984 985 986 987 988 989 995 996 997 998 999 1000 1006 1007 1008 1009 1010 1011 1017 1018 1019 1020 1021 1022 1028 1029 1030 1031 1032 1033 1039 1040 1041 1042 1043 1044 1050 1051 1052 1053 1054 1055 1061 1062 1063 1064 1065 1066 1072 1073 1074 1075 1076 1077 1083 1084 1085 1086 1087 1088 1094 1095 1096 1097 1098 1099 1105 1106 1107 1108 1109 1110 1116 1117 1118 1119 1120 1121 1127 1128 1129 1130 1131 1132 1138 1139 1140 1141 1142 1143 1149 1150 1151 1152 1153 1154 1160 1161 1162 1163 1164 1165 1171 1172 1173 1174 1175 1176 1182 1183 1184 1185 1186 1187 1193 1194 1195 1196 1197 1198 1204 1205 1206 1207 1208 1209 1215 1216 1217 1218 1219 1220 1226 1227 1228 1229 1230 1231 1237 1238 1239 1240 1241 1242 1248 1249 1250 1251 1252 1253 1259 1260 1261 1262 1263 1264 1270 1271 1272 1273 1274 1275 1281 1282 1283 1284 1285 1286 1292 1293 1294 1295 1296 1297 1303 1304 1305 1306 1307 1308 1314 1315 1316 1317 1318 1319 1325 1326 1327 1328 1329 1330 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8068910
+	nodeG2L[0-1331]:   1331 1331 1331 1331 1331 000 001 002 003 004 005 1331 1331 1331 1331 1331 006 007 008 009 010 011 1331 1331 1331 1331 1331 012 013 014 015 016 017 1331 1331 1331 1331 1331 018 019 020 021 022 023 1331 1331 1331 1331 1331 024 025 026 027 028 029 1331 1331 1331 1331 1331 030 031 032 033 034 035 1331 1331 1331 1331 1331 036 037 038 039 040 041 1331 1331 1331 1331 1331 042 043 044 045 046 047 1331 1331 1331 1331 1331 048 049 050 051 052 053 1331 1331 1331 1331 1331 054 055 056 057 058 059 1331 1331 1331 1331 1331 060 061 062 063 064 065 1331 1331 1331 1331 1331 066 067 068 069 070 071 1331 1331 1331 1331 1331 072 073 074 075 076 077 1331 1331 1331 1331 1331 078 079 080 081 082 083 1331 1331 1331 1331 1331 084 085 086 087 088 089 1331 1331 1331 1331 1331 090 091 092 093 094 095 1331 1331 1331 1331 1331 096 097 098 099 100 101 1331 1331 1331 1331 1331 102 103 104 105 106 107 1331 1331 1331 1331 1331 108 109 110 111 112 113 1331 1331 1331 1331 1331 114 115 116 117 118 119 1331 1331 1331 1331 1331 120 121 122 123 124 125 1331 1331 1331 1331 1331 126 127 128 129 130 131 1331 1331 1331 1331 1331 132 133 134 135 136 137 1331 1331 1331 1331 1331 138 139 140 141 142 143 1331 1331 1331 1331 1331 144 145 146 147 148 149 1331 1331 1331 1331 1331 150 151 152 153 154 155 1331 1331 1331 1331 1331 156 157 158 159 160 161 1331 1331 1331 1331 1331 162 163 164 165 166 167 1331 1331 1331 1331 1331 168 169 170 171 172 173 1331 1331 1331 1331 1331 174 175 176 177 178 179 1331 1331 1331 1331 1331 180 181 182 183 184 185 1331 1331 1331 1331 1331 186 187 188 189 190 191 1331 1331 1331 1331 1331 192 193 194 195 196 197 1331 1331 1331 1331 1331 198 199 200 201 202 203 1331 1331 1331 1331 1331 204 205 206 207 208 209 1331 1331 1331 1331 1331 210 211 212 213 214 215 1331 1331 1331 1331 1331 216 217 218 219 220 221 1331 1331 1331 1331 1331 222 223 224 225 226 227 1331 1331 1331 1331 1331 228 229 230 231 232 233 1331 1331 1331 1331 1331 234 235 236 237 238 239 1331 1331 1331 1331 1331 240 241 242 243 244 245 1331 1331 1331 1331 1331 246 247 248 249 250 251 1331 1331 1331 1331 1331 252 253 254 255 256 257 1331 1331 1331 1331 1331 258 259 260 261 262 263 1331 1331 1331 1331 1331 264 265 266 267 268 269 1331 1331 1331 1331 1331 270 271 272 273 274 275 1331 1331 1331 1331 1331 276 277 278 279 280 281 1331 1331 1331 1331 1331 282 283 284 285 286 287 1331 1331 1331 1331 1331 288 289 290 291 292 293 1331 1331 1331 1331 1331 294 295 296 297 298 299 1331 1331 1331 1331 1331 300 301 302 303 304 305 1331 1331 1331 1331 1331 306 307 308 309 310 311 1331 1331 1331 1331 1331 312 313 314 315 316 317 1331 1331 1331 1331 1331 318 319 320 321 322 323 1331 1331 1331 1331 1331 324 325 326 327 328 329 1331 1331 1331 1331 1331 330 331 332 333 334 335 1331 1331 1331 1331 1331 336 337 338 339 340 341 1331 1331 1331 1331 1331 342 343 344 345 346 347 1331 1331 1331 1331 1331 348 349 350 351 352 353 1331 1331 1331 1331 1331 354 355 356 357 358 359 1331 1331 1331 1331 1331 360 361 362 363 364 365 1331 1331 1331 1331 1331 366 367 368 369 370 371 1331 1331 1331 1331 1331 372 373 374 375 376 377 1331 1331 1331 1331 1331 378 379 380 381 382 383 1331 1331 1331 1331 1331 384 385 386 387 388 389 1331 1331 1331 1331 1331 390 391 392 393 394 395 1331 1331 1331 1331 1331 396 397 398 399 400 401 1331 1331 1331 1331 1331 402 403 404 405 406 407 1331 1331 1331 1331 1331 408 409 410 411 412 413 1331 1331 1331 1331 1331 414 415 416 417 418 419 1331 1331 1331 1331 1331 420 421 422 423 424 425 1331 1331 1331 1331 1331 426 427 428 429 430 431 1331 1331 1331 1331 1331 432 433 434 435 436 437 1331 1331 1331 1331 1331 438 439 440 441 442 443 1331 1331 1331 1331 1331 444 445 446 447 448 449 1331 1331 1331 1331 1331 450 451 452 453 454 455 1331 1331 1331 1331 1331 456 457 458 459 460 461 1331 1331 1331 1331 1331 462 463 464 465 466 467 1331 1331 1331 1331 1331 468 469 470 471 472 473 1331 1331 1331 1331 1331 474 475 476 477 478 479 1331 1331 1331 1331 1331 480 481 482 483 484 485 1331 1331 1331 1331 1331 486 487 488 489 490 491 1331 1331 1331 1331 1331 492 493 494 495 496 497 1331 1331 1331 1331 1331 498 499 500 501 502 503 1331 1331 1331 1331 1331 504 505 506 507 508 509 1331 1331 1331 1331 1331 510 511 512 513 514 515 1331 1331 1331 1331 1331 516 517 518 519 520 521 1331 1331 1331 1331 1331 522 523 524 525 526 527 1331 1331 1331 1331 1331 528 529 530 531 532 533 1331 1331 1331 1331 1331 534 535 536 537 538 539 1331 1331 1331 1331 1331 540 541 542 543 544 545 1331 1331 1331 1331 1331 546 547 548 549 550 551 1331 1331 1331 1331 1331 552 553 554 555 556 557 1331 1331 1331 1331 1331 558 559 560 561 562 563 1331 1331 1331 1331 1331 564 565 566 567 568 569 1331 1331 1331 1331 1331 570 571 572 573 574 575 1331 1331 1331 1331 1331 576 577 578 579 580 581 1331 1331 1331 1331 1331 582 583 584 585 586 587 1331 1331 1331 1331 1331 588 589 590 591 592 593 1331 1331 1331 1331 1331 594 595 596 597 598 599 1331 1331 1331 1331 1331 600 601 602 603 604 605 1331 1331 1331 1331 1331 606 607 608 609 610 611 1331 1331 1331 1331 1331 612 613 614 615 616 617 1331 1331 1331 1331 1331 618 619 620 621 622 623 1331 1331 1331 1331 1331 624 625 626 627 628 629 1331 1331 1331 1331 1331 630 631 632 633 634 635 1331 1331 1331 1331 1331 636 637 638 639 640 641 1331 1331 1331 1331 1331 642 643 644 645 646 647 1331 1331 1331 1331 1331 648 649 650 651 652 653 1331 1331 1331 1331 1331 654 655 656 657 658 659 1331 1331 1331 1331 1331 660 661 662 663 664 665 1331 1331 1331 1331 1331 666 667 668 669 670 671 1331 1331 1331 1331 1331 672 673 674 675 676 677 1331 1331 1331 1331 1331 678 679 680 681 682 683 1331 1331 1331 1331 1331 684 685 686 687 688 689 1331 1331 1331 1331 1331 690 691 692 693 694 695 1331 1331 1331 1331 1331 696 697 698 699 700 701 1331 1331 1331 1331 1331 702 703 704 705 706 707 1331 1331 1331 1331 1331 708 709 710 711 712 713 1331 1331 1331 1331 1331 714 715 716 717 718 719 1331 1331 1331 1331 1331 720 721 722 723 724 725 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8068910
+	nodeG2D[0-1331]:   1331 1331 1331 1331 1331 000 001 002 003 004 005 1331 1331 1331 1331 1331 006 007 008 009 010 011 1331 1331 1331 1331 1331 012 013 014 015 016 017 1331 1331 1331 1331 1331 018 019 020 021 022 023 1331 1331 1331 1331 1331 024 025 026 027 028 029 1331 1331 1331 1331 1331 030 031 032 033 034 035 1331 1331 1331 1331 1331 036 037 038 039 040 041 1331 1331 1331 1331 1331 042 043 044 045 046 047 1331 1331 1331 1331 1331 048 049 050 051 052 053 1331 1331 1331 1331 1331 054 055 056 057 058 059 1331 1331 1331 1331 1331 060 061 062 063 064 065 1331 1331 1331 1331 1331 066 067 068 069 070 071 1331 1331 1331 1331 1331 072 073 074 075 076 077 1331 1331 1331 1331 1331 078 079 080 081 082 083 1331 1331 1331 1331 1331 084 085 086 087 088 089 1331 1331 1331 1331 1331 090 091 092 093 094 095 1331 1331 1331 1331 1331 096 097 098 099 100 101 1331 1331 1331 1331 1331 102 103 104 105 106 107 1331 1331 1331 1331 1331 108 109 110 111 112 113 1331 1331 1331 1331 1331 114 115 116 117 118 119 1331 1331 1331 1331 1331 120 121 122 123 124 125 1331 1331 1331 1331 1331 126 127 128 129 130 131 1331 1331 1331 1331 1331 132 133 134 135 136 137 1331 1331 1331 1331 1331 138 139 140 141 142 143 1331 1331 1331 1331 1331 144 145 146 147 148 149 1331 1331 1331 1331 1331 150 151 152 153 154 155 1331 1331 1331 1331 1331 156 157 158 159 160 161 1331 1331 1331 1331 1331 162 163 164 165 166 167 1331 1331 1331 1331 1331 168 169 170 171 172 173 1331 1331 1331 1331 1331 174 175 176 177 178 179 1331 1331 1331 1331 1331 180 181 182 183 184 185 1331 1331 1331 1331 1331 186 187 188 189 190 191 1331 1331 1331 1331 1331 192 193 194 195 196 197 1331 1331 1331 1331 1331 198 199 200 201 202 203 1331 1331 1331 1331 1331 204 205 206 207 208 209 1331 1331 1331 1331 1331 210 211 212 213 214 215 1331 1331 1331 1331 1331 216 217 218 219 220 221 1331 1331 1331 1331 1331 222 223 224 225 226 227 1331 1331 1331 1331 1331 228 229 230 231 232 233 1331 1331 1331 1331 1331 234 235 236 237 238 239 1331 1331 1331 1331 1331 240 241 242 243 244 245 1331 1331 1331 1331 1331 246 247 248 249 250 251 1331 1331 1331 1331 1331 252 253 254 255 256 257 1331 1331 1331 1331 1331 258 259 260 261 262 263 1331 1331 1331 1331 1331 264 265 266 267 268 269 1331 1331 1331 1331 1331 270 271 272 273 274 275 1331 1331 1331 1331 1331 276 277 278 279 280 281 1331 1331 1331 1331 1331 282 283 284 285 286 287 1331 1331 1331 1331 1331 288 289 290 291 292 293 1331 1331 1331 1331 1331 294 295 296 297 298 299 1331 1331 1331 1331 1331 300 301 302 303 304 305 1331 1331 1331 1331 1331 306 307 308 309 310 311 1331 1331 1331 1331 1331 312 313 314 315 316 317 1331 1331 1331 1331 1331 318 319 320 321 322 323 1331 1331 1331 1331 1331 324 325 326 327 328 329 1331 1331 1331 1331 1331 330 331 332 333 334 335 1331 1331 1331 1331 1331 336 337 338 339 340 341 1331 1331 1331 1331 1331 342 343 344 345 346 347 1331 1331 1331 1331 1331 348 349 350 351 352 353 1331 1331 1331 1331 1331 354 355 356 357 358 359 1331 1331 1331 1331 1331 360 361 362 363 364 365 1331 1331 1331 1331 1331 366 367 368 369 370 371 1331 1331 1331 1331 1331 372 373 374 375 376 377 1331 1331 1331 1331 1331 378 379 380 381 382 383 1331 1331 1331 1331 1331 384 385 386 387 388 389 1331 1331 1331 1331 1331 390 391 392 393 394 395 1331 1331 1331 1331 1331 396 397 398 399 400 401 1331 1331 1331 1331 1331 402 403 404 405 406 407 1331 1331 1331 1331 1331 408 409 410 411 412 413 1331 1331 1331 1331 1331 414 415 416 417 418 419 1331 1331 1331 1331 1331 420 421 422 423 424 425 1331 1331 1331 1331 1331 426 427 428 429 430 431 1331 1331 1331 1331 1331 432 433 434 435 436 437 1331 1331 1331 1331 1331 438 439 440 441 442 443 1331 1331 1331 1331 1331 444 445 446 447 448 449 1331 1331 1331 1331 1331 450 451 452 453 454 455 1331 1331 1331 1331 1331 456 457 458 459 460 461 1331 1331 1331 1331 1331 462 463 464 465 466 467 1331 1331 1331 1331 1331 468 469 470 471 472 473 1331 1331 1331 1331 1331 474 475 476 477 478 479 1331 1331 1331 1331 1331 480 481 482 483 484 485 1331 1331 1331 1331 1331 486 487 488 489 490 491 1331 1331 1331 1331 1331 492 493 494 495 496 497 1331 1331 1331 1331 1331 498 499 500 501 502 503 1331 1331 1331 1331 1331 504 505 506 507 508 509 1331 1331 1331 1331 1331 510 511 512 513 514 515 1331 1331 1331 1331 1331 516 517 518 519 520 521 1331 1331 1331 1331 1331 522 523 524 525 526 527 1331 1331 1331 1331 1331 528 529 530 531 532 533 1331 1331 1331 1331 1331 534 535 536 537 538 539 1331 1331 1331 1331 1331 540 541 542 543 544 545 1331 1331 1331 1331 1331 546 547 548 549 550 551 1331 1331 1331 1331 1331 552 553 554 555 556 557 1331 1331 1331 1331 1331 558 559 560 561 562 563 1331 1331 1331 1331 1331 564 565 566 567 568 569 1331 1331 1331 1331 1331 570 571 572 573 574 575 1331 1331 1331 1331 1331 576 577 578 579 580 581 1331 1331 1331 1331 1331 582 583 584 585 586 587 1331 1331 1331 1331 1331 588 589 590 591 592 593 1331 1331 1331 1331 1331 594 595 596 597 598 599 1331 1331 1331 1331 1331 600 601 602 603 604 605 1331 1331 1331 1331 1331 606 607 608 609 610 611 1331 1331 1331 1331 1331 612 613 614 615 616 617 1331 1331 1331 1331 1331 618 619 620 621 622 623 1331 1331 1331 1331 1331 624 625 626 627 628 629 1331 1331 1331 1331 1331 630 631 632 633 634 635 1331 1331 1331 1331 1331 636 637 638 639 640 641 1331 1331 1331 1331 1331 642 643 644 645 646 647 1331 1331 1331 1331 1331 648 649 650 651 652 653 1331 1331 1331 1331 1331 654 655 656 657 658 659 1331 1331 1331 1331 1331 660 661 662 663 664 665 1331 1331 1331 1331 1331 666 667 668 669 670 671 1331 1331 1331 1331 1331 672 673 674 675 676 677 1331 1331 1331 1331 1331 678 679 680 681 682 683 1331 1331 1331 1331 1331 684 685 686 687 688 689 1331 1331 1331 1331 1331 690 691 692 693 694 695 1331 1331 1331 1331 1331 696 697 698 699 700 701 1331 1331 1331 1331 1331 702 703 704 705 706 707 1331 1331 1331 1331 1331 708 709 710 711 712 713 1331 1331 1331 1331 1331 714 715 716 717 718 719 1331 1331 1331 1331 1331 720 721 722 723 724 725 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8069de8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x806a950
+	nodeNeighbourTbl[0-726]:
+		nodeNeighbourTbl[0][0-6]: 001 006 066 1331 1331 1331 
+		nodeNeighbourTbl[1][0-6]: 002 007 067 000 1331 1331 
+		nodeNeighbourTbl[2][0-6]: 003 008 068 001 1331 1331 
+		nodeNeighbourTbl[3][0-6]: 004 009 069 002 1331 1331 
+		nodeNeighbourTbl[4][0-6]: 005 010 070 003 1331 1331 
+		nodeNeighbourTbl[5][0-6]: 1331 011 071 004 1331 1331 
+		nodeNeighbourTbl[6][0-6]: 007 012 072 1331 000 1331 
+		nodeNeighbourTbl[7][0-6]: 008 013 073 006 001 1331 
+		nodeNeighbourTbl[8][0-6]: 009 014 074 007 002 1331 
+		nodeNeighbourTbl[9][0-6]: 010 015 075 008 003 1331 
+		nodeNeighbourTbl[10][0-6]: 011 016 076 009 004 1331 
+		nodeNeighbourTbl[11][0-6]: 1331 017 077 010 005 1331 
+		nodeNeighbourTbl[12][0-6]: 013 018 078 1331 006 1331 
+		nodeNeighbourTbl[13][0-6]: 014 019 079 012 007 1331 
+		nodeNeighbourTbl[14][0-6]: 015 020 080 013 008 1331 
+		nodeNeighbourTbl[15][0-6]: 016 021 081 014 009 1331 
+		nodeNeighbourTbl[16][0-6]: 017 022 082 015 010 1331 
+		nodeNeighbourTbl[17][0-6]: 1331 023 083 016 011 1331 
+		nodeNeighbourTbl[18][0-6]: 019 024 084 1331 012 1331 
+		nodeNeighbourTbl[19][0-6]: 020 025 085 018 013 1331 
+		nodeNeighbourTbl[20][0-6]: 021 026 086 019 014 1331 
+		nodeNeighbourTbl[21][0-6]: 022 027 087 020 015 1331 
+		nodeNeighbourTbl[22][0-6]: 023 028 088 021 016 1331 
+		nodeNeighbourTbl[23][0-6]: 1331 029 089 022 017 1331 
+		nodeNeighbourTbl[24][0-6]: 025 030 090 1331 018 1331 
+		nodeNeighbourTbl[25][0-6]: 026 031 091 024 019 1331 
+		nodeNeighbourTbl[26][0-6]: 027 032 092 025 020 1331 
+		nodeNeighbourTbl[27][0-6]: 028 033 093 026 021 1331 
+		nodeNeighbourTbl[28][0-6]: 029 034 094 027 022 1331 
+		nodeNeighbourTbl[29][0-6]: 1331 035 095 028 023 1331 
+		nodeNeighbourTbl[30][0-6]: 031 036 096 1331 024 1331 
+		nodeNeighbourTbl[31][0-6]: 032 037 097 030 025 1331 
+		nodeNeighbourTbl[32][0-6]: 033 038 098 031 026 1331 
+		nodeNeighbourTbl[33][0-6]: 034 039 099 032 027 1331 
+		nodeNeighbourTbl[34][0-6]: 035 040 100 033 028 1331 
+		nodeNeighbourTbl[35][0-6]: 1331 041 101 034 029 1331 
+		nodeNeighbourTbl[36][0-6]: 037 042 102 1331 030 1331 
+		nodeNeighbourTbl[37][0-6]: 038 043 103 036 031 1331 
+		nodeNeighbourTbl[38][0-6]: 039 044 104 037 032 1331 
+		nodeNeighbourTbl[39][0-6]: 040 045 105 038 033 1331 
+		nodeNeighbourTbl[40][0-6]: 041 046 106 039 034 1331 
+		nodeNeighbourTbl[41][0-6]: 1331 047 107 040 035 1331 
+		nodeNeighbourTbl[42][0-6]: 043 048 108 1331 036 1331 
+		nodeNeighbourTbl[43][0-6]: 044 049 109 042 037 1331 
+		nodeNeighbourTbl[44][0-6]: 045 050 110 043 038 1331 
+		nodeNeighbourTbl[45][0-6]: 046 051 111 044 039 1331 
+		nodeNeighbourTbl[46][0-6]: 047 052 112 045 040 1331 
+		nodeNeighbourTbl[47][0-6]: 1331 053 113 046 041 1331 
+		nodeNeighbourTbl[48][0-6]: 049 054 114 1331 042 1331 
+		nodeNeighbourTbl[49][0-6]: 050 055 115 048 043 1331 
+		nodeNeighbourTbl[50][0-6]: 051 056 116 049 044 1331 
+		nodeNeighbourTbl[51][0-6]: 052 057 117 050 045 1331 
+		nodeNeighbourTbl[52][0-6]: 053 058 118 051 046 1331 
+		nodeNeighbourTbl[53][0-6]: 1331 059 119 052 047 1331 
+		nodeNeighbourTbl[54][0-6]: 055 060 120 1331 048 1331 
+		nodeNeighbourTbl[55][0-6]: 056 061 121 054 049 1331 
+		nodeNeighbourTbl[56][0-6]: 057 062 122 055 050 1331 
+		nodeNeighbourTbl[57][0-6]: 058 063 123 056 051 1331 
+		nodeNeighbourTbl[58][0-6]: 059 064 124 057 052 1331 
+		nodeNeighbourTbl[59][0-6]: 1331 065 125 058 053 1331 
+		nodeNeighbourTbl[60][0-6]: 061 1331 126 1331 054 1331 
+		nodeNeighbourTbl[61][0-6]: 062 1331 127 060 055 1331 
+		nodeNeighbourTbl[62][0-6]: 063 1331 128 061 056 1331 
+		nodeNeighbourTbl[63][0-6]: 064 1331 129 062 057 1331 
+		nodeNeighbourTbl[64][0-6]: 065 1331 130 063 058 1331 
+		nodeNeighbourTbl[65][0-6]: 1331 1331 131 064 059 1331 
+		nodeNeighbourTbl[66][0-6]: 067 072 132 1331 1331 000 
+		nodeNeighbourTbl[67][0-6]: 068 073 133 066 1331 001 
+		nodeNeighbourTbl[68][0-6]: 069 074 134 067 1331 002 
+		nodeNeighbourTbl[69][0-6]: 070 075 135 068 1331 003 
+		nodeNeighbourTbl[70][0-6]: 071 076 136 069 1331 004 
+		nodeNeighbourTbl[71][0-6]: 1331 077 137 070 1331 005 
+		nodeNeighbourTbl[72][0-6]: 073 078 138 1331 066 006 
+		nodeNeighbourTbl[73][0-6]: 074 079 139 072 067 007 
+		nodeNeighbourTbl[74][0-6]: 075 080 140 073 068 008 
+		nodeNeighbourTbl[75][0-6]: 076 081 141 074 069 009 
+		nodeNeighbourTbl[76][0-6]: 077 082 142 075 070 010 
+		nodeNeighbourTbl[77][0-6]: 1331 083 143 076 071 011 
+		nodeNeighbourTbl[78][0-6]: 079 084 144 1331 072 012 
+		nodeNeighbourTbl[79][0-6]: 080 085 145 078 073 013 
+		nodeNeighbourTbl[80][0-6]: 081 086 146 079 074 014 
+		nodeNeighbourTbl[81][0-6]: 082 087 147 080 075 015 
+		nodeNeighbourTbl[82][0-6]: 083 088 148 081 076 016 
+		nodeNeighbourTbl[83][0-6]: 1331 089 149 082 077 017 
+		nodeNeighbourTbl[84][0-6]: 085 090 150 1331 078 018 
+		nodeNeighbourTbl[85][0-6]: 086 091 151 084 079 019 
+		nodeNeighbourTbl[86][0-6]: 087 092 152 085 080 020 
+		nodeNeighbourTbl[87][0-6]: 088 093 153 086 081 021 
+		nodeNeighbourTbl[88][0-6]: 089 094 154 087 082 022 
+		nodeNeighbourTbl[89][0-6]: 1331 095 155 088 083 023 
+		nodeNeighbourTbl[90][0-6]: 091 096 156 1331 084 024 
+		nodeNeighbourTbl[91][0-6]: 092 097 157 090 085 025 
+		nodeNeighbourTbl[92][0-6]: 093 098 158 091 086 026 
+		nodeNeighbourTbl[93][0-6]: 094 099 159 092 087 027 
+		nodeNeighbourTbl[94][0-6]: 095 100 160 093 088 028 
+		nodeNeighbourTbl[95][0-6]: 1331 101 161 094 089 029 
+		nodeNeighbourTbl[96][0-6]: 097 102 162 1331 090 030 
+		nodeNeighbourTbl[97][0-6]: 098 103 163 096 091 031 
+		nodeNeighbourTbl[98][0-6]: 099 104 164 097 092 032 
+		nodeNeighbourTbl[99][0-6]: 100 105 165 098 093 033 
+		nodeNeighbourTbl[100][0-6]: 101 106 166 099 094 034 
+		nodeNeighbourTbl[101][0-6]: 1331 107 167 100 095 035 
+		nodeNeighbourTbl[102][0-6]: 103 108 168 1331 096 036 
+		nodeNeighbourTbl[103][0-6]: 104 109 169 102 097 037 
+		nodeNeighbourTbl[104][0-6]: 105 110 170 103 098 038 
+		nodeNeighbourTbl[105][0-6]: 106 111 171 104 099 039 
+		nodeNeighbourTbl[106][0-6]: 107 112 172 105 100 040 
+		nodeNeighbourTbl[107][0-6]: 1331 113 173 106 101 041 
+		nodeNeighbourTbl[108][0-6]: 109 114 174 1331 102 042 
+		nodeNeighbourTbl[109][0-6]: 110 115 175 108 103 043 
+		nodeNeighbourTbl[110][0-6]: 111 116 176 109 104 044 
+		nodeNeighbourTbl[111][0-6]: 112 117 177 110 105 045 
+		nodeNeighbourTbl[112][0-6]: 113 118 178 111 106 046 
+		nodeNeighbourTbl[113][0-6]: 1331 119 179 112 107 047 
+		nodeNeighbourTbl[114][0-6]: 115 120 180 1331 108 048 
+		nodeNeighbourTbl[115][0-6]: 116 121 181 114 109 049 
+		nodeNeighbourTbl[116][0-6]: 117 122 182 115 110 050 
+		nodeNeighbourTbl[117][0-6]: 118 123 183 116 111 051 
+		nodeNeighbourTbl[118][0-6]: 119 124 184 117 112 052 
+		nodeNeighbourTbl[119][0-6]: 1331 125 185 118 113 053 
+		nodeNeighbourTbl[120][0-6]: 121 126 186 1331 114 054 
+		nodeNeighbourTbl[121][0-6]: 122 127 187 120 115 055 
+		nodeNeighbourTbl[122][0-6]: 123 128 188 121 116 056 
+		nodeNeighbourTbl[123][0-6]: 124 129 189 122 117 057 
+		nodeNeighbourTbl[124][0-6]: 125 130 190 123 118 058 
+		nodeNeighbourTbl[125][0-6]: 1331 131 191 124 119 059 
+		nodeNeighbourTbl[126][0-6]: 127 1331 192 1331 120 060 
+		nodeNeighbourTbl[127][0-6]: 128 1331 193 126 121 061 
+		nodeNeighbourTbl[128][0-6]: 129 1331 194 127 122 062 
+		nodeNeighbourTbl[129][0-6]: 130 1331 195 128 123 063 
+		nodeNeighbourTbl[130][0-6]: 131 1331 196 129 124 064 
+		nodeNeighbourTbl[131][0-6]: 1331 1331 197 130 125 065 
+		nodeNeighbourTbl[132][0-6]: 133 138 198 1331 1331 066 
+		nodeNeighbourTbl[133][0-6]: 134 139 199 132 1331 067 
+		nodeNeighbourTbl[134][0-6]: 135 140 200 133 1331 068 
+		nodeNeighbourTbl[135][0-6]: 136 141 201 134 1331 069 
+		nodeNeighbourTbl[136][0-6]: 137 142 202 135 1331 070 
+		nodeNeighbourTbl[137][0-6]: 1331 143 203 136 1331 071 
+		nodeNeighbourTbl[138][0-6]: 139 144 204 1331 132 072 
+		nodeNeighbourTbl[139][0-6]: 140 145 205 138 133 073 
+		nodeNeighbourTbl[140][0-6]: 141 146 206 139 134 074 
+		nodeNeighbourTbl[141][0-6]: 142 147 207 140 135 075 
+		nodeNeighbourTbl[142][0-6]: 143 148 208 141 136 076 
+		nodeNeighbourTbl[143][0-6]: 1331 149 209 142 137 077 
+		nodeNeighbourTbl[144][0-6]: 145 150 210 1331 138 078 
+		nodeNeighbourTbl[145][0-6]: 146 151 211 144 139 079 
+		nodeNeighbourTbl[146][0-6]: 147 152 212 145 140 080 
+		nodeNeighbourTbl[147][0-6]: 148 153 213 146 141 081 
+		nodeNeighbourTbl[148][0-6]: 149 154 214 147 142 082 
+		nodeNeighbourTbl[149][0-6]: 1331 155 215 148 143 083 
+		nodeNeighbourTbl[150][0-6]: 151 156 216 1331 144 084 
+		nodeNeighbourTbl[151][0-6]: 152 157 217 150 145 085 
+		nodeNeighbourTbl[152][0-6]: 153 158 218 151 146 086 
+		nodeNeighbourTbl[153][0-6]: 154 159 219 152 147 087 
+		nodeNeighbourTbl[154][0-6]: 155 160 220 153 148 088 
+		nodeNeighbourTbl[155][0-6]: 1331 161 221 154 149 089 
+		nodeNeighbourTbl[156][0-6]: 157 162 222 1331 150 090 
+		nodeNeighbourTbl[157][0-6]: 158 163 223 156 151 091 
+		nodeNeighbourTbl[158][0-6]: 159 164 224 157 152 092 
+		nodeNeighbourTbl[159][0-6]: 160 165 225 158 153 093 
+		nodeNeighbourTbl[160][0-6]: 161 166 226 159 154 094 
+		nodeNeighbourTbl[161][0-6]: 1331 167 227 160 155 095 
+		nodeNeighbourTbl[162][0-6]: 163 168 228 1331 156 096 
+		nodeNeighbourTbl[163][0-6]: 164 169 229 162 157 097 
+		nodeNeighbourTbl[164][0-6]: 165 170 230 163 158 098 
+		nodeNeighbourTbl[165][0-6]: 166 171 231 164 159 099 
+		nodeNeighbourTbl[166][0-6]: 167 172 232 165 160 100 
+		nodeNeighbourTbl[167][0-6]: 1331 173 233 166 161 101 
+		nodeNeighbourTbl[168][0-6]: 169 174 234 1331 162 102 
+		nodeNeighbourTbl[169][0-6]: 170 175 235 168 163 103 
+		nodeNeighbourTbl[170][0-6]: 171 176 236 169 164 104 
+		nodeNeighbourTbl[171][0-6]: 172 177 237 170 165 105 
+		nodeNeighbourTbl[172][0-6]: 173 178 238 171 166 106 
+		nodeNeighbourTbl[173][0-6]: 1331 179 239 172 167 107 
+		nodeNeighbourTbl[174][0-6]: 175 180 240 1331 168 108 
+		nodeNeighbourTbl[175][0-6]: 176 181 241 174 169 109 
+		nodeNeighbourTbl[176][0-6]: 177 182 242 175 170 110 
+		nodeNeighbourTbl[177][0-6]: 178 183 243 176 171 111 
+		nodeNeighbourTbl[178][0-6]: 179 184 244 177 172 112 
+		nodeNeighbourTbl[179][0-6]: 1331 185 245 178 173 113 
+		nodeNeighbourTbl[180][0-6]: 181 186 246 1331 174 114 
+		nodeNeighbourTbl[181][0-6]: 182 187 247 180 175 115 
+		nodeNeighbourTbl[182][0-6]: 183 188 248 181 176 116 
+		nodeNeighbourTbl[183][0-6]: 184 189 249 182 177 117 
+		nodeNeighbourTbl[184][0-6]: 185 190 250 183 178 118 
+		nodeNeighbourTbl[185][0-6]: 1331 191 251 184 179 119 
+		nodeNeighbourTbl[186][0-6]: 187 192 252 1331 180 120 
+		nodeNeighbourTbl[187][0-6]: 188 193 253 186 181 121 
+		nodeNeighbourTbl[188][0-6]: 189 194 254 187 182 122 
+		nodeNeighbourTbl[189][0-6]: 190 195 255 188 183 123 
+		nodeNeighbourTbl[190][0-6]: 191 196 256 189 184 124 
+		nodeNeighbourTbl[191][0-6]: 1331 197 257 190 185 125 
+		nodeNeighbourTbl[192][0-6]: 193 1331 258 1331 186 126 
+		nodeNeighbourTbl[193][0-6]: 194 1331 259 192 187 127 
+		nodeNeighbourTbl[194][0-6]: 195 1331 260 193 188 128 
+		nodeNeighbourTbl[195][0-6]: 196 1331 261 194 189 129 
+		nodeNeighbourTbl[196][0-6]: 197 1331 262 195 190 130 
+		nodeNeighbourTbl[197][0-6]: 1331 1331 263 196 191 131 
+		nodeNeighbourTbl[198][0-6]: 199 204 264 1331 1331 132 
+		nodeNeighbourTbl[199][0-6]: 200 205 265 198 1331 133 
+		nodeNeighbourTbl[200][0-6]: 201 206 266 199 1331 134 
+		nodeNeighbourTbl[201][0-6]: 202 207 267 200 1331 135 
+		nodeNeighbourTbl[202][0-6]: 203 208 268 201 1331 136 
+		nodeNeighbourTbl[203][0-6]: 1331 209 269 202 1331 137 
+		nodeNeighbourTbl[204][0-6]: 205 210 270 1331 198 138 
+		nodeNeighbourTbl[205][0-6]: 206 211 271 204 199 139 
+		nodeNeighbourTbl[206][0-6]: 207 212 272 205 200 140 
+		nodeNeighbourTbl[207][0-6]: 208 213 273 206 201 141 
+		nodeNeighbourTbl[208][0-6]: 209 214 274 207 202 142 
+		nodeNeighbourTbl[209][0-6]: 1331 215 275 208 203 143 
+		nodeNeighbourTbl[210][0-6]: 211 216 276 1331 204 144 
+		nodeNeighbourTbl[211][0-6]: 212 217 277 210 205 145 
+		nodeNeighbourTbl[212][0-6]: 213 218 278 211 206 146 
+		nodeNeighbourTbl[213][0-6]: 214 219 279 212 207 147 
+		nodeNeighbourTbl[214][0-6]: 215 220 280 213 208 148 
+		nodeNeighbourTbl[215][0-6]: 1331 221 281 214 209 149 
+		nodeNeighbourTbl[216][0-6]: 217 222 282 1331 210 150 
+		nodeNeighbourTbl[217][0-6]: 218 223 283 216 211 151 
+		nodeNeighbourTbl[218][0-6]: 219 224 284 217 212 152 
+		nodeNeighbourTbl[219][0-6]: 220 225 285 218 213 153 
+		nodeNeighbourTbl[220][0-6]: 221 226 286 219 214 154 
+		nodeNeighbourTbl[221][0-6]: 1331 227 287 220 215 155 
+		nodeNeighbourTbl[222][0-6]: 223 228 288 1331 216 156 
+		nodeNeighbourTbl[223][0-6]: 224 229 289 222 217 157 
+		nodeNeighbourTbl[224][0-6]: 225 230 290 223 218 158 
+		nodeNeighbourTbl[225][0-6]: 226 231 291 224 219 159 
+		nodeNeighbourTbl[226][0-6]: 227 232 292 225 220 160 
+		nodeNeighbourTbl[227][0-6]: 1331 233 293 226 221 161 
+		nodeNeighbourTbl[228][0-6]: 229 234 294 1331 222 162 
+		nodeNeighbourTbl[229][0-6]: 230 235 295 228 223 163 
+		nodeNeighbourTbl[230][0-6]: 231 236 296 229 224 164 
+		nodeNeighbourTbl[231][0-6]: 232 237 297 230 225 165 
+		nodeNeighbourTbl[232][0-6]: 233 238 298 231 226 166 
+		nodeNeighbourTbl[233][0-6]: 1331 239 299 232 227 167 
+		nodeNeighbourTbl[234][0-6]: 235 240 300 1331 228 168 
+		nodeNeighbourTbl[235][0-6]: 236 241 301 234 229 169 
+		nodeNeighbourTbl[236][0-6]: 237 242 302 235 230 170 
+		nodeNeighbourTbl[237][0-6]: 238 243 303 236 231 171 
+		nodeNeighbourTbl[238][0-6]: 239 244 304 237 232 172 
+		nodeNeighbourTbl[239][0-6]: 1331 245 305 238 233 173 
+		nodeNeighbourTbl[240][0-6]: 241 246 306 1331 234 174 
+		nodeNeighbourTbl[241][0-6]: 242 247 307 240 235 175 
+		nodeNeighbourTbl[242][0-6]: 243 248 308 241 236 176 
+		nodeNeighbourTbl[243][0-6]: 244 249 309 242 237 177 
+		nodeNeighbourTbl[244][0-6]: 245 250 310 243 238 178 
+		nodeNeighbourTbl[245][0-6]: 1331 251 311 244 239 179 
+		nodeNeighbourTbl[246][0-6]: 247 252 312 1331 240 180 
+		nodeNeighbourTbl[247][0-6]: 248 253 313 246 241 181 
+		nodeNeighbourTbl[248][0-6]: 249 254 314 247 242 182 
+		nodeNeighbourTbl[249][0-6]: 250 255 315 248 243 183 
+		nodeNeighbourTbl[250][0-6]: 251 256 316 249 244 184 
+		nodeNeighbourTbl[251][0-6]: 1331 257 317 250 245 185 
+		nodeNeighbourTbl[252][0-6]: 253 258 318 1331 246 186 
+		nodeNeighbourTbl[253][0-6]: 254 259 319 252 247 187 
+		nodeNeighbourTbl[254][0-6]: 255 260 320 253 248 188 
+		nodeNeighbourTbl[255][0-6]: 256 261 321 254 249 189 
+		nodeNeighbourTbl[256][0-6]: 257 262 322 255 250 190 
+		nodeNeighbourTbl[257][0-6]: 1331 263 323 256 251 191 
+		nodeNeighbourTbl[258][0-6]: 259 1331 324 1331 252 192 
+		nodeNeighbourTbl[259][0-6]: 260 1331 325 258 253 193 
+		nodeNeighbourTbl[260][0-6]: 261 1331 326 259 254 194 
+		nodeNeighbourTbl[261][0-6]: 262 1331 327 260 255 195 
+		nodeNeighbourTbl[262][0-6]: 263 1331 328 261 256 196 
+		nodeNeighbourTbl[263][0-6]: 1331 1331 329 262 257 197 
+		nodeNeighbourTbl[264][0-6]: 265 270 330 1331 1331 198 
+		nodeNeighbourTbl[265][0-6]: 266 271 331 264 1331 199 
+		nodeNeighbourTbl[266][0-6]: 267 272 332 265 1331 200 
+		nodeNeighbourTbl[267][0-6]: 268 273 333 266 1331 201 
+		nodeNeighbourTbl[268][0-6]: 269 274 334 267 1331 202 
+		nodeNeighbourTbl[269][0-6]: 1331 275 335 268 1331 203 
+		nodeNeighbourTbl[270][0-6]: 271 276 336 1331 264 204 
+		nodeNeighbourTbl[271][0-6]: 272 277 337 270 265 205 
+		nodeNeighbourTbl[272][0-6]: 273 278 338 271 266 206 
+		nodeNeighbourTbl[273][0-6]: 274 279 339 272 267 207 
+		nodeNeighbourTbl[274][0-6]: 275 280 340 273 268 208 
+		nodeNeighbourTbl[275][0-6]: 1331 281 341 274 269 209 
+		nodeNeighbourTbl[276][0-6]: 277 282 342 1331 270 210 
+		nodeNeighbourTbl[277][0-6]: 278 283 343 276 271 211 
+		nodeNeighbourTbl[278][0-6]: 279 284 344 277 272 212 
+		nodeNeighbourTbl[279][0-6]: 280 285 345 278 273 213 
+		nodeNeighbourTbl[280][0-6]: 281 286 346 279 274 214 
+		nodeNeighbourTbl[281][0-6]: 1331 287 347 280 275 215 
+		nodeNeighbourTbl[282][0-6]: 283 288 348 1331 276 216 
+		nodeNeighbourTbl[283][0-6]: 284 289 349 282 277 217 
+		nodeNeighbourTbl[284][0-6]: 285 290 350 283 278 218 
+		nodeNeighbourTbl[285][0-6]: 286 291 351 284 279 219 
+		nodeNeighbourTbl[286][0-6]: 287 292 352 285 280 220 
+		nodeNeighbourTbl[287][0-6]: 1331 293 353 286 281 221 
+		nodeNeighbourTbl[288][0-6]: 289 294 354 1331 282 222 
+		nodeNeighbourTbl[289][0-6]: 290 295 355 288 283 223 
+		nodeNeighbourTbl[290][0-6]: 291 296 356 289 284 224 
+		nodeNeighbourTbl[291][0-6]: 292 297 357 290 285 225 
+		nodeNeighbourTbl[292][0-6]: 293 298 358 291 286 226 
+		nodeNeighbourTbl[293][0-6]: 1331 299 359 292 287 227 
+		nodeNeighbourTbl[294][0-6]: 295 300 360 1331 288 228 
+		nodeNeighbourTbl[295][0-6]: 296 301 361 294 289 229 
+		nodeNeighbourTbl[296][0-6]: 297 302 362 295 290 230 
+		nodeNeighbourTbl[297][0-6]: 298 303 363 296 291 231 
+		nodeNeighbourTbl[298][0-6]: 299 304 364 297 292 232 
+		nodeNeighbourTbl[299][0-6]: 1331 305 365 298 293 233 
+		nodeNeighbourTbl[300][0-6]: 301 306 366 1331 294 234 
+		nodeNeighbourTbl[301][0-6]: 302 307 367 300 295 235 
+		nodeNeighbourTbl[302][0-6]: 303 308 368 301 296 236 
+		nodeNeighbourTbl[303][0-6]: 304 309 369 302 297 237 
+		nodeNeighbourTbl[304][0-6]: 305 310 370 303 298 238 
+		nodeNeighbourTbl[305][0-6]: 1331 311 371 304 299 239 
+		nodeNeighbourTbl[306][0-6]: 307 312 372 1331 300 240 
+		nodeNeighbourTbl[307][0-6]: 308 313 373 306 301 241 
+		nodeNeighbourTbl[308][0-6]: 309 314 374 307 302 242 
+		nodeNeighbourTbl[309][0-6]: 310 315 375 308 303 243 
+		nodeNeighbourTbl[310][0-6]: 311 316 376 309 304 244 
+		nodeNeighbourTbl[311][0-6]: 1331 317 377 310 305 245 
+		nodeNeighbourTbl[312][0-6]: 313 318 378 1331 306 246 
+		nodeNeighbourTbl[313][0-6]: 314 319 379 312 307 247 
+		nodeNeighbourTbl[314][0-6]: 315 320 380 313 308 248 
+		nodeNeighbourTbl[315][0-6]: 316 321 381 314 309 249 
+		nodeNeighbourTbl[316][0-6]: 317 322 382 315 310 250 
+		nodeNeighbourTbl[317][0-6]: 1331 323 383 316 311 251 
+		nodeNeighbourTbl[318][0-6]: 319 324 384 1331 312 252 
+		nodeNeighbourTbl[319][0-6]: 320 325 385 318 313 253 
+		nodeNeighbourTbl[320][0-6]: 321 326 386 319 314 254 
+		nodeNeighbourTbl[321][0-6]: 322 327 387 320 315 255 
+		nodeNeighbourTbl[322][0-6]: 323 328 388 321 316 256 
+		nodeNeighbourTbl[323][0-6]: 1331 329 389 322 317 257 
+		nodeNeighbourTbl[324][0-6]: 325 1331 390 1331 318 258 
+		nodeNeighbourTbl[325][0-6]: 326 1331 391 324 319 259 
+		nodeNeighbourTbl[326][0-6]: 327 1331 392 325 320 260 
+		nodeNeighbourTbl[327][0-6]: 328 1331 393 326 321 261 
+		nodeNeighbourTbl[328][0-6]: 329 1331 394 327 322 262 
+		nodeNeighbourTbl[329][0-6]: 1331 1331 395 328 323 263 
+		nodeNeighbourTbl[330][0-6]: 331 336 396 1331 1331 264 
+		nodeNeighbourTbl[331][0-6]: 332 337 397 330 1331 265 
+		nodeNeighbourTbl[332][0-6]: 333 338 398 331 1331 266 
+		nodeNeighbourTbl[333][0-6]: 334 339 399 332 1331 267 
+		nodeNeighbourTbl[334][0-6]: 335 340 400 333 1331 268 
+		nodeNeighbourTbl[335][0-6]: 1331 341 401 334 1331 269 
+		nodeNeighbourTbl[336][0-6]: 337 342 402 1331 330 270 
+		nodeNeighbourTbl[337][0-6]: 338 343 403 336 331 271 
+		nodeNeighbourTbl[338][0-6]: 339 344 404 337 332 272 
+		nodeNeighbourTbl[339][0-6]: 340 345 405 338 333 273 
+		nodeNeighbourTbl[340][0-6]: 341 346 406 339 334 274 
+		nodeNeighbourTbl[341][0-6]: 1331 347 407 340 335 275 
+		nodeNeighbourTbl[342][0-6]: 343 348 408 1331 336 276 
+		nodeNeighbourTbl[343][0-6]: 344 349 409 342 337 277 
+		nodeNeighbourTbl[344][0-6]: 345 350 410 343 338 278 
+		nodeNeighbourTbl[345][0-6]: 346 351 411 344 339 279 
+		nodeNeighbourTbl[346][0-6]: 347 352 412 345 340 280 
+		nodeNeighbourTbl[347][0-6]: 1331 353 413 346 341 281 
+		nodeNeighbourTbl[348][0-6]: 349 354 414 1331 342 282 
+		nodeNeighbourTbl[349][0-6]: 350 355 415 348 343 283 
+		nodeNeighbourTbl[350][0-6]: 351 356 416 349 344 284 
+		nodeNeighbourTbl[351][0-6]: 352 357 417 350 345 285 
+		nodeNeighbourTbl[352][0-6]: 353 358 418 351 346 286 
+		nodeNeighbourTbl[353][0-6]: 1331 359 419 352 347 287 
+		nodeNeighbourTbl[354][0-6]: 355 360 420 1331 348 288 
+		nodeNeighbourTbl[355][0-6]: 356 361 421 354 349 289 
+		nodeNeighbourTbl[356][0-6]: 357 362 422 355 350 290 
+		nodeNeighbourTbl[357][0-6]: 358 363 423 356 351 291 
+		nodeNeighbourTbl[358][0-6]: 359 364 424 357 352 292 
+		nodeNeighbourTbl[359][0-6]: 1331 365 425 358 353 293 
+		nodeNeighbourTbl[360][0-6]: 361 366 426 1331 354 294 
+		nodeNeighbourTbl[361][0-6]: 362 367 427 360 355 295 
+		nodeNeighbourTbl[362][0-6]: 363 368 428 361 356 296 
+		nodeNeighbourTbl[363][0-6]: 364 369 429 362 357 297 
+		nodeNeighbourTbl[364][0-6]: 365 370 430 363 358 298 
+		nodeNeighbourTbl[365][0-6]: 1331 371 431 364 359 299 
+		nodeNeighbourTbl[366][0-6]: 367 372 432 1331 360 300 
+		nodeNeighbourTbl[367][0-6]: 368 373 433 366 361 301 
+		nodeNeighbourTbl[368][0-6]: 369 374 434 367 362 302 
+		nodeNeighbourTbl[369][0-6]: 370 375 435 368 363 303 
+		nodeNeighbourTbl[370][0-6]: 371 376 436 369 364 304 
+		nodeNeighbourTbl[371][0-6]: 1331 377 437 370 365 305 
+		nodeNeighbourTbl[372][0-6]: 373 378 438 1331 366 306 
+		nodeNeighbourTbl[373][0-6]: 374 379 439 372 367 307 
+		nodeNeighbourTbl[374][0-6]: 375 380 440 373 368 308 
+		nodeNeighbourTbl[375][0-6]: 376 381 441 374 369 309 
+		nodeNeighbourTbl[376][0-6]: 377 382 442 375 370 310 
+		nodeNeighbourTbl[377][0-6]: 1331 383 443 376 371 311 
+		nodeNeighbourTbl[378][0-6]: 379 384 444 1331 372 312 
+		nodeNeighbourTbl[379][0-6]: 380 385 445 378 373 313 
+		nodeNeighbourTbl[380][0-6]: 381 386 446 379 374 314 
+		nodeNeighbourTbl[381][0-6]: 382 387 447 380 375 315 
+		nodeNeighbourTbl[382][0-6]: 383 388 448 381 376 316 
+		nodeNeighbourTbl[383][0-6]: 1331 389 449 382 377 317 
+		nodeNeighbourTbl[384][0-6]: 385 390 450 1331 378 318 
+		nodeNeighbourTbl[385][0-6]: 386 391 451 384 379 319 
+		nodeNeighbourTbl[386][0-6]: 387 392 452 385 380 320 
+		nodeNeighbourTbl[387][0-6]: 388 393 453 386 381 321 
+		nodeNeighbourTbl[388][0-6]: 389 394 454 387 382 322 
+		nodeNeighbourTbl[389][0-6]: 1331 395 455 388 383 323 
+		nodeNeighbourTbl[390][0-6]: 391 1331 456 1331 384 324 
+		nodeNeighbourTbl[391][0-6]: 392 1331 457 390 385 325 
+		nodeNeighbourTbl[392][0-6]: 393 1331 458 391 386 326 
+		nodeNeighbourTbl[393][0-6]: 394 1331 459 392 387 327 
+		nodeNeighbourTbl[394][0-6]: 395 1331 460 393 388 328 
+		nodeNeighbourTbl[395][0-6]: 1331 1331 461 394 389 329 
+		nodeNeighbourTbl[396][0-6]: 397 402 462 1331 1331 330 
+		nodeNeighbourTbl[397][0-6]: 398 403 463 396 1331 331 
+		nodeNeighbourTbl[398][0-6]: 399 404 464 397 1331 332 
+		nodeNeighbourTbl[399][0-6]: 400 405 465 398 1331 333 
+		nodeNeighbourTbl[400][0-6]: 401 406 466 399 1331 334 
+		nodeNeighbourTbl[401][0-6]: 1331 407 467 400 1331 335 
+		nodeNeighbourTbl[402][0-6]: 403 408 468 1331 396 336 
+		nodeNeighbourTbl[403][0-6]: 404 409 469 402 397 337 
+		nodeNeighbourTbl[404][0-6]: 405 410 470 403 398 338 
+		nodeNeighbourTbl[405][0-6]: 406 411 471 404 399 339 
+		nodeNeighbourTbl[406][0-6]: 407 412 472 405 400 340 
+		nodeNeighbourTbl[407][0-6]: 1331 413 473 406 401 341 
+		nodeNeighbourTbl[408][0-6]: 409 414 474 1331 402 342 
+		nodeNeighbourTbl[409][0-6]: 410 415 475 408 403 343 
+		nodeNeighbourTbl[410][0-6]: 411 416 476 409 404 344 
+		nodeNeighbourTbl[411][0-6]: 412 417 477 410 405 345 
+		nodeNeighbourTbl[412][0-6]: 413 418 478 411 406 346 
+		nodeNeighbourTbl[413][0-6]: 1331 419 479 412 407 347 
+		nodeNeighbourTbl[414][0-6]: 415 420 480 1331 408 348 
+		nodeNeighbourTbl[415][0-6]: 416 421 481 414 409 349 
+		nodeNeighbourTbl[416][0-6]: 417 422 482 415 410 350 
+		nodeNeighbourTbl[417][0-6]: 418 423 483 416 411 351 
+		nodeNeighbourTbl[418][0-6]: 419 424 484 417 412 352 
+		nodeNeighbourTbl[419][0-6]: 1331 425 485 418 413 353 
+		nodeNeighbourTbl[420][0-6]: 421 426 486 1331 414 354 
+		nodeNeighbourTbl[421][0-6]: 422 427 487 420 415 355 
+		nodeNeighbourTbl[422][0-6]: 423 428 488 421 416 356 
+		nodeNeighbourTbl[423][0-6]: 424 429 489 422 417 357 
+		nodeNeighbourTbl[424][0-6]: 425 430 490 423 418 358 
+		nodeNeighbourTbl[425][0-6]: 1331 431 491 424 419 359 
+		nodeNeighbourTbl[426][0-6]: 427 432 492 1331 420 360 
+		nodeNeighbourTbl[427][0-6]: 428 433 493 426 421 361 
+		nodeNeighbourTbl[428][0-6]: 429 434 494 427 422 362 
+		nodeNeighbourTbl[429][0-6]: 430 435 495 428 423 363 
+		nodeNeighbourTbl[430][0-6]: 431 436 496 429 424 364 
+		nodeNeighbourTbl[431][0-6]: 1331 437 497 430 425 365 
+		nodeNeighbourTbl[432][0-6]: 433 438 498 1331 426 366 
+		nodeNeighbourTbl[433][0-6]: 434 439 499 432 427 367 
+		nodeNeighbourTbl[434][0-6]: 435 440 500 433 428 368 
+		nodeNeighbourTbl[435][0-6]: 436 441 501 434 429 369 
+		nodeNeighbourTbl[436][0-6]: 437 442 502 435 430 370 
+		nodeNeighbourTbl[437][0-6]: 1331 443 503 436 431 371 
+		nodeNeighbourTbl[438][0-6]: 439 444 504 1331 432 372 
+		nodeNeighbourTbl[439][0-6]: 440 445 505 438 433 373 
+		nodeNeighbourTbl[440][0-6]: 441 446 506 439 434 374 
+		nodeNeighbourTbl[441][0-6]: 442 447 507 440 435 375 
+		nodeNeighbourTbl[442][0-6]: 443 448 508 441 436 376 
+		nodeNeighbourTbl[443][0-6]: 1331 449 509 442 437 377 
+		nodeNeighbourTbl[444][0-6]: 445 450 510 1331 438 378 
+		nodeNeighbourTbl[445][0-6]: 446 451 511 444 439 379 
+		nodeNeighbourTbl[446][0-6]: 447 452 512 445 440 380 
+		nodeNeighbourTbl[447][0-6]: 448 453 513 446 441 381 
+		nodeNeighbourTbl[448][0-6]: 449 454 514 447 442 382 
+		nodeNeighbourTbl[449][0-6]: 1331 455 515 448 443 383 
+		nodeNeighbourTbl[450][0-6]: 451 456 516 1331 444 384 
+		nodeNeighbourTbl[451][0-6]: 452 457 517 450 445 385 
+		nodeNeighbourTbl[452][0-6]: 453 458 518 451 446 386 
+		nodeNeighbourTbl[453][0-6]: 454 459 519 452 447 387 
+		nodeNeighbourTbl[454][0-6]: 455 460 520 453 448 388 
+		nodeNeighbourTbl[455][0-6]: 1331 461 521 454 449 389 
+		nodeNeighbourTbl[456][0-6]: 457 1331 522 1331 450 390 
+		nodeNeighbourTbl[457][0-6]: 458 1331 523 456 451 391 
+		nodeNeighbourTbl[458][0-6]: 459 1331 524 457 452 392 
+		nodeNeighbourTbl[459][0-6]: 460 1331 525 458 453 393 
+		nodeNeighbourTbl[460][0-6]: 461 1331 526 459 454 394 
+		nodeNeighbourTbl[461][0-6]: 1331 1331 527 460 455 395 
+		nodeNeighbourTbl[462][0-6]: 463 468 528 1331 1331 396 
+		nodeNeighbourTbl[463][0-6]: 464 469 529 462 1331 397 
+		nodeNeighbourTbl[464][0-6]: 465 470 530 463 1331 398 
+		nodeNeighbourTbl[465][0-6]: 466 471 531 464 1331 399 
+		nodeNeighbourTbl[466][0-6]: 467 472 532 465 1331 400 
+		nodeNeighbourTbl[467][0-6]: 1331 473 533 466 1331 401 
+		nodeNeighbourTbl[468][0-6]: 469 474 534 1331 462 402 
+		nodeNeighbourTbl[469][0-6]: 470 475 535 468 463 403 
+		nodeNeighbourTbl[470][0-6]: 471 476 536 469 464 404 
+		nodeNeighbourTbl[471][0-6]: 472 477 537 470 465 405 
+		nodeNeighbourTbl[472][0-6]: 473 478 538 471 466 406 
+		nodeNeighbourTbl[473][0-6]: 1331 479 539 472 467 407 
+		nodeNeighbourTbl[474][0-6]: 475 480 540 1331 468 408 
+		nodeNeighbourTbl[475][0-6]: 476 481 541 474 469 409 
+		nodeNeighbourTbl[476][0-6]: 477 482 542 475 470 410 
+		nodeNeighbourTbl[477][0-6]: 478 483 543 476 471 411 
+		nodeNeighbourTbl[478][0-6]: 479 484 544 477 472 412 
+		nodeNeighbourTbl[479][0-6]: 1331 485 545 478 473 413 
+		nodeNeighbourTbl[480][0-6]: 481 486 546 1331 474 414 
+		nodeNeighbourTbl[481][0-6]: 482 487 547 480 475 415 
+		nodeNeighbourTbl[482][0-6]: 483 488 548 481 476 416 
+		nodeNeighbourTbl[483][0-6]: 484 489 549 482 477 417 
+		nodeNeighbourTbl[484][0-6]: 485 490 550 483 478 418 
+		nodeNeighbourTbl[485][0-6]: 1331 491 551 484 479 419 
+		nodeNeighbourTbl[486][0-6]: 487 492 552 1331 480 420 
+		nodeNeighbourTbl[487][0-6]: 488 493 553 486 481 421 
+		nodeNeighbourTbl[488][0-6]: 489 494 554 487 482 422 
+		nodeNeighbourTbl[489][0-6]: 490 495 555 488 483 423 
+		nodeNeighbourTbl[490][0-6]: 491 496 556 489 484 424 
+		nodeNeighbourTbl[491][0-6]: 1331 497 557 490 485 425 
+		nodeNeighbourTbl[492][0-6]: 493 498 558 1331 486 426 
+		nodeNeighbourTbl[493][0-6]: 494 499 559 492 487 427 
+		nodeNeighbourTbl[494][0-6]: 495 500 560 493 488 428 
+		nodeNeighbourTbl[495][0-6]: 496 501 561 494 489 429 
+		nodeNeighbourTbl[496][0-6]: 497 502 562 495 490 430 
+		nodeNeighbourTbl[497][0-6]: 1331 503 563 496 491 431 
+		nodeNeighbourTbl[498][0-6]: 499 504 564 1331 492 432 
+		nodeNeighbourTbl[499][0-6]: 500 505 565 498 493 433 
+		nodeNeighbourTbl[500][0-6]: 501 506 566 499 494 434 
+		nodeNeighbourTbl[501][0-6]: 502 507 567 500 495 435 
+		nodeNeighbourTbl[502][0-6]: 503 508 568 501 496 436 
+		nodeNeighbourTbl[503][0-6]: 1331 509 569 502 497 437 
+		nodeNeighbourTbl[504][0-6]: 505 510 570 1331 498 438 
+		nodeNeighbourTbl[505][0-6]: 506 511 571 504 499 439 
+		nodeNeighbourTbl[506][0-6]: 507 512 572 505 500 440 
+		nodeNeighbourTbl[507][0-6]: 508 513 573 506 501 441 
+		nodeNeighbourTbl[508][0-6]: 509 514 574 507 502 442 
+		nodeNeighbourTbl[509][0-6]: 1331 515 575 508 503 443 
+		nodeNeighbourTbl[510][0-6]: 511 516 576 1331 504 444 
+		nodeNeighbourTbl[511][0-6]: 512 517 577 510 505 445 
+		nodeNeighbourTbl[512][0-6]: 513 518 578 511 506 446 
+		nodeNeighbourTbl[513][0-6]: 514 519 579 512 507 447 
+		nodeNeighbourTbl[514][0-6]: 515 520 580 513 508 448 
+		nodeNeighbourTbl[515][0-6]: 1331 521 581 514 509 449 
+		nodeNeighbourTbl[516][0-6]: 517 522 582 1331 510 450 
+		nodeNeighbourTbl[517][0-6]: 518 523 583 516 511 451 
+		nodeNeighbourTbl[518][0-6]: 519 524 584 517 512 452 
+		nodeNeighbourTbl[519][0-6]: 520 525 585 518 513 453 
+		nodeNeighbourTbl[520][0-6]: 521 526 586 519 514 454 
+		nodeNeighbourTbl[521][0-6]: 1331 527 587 520 515 455 
+		nodeNeighbourTbl[522][0-6]: 523 1331 588 1331 516 456 
+		nodeNeighbourTbl[523][0-6]: 524 1331 589 522 517 457 
+		nodeNeighbourTbl[524][0-6]: 525 1331 590 523 518 458 
+		nodeNeighbourTbl[525][0-6]: 526 1331 591 524 519 459 
+		nodeNeighbourTbl[526][0-6]: 527 1331 592 525 520 460 
+		nodeNeighbourTbl[527][0-6]: 1331 1331 593 526 521 461 
+		nodeNeighbourTbl[528][0-6]: 529 534 594 1331 1331 462 
+		nodeNeighbourTbl[529][0-6]: 530 535 595 528 1331 463 
+		nodeNeighbourTbl[530][0-6]: 531 536 596 529 1331 464 
+		nodeNeighbourTbl[531][0-6]: 532 537 597 530 1331 465 
+		nodeNeighbourTbl[532][0-6]: 533 538 598 531 1331 466 
+		nodeNeighbourTbl[533][0-6]: 1331 539 599 532 1331 467 
+		nodeNeighbourTbl[534][0-6]: 535 540 600 1331 528 468 
+		nodeNeighbourTbl[535][0-6]: 536 541 601 534 529 469 
+		nodeNeighbourTbl[536][0-6]: 537 542 602 535 530 470 
+		nodeNeighbourTbl[537][0-6]: 538 543 603 536 531 471 
+		nodeNeighbourTbl[538][0-6]: 539 544 604 537 532 472 
+		nodeNeighbourTbl[539][0-6]: 1331 545 605 538 533 473 
+		nodeNeighbourTbl[540][0-6]: 541 546 606 1331 534 474 
+		nodeNeighbourTbl[541][0-6]: 542 547 607 540 535 475 
+		nodeNeighbourTbl[542][0-6]: 543 548 608 541 536 476 
+		nodeNeighbourTbl[543][0-6]: 544 549 609 542 537 477 
+		nodeNeighbourTbl[544][0-6]: 545 550 610 543 538 478 
+		nodeNeighbourTbl[545][0-6]: 1331 551 611 544 539 479 
+		nodeNeighbourTbl[546][0-6]: 547 552 612 1331 540 480 
+		nodeNeighbourTbl[547][0-6]: 548 553 613 546 541 481 
+		nodeNeighbourTbl[548][0-6]: 549 554 614 547 542 482 
+		nodeNeighbourTbl[549][0-6]: 550 555 615 548 543 483 
+		nodeNeighbourTbl[550][0-6]: 551 556 616 549 544 484 
+		nodeNeighbourTbl[551][0-6]: 1331 557 617 550 545 485 
+		nodeNeighbourTbl[552][0-6]: 553 558 618 1331 546 486 
+		nodeNeighbourTbl[553][0-6]: 554 559 619 552 547 487 
+		nodeNeighbourTbl[554][0-6]: 555 560 620 553 548 488 
+		nodeNeighbourTbl[555][0-6]: 556 561 621 554 549 489 
+		nodeNeighbourTbl[556][0-6]: 557 562 622 555 550 490 
+		nodeNeighbourTbl[557][0-6]: 1331 563 623 556 551 491 
+		nodeNeighbourTbl[558][0-6]: 559 564 624 1331 552 492 
+		nodeNeighbourTbl[559][0-6]: 560 565 625 558 553 493 
+		nodeNeighbourTbl[560][0-6]: 561 566 626 559 554 494 
+		nodeNeighbourTbl[561][0-6]: 562 567 627 560 555 495 
+		nodeNeighbourTbl[562][0-6]: 563 568 628 561 556 496 
+		nodeNeighbourTbl[563][0-6]: 1331 569 629 562 557 497 
+		nodeNeighbourTbl[564][0-6]: 565 570 630 1331 558 498 
+		nodeNeighbourTbl[565][0-6]: 566 571 631 564 559 499 
+		nodeNeighbourTbl[566][0-6]: 567 572 632 565 560 500 
+		nodeNeighbourTbl[567][0-6]: 568 573 633 566 561 501 
+		nodeNeighbourTbl[568][0-6]: 569 574 634 567 562 502 
+		nodeNeighbourTbl[569][0-6]: 1331 575 635 568 563 503 
+		nodeNeighbourTbl[570][0-6]: 571 576 636 1331 564 504 
+		nodeNeighbourTbl[571][0-6]: 572 577 637 570 565 505 
+		nodeNeighbourTbl[572][0-6]: 573 578 638 571 566 506 
+		nodeNeighbourTbl[573][0-6]: 574 579 639 572 567 507 
+		nodeNeighbourTbl[574][0-6]: 575 580 640 573 568 508 
+		nodeNeighbourTbl[575][0-6]: 1331 581 641 574 569 509 
+		nodeNeighbourTbl[576][0-6]: 577 582 642 1331 570 510 
+		nodeNeighbourTbl[577][0-6]: 578 583 643 576 571 511 
+		nodeNeighbourTbl[578][0-6]: 579 584 644 577 572 512 
+		nodeNeighbourTbl[579][0-6]: 580 585 645 578 573 513 
+		nodeNeighbourTbl[580][0-6]: 581 586 646 579 574 514 
+		nodeNeighbourTbl[581][0-6]: 1331 587 647 580 575 515 
+		nodeNeighbourTbl[582][0-6]: 583 588 648 1331 576 516 
+		nodeNeighbourTbl[583][0-6]: 584 589 649 582 577 517 
+		nodeNeighbourTbl[584][0-6]: 585 590 650 583 578 518 
+		nodeNeighbourTbl[585][0-6]: 586 591 651 584 579 519 
+		nodeNeighbourTbl[586][0-6]: 587 592 652 585 580 520 
+		nodeNeighbourTbl[587][0-6]: 1331 593 653 586 581 521 
+		nodeNeighbourTbl[588][0-6]: 589 1331 654 1331 582 522 
+		nodeNeighbourTbl[589][0-6]: 590 1331 655 588 583 523 
+		nodeNeighbourTbl[590][0-6]: 591 1331 656 589 584 524 
+		nodeNeighbourTbl[591][0-6]: 592 1331 657 590 585 525 
+		nodeNeighbourTbl[592][0-6]: 593 1331 658 591 586 526 
+		nodeNeighbourTbl[593][0-6]: 1331 1331 659 592 587 527 
+		nodeNeighbourTbl[594][0-6]: 595 600 660 1331 1331 528 
+		nodeNeighbourTbl[595][0-6]: 596 601 661 594 1331 529 
+		nodeNeighbourTbl[596][0-6]: 597 602 662 595 1331 530 
+		nodeNeighbourTbl[597][0-6]: 598 603 663 596 1331 531 
+		nodeNeighbourTbl[598][0-6]: 599 604 664 597 1331 532 
+		nodeNeighbourTbl[599][0-6]: 1331 605 665 598 1331 533 
+		nodeNeighbourTbl[600][0-6]: 601 606 666 1331 594 534 
+		nodeNeighbourTbl[601][0-6]: 602 607 667 600 595 535 
+		nodeNeighbourTbl[602][0-6]: 603 608 668 601 596 536 
+		nodeNeighbourTbl[603][0-6]: 604 609 669 602 597 537 
+		nodeNeighbourTbl[604][0-6]: 605 610 670 603 598 538 
+		nodeNeighbourTbl[605][0-6]: 1331 611 671 604 599 539 
+		nodeNeighbourTbl[606][0-6]: 607 612 672 1331 600 540 
+		nodeNeighbourTbl[607][0-6]: 608 613 673 606 601 541 
+		nodeNeighbourTbl[608][0-6]: 609 614 674 607 602 542 
+		nodeNeighbourTbl[609][0-6]: 610 615 675 608 603 543 
+		nodeNeighbourTbl[610][0-6]: 611 616 676 609 604 544 
+		nodeNeighbourTbl[611][0-6]: 1331 617 677 610 605 545 
+		nodeNeighbourTbl[612][0-6]: 613 618 678 1331 606 546 
+		nodeNeighbourTbl[613][0-6]: 614 619 679 612 607 547 
+		nodeNeighbourTbl[614][0-6]: 615 620 680 613 608 548 
+		nodeNeighbourTbl[615][0-6]: 616 621 681 614 609 549 
+		nodeNeighbourTbl[616][0-6]: 617 622 682 615 610 550 
+		nodeNeighbourTbl[617][0-6]: 1331 623 683 616 611 551 
+		nodeNeighbourTbl[618][0-6]: 619 624 684 1331 612 552 
+		nodeNeighbourTbl[619][0-6]: 620 625 685 618 613 553 
+		nodeNeighbourTbl[620][0-6]: 621 626 686 619 614 554 
+		nodeNeighbourTbl[621][0-6]: 622 627 687 620 615 555 
+		nodeNeighbourTbl[622][0-6]: 623 628 688 621 616 556 
+		nodeNeighbourTbl[623][0-6]: 1331 629 689 622 617 557 
+		nodeNeighbourTbl[624][0-6]: 625 630 690 1331 618 558 
+		nodeNeighbourTbl[625][0-6]: 626 631 691 624 619 559 
+		nodeNeighbourTbl[626][0-6]: 627 632 692 625 620 560 
+		nodeNeighbourTbl[627][0-6]: 628 633 693 626 621 561 
+		nodeNeighbourTbl[628][0-6]: 629 634 694 627 622 562 
+		nodeNeighbourTbl[629][0-6]: 1331 635 695 628 623 563 
+		nodeNeighbourTbl[630][0-6]: 631 636 696 1331 624 564 
+		nodeNeighbourTbl[631][0-6]: 632 637 697 630 625 565 
+		nodeNeighbourTbl[632][0-6]: 633 638 698 631 626 566 
+		nodeNeighbourTbl[633][0-6]: 634 639 699 632 627 567 
+		nodeNeighbourTbl[634][0-6]: 635 640 700 633 628 568 
+		nodeNeighbourTbl[635][0-6]: 1331 641 701 634 629 569 
+		nodeNeighbourTbl[636][0-6]: 637 642 702 1331 630 570 
+		nodeNeighbourTbl[637][0-6]: 638 643 703 636 631 571 
+		nodeNeighbourTbl[638][0-6]: 639 644 704 637 632 572 
+		nodeNeighbourTbl[639][0-6]: 640 645 705 638 633 573 
+		nodeNeighbourTbl[640][0-6]: 641 646 706 639 634 574 
+		nodeNeighbourTbl[641][0-6]: 1331 647 707 640 635 575 
+		nodeNeighbourTbl[642][0-6]: 643 648 708 1331 636 576 
+		nodeNeighbourTbl[643][0-6]: 644 649 709 642 637 577 
+		nodeNeighbourTbl[644][0-6]: 645 650 710 643 638 578 
+		nodeNeighbourTbl[645][0-6]: 646 651 711 644 639 579 
+		nodeNeighbourTbl[646][0-6]: 647 652 712 645 640 580 
+		nodeNeighbourTbl[647][0-6]: 1331 653 713 646 641 581 
+		nodeNeighbourTbl[648][0-6]: 649 654 714 1331 642 582 
+		nodeNeighbourTbl[649][0-6]: 650 655 715 648 643 583 
+		nodeNeighbourTbl[650][0-6]: 651 656 716 649 644 584 
+		nodeNeighbourTbl[651][0-6]: 652 657 717 650 645 585 
+		nodeNeighbourTbl[652][0-6]: 653 658 718 651 646 586 
+		nodeNeighbourTbl[653][0-6]: 1331 659 719 652 647 587 
+		nodeNeighbourTbl[654][0-6]: 655 1331 720 1331 648 588 
+		nodeNeighbourTbl[655][0-6]: 656 1331 721 654 649 589 
+		nodeNeighbourTbl[656][0-6]: 657 1331 722 655 650 590 
+		nodeNeighbourTbl[657][0-6]: 658 1331 723 656 651 591 
+		nodeNeighbourTbl[658][0-6]: 659 1331 724 657 652 592 
+		nodeNeighbourTbl[659][0-6]: 1331 1331 725 658 653 593 
+		nodeNeighbourTbl[660][0-6]: 661 666 1331 1331 1331 594 
+		nodeNeighbourTbl[661][0-6]: 662 667 1331 660 1331 595 
+		nodeNeighbourTbl[662][0-6]: 663 668 1331 661 1331 596 
+		nodeNeighbourTbl[663][0-6]: 664 669 1331 662 1331 597 
+		nodeNeighbourTbl[664][0-6]: 665 670 1331 663 1331 598 
+		nodeNeighbourTbl[665][0-6]: 1331 671 1331 664 1331 599 
+		nodeNeighbourTbl[666][0-6]: 667 672 1331 1331 660 600 
+		nodeNeighbourTbl[667][0-6]: 668 673 1331 666 661 601 
+		nodeNeighbourTbl[668][0-6]: 669 674 1331 667 662 602 
+		nodeNeighbourTbl[669][0-6]: 670 675 1331 668 663 603 
+		nodeNeighbourTbl[670][0-6]: 671 676 1331 669 664 604 
+		nodeNeighbourTbl[671][0-6]: 1331 677 1331 670 665 605 
+		nodeNeighbourTbl[672][0-6]: 673 678 1331 1331 666 606 
+		nodeNeighbourTbl[673][0-6]: 674 679 1331 672 667 607 
+		nodeNeighbourTbl[674][0-6]: 675 680 1331 673 668 608 
+		nodeNeighbourTbl[675][0-6]: 676 681 1331 674 669 609 
+		nodeNeighbourTbl[676][0-6]: 677 682 1331 675 670 610 
+		nodeNeighbourTbl[677][0-6]: 1331 683 1331 676 671 611 
+		nodeNeighbourTbl[678][0-6]: 679 684 1331 1331 672 612 
+		nodeNeighbourTbl[679][0-6]: 680 685 1331 678 673 613 
+		nodeNeighbourTbl[680][0-6]: 681 686 1331 679 674 614 
+		nodeNeighbourTbl[681][0-6]: 682 687 1331 680 675 615 
+		nodeNeighbourTbl[682][0-6]: 683 688 1331 681 676 616 
+		nodeNeighbourTbl[683][0-6]: 1331 689 1331 682 677 617 
+		nodeNeighbourTbl[684][0-6]: 685 690 1331 1331 678 618 
+		nodeNeighbourTbl[685][0-6]: 686 691 1331 684 679 619 
+		nodeNeighbourTbl[686][0-6]: 687 692 1331 685 680 620 
+		nodeNeighbourTbl[687][0-6]: 688 693 1331 686 681 621 
+		nodeNeighbourTbl[688][0-6]: 689 694 1331 687 682 622 
+		nodeNeighbourTbl[689][0-6]: 1331 695 1331 688 683 623 
+		nodeNeighbourTbl[690][0-6]: 691 696 1331 1331 684 624 
+		nodeNeighbourTbl[691][0-6]: 692 697 1331 690 685 625 
+		nodeNeighbourTbl[692][0-6]: 693 698 1331 691 686 626 
+		nodeNeighbourTbl[693][0-6]: 694 699 1331 692 687 627 
+		nodeNeighbourTbl[694][0-6]: 695 700 1331 693 688 628 
+		nodeNeighbourTbl[695][0-6]: 1331 701 1331 694 689 629 
+		nodeNeighbourTbl[696][0-6]: 697 702 1331 1331 690 630 
+		nodeNeighbourTbl[697][0-6]: 698 703 1331 696 691 631 
+		nodeNeighbourTbl[698][0-6]: 699 704 1331 697 692 632 
+		nodeNeighbourTbl[699][0-6]: 700 705 1331 698 693 633 
+		nodeNeighbourTbl[700][0-6]: 701 706 1331 699 694 634 
+		nodeNeighbourTbl[701][0-6]: 1331 707 1331 700 695 635 
+		nodeNeighbourTbl[702][0-6]: 703 708 1331 1331 696 636 
+		nodeNeighbourTbl[703][0-6]: 704 709 1331 702 697 637 
+		nodeNeighbourTbl[704][0-6]: 705 710 1331 703 698 638 
+		nodeNeighbourTbl[705][0-6]: 706 711 1331 704 699 639 
+		nodeNeighbourTbl[706][0-6]: 707 712 1331 705 700 640 
+		nodeNeighbourTbl[707][0-6]: 1331 713 1331 706 701 641 
+		nodeNeighbourTbl[708][0-6]: 709 714 1331 1331 702 642 
+		nodeNeighbourTbl[709][0-6]: 710 715 1331 708 703 643 
+		nodeNeighbourTbl[710][0-6]: 711 716 1331 709 704 644 
+		nodeNeighbourTbl[711][0-6]: 712 717 1331 710 705 645 
+		nodeNeighbourTbl[712][0-6]: 713 718 1331 711 706 646 
+		nodeNeighbourTbl[713][0-6]: 1331 719 1331 712 707 647 
+		nodeNeighbourTbl[714][0-6]: 715 720 1331 1331 708 648 
+		nodeNeighbourTbl[715][0-6]: 716 721 1331 714 709 649 
+		nodeNeighbourTbl[716][0-6]: 717 722 1331 715 710 650 
+		nodeNeighbourTbl[717][0-6]: 718 723 1331 716 711 651 
+		nodeNeighbourTbl[718][0-6]: 719 724 1331 717 712 652 
+		nodeNeighbourTbl[719][0-6]: 1331 725 1331 718 713 653 
+		nodeNeighbourTbl[720][0-6]: 721 1331 1331 1331 714 654 
+		nodeNeighbourTbl[721][0-6]: 722 1331 1331 720 715 655 
+		nodeNeighbourTbl[722][0-6]: 723 1331 1331 721 716 656 
+		nodeNeighbourTbl[723][0-6]: 724 1331 1331 722 717 657 
+		nodeNeighbourTbl[724][0-6]: 725 1331 1331 723 718 658 
+		nodeNeighbourTbl[725][0-6]: 1331 1331 1331 724 719 659 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8070878
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x80713e0
+	nodeElementTbl[0-726]:
+		nodeElementTbl[0][0-8]: 1000 1000 1000 1000 1000 1000 1000 000 
+		nodeElementTbl[1][0-8]: 1000 1000 1000 1000 1000 1000 000 001 
+		nodeElementTbl[2][0-8]: 1000 1000 1000 1000 1000 1000 001 002 
+		nodeElementTbl[3][0-8]: 1000 1000 1000 1000 1000 1000 002 003 
+		nodeElementTbl[4][0-8]: 1000 1000 1000 1000 1000 1000 003 004 
+		nodeElementTbl[5][0-8]: 1000 1000 1000 1000 1000 1000 004 1000 
+		nodeElementTbl[6][0-8]: 1000 1000 1000 1000 1000 000 1000 005 
+		nodeElementTbl[7][0-8]: 1000 1000 1000 1000 000 001 005 006 
+		nodeElementTbl[8][0-8]: 1000 1000 1000 1000 001 002 006 007 
+		nodeElementTbl[9][0-8]: 1000 1000 1000 1000 002 003 007 008 
+		nodeElementTbl[10][0-8]: 1000 1000 1000 1000 003 004 008 009 
+		nodeElementTbl[11][0-8]: 1000 1000 1000 1000 004 1000 009 1000 
+		nodeElementTbl[12][0-8]: 1000 1000 1000 1000 1000 005 1000 010 
+		nodeElementTbl[13][0-8]: 1000 1000 1000 1000 005 006 010 011 
+		nodeElementTbl[14][0-8]: 1000 1000 1000 1000 006 007 011 012 
+		nodeElementTbl[15][0-8]: 1000 1000 1000 1000 007 008 012 013 
+		nodeElementTbl[16][0-8]: 1000 1000 1000 1000 008 009 013 014 
+		nodeElementTbl[17][0-8]: 1000 1000 1000 1000 009 1000 014 1000 
+		nodeElementTbl[18][0-8]: 1000 1000 1000 1000 1000 010 1000 015 
+		nodeElementTbl[19][0-8]: 1000 1000 1000 1000 010 011 015 016 
+		nodeElementTbl[20][0-8]: 1000 1000 1000 1000 011 012 016 017 
+		nodeElementTbl[21][0-8]: 1000 1000 1000 1000 012 013 017 018 
+		nodeElementTbl[22][0-8]: 1000 1000 1000 1000 013 014 018 019 
+		nodeElementTbl[23][0-8]: 1000 1000 1000 1000 014 1000 019 1000 
+		nodeElementTbl[24][0-8]: 1000 1000 1000 1000 1000 015 1000 020 
+		nodeElementTbl[25][0-8]: 1000 1000 1000 1000 015 016 020 021 
+		nodeElementTbl[26][0-8]: 1000 1000 1000 1000 016 017 021 022 
+		nodeElementTbl[27][0-8]: 1000 1000 1000 1000 017 018 022 023 
+		nodeElementTbl[28][0-8]: 1000 1000 1000 1000 018 019 023 024 
+		nodeElementTbl[29][0-8]: 1000 1000 1000 1000 019 1000 024 1000 
+		nodeElementTbl[30][0-8]: 1000 1000 1000 1000 1000 020 1000 025 
+		nodeElementTbl[31][0-8]: 1000 1000 1000 1000 020 021 025 026 
+		nodeElementTbl[32][0-8]: 1000 1000 1000 1000 021 022 026 027 
+		nodeElementTbl[33][0-8]: 1000 1000 1000 1000 022 023 027 028 
+		nodeElementTbl[34][0-8]: 1000 1000 1000 1000 023 024 028 029 
+		nodeElementTbl[35][0-8]: 1000 1000 1000 1000 024 1000 029 1000 
+		nodeElementTbl[36][0-8]: 1000 1000 1000 1000 1000 025 1000 030 
+		nodeElementTbl[37][0-8]: 1000 1000 1000 1000 025 026 030 031 
+		nodeElementTbl[38][0-8]: 1000 1000 1000 1000 026 027 031 032 
+		nodeElementTbl[39][0-8]: 1000 1000 1000 1000 027 028 032 033 
+		nodeElementTbl[40][0-8]: 1000 1000 1000 1000 028 029 033 034 
+		nodeElementTbl[41][0-8]: 1000 1000 1000 1000 029 1000 034 1000 
+		nodeElementTbl[42][0-8]: 1000 1000 1000 1000 1000 030 1000 035 
+		nodeElementTbl[43][0-8]: 1000 1000 1000 1000 030 031 035 036 
+		nodeElementTbl[44][0-8]: 1000 1000 1000 1000 031 032 036 037 
+		nodeElementTbl[45][0-8]: 1000 1000 1000 1000 032 033 037 038 
+		nodeElementTbl[46][0-8]: 1000 1000 1000 1000 033 034 038 039 
+		nodeElementTbl[47][0-8]: 1000 1000 1000 1000 034 1000 039 1000 
+		nodeElementTbl[48][0-8]: 1000 1000 1000 1000 1000 035 1000 040 
+		nodeElementTbl[49][0-8]: 1000 1000 1000 1000 035 036 040 041 
+		nodeElementTbl[50][0-8]: 1000 1000 1000 1000 036 037 041 042 
+		nodeElementTbl[51][0-8]: 1000 1000 1000 1000 037 038 042 043 
+		nodeElementTbl[52][0-8]: 1000 1000 1000 1000 038 039 043 044 
+		nodeElementTbl[53][0-8]: 1000 1000 1000 1000 039 1000 044 1000 
+		nodeElementTbl[54][0-8]: 1000 1000 1000 1000 1000 040 1000 045 
+		nodeElementTbl[55][0-8]: 1000 1000 1000 1000 040 041 045 046 
+		nodeElementTbl[56][0-8]: 1000 1000 1000 1000 041 042 046 047 
+		nodeElementTbl[57][0-8]: 1000 1000 1000 1000 042 043 047 048 
+		nodeElementTbl[58][0-8]: 1000 1000 1000 1000 043 044 048 049 
+		nodeElementTbl[59][0-8]: 1000 1000 1000 1000 044 1000 049 1000 
+		nodeElementTbl[60][0-8]: 1000 1000 1000 1000 1000 045 1000 1000 
+		nodeElementTbl[61][0-8]: 1000 1000 1000 1000 045 046 1000 1000 
+		nodeElementTbl[62][0-8]: 1000 1000 1000 1000 046 047 1000 1000 
+		nodeElementTbl[63][0-8]: 1000 1000 1000 1000 047 048 1000 1000 
+		nodeElementTbl[64][0-8]: 1000 1000 1000 1000 048 049 1000 1000 
+		nodeElementTbl[65][0-8]: 1000 1000 1000 1000 049 1000 1000 1000 
+		nodeElementTbl[66][0-8]: 1000 1000 1000 000 1000 1000 1000 050 
+		nodeElementTbl[67][0-8]: 1000 1000 000 001 1000 1000 050 051 
+		nodeElementTbl[68][0-8]: 1000 1000 001 002 1000 1000 051 052 
+		nodeElementTbl[69][0-8]: 1000 1000 002 003 1000 1000 052 053 
+		nodeElementTbl[70][0-8]: 1000 1000 003 004 1000 1000 053 054 
+		nodeElementTbl[71][0-8]: 1000 1000 004 1000 1000 1000 054 1000 
+		nodeElementTbl[72][0-8]: 1000 000 1000 005 1000 050 1000 055 
+		nodeElementTbl[73][0-8]: 000 001 005 006 050 051 055 056 
+		nodeElementTbl[74][0-8]: 001 002 006 007 051 052 056 057 
+		nodeElementTbl[75][0-8]: 002 003 007 008 052 053 057 058 
+		nodeElementTbl[76][0-8]: 003 004 008 009 053 054 058 059 
+		nodeElementTbl[77][0-8]: 004 1000 009 1000 054 1000 059 1000 
+		nodeElementTbl[78][0-8]: 1000 005 1000 010 1000 055 1000 060 
+		nodeElementTbl[79][0-8]: 005 006 010 011 055 056 060 061 
+		nodeElementTbl[80][0-8]: 006 007 011 012 056 057 061 062 
+		nodeElementTbl[81][0-8]: 007 008 012 013 057 058 062 063 
+		nodeElementTbl[82][0-8]: 008 009 013 014 058 059 063 064 
+		nodeElementTbl[83][0-8]: 009 1000 014 1000 059 1000 064 1000 
+		nodeElementTbl[84][0-8]: 1000 010 1000 015 1000 060 1000 065 
+		nodeElementTbl[85][0-8]: 010 011 015 016 060 061 065 066 
+		nodeElementTbl[86][0-8]: 011 012 016 017 061 062 066 067 
+		nodeElementTbl[87][0-8]: 012 013 017 018 062 063 067 068 
+		nodeElementTbl[88][0-8]: 013 014 018 019 063 064 068 069 
+		nodeElementTbl[89][0-8]: 014 1000 019 1000 064 1000 069 1000 
+		nodeElementTbl[90][0-8]: 1000 015 1000 020 1000 065 1000 070 
+		nodeElementTbl[91][0-8]: 015 016 020 021 065 066 070 071 
+		nodeElementTbl[92][0-8]: 016 017 021 022 066 067 071 072 
+		nodeElementTbl[93][0-8]: 017 018 022 023 067 068 072 073 
+		nodeElementTbl[94][0-8]: 018 019 023 024 068 069 073 074 
+		nodeElementTbl[95][0-8]: 019 1000 024 1000 069 1000 074 1000 
+		nodeElementTbl[96][0-8]: 1000 020 1000 025 1000 070 1000 075 
+		nodeElementTbl[97][0-8]: 020 021 025 026 070 071 075 076 
+		nodeElementTbl[98][0-8]: 021 022 026 027 071 072 076 077 
+		nodeElementTbl[99][0-8]: 022 023 027 028 072 073 077 078 
+		nodeElementTbl[100][0-8]: 023 024 028 029 073 074 078 079 
+		nodeElementTbl[101][0-8]: 024 1000 029 1000 074 1000 079 1000 
+		nodeElementTbl[102][0-8]: 1000 025 1000 030 1000 075 1000 080 
+		nodeElementTbl[103][0-8]: 025 026 030 031 075 076 080 081 
+		nodeElementTbl[104][0-8]: 026 027 031 032 076 077 081 082 
+		nodeElementTbl[105][0-8]: 027 028 032 033 077 078 082 083 
+		nodeElementTbl[106][0-8]: 028 029 033 034 078 079 083 084 
+		nodeElementTbl[107][0-8]: 029 1000 034 1000 079 1000 084 1000 
+		nodeElementTbl[108][0-8]: 1000 030 1000 035 1000 080 1000 085 
+		nodeElementTbl[109][0-8]: 030 031 035 036 080 081 085 086 
+		nodeElementTbl[110][0-8]: 031 032 036 037 081 082 086 087 
+		nodeElementTbl[111][0-8]: 032 033 037 038 082 083 087 088 
+		nodeElementTbl[112][0-8]: 033 034 038 039 083 084 088 089 
+		nodeElementTbl[113][0-8]: 034 1000 039 1000 084 1000 089 1000 
+		nodeElementTbl[114][0-8]: 1000 035 1000 040 1000 085 1000 090 
+		nodeElementTbl[115][0-8]: 035 036 040 041 085 086 090 091 
+		nodeElementTbl[116][0-8]: 036 037 041 042 086 087 091 092 
+		nodeElementTbl[117][0-8]: 037 038 042 043 087 088 092 093 
+		nodeElementTbl[118][0-8]: 038 039 043 044 088 089 093 094 
+		nodeElementTbl[119][0-8]: 039 1000 044 1000 089 1000 094 1000 
+		nodeElementTbl[120][0-8]: 1000 040 1000 045 1000 090 1000 095 
+		nodeElementTbl[121][0-8]: 040 041 045 046 090 091 095 096 
+		nodeElementTbl[122][0-8]: 041 042 046 047 091 092 096 097 
+		nodeElementTbl[123][0-8]: 042 043 047 048 092 093 097 098 
+		nodeElementTbl[124][0-8]: 043 044 048 049 093 094 098 099 
+		nodeElementTbl[125][0-8]: 044 1000 049 1000 094 1000 099 1000 
+		nodeElementTbl[126][0-8]: 1000 045 1000 1000 1000 095 1000 1000 
+		nodeElementTbl[127][0-8]: 045 046 1000 1000 095 096 1000 1000 
+		nodeElementTbl[128][0-8]: 046 047 1000 1000 096 097 1000 1000 
+		nodeElementTbl[129][0-8]: 047 048 1000 1000 097 098 1000 1000 
+		nodeElementTbl[130][0-8]: 048 049 1000 1000 098 099 1000 1000 
+		nodeElementTbl[131][0-8]: 049 1000 1000 1000 099 1000 1000 1000 
+		nodeElementTbl[132][0-8]: 1000 1000 1000 050 1000 1000 1000 100 
+		nodeElementTbl[133][0-8]: 1000 1000 050 051 1000 1000 100 101 
+		nodeElementTbl[134][0-8]: 1000 1000 051 052 1000 1000 101 102 
+		nodeElementTbl[135][0-8]: 1000 1000 052 053 1000 1000 102 103 
+		nodeElementTbl[136][0-8]: 1000 1000 053 054 1000 1000 103 104 
+		nodeElementTbl[137][0-8]: 1000 1000 054 1000 1000 1000 104 1000 
+		nodeElementTbl[138][0-8]: 1000 050 1000 055 1000 100 1000 105 
+		nodeElementTbl[139][0-8]: 050 051 055 056 100 101 105 106 
+		nodeElementTbl[140][0-8]: 051 052 056 057 101 102 106 107 
+		nodeElementTbl[141][0-8]: 052 053 057 058 102 103 107 108 
+		nodeElementTbl[142][0-8]: 053 054 058 059 103 104 108 109 
+		nodeElementTbl[143][0-8]: 054 1000 059 1000 104 1000 109 1000 
+		nodeElementTbl[144][0-8]: 1000 055 1000 060 1000 105 1000 110 
+		nodeElementTbl[145][0-8]: 055 056 060 061 105 106 110 111 
+		nodeElementTbl[146][0-8]: 056 057 061 062 106 107 111 112 
+		nodeElementTbl[147][0-8]: 057 058 062 063 107 108 112 113 
+		nodeElementTbl[148][0-8]: 058 059 063 064 108 109 113 114 
+		nodeElementTbl[149][0-8]: 059 1000 064 1000 109 1000 114 1000 
+		nodeElementTbl[150][0-8]: 1000 060 1000 065 1000 110 1000 115 
+		nodeElementTbl[151][0-8]: 060 061 065 066 110 111 115 116 
+		nodeElementTbl[152][0-8]: 061 062 066 067 111 112 116 117 
+		nodeElementTbl[153][0-8]: 062 063 067 068 112 113 117 118 
+		nodeElementTbl[154][0-8]: 063 064 068 069 113 114 118 119 
+		nodeElementTbl[155][0-8]: 064 1000 069 1000 114 1000 119 1000 
+		nodeElementTbl[156][0-8]: 1000 065 1000 070 1000 115 1000 120 
+		nodeElementTbl[157][0-8]: 065 066 070 071 115 116 120 121 
+		nodeElementTbl[158][0-8]: 066 067 071 072 116 117 121 122 
+		nodeElementTbl[159][0-8]: 067 068 072 073 117 118 122 123 
+		nodeElementTbl[160][0-8]: 068 069 073 074 118 119 123 124 
+		nodeElementTbl[161][0-8]: 069 1000 074 1000 119 1000 124 1000 
+		nodeElementTbl[162][0-8]: 1000 070 1000 075 1000 120 1000 125 
+		nodeElementTbl[163][0-8]: 070 071 075 076 120 121 125 126 
+		nodeElementTbl[164][0-8]: 071 072 076 077 121 122 126 127 
+		nodeElementTbl[165][0-8]: 072 073 077 078 122 123 127 128 
+		nodeElementTbl[166][0-8]: 073 074 078 079 123 124 128 129 
+		nodeElementTbl[167][0-8]: 074 1000 079 1000 124 1000 129 1000 
+		nodeElementTbl[168][0-8]: 1000 075 1000 080 1000 125 1000 130 
+		nodeElementTbl[169][0-8]: 075 076 080 081 125 126 130 131 
+		nodeElementTbl[170][0-8]: 076 077 081 082 126 127 131 132 
+		nodeElementTbl[171][0-8]: 077 078 082 083 127 128 132 133 
+		nodeElementTbl[172][0-8]: 078 079 083 084 128 129 133 134 
+		nodeElementTbl[173][0-8]: 079 1000 084 1000 129 1000 134 1000 
+		nodeElementTbl[174][0-8]: 1000 080 1000 085 1000 130 1000 135 
+		nodeElementTbl[175][0-8]: 080 081 085 086 130 131 135 136 
+		nodeElementTbl[176][0-8]: 081 082 086 087 131 132 136 137 
+		nodeElementTbl[177][0-8]: 082 083 087 088 132 133 137 138 
+		nodeElementTbl[178][0-8]: 083 084 088 089 133 134 138 139 
+		nodeElementTbl[179][0-8]: 084 1000 089 1000 134 1000 139 1000 
+		nodeElementTbl[180][0-8]: 1000 085 1000 090 1000 135 1000 140 
+		nodeElementTbl[181][0-8]: 085 086 090 091 135 136 140 141 
+		nodeElementTbl[182][0-8]: 086 087 091 092 136 137 141 142 
+		nodeElementTbl[183][0-8]: 087 088 092 093 137 138 142 143 
+		nodeElementTbl[184][0-8]: 088 089 093 094 138 139 143 144 
+		nodeElementTbl[185][0-8]: 089 1000 094 1000 139 1000 144 1000 
+		nodeElementTbl[186][0-8]: 1000 090 1000 095 1000 140 1000 145 
+		nodeElementTbl[187][0-8]: 090 091 095 096 140 141 145 146 
+		nodeElementTbl[188][0-8]: 091 092 096 097 141 142 146 147 
+		nodeElementTbl[189][0-8]: 092 093 097 098 142 143 147 148 
+		nodeElementTbl[190][0-8]: 093 094 098 099 143 144 148 149 
+		nodeElementTbl[191][0-8]: 094 1000 099 1000 144 1000 149 1000 
+		nodeElementTbl[192][0-8]: 1000 095 1000 1000 1000 145 1000 1000 
+		nodeElementTbl[193][0-8]: 095 096 1000 1000 145 146 1000 1000 
+		nodeElementTbl[194][0-8]: 096 097 1000 1000 146 147 1000 1000 
+		nodeElementTbl[195][0-8]: 097 098 1000 1000 147 148 1000 1000 
+		nodeElementTbl[196][0-8]: 098 099 1000 1000 148 149 1000 1000 
+		nodeElementTbl[197][0-8]: 099 1000 1000 1000 149 1000 1000 1000 
+		nodeElementTbl[198][0-8]: 1000 1000 1000 100 1000 1000 1000 150 
+		nodeElementTbl[199][0-8]: 1000 1000 100 101 1000 1000 150 151 
+		nodeElementTbl[200][0-8]: 1000 1000 101 102 1000 1000 151 152 
+		nodeElementTbl[201][0-8]: 1000 1000 102 103 1000 1000 152 153 
+		nodeElementTbl[202][0-8]: 1000 1000 103 104 1000 1000 153 154 
+		nodeElementTbl[203][0-8]: 1000 1000 104 1000 1000 1000 154 1000 
+		nodeElementTbl[204][0-8]: 1000 100 1000 105 1000 150 1000 155 
+		nodeElementTbl[205][0-8]: 100 101 105 106 150 151 155 156 
+		nodeElementTbl[206][0-8]: 101 102 106 107 151 152 156 157 
+		nodeElementTbl[207][0-8]: 102 103 107 108 152 153 157 158 
+		nodeElementTbl[208][0-8]: 103 104 108 109 153 154 158 159 
+		nodeElementTbl[209][0-8]: 104 1000 109 1000 154 1000 159 1000 
+		nodeElementTbl[210][0-8]: 1000 105 1000 110 1000 155 1000 160 
+		nodeElementTbl[211][0-8]: 105 106 110 111 155 156 160 161 
+		nodeElementTbl[212][0-8]: 106 107 111 112 156 157 161 162 
+		nodeElementTbl[213][0-8]: 107 108 112 113 157 158 162 163 
+		nodeElementTbl[214][0-8]: 108 109 113 114 158 159 163 164 
+		nodeElementTbl[215][0-8]: 109 1000 114 1000 159 1000 164 1000 
+		nodeElementTbl[216][0-8]: 1000 110 1000 115 1000 160 1000 165 
+		nodeElementTbl[217][0-8]: 110 111 115 116 160 161 165 166 
+		nodeElementTbl[218][0-8]: 111 112 116 117 161 162 166 167 
+		nodeElementTbl[219][0-8]: 112 113 117 118 162 163 167 168 
+		nodeElementTbl[220][0-8]: 113 114 118 119 163 164 168 169 
+		nodeElementTbl[221][0-8]: 114 1000 119 1000 164 1000 169 1000 
+		nodeElementTbl[222][0-8]: 1000 115 1000 120 1000 165 1000 170 
+		nodeElementTbl[223][0-8]: 115 116 120 121 165 166 170 171 
+		nodeElementTbl[224][0-8]: 116 117 121 122 166 167 171 172 
+		nodeElementTbl[225][0-8]: 117 118 122 123 167 168 172 173 
+		nodeElementTbl[226][0-8]: 118 119 123 124 168 169 173 174 
+		nodeElementTbl[227][0-8]: 119 1000 124 1000 169 1000 174 1000 
+		nodeElementTbl[228][0-8]: 1000 120 1000 125 1000 170 1000 175 
+		nodeElementTbl[229][0-8]: 120 121 125 126 170 171 175 176 
+		nodeElementTbl[230][0-8]: 121 122 126 127 171 172 176 177 
+		nodeElementTbl[231][0-8]: 122 123 127 128 172 173 177 178 
+		nodeElementTbl[232][0-8]: 123 124 128 129 173 174 178 179 
+		nodeElementTbl[233][0-8]: 124 1000 129 1000 174 1000 179 1000 
+		nodeElementTbl[234][0-8]: 1000 125 1000 130 1000 175 1000 180 
+		nodeElementTbl[235][0-8]: 125 126 130 131 175 176 180 181 
+		nodeElementTbl[236][0-8]: 126 127 131 132 176 177 181 182 
+		nodeElementTbl[237][0-8]: 127 128 132 133 177 178 182 183 
+		nodeElementTbl[238][0-8]: 128 129 133 134 178 179 183 184 
+		nodeElementTbl[239][0-8]: 129 1000 134 1000 179 1000 184 1000 
+		nodeElementTbl[240][0-8]: 1000 130 1000 135 1000 180 1000 185 
+		nodeElementTbl[241][0-8]: 130 131 135 136 180 181 185 186 
+		nodeElementTbl[242][0-8]: 131 132 136 137 181 182 186 187 
+		nodeElementTbl[243][0-8]: 132 133 137 138 182 183 187 188 
+		nodeElementTbl[244][0-8]: 133 134 138 139 183 184 188 189 
+		nodeElementTbl[245][0-8]: 134 1000 139 1000 184 1000 189 1000 
+		nodeElementTbl[246][0-8]: 1000 135 1000 140 1000 185 1000 190 
+		nodeElementTbl[247][0-8]: 135 136 140 141 185 186 190 191 
+		nodeElementTbl[248][0-8]: 136 137 141 142 186 187 191 192 
+		nodeElementTbl[249][0-8]: 137 138 142 143 187 188 192 193 
+		nodeElementTbl[250][0-8]: 138 139 143 144 188 189 193 194 
+		nodeElementTbl[251][0-8]: 139 1000 144 1000 189 1000 194 1000 
+		nodeElementTbl[252][0-8]: 1000 140 1000 145 1000 190 1000 195 
+		nodeElementTbl[253][0-8]: 140 141 145 146 190 191 195 196 
+		nodeElementTbl[254][0-8]: 141 142 146 147 191 192 196 197 
+		nodeElementTbl[255][0-8]: 142 143 147 148 192 193 197 198 
+		nodeElementTbl[256][0-8]: 143 144 148 149 193 194 198 199 
+		nodeElementTbl[257][0-8]: 144 1000 149 1000 194 1000 199 1000 
+		nodeElementTbl[258][0-8]: 1000 145 1000 1000 1000 195 1000 1000 
+		nodeElementTbl[259][0-8]: 145 146 1000 1000 195 196 1000 1000 
+		nodeElementTbl[260][0-8]: 146 147 1000 1000 196 197 1000 1000 
+		nodeElementTbl[261][0-8]: 147 148 1000 1000 197 198 1000 1000 
+		nodeElementTbl[262][0-8]: 148 149 1000 1000 198 199 1000 1000 
+		nodeElementTbl[263][0-8]: 149 1000 1000 1000 199 1000 1000 1000 
+		nodeElementTbl[264][0-8]: 1000 1000 1000 150 1000 1000 1000 200 
+		nodeElementTbl[265][0-8]: 1000 1000 150 151 1000 1000 200 201 
+		nodeElementTbl[266][0-8]: 1000 1000 151 152 1000 1000 201 202 
+		nodeElementTbl[267][0-8]: 1000 1000 152 153 1000 1000 202 203 
+		nodeElementTbl[268][0-8]: 1000 1000 153 154 1000 1000 203 204 
+		nodeElementTbl[269][0-8]: 1000 1000 154 1000 1000 1000 204 1000 
+		nodeElementTbl[270][0-8]: 1000 150 1000 155 1000 200 1000 205 
+		nodeElementTbl[271][0-8]: 150 151 155 156 200 201 205 206 
+		nodeElementTbl[272][0-8]: 151 152 156 157 201 202 206 207 
+		nodeElementTbl[273][0-8]: 152 153 157 158 202 203 207 208 
+		nodeElementTbl[274][0-8]: 153 154 158 159 203 204 208 209 
+		nodeElementTbl[275][0-8]: 154 1000 159 1000 204 1000 209 1000 
+		nodeElementTbl[276][0-8]: 1000 155 1000 160 1000 205 1000 210 
+		nodeElementTbl[277][0-8]: 155 156 160 161 205 206 210 211 
+		nodeElementTbl[278][0-8]: 156 157 161 162 206 207 211 212 
+		nodeElementTbl[279][0-8]: 157 158 162 163 207 208 212 213 
+		nodeElementTbl[280][0-8]: 158 159 163 164 208 209 213 214 
+		nodeElementTbl[281][0-8]: 159 1000 164 1000 209 1000 214 1000 
+		nodeElementTbl[282][0-8]: 1000 160 1000 165 1000 210 1000 215 
+		nodeElementTbl[283][0-8]: 160 161 165 166 210 211 215 216 
+		nodeElementTbl[284][0-8]: 161 162 166 167 211 212 216 217 
+		nodeElementTbl[285][0-8]: 162 163 167 168 212 213 217 218 
+		nodeElementTbl[286][0-8]: 163 164 168 169 213 214 218 219 
+		nodeElementTbl[287][0-8]: 164 1000 169 1000 214 1000 219 1000 
+		nodeElementTbl[288][0-8]: 1000 165 1000 170 1000 215 1000 220 
+		nodeElementTbl[289][0-8]: 165 166 170 171 215 216 220 221 
+		nodeElementTbl[290][0-8]: 166 167 171 172 216 217 221 222 
+		nodeElementTbl[291][0-8]: 167 168 172 173 217 218 222 223 
+		nodeElementTbl[292][0-8]: 168 169 173 174 218 219 223 224 
+		nodeElementTbl[293][0-8]: 169 1000 174 1000 219 1000 224 1000 
+		nodeElementTbl[294][0-8]: 1000 170 1000 175 1000 220 1000 225 
+		nodeElementTbl[295][0-8]: 170 171 175 176 220 221 225 226 
+		nodeElementTbl[296][0-8]: 171 172 176 177 221 222 226 227 
+		nodeElementTbl[297][0-8]: 172 173 177 178 222 223 227 228 
+		nodeElementTbl[298][0-8]: 173 174 178 179 223 224 228 229 
+		nodeElementTbl[299][0-8]: 174 1000 179 1000 224 1000 229 1000 
+		nodeElementTbl[300][0-8]: 1000 175 1000 180 1000 225 1000 230 
+		nodeElementTbl[301][0-8]: 175 176 180 181 225 226 230 231 
+		nodeElementTbl[302][0-8]: 176 177 181 182 226 227 231 232 
+		nodeElementTbl[303][0-8]: 177 178 182 183 227 228 232 233 
+		nodeElementTbl[304][0-8]: 178 179 183 184 228 229 233 234 
+		nodeElementTbl[305][0-8]: 179 1000 184 1000 229 1000 234 1000 
+		nodeElementTbl[306][0-8]: 1000 180 1000 185 1000 230 1000 235 
+		nodeElementTbl[307][0-8]: 180 181 185 186 230 231 235 236 
+		nodeElementTbl[308][0-8]: 181 182 186 187 231 232 236 237 
+		nodeElementTbl[309][0-8]: 182 183 187 188 232 233 237 238 
+		nodeElementTbl[310][0-8]: 183 184 188 189 233 234 238 239 
+		nodeElementTbl[311][0-8]: 184 1000 189 1000 234 1000 239 1000 
+		nodeElementTbl[312][0-8]: 1000 185 1000 190 1000 235 1000 240 
+		nodeElementTbl[313][0-8]: 185 186 190 191 235 236 240 241 
+		nodeElementTbl[314][0-8]: 186 187 191 192 236 237 241 242 
+		nodeElementTbl[315][0-8]: 187 188 192 193 237 238 242 243 
+		nodeElementTbl[316][0-8]: 188 189 193 194 238 239 243 244 
+		nodeElementTbl[317][0-8]: 189 1000 194 1000 239 1000 244 1000 
+		nodeElementTbl[318][0-8]: 1000 190 1000 195 1000 240 1000 245 
+		nodeElementTbl[319][0-8]: 190 191 195 196 240 241 245 246 
+		nodeElementTbl[320][0-8]: 191 192 196 197 241 242 246 247 
+		nodeElementTbl[321][0-8]: 192 193 197 198 242 243 247 248 
+		nodeElementTbl[322][0-8]: 193 194 198 199 243 244 248 249 
+		nodeElementTbl[323][0-8]: 194 1000 199 1000 244 1000 249 1000 
+		nodeElementTbl[324][0-8]: 1000 195 1000 1000 1000 245 1000 1000 
+		nodeElementTbl[325][0-8]: 195 196 1000 1000 245 246 1000 1000 
+		nodeElementTbl[326][0-8]: 196 197 1000 1000 246 247 1000 1000 
+		nodeElementTbl[327][0-8]: 197 198 1000 1000 247 248 1000 1000 
+		nodeElementTbl[328][0-8]: 198 199 1000 1000 248 249 1000 1000 
+		nodeElementTbl[329][0-8]: 199 1000 1000 1000 249 1000 1000 1000 
+		nodeElementTbl[330][0-8]: 1000 1000 1000 200 1000 1000 1000 250 
+		nodeElementTbl[331][0-8]: 1000 1000 200 201 1000 1000 250 251 
+		nodeElementTbl[332][0-8]: 1000 1000 201 202 1000 1000 251 252 
+		nodeElementTbl[333][0-8]: 1000 1000 202 203 1000 1000 252 253 
+		nodeElementTbl[334][0-8]: 1000 1000 203 204 1000 1000 253 254 
+		nodeElementTbl[335][0-8]: 1000 1000 204 1000 1000 1000 254 1000 
+		nodeElementTbl[336][0-8]: 1000 200 1000 205 1000 250 1000 255 
+		nodeElementTbl[337][0-8]: 200 201 205 206 250 251 255 256 
+		nodeElementTbl[338][0-8]: 201 202 206 207 251 252 256 257 
+		nodeElementTbl[339][0-8]: 202 203 207 208 252 253 257 258 
+		nodeElementTbl[340][0-8]: 203 204 208 209 253 254 258 259 
+		nodeElementTbl[341][0-8]: 204 1000 209 1000 254 1000 259 1000 
+		nodeElementTbl[342][0-8]: 1000 205 1000 210 1000 255 1000 260 
+		nodeElementTbl[343][0-8]: 205 206 210 211 255 256 260 261 
+		nodeElementTbl[344][0-8]: 206 207 211 212 256 257 261 262 
+		nodeElementTbl[345][0-8]: 207 208 212 213 257 258 262 263 
+		nodeElementTbl[346][0-8]: 208 209 213 214 258 259 263 264 
+		nodeElementTbl[347][0-8]: 209 1000 214 1000 259 1000 264 1000 
+		nodeElementTbl[348][0-8]: 1000 210 1000 215 1000 260 1000 265 
+		nodeElementTbl[349][0-8]: 210 211 215 216 260 261 265 266 
+		nodeElementTbl[350][0-8]: 211 212 216 217 261 262 266 267 
+		nodeElementTbl[351][0-8]: 212 213 217 218 262 263 267 268 
+		nodeElementTbl[352][0-8]: 213 214 218 219 263 264 268 269 
+		nodeElementTbl[353][0-8]: 214 1000 219 1000 264 1000 269 1000 
+		nodeElementTbl[354][0-8]: 1000 215 1000 220 1000 265 1000 270 
+		nodeElementTbl[355][0-8]: 215 216 220 221 265 266 270 271 
+		nodeElementTbl[356][0-8]: 216 217 221 222 266 267 271 272 
+		nodeElementTbl[357][0-8]: 217 218 222 223 267 268 272 273 
+		nodeElementTbl[358][0-8]: 218 219 223 224 268 269 273 274 
+		nodeElementTbl[359][0-8]: 219 1000 224 1000 269 1000 274 1000 
+		nodeElementTbl[360][0-8]: 1000 220 1000 225 1000 270 1000 275 
+		nodeElementTbl[361][0-8]: 220 221 225 226 270 271 275 276 
+		nodeElementTbl[362][0-8]: 221 222 226 227 271 272 276 277 
+		nodeElementTbl[363][0-8]: 222 223 227 228 272 273 277 278 
+		nodeElementTbl[364][0-8]: 223 224 228 229 273 274 278 279 
+		nodeElementTbl[365][0-8]: 224 1000 229 1000 274 1000 279 1000 
+		nodeElementTbl[366][0-8]: 1000 225 1000 230 1000 275 1000 280 
+		nodeElementTbl[367][0-8]: 225 226 230 231 275 276 280 281 
+		nodeElementTbl[368][0-8]: 226 227 231 232 276 277 281 282 
+		nodeElementTbl[369][0-8]: 227 228 232 233 277 278 282 283 
+		nodeElementTbl[370][0-8]: 228 229 233 234 278 279 283 284 
+		nodeElementTbl[371][0-8]: 229 1000 234 1000 279 1000 284 1000 
+		nodeElementTbl[372][0-8]: 1000 230 1000 235 1000 280 1000 285 
+		nodeElementTbl[373][0-8]: 230 231 235 236 280 281 285 286 
+		nodeElementTbl[374][0-8]: 231 232 236 237 281 282 286 287 
+		nodeElementTbl[375][0-8]: 232 233 237 238 282 283 287 288 
+		nodeElementTbl[376][0-8]: 233 234 238 239 283 284 288 289 
+		nodeElementTbl[377][0-8]: 234 1000 239 1000 284 1000 289 1000 
+		nodeElementTbl[378][0-8]: 1000 235 1000 240 1000 285 1000 290 
+		nodeElementTbl[379][0-8]: 235 236 240 241 285 286 290 291 
+		nodeElementTbl[380][0-8]: 236 237 241 242 286 287 291 292 
+		nodeElementTbl[381][0-8]: 237 238 242 243 287 288 292 293 
+		nodeElementTbl[382][0-8]: 238 239 243 244 288 289 293 294 
+		nodeElementTbl[383][0-8]: 239 1000 244 1000 289 1000 294 1000 
+		nodeElementTbl[384][0-8]: 1000 240 1000 245 1000 290 1000 295 
+		nodeElementTbl[385][0-8]: 240 241 245 246 290 291 295 296 
+		nodeElementTbl[386][0-8]: 241 242 246 247 291 292 296 297 
+		nodeElementTbl[387][0-8]: 242 243 247 248 292 293 297 298 
+		nodeElementTbl[388][0-8]: 243 244 248 249 293 294 298 299 
+		nodeElementTbl[389][0-8]: 244 1000 249 1000 294 1000 299 1000 
+		nodeElementTbl[390][0-8]: 1000 245 1000 1000 1000 295 1000 1000 
+		nodeElementTbl[391][0-8]: 245 246 1000 1000 295 296 1000 1000 
+		nodeElementTbl[392][0-8]: 246 247 1000 1000 296 297 1000 1000 
+		nodeElementTbl[393][0-8]: 247 248 1000 1000 297 298 1000 1000 
+		nodeElementTbl[394][0-8]: 248 249 1000 1000 298 299 1000 1000 
+		nodeElementTbl[395][0-8]: 249 1000 1000 1000 299 1000 1000 1000 
+		nodeElementTbl[396][0-8]: 1000 1000 1000 250 1000 1000 1000 300 
+		nodeElementTbl[397][0-8]: 1000 1000 250 251 1000 1000 300 301 
+		nodeElementTbl[398][0-8]: 1000 1000 251 252 1000 1000 301 302 
+		nodeElementTbl[399][0-8]: 1000 1000 252 253 1000 1000 302 303 
+		nodeElementTbl[400][0-8]: 1000 1000 253 254 1000 1000 303 304 
+		nodeElementTbl[401][0-8]: 1000 1000 254 1000 1000 1000 304 1000 
+		nodeElementTbl[402][0-8]: 1000 250 1000 255 1000 300 1000 305 
+		nodeElementTbl[403][0-8]: 250 251 255 256 300 301 305 306 
+		nodeElementTbl[404][0-8]: 251 252 256 257 301 302 306 307 
+		nodeElementTbl[405][0-8]: 252 253 257 258 302 303 307 308 
+		nodeElementTbl[406][0-8]: 253 254 258 259 303 304 308 309 
+		nodeElementTbl[407][0-8]: 254 1000 259 1000 304 1000 309 1000 
+		nodeElementTbl[408][0-8]: 1000 255 1000 260 1000 305 1000 310 
+		nodeElementTbl[409][0-8]: 255 256 260 261 305 306 310 311 
+		nodeElementTbl[410][0-8]: 256 257 261 262 306 307 311 312 
+		nodeElementTbl[411][0-8]: 257 258 262 263 307 308 312 313 
+		nodeElementTbl[412][0-8]: 258 259 263 264 308 309 313 314 
+		nodeElementTbl[413][0-8]: 259 1000 264 1000 309 1000 314 1000 
+		nodeElementTbl[414][0-8]: 1000 260 1000 265 1000 310 1000 315 
+		nodeElementTbl[415][0-8]: 260 261 265 266 310 311 315 316 
+		nodeElementTbl[416][0-8]: 261 262 266 267 311 312 316 317 
+		nodeElementTbl[417][0-8]: 262 263 267 268 312 313 317 318 
+		nodeElementTbl[418][0-8]: 263 264 268 269 313 314 318 319 
+		nodeElementTbl[419][0-8]: 264 1000 269 1000 314 1000 319 1000 
+		nodeElementTbl[420][0-8]: 1000 265 1000 270 1000 315 1000 320 
+		nodeElementTbl[421][0-8]: 265 266 270 271 315 316 320 321 
+		nodeElementTbl[422][0-8]: 266 267 271 272 316 317 321 322 
+		nodeElementTbl[423][0-8]: 267 268 272 273 317 318 322 323 
+		nodeElementTbl[424][0-8]: 268 269 273 274 318 319 323 324 
+		nodeElementTbl[425][0-8]: 269 1000 274 1000 319 1000 324 1000 
+		nodeElementTbl[426][0-8]: 1000 270 1000 275 1000 320 1000 325 
+		nodeElementTbl[427][0-8]: 270 271 275 276 320 321 325 326 
+		nodeElementTbl[428][0-8]: 271 272 276 277 321 322 326 327 
+		nodeElementTbl[429][0-8]: 272 273 277 278 322 323 327 328 
+		nodeElementTbl[430][0-8]: 273 274 278 279 323 324 328 329 
+		nodeElementTbl[431][0-8]: 274 1000 279 1000 324 1000 329 1000 
+		nodeElementTbl[432][0-8]: 1000 275 1000 280 1000 325 1000 330 
+		nodeElementTbl[433][0-8]: 275 276 280 281 325 326 330 331 
+		nodeElementTbl[434][0-8]: 276 277 281 282 326 327 331 332 
+		nodeElementTbl[435][0-8]: 277 278 282 283 327 328 332 333 
+		nodeElementTbl[436][0-8]: 278 279 283 284 328 329 333 334 
+		nodeElementTbl[437][0-8]: 279 1000 284 1000 329 1000 334 1000 
+		nodeElementTbl[438][0-8]: 1000 280 1000 285 1000 330 1000 335 
+		nodeElementTbl[439][0-8]: 280 281 285 286 330 331 335 336 
+		nodeElementTbl[440][0-8]: 281 282 286 287 331 332 336 337 
+		nodeElementTbl[441][0-8]: 282 283 287 288 332 333 337 338 
+		nodeElementTbl[442][0-8]: 283 284 288 289 333 334 338 339 
+		nodeElementTbl[443][0-8]: 284 1000 289 1000 334 1000 339 1000 
+		nodeElementTbl[444][0-8]: 1000 285 1000 290 1000 335 1000 340 
+		nodeElementTbl[445][0-8]: 285 286 290 291 335 336 340 341 
+		nodeElementTbl[446][0-8]: 286 287 291 292 336 337 341 342 
+		nodeElementTbl[447][0-8]: 287 288 292 293 337 338 342 343 
+		nodeElementTbl[448][0-8]: 288 289 293 294 338 339 343 344 
+		nodeElementTbl[449][0-8]: 289 1000 294 1000 339 1000 344 1000 
+		nodeElementTbl[450][0-8]: 1000 290 1000 295 1000 340 1000 345 
+		nodeElementTbl[451][0-8]: 290 291 295 296 340 341 345 346 
+		nodeElementTbl[452][0-8]: 291 292 296 297 341 342 346 347 
+		nodeElementTbl[453][0-8]: 292 293 297 298 342 343 347 348 
+		nodeElementTbl[454][0-8]: 293 294 298 299 343 344 348 349 
+		nodeElementTbl[455][0-8]: 294 1000 299 1000 344 1000 349 1000 
+		nodeElementTbl[456][0-8]: 1000 295 1000 1000 1000 345 1000 1000 
+		nodeElementTbl[457][0-8]: 295 296 1000 1000 345 346 1000 1000 
+		nodeElementTbl[458][0-8]: 296 297 1000 1000 346 347 1000 1000 
+		nodeElementTbl[459][0-8]: 297 298 1000 1000 347 348 1000 1000 
+		nodeElementTbl[460][0-8]: 298 299 1000 1000 348 349 1000 1000 
+		nodeElementTbl[461][0-8]: 299 1000 1000 1000 349 1000 1000 1000 
+		nodeElementTbl[462][0-8]: 1000 1000 1000 300 1000 1000 1000 350 
+		nodeElementTbl[463][0-8]: 1000 1000 300 301 1000 1000 350 351 
+		nodeElementTbl[464][0-8]: 1000 1000 301 302 1000 1000 351 352 
+		nodeElementTbl[465][0-8]: 1000 1000 302 303 1000 1000 352 353 
+		nodeElementTbl[466][0-8]: 1000 1000 303 304 1000 1000 353 354 
+		nodeElementTbl[467][0-8]: 1000 1000 304 1000 1000 1000 354 1000 
+		nodeElementTbl[468][0-8]: 1000 300 1000 305 1000 350 1000 355 
+		nodeElementTbl[469][0-8]: 300 301 305 306 350 351 355 356 
+		nodeElementTbl[470][0-8]: 301 302 306 307 351 352 356 357 
+		nodeElementTbl[471][0-8]: 302 303 307 308 352 353 357 358 
+		nodeElementTbl[472][0-8]: 303 304 308 309 353 354 358 359 
+		nodeElementTbl[473][0-8]: 304 1000 309 1000 354 1000 359 1000 
+		nodeElementTbl[474][0-8]: 1000 305 1000 310 1000 355 1000 360 
+		nodeElementTbl[475][0-8]: 305 306 310 311 355 356 360 361 
+		nodeElementTbl[476][0-8]: 306 307 311 312 356 357 361 362 
+		nodeElementTbl[477][0-8]: 307 308 312 313 357 358 362 363 
+		nodeElementTbl[478][0-8]: 308 309 313 314 358 359 363 364 
+		nodeElementTbl[479][0-8]: 309 1000 314 1000 359 1000 364 1000 
+		nodeElementTbl[480][0-8]: 1000 310 1000 315 1000 360 1000 365 
+		nodeElementTbl[481][0-8]: 310 311 315 316 360 361 365 366 
+		nodeElementTbl[482][0-8]: 311 312 316 317 361 362 366 367 
+		nodeElementTbl[483][0-8]: 312 313 317 318 362 363 367 368 
+		nodeElementTbl[484][0-8]: 313 314 318 319 363 364 368 369 
+		nodeElementTbl[485][0-8]: 314 1000 319 1000 364 1000 369 1000 
+		nodeElementTbl[486][0-8]: 1000 315 1000 320 1000 365 1000 370 
+		nodeElementTbl[487][0-8]: 315 316 320 321 365 366 370 371 
+		nodeElementTbl[488][0-8]: 316 317 321 322 366 367 371 372 
+		nodeElementTbl[489][0-8]: 317 318 322 323 367 368 372 373 
+		nodeElementTbl[490][0-8]: 318 319 323 324 368 369 373 374 
+		nodeElementTbl[491][0-8]: 319 1000 324 1000 369 1000 374 1000 
+		nodeElementTbl[492][0-8]: 1000 320 1000 325 1000 370 1000 375 
+		nodeElementTbl[493][0-8]: 320 321 325 326 370 371 375 376 
+		nodeElementTbl[494][0-8]: 321 322 326 327 371 372 376 377 
+		nodeElementTbl[495][0-8]: 322 323 327 328 372 373 377 378 
+		nodeElementTbl[496][0-8]: 323 324 328 329 373 374 378 379 
+		nodeElementTbl[497][0-8]: 324 1000 329 1000 374 1000 379 1000 
+		nodeElementTbl[498][0-8]: 1000 325 1000 330 1000 375 1000 380 
+		nodeElementTbl[499][0-8]: 325 326 330 331 375 376 380 381 
+		nodeElementTbl[500][0-8]: 326 327 331 332 376 377 381 382 
+		nodeElementTbl[501][0-8]: 327 328 332 333 377 378 382 383 
+		nodeElementTbl[502][0-8]: 328 329 333 334 378 379 383 384 
+		nodeElementTbl[503][0-8]: 329 1000 334 1000 379 1000 384 1000 
+		nodeElementTbl[504][0-8]: 1000 330 1000 335 1000 380 1000 385 
+		nodeElementTbl[505][0-8]: 330 331 335 336 380 381 385 386 
+		nodeElementTbl[506][0-8]: 331 332 336 337 381 382 386 387 
+		nodeElementTbl[507][0-8]: 332 333 337 338 382 383 387 388 
+		nodeElementTbl[508][0-8]: 333 334 338 339 383 384 388 389 
+		nodeElementTbl[509][0-8]: 334 1000 339 1000 384 1000 389 1000 
+		nodeElementTbl[510][0-8]: 1000 335 1000 340 1000 385 1000 390 
+		nodeElementTbl[511][0-8]: 335 336 340 341 385 386 390 391 
+		nodeElementTbl[512][0-8]: 336 337 341 342 386 387 391 392 
+		nodeElementTbl[513][0-8]: 337 338 342 343 387 388 392 393 
+		nodeElementTbl[514][0-8]: 338 339 343 344 388 389 393 394 
+		nodeElementTbl[515][0-8]: 339 1000 344 1000 389 1000 394 1000 
+		nodeElementTbl[516][0-8]: 1000 340 1000 345 1000 390 1000 395 
+		nodeElementTbl[517][0-8]: 340 341 345 346 390 391 395 396 
+		nodeElementTbl[518][0-8]: 341 342 346 347 391 392 396 397 
+		nodeElementTbl[519][0-8]: 342 343 347 348 392 393 397 398 
+		nodeElementTbl[520][0-8]: 343 344 348 349 393 394 398 399 
+		nodeElementTbl[521][0-8]: 344 1000 349 1000 394 1000 399 1000 
+		nodeElementTbl[522][0-8]: 1000 345 1000 1000 1000 395 1000 1000 
+		nodeElementTbl[523][0-8]: 345 346 1000 1000 395 396 1000 1000 
+		nodeElementTbl[524][0-8]: 346 347 1000 1000 396 397 1000 1000 
+		nodeElementTbl[525][0-8]: 347 348 1000 1000 397 398 1000 1000 
+		nodeElementTbl[526][0-8]: 348 349 1000 1000 398 399 1000 1000 
+		nodeElementTbl[527][0-8]: 349 1000 1000 1000 399 1000 1000 1000 
+		nodeElementTbl[528][0-8]: 1000 1000 1000 350 1000 1000 1000 400 
+		nodeElementTbl[529][0-8]: 1000 1000 350 351 1000 1000 400 401 
+		nodeElementTbl[530][0-8]: 1000 1000 351 352 1000 1000 401 402 
+		nodeElementTbl[531][0-8]: 1000 1000 352 353 1000 1000 402 403 
+		nodeElementTbl[532][0-8]: 1000 1000 353 354 1000 1000 403 404 
+		nodeElementTbl[533][0-8]: 1000 1000 354 1000 1000 1000 404 1000 
+		nodeElementTbl[534][0-8]: 1000 350 1000 355 1000 400 1000 405 
+		nodeElementTbl[535][0-8]: 350 351 355 356 400 401 405 406 
+		nodeElementTbl[536][0-8]: 351 352 356 357 401 402 406 407 
+		nodeElementTbl[537][0-8]: 352 353 357 358 402 403 407 408 
+		nodeElementTbl[538][0-8]: 353 354 358 359 403 404 408 409 
+		nodeElementTbl[539][0-8]: 354 1000 359 1000 404 1000 409 1000 
+		nodeElementTbl[540][0-8]: 1000 355 1000 360 1000 405 1000 410 
+		nodeElementTbl[541][0-8]: 355 356 360 361 405 406 410 411 
+		nodeElementTbl[542][0-8]: 356 357 361 362 406 407 411 412 
+		nodeElementTbl[543][0-8]: 357 358 362 363 407 408 412 413 
+		nodeElementTbl[544][0-8]: 358 359 363 364 408 409 413 414 
+		nodeElementTbl[545][0-8]: 359 1000 364 1000 409 1000 414 1000 
+		nodeElementTbl[546][0-8]: 1000 360 1000 365 1000 410 1000 415 
+		nodeElementTbl[547][0-8]: 360 361 365 366 410 411 415 416 
+		nodeElementTbl[548][0-8]: 361 362 366 367 411 412 416 417 
+		nodeElementTbl[549][0-8]: 362 363 367 368 412 413 417 418 
+		nodeElementTbl[550][0-8]: 363 364 368 369 413 414 418 419 
+		nodeElementTbl[551][0-8]: 364 1000 369 1000 414 1000 419 1000 
+		nodeElementTbl[552][0-8]: 1000 365 1000 370 1000 415 1000 420 
+		nodeElementTbl[553][0-8]: 365 366 370 371 415 416 420 421 
+		nodeElementTbl[554][0-8]: 366 367 371 372 416 417 421 422 
+		nodeElementTbl[555][0-8]: 367 368 372 373 417 418 422 423 
+		nodeElementTbl[556][0-8]: 368 369 373 374 418 419 423 424 
+		nodeElementTbl[557][0-8]: 369 1000 374 1000 419 1000 424 1000 
+		nodeElementTbl[558][0-8]: 1000 370 1000 375 1000 420 1000 425 
+		nodeElementTbl[559][0-8]: 370 371 375 376 420 421 425 426 
+		nodeElementTbl[560][0-8]: 371 372 376 377 421 422 426 427 
+		nodeElementTbl[561][0-8]: 372 373 377 378 422 423 427 428 
+		nodeElementTbl[562][0-8]: 373 374 378 379 423 424 428 429 
+		nodeElementTbl[563][0-8]: 374 1000 379 1000 424 1000 429 1000 
+		nodeElementTbl[564][0-8]: 1000 375 1000 380 1000 425 1000 430 
+		nodeElementTbl[565][0-8]: 375 376 380 381 425 426 430 431 
+		nodeElementTbl[566][0-8]: 376 377 381 382 426 427 431 432 
+		nodeElementTbl[567][0-8]: 377 378 382 383 427 428 432 433 
+		nodeElementTbl[568][0-8]: 378 379 383 384 428 429 433 434 
+		nodeElementTbl[569][0-8]: 379 1000 384 1000 429 1000 434 1000 
+		nodeElementTbl[570][0-8]: 1000 380 1000 385 1000 430 1000 435 
+		nodeElementTbl[571][0-8]: 380 381 385 386 430 431 435 436 
+		nodeElementTbl[572][0-8]: 381 382 386 387 431 432 436 437 
+		nodeElementTbl[573][0-8]: 382 383 387 388 432 433 437 438 
+		nodeElementTbl[574][0-8]: 383 384 388 389 433 434 438 439 
+		nodeElementTbl[575][0-8]: 384 1000 389 1000 434 1000 439 1000 
+		nodeElementTbl[576][0-8]: 1000 385 1000 390 1000 435 1000 440 
+		nodeElementTbl[577][0-8]: 385 386 390 391 435 436 440 441 
+		nodeElementTbl[578][0-8]: 386 387 391 392 436 437 441 442 
+		nodeElementTbl[579][0-8]: 387 388 392 393 437 438 442 443 
+		nodeElementTbl[580][0-8]: 388 389 393 394 438 439 443 444 
+		nodeElementTbl[581][0-8]: 389 1000 394 1000 439 1000 444 1000 
+		nodeElementTbl[582][0-8]: 1000 390 1000 395 1000 440 1000 445 
+		nodeElementTbl[583][0-8]: 390 391 395 396 440 441 445 446 
+		nodeElementTbl[584][0-8]: 391 392 396 397 441 442 446 447 
+		nodeElementTbl[585][0-8]: 392 393 397 398 442 443 447 448 
+		nodeElementTbl[586][0-8]: 393 394 398 399 443 444 448 449 
+		nodeElementTbl[587][0-8]: 394 1000 399 1000 444 1000 449 1000 
+		nodeElementTbl[588][0-8]: 1000 395 1000 1000 1000 445 1000 1000 
+		nodeElementTbl[589][0-8]: 395 396 1000 1000 445 446 1000 1000 
+		nodeElementTbl[590][0-8]: 396 397 1000 1000 446 447 1000 1000 
+		nodeElementTbl[591][0-8]: 397 398 1000 1000 447 448 1000 1000 
+		nodeElementTbl[592][0-8]: 398 399 1000 1000 448 449 1000 1000 
+		nodeElementTbl[593][0-8]: 399 1000 1000 1000 449 1000 1000 1000 
+		nodeElementTbl[594][0-8]: 1000 1000 1000 400 1000 1000 1000 450 
+		nodeElementTbl[595][0-8]: 1000 1000 400 401 1000 1000 450 451 
+		nodeElementTbl[596][0-8]: 1000 1000 401 402 1000 1000 451 452 
+		nodeElementTbl[597][0-8]: 1000 1000 402 403 1000 1000 452 453 
+		nodeElementTbl[598][0-8]: 1000 1000 403 404 1000 1000 453 454 
+		nodeElementTbl[599][0-8]: 1000 1000 404 1000 1000 1000 454 1000 
+		nodeElementTbl[600][0-8]: 1000 400 1000 405 1000 450 1000 455 
+		nodeElementTbl[601][0-8]: 400 401 405 406 450 451 455 456 
+		nodeElementTbl[602][0-8]: 401 402 406 407 451 452 456 457 
+		nodeElementTbl[603][0-8]: 402 403 407 408 452 453 457 458 
+		nodeElementTbl[604][0-8]: 403 404 408 409 453 454 458 459 
+		nodeElementTbl[605][0-8]: 404 1000 409 1000 454 1000 459 1000 
+		nodeElementTbl[606][0-8]: 1000 405 1000 410 1000 455 1000 460 
+		nodeElementTbl[607][0-8]: 405 406 410 411 455 456 460 461 
+		nodeElementTbl[608][0-8]: 406 407 411 412 456 457 461 462 
+		nodeElementTbl[609][0-8]: 407 408 412 413 457 458 462 463 
+		nodeElementTbl[610][0-8]: 408 409 413 414 458 459 463 464 
+		nodeElementTbl[611][0-8]: 409 1000 414 1000 459 1000 464 1000 
+		nodeElementTbl[612][0-8]: 1000 410 1000 415 1000 460 1000 465 
+		nodeElementTbl[613][0-8]: 410 411 415 416 460 461 465 466 
+		nodeElementTbl[614][0-8]: 411 412 416 417 461 462 466 467 
+		nodeElementTbl[615][0-8]: 412 413 417 418 462 463 467 468 
+		nodeElementTbl[616][0-8]: 413 414 418 419 463 464 468 469 
+		nodeElementTbl[617][0-8]: 414 1000 419 1000 464 1000 469 1000 
+		nodeElementTbl[618][0-8]: 1000 415 1000 420 1000 465 1000 470 
+		nodeElementTbl[619][0-8]: 415 416 420 421 465 466 470 471 
+		nodeElementTbl[620][0-8]: 416 417 421 422 466 467 471 472 
+		nodeElementTbl[621][0-8]: 417 418 422 423 467 468 472 473 
+		nodeElementTbl[622][0-8]: 418 419 423 424 468 469 473 474 
+		nodeElementTbl[623][0-8]: 419 1000 424 1000 469 1000 474 1000 
+		nodeElementTbl[624][0-8]: 1000 420 1000 425 1000 470 1000 475 
+		nodeElementTbl[625][0-8]: 420 421 425 426 470 471 475 476 
+		nodeElementTbl[626][0-8]: 421 422 426 427 471 472 476 477 
+		nodeElementTbl[627][0-8]: 422 423 427 428 472 473 477 478 
+		nodeElementTbl[628][0-8]: 423 424 428 429 473 474 478 479 
+		nodeElementTbl[629][0-8]: 424 1000 429 1000 474 1000 479 1000 
+		nodeElementTbl[630][0-8]: 1000 425 1000 430 1000 475 1000 480 
+		nodeElementTbl[631][0-8]: 425 426 430 431 475 476 480 481 
+		nodeElementTbl[632][0-8]: 426 427 431 432 476 477 481 482 
+		nodeElementTbl[633][0-8]: 427 428 432 433 477 478 482 483 
+		nodeElementTbl[634][0-8]: 428 429 433 434 478 479 483 484 
+		nodeElementTbl[635][0-8]: 429 1000 434 1000 479 1000 484 1000 
+		nodeElementTbl[636][0-8]: 1000 430 1000 435 1000 480 1000 485 
+		nodeElementTbl[637][0-8]: 430 431 435 436 480 481 485 486 
+		nodeElementTbl[638][0-8]: 431 432 436 437 481 482 486 487 
+		nodeElementTbl[639][0-8]: 432 433 437 438 482 483 487 488 
+		nodeElementTbl[640][0-8]: 433 434 438 439 483 484 488 489 
+		nodeElementTbl[641][0-8]: 434 1000 439 1000 484 1000 489 1000 
+		nodeElementTbl[642][0-8]: 1000 435 1000 440 1000 485 1000 490 
+		nodeElementTbl[643][0-8]: 435 436 440 441 485 486 490 491 
+		nodeElementTbl[644][0-8]: 436 437 441 442 486 487 491 492 
+		nodeElementTbl[645][0-8]: 437 438 442 443 487 488 492 493 
+		nodeElementTbl[646][0-8]: 438 439 443 444 488 489 493 494 
+		nodeElementTbl[647][0-8]: 439 1000 444 1000 489 1000 494 1000 
+		nodeElementTbl[648][0-8]: 1000 440 1000 445 1000 490 1000 495 
+		nodeElementTbl[649][0-8]: 440 441 445 446 490 491 495 496 
+		nodeElementTbl[650][0-8]: 441 442 446 447 491 492 496 497 
+		nodeElementTbl[651][0-8]: 442 443 447 448 492 493 497 498 
+		nodeElementTbl[652][0-8]: 443 444 448 449 493 494 498 499 
+		nodeElementTbl[653][0-8]: 444 1000 449 1000 494 1000 499 1000 
+		nodeElementTbl[654][0-8]: 1000 445 1000 1000 1000 495 1000 1000 
+		nodeElementTbl[655][0-8]: 445 446 1000 1000 495 496 1000 1000 
+		nodeElementTbl[656][0-8]: 446 447 1000 1000 496 497 1000 1000 
+		nodeElementTbl[657][0-8]: 447 448 1000 1000 497 498 1000 1000 
+		nodeElementTbl[658][0-8]: 448 449 1000 1000 498 499 1000 1000 
+		nodeElementTbl[659][0-8]: 449 1000 1000 1000 499 1000 1000 1000 
+		nodeElementTbl[660][0-8]: 1000 1000 1000 450 1000 1000 1000 1000 
+		nodeElementTbl[661][0-8]: 1000 1000 450 451 1000 1000 1000 1000 
+		nodeElementTbl[662][0-8]: 1000 1000 451 452 1000 1000 1000 1000 
+		nodeElementTbl[663][0-8]: 1000 1000 452 453 1000 1000 1000 1000 
+		nodeElementTbl[664][0-8]: 1000 1000 453 454 1000 1000 1000 1000 
+		nodeElementTbl[665][0-8]: 1000 1000 454 1000 1000 1000 1000 1000 
+		nodeElementTbl[666][0-8]: 1000 450 1000 455 1000 1000 1000 1000 
+		nodeElementTbl[667][0-8]: 450 451 455 456 1000 1000 1000 1000 
+		nodeElementTbl[668][0-8]: 451 452 456 457 1000 1000 1000 1000 
+		nodeElementTbl[669][0-8]: 452 453 457 458 1000 1000 1000 1000 
+		nodeElementTbl[670][0-8]: 453 454 458 459 1000 1000 1000 1000 
+		nodeElementTbl[671][0-8]: 454 1000 459 1000 1000 1000 1000 1000 
+		nodeElementTbl[672][0-8]: 1000 455 1000 460 1000 1000 1000 1000 
+		nodeElementTbl[673][0-8]: 455 456 460 461 1000 1000 1000 1000 
+		nodeElementTbl[674][0-8]: 456 457 461 462 1000 1000 1000 1000 
+		nodeElementTbl[675][0-8]: 457 458 462 463 1000 1000 1000 1000 
+		nodeElementTbl[676][0-8]: 458 459 463 464 1000 1000 1000 1000 
+		nodeElementTbl[677][0-8]: 459 1000 464 1000 1000 1000 1000 1000 
+		nodeElementTbl[678][0-8]: 1000 460 1000 465 1000 1000 1000 1000 
+		nodeElementTbl[679][0-8]: 460 461 465 466 1000 1000 1000 1000 
+		nodeElementTbl[680][0-8]: 461 462 466 467 1000 1000 1000 1000 
+		nodeElementTbl[681][0-8]: 462 463 467 468 1000 1000 1000 1000 
+		nodeElementTbl[682][0-8]: 463 464 468 469 1000 1000 1000 1000 
+		nodeElementTbl[683][0-8]: 464 1000 469 1000 1000 1000 1000 1000 
+		nodeElementTbl[684][0-8]: 1000 465 1000 470 1000 1000 1000 1000 
+		nodeElementTbl[685][0-8]: 465 466 470 471 1000 1000 1000 1000 
+		nodeElementTbl[686][0-8]: 466 467 471 472 1000 1000 1000 1000 
+		nodeElementTbl[687][0-8]: 467 468 472 473 1000 1000 1000 1000 
+		nodeElementTbl[688][0-8]: 468 469 473 474 1000 1000 1000 1000 
+		nodeElementTbl[689][0-8]: 469 1000 474 1000 1000 1000 1000 1000 
+		nodeElementTbl[690][0-8]: 1000 470 1000 475 1000 1000 1000 1000 
+		nodeElementTbl[691][0-8]: 470 471 475 476 1000 1000 1000 1000 
+		nodeElementTbl[692][0-8]: 471 472 476 477 1000 1000 1000 1000 
+		nodeElementTbl[693][0-8]: 472 473 477 478 1000 1000 1000 1000 
+		nodeElementTbl[694][0-8]: 473 474 478 479 1000 1000 1000 1000 
+		nodeElementTbl[695][0-8]: 474 1000 479 1000 1000 1000 1000 1000 
+		nodeElementTbl[696][0-8]: 1000 475 1000 480 1000 1000 1000 1000 
+		nodeElementTbl[697][0-8]: 475 476 480 481 1000 1000 1000 1000 
+		nodeElementTbl[698][0-8]: 476 477 481 482 1000 1000 1000 1000 
+		nodeElementTbl[699][0-8]: 477 478 482 483 1000 1000 1000 1000 
+		nodeElementTbl[700][0-8]: 478 479 483 484 1000 1000 1000 1000 
+		nodeElementTbl[701][0-8]: 479 1000 484 1000 1000 1000 1000 1000 
+		nodeElementTbl[702][0-8]: 1000 480 1000 485 1000 1000 1000 1000 
+		nodeElementTbl[703][0-8]: 480 481 485 486 1000 1000 1000 1000 
+		nodeElementTbl[704][0-8]: 481 482 486 487 1000 1000 1000 1000 
+		nodeElementTbl[705][0-8]: 482 483 487 488 1000 1000 1000 1000 
+		nodeElementTbl[706][0-8]: 483 484 488 489 1000 1000 1000 1000 
+		nodeElementTbl[707][0-8]: 484 1000 489 1000 1000 1000 1000 1000 
+		nodeElementTbl[708][0-8]: 1000 485 1000 490 1000 1000 1000 1000 
+		nodeElementTbl[709][0-8]: 485 486 490 491 1000 1000 1000 1000 
+		nodeElementTbl[710][0-8]: 486 487 491 492 1000 1000 1000 1000 
+		nodeElementTbl[711][0-8]: 487 488 492 493 1000 1000 1000 1000 
+		nodeElementTbl[712][0-8]: 488 489 493 494 1000 1000 1000 1000 
+		nodeElementTbl[713][0-8]: 489 1000 494 1000 1000 1000 1000 1000 
+		nodeElementTbl[714][0-8]: 1000 490 1000 495 1000 1000 1000 1000 
+		nodeElementTbl[715][0-8]: 490 491 495 496 1000 1000 1000 1000 
+		nodeElementTbl[716][0-8]: 491 492 496 497 1000 1000 1000 1000 
+		nodeElementTbl[717][0-8]: 492 493 497 498 1000 1000 1000 1000 
+		nodeElementTbl[718][0-8]: 493 494 498 499 1000 1000 1000 1000 
+		nodeElementTbl[719][0-8]: 494 1000 499 1000 1000 1000 1000 1000 
+		nodeElementTbl[720][0-8]: 1000 495 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[721][0-8]: 495 496 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[722][0-8]: 496 497 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[723][0-8]: 497 498 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[724][0-8]: 498 499 1000 1000 1000 1000 1000 1000 
+		nodeElementTbl[725][0-8]: 499 1000 1000 1000 1000 1000 1000 1000 
+	element (ptr): 0x806f8c8
+	elementLocalCount: 500
+	elementDomainCount: 500
+	elementShadowCount: 0
+	elementGlobalCount: 1000
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x8077a08
+	elementL2G[0-500]:   005 006 007 008 009 015 016 017 018 019 025 026 027 028 029 035 036 037 038 039 045 046 047 048 049 055 056 057 058 059 065 066 067 068 069 075 076 077 078 079 085 086 087 088 089 095 096 097 098 099 105 106 107 108 109 115 116 117 118 119 125 126 127 128 129 135 136 137 138 139 145 146 147 148 149 155 156 157 158 159 165 166 167 168 169 175 176 177 178 179 185 186 187 188 189 195 196 197 198 199 205 206 207 208 209 215 216 217 218 219 225 226 227 228 229 235 236 237 238 239 245 246 247 248 249 255 256 257 258 259 265 266 267 268 269 275 276 277 278 279 285 286 287 288 289 295 296 297 298 299 305 306 307 308 309 315 316 317 318 319 325 326 327 328 329 335 336 337 338 339 345 346 347 348 349 355 356 357 358 359 365 366 367 368 369 375 376 377 378 379 385 386 387 388 389 395 396 397 398 399 405 406 407 408 409 415 416 417 418 419 425 426 427 428 429 435 436 437 438 439 445 446 447 448 449 455 456 457 458 459 465 466 467 468 469 475 476 477 478 479 485 486 487 488 489 495 496 497 498 499 505 506 507 508 509 515 516 517 518 519 525 526 527 528 529 535 536 537 538 539 545 546 547 548 549 555 556 557 558 559 565 566 567 568 569 575 576 577 578 579 585 586 587 588 589 595 596 597 598 599 605 606 607 608 609 615 616 617 618 619 625 626 627 628 629 635 636 637 638 639 645 646 647 648 649 655 656 657 658 659 665 666 667 668 669 675 676 677 678 679 685 686 687 688 689 695 696 697 698 699 705 706 707 708 709 715 716 717 718 719 725 726 727 728 729 735 736 737 738 739 745 746 747 748 749 755 756 757 758 759 765 766 767 768 769 775 776 777 778 779 785 786 787 788 789 795 796 797 798 799 805 806 807 808 809 815 816 817 818 819 825 826 827 828 829 835 836 837 838 839 845 846 847 848 849 855 856 857 858 859 865 866 867 868 869 875 876 877 878 879 885 886 887 888 889 895 896 897 898 899 905 906 907 908 909 915 916 917 918 919 925 926 927 928 929 935 936 937 938 939 945 946 947 948 949 955 956 957 958 959 965 966 967 968 969 975 976 977 978 979 985 986 987 988 989 995 996 997 998 999 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x8077a08
+	elementD2G[0-500]:   005 006 007 008 009 015 016 017 018 019 025 026 027 028 029 035 036 037 038 039 045 046 047 048 049 055 056 057 058 059 065 066 067 068 069 075 076 077 078 079 085 086 087 088 089 095 096 097 098 099 105 106 107 108 109 115 116 117 118 119 125 126 127 128 129 135 136 137 138 139 145 146 147 148 149 155 156 157 158 159 165 166 167 168 169 175 176 177 178 179 185 186 187 188 189 195 196 197 198 199 205 206 207 208 209 215 216 217 218 219 225 226 227 228 229 235 236 237 238 239 245 246 247 248 249 255 256 257 258 259 265 266 267 268 269 275 276 277 278 279 285 286 287 288 289 295 296 297 298 299 305 306 307 308 309 315 316 317 318 319 325 326 327 328 329 335 336 337 338 339 345 346 347 348 349 355 356 357 358 359 365 366 367 368 369 375 376 377 378 379 385 386 387 388 389 395 396 397 398 399 405 406 407 408 409 415 416 417 418 419 425 426 427 428 429 435 436 437 438 439 445 446 447 448 449 455 456 457 458 459 465 466 467 468 469 475 476 477 478 479 485 486 487 488 489 495 496 497 498 499 505 506 507 508 509 515 516 517 518 519 525 526 527 528 529 535 536 537 538 539 545 546 547 548 549 555 556 557 558 559 565 566 567 568 569 575 576 577 578 579 585 586 587 588 589 595 596 597 598 599 605 606 607 608 609 615 616 617 618 619 625 626 627 628 629 635 636 637 638 639 645 646 647 648 649 655 656 657 658 659 665 666 667 668 669 675 676 677 678 679 685 686 687 688 689 695 696 697 698 699 705 706 707 708 709 715 716 717 718 719 725 726 727 728 729 735 736 737 738 739 745 746 747 748 749 755 756 757 758 759 765 766 767 768 769 775 776 777 778 779 785 786 787 788 789 795 796 797 798 799 805 806 807 808 809 815 816 817 818 819 825 826 827 828 829 835 836 837 838 839 845 846 847 848 849 855 856 857 858 859 865 866 867 868 869 875 876 877 878 879 885 886 887 888 889 895 896 897 898 899 905 906 907 908 909 915 916 917 918 919 925 926 927 928 929 935 936 937 938 939 945 946 947 948 949 955 956 957 958 959 965 966 967 968 969 975 976 977 978 979 985 986 987 988 989 995 996 997 998 999 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x80781e8
+	elementG2L[0-1000]:   1000 1000 1000 1000 1000 000 001 002 003 004 1000 1000 1000 1000 1000 005 006 007 008 009 1000 1000 1000 1000 1000 010 011 012 013 014 1000 1000 1000 1000 1000 015 016 017 018 019 1000 1000 1000 1000 1000 020 021 022 023 024 1000 1000 1000 1000 1000 025 026 027 028 029 1000 1000 1000 1000 1000 030 031 032 033 034 1000 1000 1000 1000 1000 035 036 037 038 039 1000 1000 1000 1000 1000 040 041 042 043 044 1000 1000 1000 1000 1000 045 046 047 048 049 1000 1000 1000 1000 1000 050 051 052 053 054 1000 1000 1000 1000 1000 055 056 057 058 059 1000 1000 1000 1000 1000 060 061 062 063 064 1000 1000 1000 1000 1000 065 066 067 068 069 1000 1000 1000 1000 1000 070 071 072 073 074 1000 1000 1000 1000 1000 075 076 077 078 079 1000 1000 1000 1000 1000 080 081 082 083 084 1000 1000 1000 1000 1000 085 086 087 088 089 1000 1000 1000 1000 1000 090 091 092 093 094 1000 1000 1000 1000 1000 095 096 097 098 099 1000 1000 1000 1000 1000 100 101 102 103 104 1000 1000 1000 1000 1000 105 106 107 108 109 1000 1000 1000 1000 1000 110 111 112 113 114 1000 1000 1000 1000 1000 115 116 117 118 119 1000 1000 1000 1000 1000 120 121 122 123 124 1000 1000 1000 1000 1000 125 126 127 128 129 1000 1000 1000 1000 1000 130 131 132 133 134 1000 1000 1000 1000 1000 135 136 137 138 139 1000 1000 1000 1000 1000 140 141 142 143 144 1000 1000 1000 1000 1000 145 146 147 148 149 1000 1000 1000 1000 1000 150 151 152 153 154 1000 1000 1000 1000 1000 155 156 157 158 159 1000 1000 1000 1000 1000 160 161 162 163 164 1000 1000 1000 1000 1000 165 166 167 168 169 1000 1000 1000 1000 1000 170 171 172 173 174 1000 1000 1000 1000 1000 175 176 177 178 179 1000 1000 1000 1000 1000 180 181 182 183 184 1000 1000 1000 1000 1000 185 186 187 188 189 1000 1000 1000 1000 1000 190 191 192 193 194 1000 1000 1000 1000 1000 195 196 197 198 199 1000 1000 1000 1000 1000 200 201 202 203 204 1000 1000 1000 1000 1000 205 206 207 208 209 1000 1000 1000 1000 1000 210 211 212 213 214 1000 1000 1000 1000 1000 215 216 217 218 219 1000 1000 1000 1000 1000 220 221 222 223 224 1000 1000 1000 1000 1000 225 226 227 228 229 1000 1000 1000 1000 1000 230 231 232 233 234 1000 1000 1000 1000 1000 235 236 237 238 239 1000 1000 1000 1000 1000 240 241 242 243 244 1000 1000 1000 1000 1000 245 246 247 248 249 1000 1000 1000 1000 1000 250 251 252 253 254 1000 1000 1000 1000 1000 255 256 257 258 259 1000 1000 1000 1000 1000 260 261 262 263 264 1000 1000 1000 1000 1000 265 266 267 268 269 1000 1000 1000 1000 1000 270 271 272 273 274 1000 1000 1000 1000 1000 275 276 277 278 279 1000 1000 1000 1000 1000 280 281 282 283 284 1000 1000 1000 1000 1000 285 286 287 288 289 1000 1000 1000 1000 1000 290 291 292 293 294 1000 1000 1000 1000 1000 295 296 297 298 299 1000 1000 1000 1000 1000 300 301 302 303 304 1000 1000 1000 1000 1000 305 306 307 308 309 1000 1000 1000 1000 1000 310 311 312 313 314 1000 1000 1000 1000 1000 315 316 317 318 319 1000 1000 1000 1000 1000 320 321 322 323 324 1000 1000 1000 1000 1000 325 326 327 328 329 1000 1000 1000 1000 1000 330 331 332 333 334 1000 1000 1000 1000 1000 335 336 337 338 339 1000 1000 1000 1000 1000 340 341 342 343 344 1000 1000 1000 1000 1000 345 346 347 348 349 1000 1000 1000 1000 1000 350 351 352 353 354 1000 1000 1000 1000 1000 355 356 357 358 359 1000 1000 1000 1000 1000 360 361 362 363 364 1000 1000 1000 1000 1000 365 366 367 368 369 1000 1000 1000 1000 1000 370 371 372 373 374 1000 1000 1000 1000 1000 375 376 377 378 379 1000 1000 1000 1000 1000 380 381 382 383 384 1000 1000 1000 1000 1000 385 386 387 388 389 1000 1000 1000 1000 1000 390 391 392 393 394 1000 1000 1000 1000 1000 395 396 397 398 399 1000 1000 1000 1000 1000 400 401 402 403 404 1000 1000 1000 1000 1000 405 406 407 408 409 1000 1000 1000 1000 1000 410 411 412 413 414 1000 1000 1000 1000 1000 415 416 417 418 419 1000 1000 1000 1000 1000 420 421 422 423 424 1000 1000 1000 1000 1000 425 426 427 428 429 1000 1000 1000 1000 1000 430 431 432 433 434 1000 1000 1000 1000 1000 435 436 437 438 439 1000 1000 1000 1000 1000 440 441 442 443 444 1000 1000 1000 1000 1000 445 446 447 448 449 1000 1000 1000 1000 1000 450 451 452 453 454 1000 1000 1000 1000 1000 455 456 457 458 459 1000 1000 1000 1000 1000 460 461 462 463 464 1000 1000 1000 1000 1000 465 466 467 468 469 1000 1000 1000 1000 1000 470 471 472 473 474 1000 1000 1000 1000 1000 475 476 477 478 479 1000 1000 1000 1000 1000 480 481 482 483 484 1000 1000 1000 1000 1000 485 486 487 488 489 1000 1000 1000 1000 1000 490 491 492 493 494 1000 1000 1000 1000 1000 495 496 497 498 499 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x80781e8
+	elementG2D[0-1000]:   1000 1000 1000 1000 1000 000 001 002 003 004 1000 1000 1000 1000 1000 005 006 007 008 009 1000 1000 1000 1000 1000 010 011 012 013 014 1000 1000 1000 1000 1000 015 016 017 018 019 1000 1000 1000 1000 1000 020 021 022 023 024 1000 1000 1000 1000 1000 025 026 027 028 029 1000 1000 1000 1000 1000 030 031 032 033 034 1000 1000 1000 1000 1000 035 036 037 038 039 1000 1000 1000 1000 1000 040 041 042 043 044 1000 1000 1000 1000 1000 045 046 047 048 049 1000 1000 1000 1000 1000 050 051 052 053 054 1000 1000 1000 1000 1000 055 056 057 058 059 1000 1000 1000 1000 1000 060 061 062 063 064 1000 1000 1000 1000 1000 065 066 067 068 069 1000 1000 1000 1000 1000 070 071 072 073 074 1000 1000 1000 1000 1000 075 076 077 078 079 1000 1000 1000 1000 1000 080 081 082 083 084 1000 1000 1000 1000 1000 085 086 087 088 089 1000 1000 1000 1000 1000 090 091 092 093 094 1000 1000 1000 1000 1000 095 096 097 098 099 1000 1000 1000 1000 1000 100 101 102 103 104 1000 1000 1000 1000 1000 105 106 107 108 109 1000 1000 1000 1000 1000 110 111 112 113 114 1000 1000 1000 1000 1000 115 116 117 118 119 1000 1000 1000 1000 1000 120 121 122 123 124 1000 1000 1000 1000 1000 125 126 127 128 129 1000 1000 1000 1000 1000 130 131 132 133 134 1000 1000 1000 1000 1000 135 136 137 138 139 1000 1000 1000 1000 1000 140 141 142 143 144 1000 1000 1000 1000 1000 145 146 147 148 149 1000 1000 1000 1000 1000 150 151 152 153 154 1000 1000 1000 1000 1000 155 156 157 158 159 1000 1000 1000 1000 1000 160 161 162 163 164 1000 1000 1000 1000 1000 165 166 167 168 169 1000 1000 1000 1000 1000 170 171 172 173 174 1000 1000 1000 1000 1000 175 176 177 178 179 1000 1000 1000 1000 1000 180 181 182 183 184 1000 1000 1000 1000 1000 185 186 187 188 189 1000 1000 1000 1000 1000 190 191 192 193 194 1000 1000 1000 1000 1000 195 196 197 198 199 1000 1000 1000 1000 1000 200 201 202 203 204 1000 1000 1000 1000 1000 205 206 207 208 209 1000 1000 1000 1000 1000 210 211 212 213 214 1000 1000 1000 1000 1000 215 216 217 218 219 1000 1000 1000 1000 1000 220 221 222 223 224 1000 1000 1000 1000 1000 225 226 227 228 229 1000 1000 1000 1000 1000 230 231 232 233 234 1000 1000 1000 1000 1000 235 236 237 238 239 1000 1000 1000 1000 1000 240 241 242 243 244 1000 1000 1000 1000 1000 245 246 247 248 249 1000 1000 1000 1000 1000 250 251 252 253 254 1000 1000 1000 1000 1000 255 256 257 258 259 1000 1000 1000 1000 1000 260 261 262 263 264 1000 1000 1000 1000 1000 265 266 267 268 269 1000 1000 1000 1000 1000 270 271 272 273 274 1000 1000 1000 1000 1000 275 276 277 278 279 1000 1000 1000 1000 1000 280 281 282 283 284 1000 1000 1000 1000 1000 285 286 287 288 289 1000 1000 1000 1000 1000 290 291 292 293 294 1000 1000 1000 1000 1000 295 296 297 298 299 1000 1000 1000 1000 1000 300 301 302 303 304 1000 1000 1000 1000 1000 305 306 307 308 309 1000 1000 1000 1000 1000 310 311 312 313 314 1000 1000 1000 1000 1000 315 316 317 318 319 1000 1000 1000 1000 1000 320 321 322 323 324 1000 1000 1000 1000 1000 325 326 327 328 329 1000 1000 1000 1000 1000 330 331 332 333 334 1000 1000 1000 1000 1000 335 336 337 338 339 1000 1000 1000 1000 1000 340 341 342 343 344 1000 1000 1000 1000 1000 345 346 347 348 349 1000 1000 1000 1000 1000 350 351 352 353 354 1000 1000 1000 1000 1000 355 356 357 358 359 1000 1000 1000 1000 1000 360 361 362 363 364 1000 1000 1000 1000 1000 365 366 367 368 369 1000 1000 1000 1000 1000 370 371 372 373 374 1000 1000 1000 1000 1000 375 376 377 378 379 1000 1000 1000 1000 1000 380 381 382 383 384 1000 1000 1000 1000 1000 385 386 387 388 389 1000 1000 1000 1000 1000 390 391 392 393 394 1000 1000 1000 1000 1000 395 396 397 398 399 1000 1000 1000 1000 1000 400 401 402 403 404 1000 1000 1000 1000 1000 405 406 407 408 409 1000 1000 1000 1000 1000 410 411 412 413 414 1000 1000 1000 1000 1000 415 416 417 418 419 1000 1000 1000 1000 1000 420 421 422 423 424 1000 1000 1000 1000 1000 425 426 427 428 429 1000 1000 1000 1000 1000 430 431 432 433 434 1000 1000 1000 1000 1000 435 436 437 438 439 1000 1000 1000 1000 1000 440 441 442 443 444 1000 1000 1000 1000 1000 445 446 447 448 449 1000 1000 1000 1000 1000 450 451 452 453 454 1000 1000 1000 1000 1000 455 456 457 458 459 1000 1000 1000 1000 1000 460 461 462 463 464 1000 1000 1000 1000 1000 465 466 467 468 469 1000 1000 1000 1000 1000 470 471 472 473 474 1000 1000 1000 1000 1000 475 476 477 478 479 1000 1000 1000 1000 1000 480 481 482 483 484 1000 1000 1000 1000 1000 485 486 487 488 489 1000 1000 1000 1000 1000 490 491 492 493 494 1000 1000 1000 1000 1000 495 496 497 498 499 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8079198
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8079978
+	elementNeighbourTbl[0-500]:
+		elementNeighbourTbl[0][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 1000 005 006 1000 1000 1000 1000 050 051 1000 055 056 
+		elementNeighbourTbl[1][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 002 005 006 007 1000 1000 1000 050 051 052 055 056 057 
+		elementNeighbourTbl[2][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 003 006 007 008 1000 1000 1000 051 052 053 056 057 058 
+		elementNeighbourTbl[3][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 004 007 008 009 1000 1000 1000 052 053 054 057 058 059 
+		elementNeighbourTbl[4][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 1000 008 009 1000 1000 1000 1000 053 054 1000 058 059 1000 
+		elementNeighbourTbl[5][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 1000 006 1000 010 011 1000 050 051 1000 055 056 1000 060 061 
+		elementNeighbourTbl[6][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 000 001 002 005 007 010 011 012 050 051 052 055 056 057 060 061 062 
+		elementNeighbourTbl[7][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 001 002 003 006 008 011 012 013 051 052 053 056 057 058 061 062 063 
+		elementNeighbourTbl[8][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 002 003 004 007 009 012 013 014 052 053 054 057 058 059 062 063 064 
+		elementNeighbourTbl[9][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 003 004 1000 008 1000 013 014 1000 053 054 1000 058 059 1000 063 064 1000 
+		elementNeighbourTbl[10][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 006 1000 011 1000 015 016 1000 055 056 1000 060 061 1000 065 066 
+		elementNeighbourTbl[11][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 005 006 007 010 012 015 016 017 055 056 057 060 061 062 065 066 067 
+		elementNeighbourTbl[12][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 006 007 008 011 013 016 017 018 056 057 058 061 062 063 066 067 068 
+		elementNeighbourTbl[13][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 007 008 009 012 014 017 018 019 057 058 059 062 063 064 067 068 069 
+		elementNeighbourTbl[14][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 008 009 1000 013 1000 018 019 1000 058 059 1000 063 064 1000 068 069 1000 
+		elementNeighbourTbl[15][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 1000 016 1000 020 021 1000 060 061 1000 065 066 1000 070 071 
+		elementNeighbourTbl[16][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 010 011 012 015 017 020 021 022 060 061 062 065 066 067 070 071 072 
+		elementNeighbourTbl[17][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 011 012 013 016 018 021 022 023 061 062 063 066 067 068 071 072 073 
+		elementNeighbourTbl[18][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 012 013 014 017 019 022 023 024 062 063 064 067 068 069 072 073 074 
+		elementNeighbourTbl[19][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 013 014 1000 018 1000 023 024 1000 063 064 1000 068 069 1000 073 074 1000 
+		elementNeighbourTbl[20][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 015 016 1000 021 1000 025 026 1000 065 066 1000 070 071 1000 075 076 
+		elementNeighbourTbl[21][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 015 016 017 020 022 025 026 027 065 066 067 070 071 072 075 076 077 
+		elementNeighbourTbl[22][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 016 017 018 021 023 026 027 028 066 067 068 071 072 073 076 077 078 
+		elementNeighbourTbl[23][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 017 018 019 022 024 027 028 029 067 068 069 072 073 074 077 078 079 
+		elementNeighbourTbl[24][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 018 019 1000 023 1000 028 029 1000 068 069 1000 073 074 1000 078 079 1000 
+		elementNeighbourTbl[25][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 1000 026 1000 030 031 1000 070 071 1000 075 076 1000 080 081 
+		elementNeighbourTbl[26][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 020 021 022 025 027 030 031 032 070 071 072 075 076 077 080 081 082 
+		elementNeighbourTbl[27][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 021 022 023 026 028 031 032 033 071 072 073 076 077 078 081 082 083 
+		elementNeighbourTbl[28][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 022 023 024 027 029 032 033 034 072 073 074 077 078 079 082 083 084 
+		elementNeighbourTbl[29][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 023 024 1000 028 1000 033 034 1000 073 074 1000 078 079 1000 083 084 1000 
+		elementNeighbourTbl[30][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 025 026 1000 031 1000 035 036 1000 075 076 1000 080 081 1000 085 086 
+		elementNeighbourTbl[31][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 025 026 027 030 032 035 036 037 075 076 077 080 081 082 085 086 087 
+		elementNeighbourTbl[32][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 026 027 028 031 033 036 037 038 076 077 078 081 082 083 086 087 088 
+		elementNeighbourTbl[33][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 027 028 029 032 034 037 038 039 077 078 079 082 083 084 087 088 089 
+		elementNeighbourTbl[34][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 028 029 1000 033 1000 038 039 1000 078 079 1000 083 084 1000 088 089 1000 
+		elementNeighbourTbl[35][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 1000 036 1000 040 041 1000 080 081 1000 085 086 1000 090 091 
+		elementNeighbourTbl[36][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 030 031 032 035 037 040 041 042 080 081 082 085 086 087 090 091 092 
+		elementNeighbourTbl[37][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 031 032 033 036 038 041 042 043 081 082 083 086 087 088 091 092 093 
+		elementNeighbourTbl[38][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 032 033 034 037 039 042 043 044 082 083 084 087 088 089 092 093 094 
+		elementNeighbourTbl[39][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 033 034 1000 038 1000 043 044 1000 083 084 1000 088 089 1000 093 094 1000 
+		elementNeighbourTbl[40][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 035 036 1000 041 1000 045 046 1000 085 086 1000 090 091 1000 095 096 
+		elementNeighbourTbl[41][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 035 036 037 040 042 045 046 047 085 086 087 090 091 092 095 096 097 
+		elementNeighbourTbl[42][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 036 037 038 041 043 046 047 048 086 087 088 091 092 093 096 097 098 
+		elementNeighbourTbl[43][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 037 038 039 042 044 047 048 049 087 088 089 092 093 094 097 098 099 
+		elementNeighbourTbl[44][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 038 039 1000 043 1000 048 049 1000 088 089 1000 093 094 1000 098 099 1000 
+		elementNeighbourTbl[45][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 1000 046 1000 1000 1000 1000 090 091 1000 095 096 1000 1000 1000 
+		elementNeighbourTbl[46][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 040 041 042 045 047 1000 1000 1000 090 091 092 095 096 097 1000 1000 1000 
+		elementNeighbourTbl[47][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 041 042 043 046 048 1000 1000 1000 091 092 093 096 097 098 1000 1000 1000 
+		elementNeighbourTbl[48][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 042 043 044 047 049 1000 1000 1000 092 093 094 097 098 099 1000 1000 1000 
+		elementNeighbourTbl[49][0-26]: 1000 1000 1000 1000 1000 1000 1000 1000 1000 043 044 1000 048 1000 1000 1000 1000 093 094 1000 098 099 1000 1000 1000 1000 
+		elementNeighbourTbl[50][0-26]: 1000 1000 1000 1000 000 001 1000 005 006 1000 1000 1000 1000 051 1000 055 056 1000 1000 1000 1000 100 101 1000 105 106 
+		elementNeighbourTbl[51][0-26]: 1000 1000 1000 000 001 002 005 006 007 1000 1000 1000 050 052 055 056 057 1000 1000 1000 100 101 102 105 106 107 
+		elementNeighbourTbl[52][0-26]: 1000 1000 1000 001 002 003 006 007 008 1000 1000 1000 051 053 056 057 058 1000 1000 1000 101 102 103 106 107 108 
+		elementNeighbourTbl[53][0-26]: 1000 1000 1000 002 003 004 007 008 009 1000 1000 1000 052 054 057 058 059 1000 1000 1000 102 103 104 107 108 109 
+		elementNeighbourTbl[54][0-26]: 1000 1000 1000 003 004 1000 008 009 1000 1000 1000 1000 053 1000 058 059 1000 1000 1000 1000 103 104 1000 108 109 1000 
+		elementNeighbourTbl[55][0-26]: 1000 000 001 1000 005 006 1000 010 011 1000 050 051 1000 056 1000 060 061 1000 100 101 1000 105 106 1000 110 111 
+		elementNeighbourTbl[56][0-26]: 000 001 002 005 006 007 010 011 012 050 051 052 055 057 060 061 062 100 101 102 105 106 107 110 111 112 
+		elementNeighbourTbl[57][0-26]: 001 002 003 006 007 008 011 012 013 051 052 053 056 058 061 062 063 101 102 103 106 107 108 111 112 113 
+		elementNeighbourTbl[58][0-26]: 002 003 004 007 008 009 012 013 014 052 053 054 057 059 062 063 064 102 103 104 107 108 109 112 113 114 
+		elementNeighbourTbl[59][0-26]: 003 004 1000 008 009 1000 013 014 1000 053 054 1000 058 1000 063 064 1000 103 104 1000 108 109 1000 113 114 1000 
+		elementNeighbourTbl[60][0-26]: 1000 005 006 1000 010 011 1000 015 016 1000 055 056 1000 061 1000 065 066 1000 105 106 1000 110 111 1000 115 116 
+		elementNeighbourTbl[61][0-26]: 005 006 007 010 011 012 015 016 017 055 056 057 060 062 065 066 067 105 106 107 110 111 112 115 116 117 
+		elementNeighbourTbl[62][0-26]: 006 007 008 011 012 013 016 017 018 056 057 058 061 063 066 067 068 106 107 108 111 112 113 116 117 118 
+		elementNeighbourTbl[63][0-26]: 007 008 009 012 013 014 017 018 019 057 058 059 062 064 067 068 069 107 108 109 112 113 114 117 118 119 
+		elementNeighbourTbl[64][0-26]: 008 009 1000 013 014 1000 018 019 1000 058 059 1000 063 1000 068 069 1000 108 109 1000 113 114 1000 118 119 1000 
+		elementNeighbourTbl[65][0-26]: 1000 010 011 1000 015 016 1000 020 021 1000 060 061 1000 066 1000 070 071 1000 110 111 1000 115 116 1000 120 121 
+		elementNeighbourTbl[66][0-26]: 010 011 012 015 016 017 020 021 022 060 061 062 065 067 070 071 072 110 111 112 115 116 117 120 121 122 
+		elementNeighbourTbl[67][0-26]: 011 012 013 016 017 018 021 022 023 061 062 063 066 068 071 072 073 111 112 113 116 117 118 121 122 123 
+		elementNeighbourTbl[68][0-26]: 012 013 014 017 018 019 022 023 024 062 063 064 067 069 072 073 074 112 113 114 117 118 119 122 123 124 
+		elementNeighbourTbl[69][0-26]: 013 014 1000 018 019 1000 023 024 1000 063 064 1000 068 1000 073 074 1000 113 114 1000 118 119 1000 123 124 1000 
+		elementNeighbourTbl[70][0-26]: 1000 015 016 1000 020 021 1000 025 026 1000 065 066 1000 071 1000 075 076 1000 115 116 1000 120 121 1000 125 126 
+		elementNeighbourTbl[71][0-26]: 015 016 017 020 021 022 025 026 027 065 066 067 070 072 075 076 077 115 116 117 120 121 122 125 126 127 
+		elementNeighbourTbl[72][0-26]: 016 017 018 021 022 023 026 027 028 066 067 068 071 073 076 077 078 116 117 118 121 122 123 126 127 128 
+		elementNeighbourTbl[73][0-26]: 017 018 019 022 023 024 027 028 029 067 068 069 072 074 077 078 079 117 118 119 122 123 124 127 128 129 
+		elementNeighbourTbl[74][0-26]: 018 019 1000 023 024 1000 028 029 1000 068 069 1000 073 1000 078 079 1000 118 119 1000 123 124 1000 128 129 1000 
+		elementNeighbourTbl[75][0-26]: 1000 020 021 1000 025 026 1000 030 031 1000 070 071 1000 076 1000 080 081 1000 120 121 1000 125 126 1000 130 131 
+		elementNeighbourTbl[76][0-26]: 020 021 022 025 026 027 030 031 032 070 071 072 075 077 080 081 082 120 121 122 125 126 127 130 131 132 
+		elementNeighbourTbl[77][0-26]: 021 022 023 026 027 028 031 032 033 071 072 073 076 078 081 082 083 121 122 123 126 127 128 131 132 133 
+		elementNeighbourTbl[78][0-26]: 022 023 024 027 028 029 032 033 034 072 073 074 077 079 082 083 084 122 123 124 127 128 129 132 133 134 
+		elementNeighbourTbl[79][0-26]: 023 024 1000 028 029 1000 033 034 1000 073 074 1000 078 1000 083 084 1000 123 124 1000 128 129 1000 133 134 1000 
+		elementNeighbourTbl[80][0-26]: 1000 025 026 1000 030 031 1000 035 036 1000 075 076 1000 081 1000 085 086 1000 125 126 1000 130 131 1000 135 136 
+		elementNeighbourTbl[81][0-26]: 025 026 027 030 031 032 035 036 037 075 076 077 080 082 085 086 087 125 126 127 130 131 132 135 136 137 
+		elementNeighbourTbl[82][0-26]: 026 027 028 031 032 033 036 037 038 076 077 078 081 083 086 087 088 126 127 128 131 132 133 136 137 138 
+		elementNeighbourTbl[83][0-26]: 027 028 029 032 033 034 037 038 039 077 078 079 082 084 087 088 089 127 128 129 132 133 134 137 138 139 
+		elementNeighbourTbl[84][0-26]: 028 029 1000 033 034 1000 038 039 1000 078 079 1000 083 1000 088 089 1000 128 129 1000 133 134 1000 138 139 1000 
+		elementNeighbourTbl[85][0-26]: 1000 030 031 1000 035 036 1000 040 041 1000 080 081 1000 086 1000 090 091 1000 130 131 1000 135 136 1000 140 141 
+		elementNeighbourTbl[86][0-26]: 030 031 032 035 036 037 040 041 042 080 081 082 085 087 090 091 092 130 131 132 135 136 137 140 141 142 
+		elementNeighbourTbl[87][0-26]: 031 032 033 036 037 038 041 042 043 081 082 083 086 088 091 092 093 131 132 133 136 137 138 141 142 143 
+		elementNeighbourTbl[88][0-26]: 032 033 034 037 038 039 042 043 044 082 083 084 087 089 092 093 094 132 133 134 137 138 139 142 143 144 
+		elementNeighbourTbl[89][0-26]: 033 034 1000 038 039 1000 043 044 1000 083 084 1000 088 1000 093 094 1000 133 134 1000 138 139 1000 143 144 1000 
+		elementNeighbourTbl[90][0-26]: 1000 035 036 1000 040 041 1000 045 046 1000 085 086 1000 091 1000 095 096 1000 135 136 1000 140 141 1000 145 146 
+		elementNeighbourTbl[91][0-26]: 035 036 037 040 041 042 045 046 047 085 086 087 090 092 095 096 097 135 136 137 140 141 142 145 146 147 
+		elementNeighbourTbl[92][0-26]: 036 037 038 041 042 043 046 047 048 086 087 088 091 093 096 097 098 136 137 138 141 142 143 146 147 148 
+		elementNeighbourTbl[93][0-26]: 037 038 039 042 043 044 047 048 049 087 088 089 092 094 097 098 099 137 138 139 142 143 144 147 148 149 
+		elementNeighbourTbl[94][0-26]: 038 039 1000 043 044 1000 048 049 1000 088 089 1000 093 1000 098 099 1000 138 139 1000 143 144 1000 148 149 1000 
+		elementNeighbourTbl[95][0-26]: 1000 040 041 1000 045 046 1000 1000 1000 1000 090 091 1000 096 1000 1000 1000 1000 140 141 1000 145 146 1000 1000 1000 
+		elementNeighbourTbl[96][0-26]: 040 041 042 045 046 047 1000 1000 1000 090 091 092 095 097 1000 1000 1000 140 141 142 145 146 147 1000 1000 1000 
+		elementNeighbourTbl[97][0-26]: 041 042 043 046 047 048 1000 1000 1000 091 092 093 096 098 1000 1000 1000 141 142 143 146 147 148 1000 1000 1000 
+		elementNeighbourTbl[98][0-26]: 042 043 044 047 048 049 1000 1000 1000 092 093 094 097 099 1000 1000 1000 142 143 144 147 148 149 1000 1000 1000 
+		elementNeighbourTbl[99][0-26]: 043 044 1000 048 049 1000 1000 1000 1000 093 094 1000 098 1000 1000 1000 1000 143 144 1000 148 149 1000 1000 1000 1000 
+		elementNeighbourTbl[100][0-26]: 1000 1000 1000 1000 050 051 1000 055 056 1000 1000 1000 1000 101 1000 105 106 1000 1000 1000 1000 150 151 1000 155 156 
+		elementNeighbourTbl[101][0-26]: 1000 1000 1000 050 051 052 055 056 057 1000 1000 1000 100 102 105 106 107 1000 1000 1000 150 151 152 155 156 157 
+		elementNeighbourTbl[102][0-26]: 1000 1000 1000 051 052 053 056 057 058 1000 1000 1000 101 103 106 107 108 1000 1000 1000 151 152 153 156 157 158 
+		elementNeighbourTbl[103][0-26]: 1000 1000 1000 052 053 054 057 058 059 1000 1000 1000 102 104 107 108 109 1000 1000 1000 152 153 154 157 158 159 
+		elementNeighbourTbl[104][0-26]: 1000 1000 1000 053 054 1000 058 059 1000 1000 1000 1000 103 1000 108 109 1000 1000 1000 1000 153 154 1000 158 159 1000 
+		elementNeighbourTbl[105][0-26]: 1000 050 051 1000 055 056 1000 060 061 1000 100 101 1000 106 1000 110 111 1000 150 151 1000 155 156 1000 160 161 
+		elementNeighbourTbl[106][0-26]: 050 051 052 055 056 057 060 061 062 100 101 102 105 107 110 111 112 150 151 152 155 156 157 160 161 162 
+		elementNeighbourTbl[107][0-26]: 051 052 053 056 057 058 061 062 063 101 102 103 106 108 111 112 113 151 152 153 156 157 158 161 162 163 
+		elementNeighbourTbl[108][0-26]: 052 053 054 057 058 059 062 063 064 102 103 104 107 109 112 113 114 152 153 154 157 158 159 162 163 164 
+		elementNeighbourTbl[109][0-26]: 053 054 1000 058 059 1000 063 064 1000 103 104 1000 108 1000 113 114 1000 153 154 1000 158 159 1000 163 164 1000 
+		elementNeighbourTbl[110][0-26]: 1000 055 056 1000 060 061 1000 065 066 1000 105 106 1000 111 1000 115 116 1000 155 156 1000 160 161 1000 165 166 
+		elementNeighbourTbl[111][0-26]: 055 056 057 060 061 062 065 066 067 105 106 107 110 112 115 116 117 155 156 157 160 161 162 165 166 167 
+		elementNeighbourTbl[112][0-26]: 056 057 058 061 062 063 066 067 068 106 107 108 111 113 116 117 118 156 157 158 161 162 163 166 167 168 
+		elementNeighbourTbl[113][0-26]: 057 058 059 062 063 064 067 068 069 107 108 109 112 114 117 118 119 157 158 159 162 163 164 167 168 169 
+		elementNeighbourTbl[114][0-26]: 058 059 1000 063 064 1000 068 069 1000 108 109 1000 113 1000 118 119 1000 158 159 1000 163 164 1000 168 169 1000 
+		elementNeighbourTbl[115][0-26]: 1000 060 061 1000 065 066 1000 070 071 1000 110 111 1000 116 1000 120 121 1000 160 161 1000 165 166 1000 170 171 
+		elementNeighbourTbl[116][0-26]: 060 061 062 065 066 067 070 071 072 110 111 112 115 117 120 121 122 160 161 162 165 166 167 170 171 172 
+		elementNeighbourTbl[117][0-26]: 061 062 063 066 067 068 071 072 073 111 112 113 116 118 121 122 123 161 162 163 166 167 168 171 172 173 
+		elementNeighbourTbl[118][0-26]: 062 063 064 067 068 069 072 073 074 112 113 114 117 119 122 123 124 162 163 164 167 168 169 172 173 174 
+		elementNeighbourTbl[119][0-26]: 063 064 1000 068 069 1000 073 074 1000 113 114 1000 118 1000 123 124 1000 163 164 1000 168 169 1000 173 174 1000 
+		elementNeighbourTbl[120][0-26]: 1000 065 066 1000 070 071 1000 075 076 1000 115 116 1000 121 1000 125 126 1000 165 166 1000 170 171 1000 175 176 
+		elementNeighbourTbl[121][0-26]: 065 066 067 070 071 072 075 076 077 115 116 117 120 122 125 126 127 165 166 167 170 171 172 175 176 177 
+		elementNeighbourTbl[122][0-26]: 066 067 068 071 072 073 076 077 078 116 117 118 121 123 126 127 128 166 167 168 171 172 173 176 177 178 
+		elementNeighbourTbl[123][0-26]: 067 068 069 072 073 074 077 078 079 117 118 119 122 124 127 128 129 167 168 169 172 173 174 177 178 179 
+		elementNeighbourTbl[124][0-26]: 068 069 1000 073 074 1000 078 079 1000 118 119 1000 123 1000 128 129 1000 168 169 1000 173 174 1000 178 179 1000 
+		elementNeighbourTbl[125][0-26]: 1000 070 071 1000 075 076 1000 080 081 1000 120 121 1000 126 1000 130 131 1000 170 171 1000 175 176 1000 180 181 
+		elementNeighbourTbl[126][0-26]: 070 071 072 075 076 077 080 081 082 120 121 122 125 127 130 131 132 170 171 172 175 176 177 180 181 182 
+		elementNeighbourTbl[127][0-26]: 071 072 073 076 077 078 081 082 083 121 122 123 126 128 131 132 133 171 172 173 176 177 178 181 182 183 
+		elementNeighbourTbl[128][0-26]: 072 073 074 077 078 079 082 083 084 122 123 124 127 129 132 133 134 172 173 174 177 178 179 182 183 184 
+		elementNeighbourTbl[129][0-26]: 073 074 1000 078 079 1000 083 084 1000 123 124 1000 128 1000 133 134 1000 173 174 1000 178 179 1000 183 184 1000 
+		elementNeighbourTbl[130][0-26]: 1000 075 076 1000 080 081 1000 085 086 1000 125 126 1000 131 1000 135 136 1000 175 176 1000 180 181 1000 185 186 
+		elementNeighbourTbl[131][0-26]: 075 076 077 080 081 082 085 086 087 125 126 127 130 132 135 136 137 175 176 177 180 181 182 185 186 187 
+		elementNeighbourTbl[132][0-26]: 076 077 078 081 082 083 086 087 088 126 127 128 131 133 136 137 138 176 177 178 181 182 183 186 187 188 
+		elementNeighbourTbl[133][0-26]: 077 078 079 082 083 084 087 088 089 127 128 129 132 134 137 138 139 177 178 179 182 183 184 187 188 189 
+		elementNeighbourTbl[134][0-26]: 078 079 1000 083 084 1000 088 089 1000 128 129 1000 133 1000 138 139 1000 178 179 1000 183 184 1000 188 189 1000 
+		elementNeighbourTbl[135][0-26]: 1000 080 081 1000 085 086 1000 090 091 1000 130 131 1000 136 1000 140 141 1000 180 181 1000 185 186 1000 190 191 
+		elementNeighbourTbl[136][0-26]: 080 081 082 085 086 087 090 091 092 130 131 132 135 137 140 141 142 180 181 182 185 186 187 190 191 192 
+		elementNeighbourTbl[137][0-26]: 081 082 083 086 087 088 091 092 093 131 132 133 136 138 141 142 143 181 182 183 186 187 188 191 192 193 
+		elementNeighbourTbl[138][0-26]: 082 083 084 087 088 089 092 093 094 132 133 134 137 139 142 143 144 182 183 184 187 188 189 192 193 194 
+		elementNeighbourTbl[139][0-26]: 083 084 1000 088 089 1000 093 094 1000 133 134 1000 138 1000 143 144 1000 183 184 1000 188 189 1000 193 194 1000 
+		elementNeighbourTbl[140][0-26]: 1000 085 086 1000 090 091 1000 095 096 1000 135 136 1000 141 1000 145 146 1000 185 186 1000 190 191 1000 195 196 
+		elementNeighbourTbl[141][0-26]: 085 086 087 090 091 092 095 096 097 135 136 137 140 142 145 146 147 185 186 187 190 191 192 195 196 197 
+		elementNeighbourTbl[142][0-26]: 086 087 088 091 092 093 096 097 098 136 137 138 141 143 146 147 148 186 187 188 191 192 193 196 197 198 
+		elementNeighbourTbl[143][0-26]: 087 088 089 092 093 094 097 098 099 137 138 139 142 144 147 148 149 187 188 189 192 193 194 197 198 199 
+		elementNeighbourTbl[144][0-26]: 088 089 1000 093 094 1000 098 099 1000 138 139 1000 143 1000 148 149 1000 188 189 1000 193 194 1000 198 199 1000 
+		elementNeighbourTbl[145][0-26]: 1000 090 091 1000 095 096 1000 1000 1000 1000 140 141 1000 146 1000 1000 1000 1000 190 191 1000 195 196 1000 1000 1000 
+		elementNeighbourTbl[146][0-26]: 090 091 092 095 096 097 1000 1000 1000 140 141 142 145 147 1000 1000 1000 190 191 192 195 196 197 1000 1000 1000 
+		elementNeighbourTbl[147][0-26]: 091 092 093 096 097 098 1000 1000 1000 141 142 143 146 148 1000 1000 1000 191 192 193 196 197 198 1000 1000 1000 
+		elementNeighbourTbl[148][0-26]: 092 093 094 097 098 099 1000 1000 1000 142 143 144 147 149 1000 1000 1000 192 193 194 197 198 199 1000 1000 1000 
+		elementNeighbourTbl[149][0-26]: 093 094 1000 098 099 1000 1000 1000 1000 143 144 1000 148 1000 1000 1000 1000 193 194 1000 198 199 1000 1000 1000 1000 
+		elementNeighbourTbl[150][0-26]: 1000 1000 1000 1000 100 101 1000 105 106 1000 1000 1000 1000 151 1000 155 156 1000 1000 1000 1000 200 201 1000 205 206 
+		elementNeighbourTbl[151][0-26]: 1000 1000 1000 100 101 102 105 106 107 1000 1000 1000 150 152 155 156 157 1000 1000 1000 200 201 202 205 206 207 
+		elementNeighbourTbl[152][0-26]: 1000 1000 1000 101 102 103 106 107 108 1000 1000 1000 151 153 156 157 158 1000 1000 1000 201 202 203 206 207 208 
+		elementNeighbourTbl[153][0-26]: 1000 1000 1000 102 103 104 107 108 109 1000 1000 1000 152 154 157 158 159 1000 1000 1000 202 203 204 207 208 209 
+		elementNeighbourTbl[154][0-26]: 1000 1000 1000 103 104 1000 108 109 1000 1000 1000 1000 153 1000 158 159 1000 1000 1000 1000 203 204 1000 208 209 1000 
+		elementNeighbourTbl[155][0-26]: 1000 100 101 1000 105 106 1000 110 111 1000 150 151 1000 156 1000 160 161 1000 200 201 1000 205 206 1000 210 211 
+		elementNeighbourTbl[156][0-26]: 100 101 102 105 106 107 110 111 112 150 151 152 155 157 160 161 162 200 201 202 205 206 207 210 211 212 
+		elementNeighbourTbl[157][0-26]: 101 102 103 106 107 108 111 112 113 151 152 153 156 158 161 162 163 201 202 203 206 207 208 211 212 213 
+		elementNeighbourTbl[158][0-26]: 102 103 104 107 108 109 112 113 114 152 153 154 157 159 162 163 164 202 203 204 207 208 209 212 213 214 
+		elementNeighbourTbl[159][0-26]: 103 104 1000 108 109 1000 113 114 1000 153 154 1000 158 1000 163 164 1000 203 204 1000 208 209 1000 213 214 1000 
+		elementNeighbourTbl[160][0-26]: 1000 105 106 1000 110 111 1000 115 116 1000 155 156 1000 161 1000 165 166 1000 205 206 1000 210 211 1000 215 216 
+		elementNeighbourTbl[161][0-26]: 105 106 107 110 111 112 115 116 117 155 156 157 160 162 165 166 167 205 206 207 210 211 212 215 216 217 
+		elementNeighbourTbl[162][0-26]: 106 107 108 111 112 113 116 117 118 156 157 158 161 163 166 167 168 206 207 208 211 212 213 216 217 218 
+		elementNeighbourTbl[163][0-26]: 107 108 109 112 113 114 117 118 119 157 158 159 162 164 167 168 169 207 208 209 212 213 214 217 218 219 
+		elementNeighbourTbl[164][0-26]: 108 109 1000 113 114 1000 118 119 1000 158 159 1000 163 1000 168 169 1000 208 209 1000 213 214 1000 218 219 1000 
+		elementNeighbourTbl[165][0-26]: 1000 110 111 1000 115 116 1000 120 121 1000 160 161 1000 166 1000 170 171 1000 210 211 1000 215 216 1000 220 221 
+		elementNeighbourTbl[166][0-26]: 110 111 112 115 116 117 120 121 122 160 161 162 165 167 170 171 172 210 211 212 215 216 217 220 221 222 
+		elementNeighbourTbl[167][0-26]: 111 112 113 116 117 118 121 122 123 161 162 163 166 168 171 172 173 211 212 213 216 217 218 221 222 223 
+		elementNeighbourTbl[168][0-26]: 112 113 114 117 118 119 122 123 124 162 163 164 167 169 172 173 174 212 213 214 217 218 219 222 223 224 
+		elementNeighbourTbl[169][0-26]: 113 114 1000 118 119 1000 123 124 1000 163 164 1000 168 1000 173 174 1000 213 214 1000 218 219 1000 223 224 1000 
+		elementNeighbourTbl[170][0-26]: 1000 115 116 1000 120 121 1000 125 126 1000 165 166 1000 171 1000 175 176 1000 215 216 1000 220 221 1000 225 226 
+		elementNeighbourTbl[171][0-26]: 115 116 117 120 121 122 125 126 127 165 166 167 170 172 175 176 177 215 216 217 220 221 222 225 226 227 
+		elementNeighbourTbl[172][0-26]: 116 117 118 121 122 123 126 127 128 166 167 168 171 173 176 177 178 216 217 218 221 222 223 226 227 228 
+		elementNeighbourTbl[173][0-26]: 117 118 119 122 123 124 127 128 129 167 168 169 172 174 177 178 179 217 218 219 222 223 224 227 228 229 
+		elementNeighbourTbl[174][0-26]: 118 119 1000 123 124 1000 128 129 1000 168 169 1000 173 1000 178 179 1000 218 219 1000 223 224 1000 228 229 1000 
+		elementNeighbourTbl[175][0-26]: 1000 120 121 1000 125 126 1000 130 131 1000 170 171 1000 176 1000 180 181 1000 220 221 1000 225 226 1000 230 231 
+		elementNeighbourTbl[176][0-26]: 120 121 122 125 126 127 130 131 132 170 171 172 175 177 180 181 182 220 221 222 225 226 227 230 231 232 
+		elementNeighbourTbl[177][0-26]: 121 122 123 126 127 128 131 132 133 171 172 173 176 178 181 182 183 221 222 223 226 227 228 231 232 233 
+		elementNeighbourTbl[178][0-26]: 122 123 124 127 128 129 132 133 134 172 173 174 177 179 182 183 184 222 223 224 227 228 229 232 233 234 
+		elementNeighbourTbl[179][0-26]: 123 124 1000 128 129 1000 133 134 1000 173 174 1000 178 1000 183 184 1000 223 224 1000 228 229 1000 233 234 1000 
+		elementNeighbourTbl[180][0-26]: 1000 125 126 1000 130 131 1000 135 136 1000 175 176 1000 181 1000 185 186 1000 225 226 1000 230 231 1000 235 236 
+		elementNeighbourTbl[181][0-26]: 125 126 127 130 131 132 135 136 137 175 176 177 180 182 185 186 187 225 226 227 230 231 232 235 236 237 
+		elementNeighbourTbl[182][0-26]: 126 127 128 131 132 133 136 137 138 176 177 178 181 183 186 187 188 226 227 228 231 232 233 236 237 238 
+		elementNeighbourTbl[183][0-26]: 127 128 129 132 133 134 137 138 139 177 178 179 182 184 187 188 189 227 228 229 232 233 234 237 238 239 
+		elementNeighbourTbl[184][0-26]: 128 129 1000 133 134 1000 138 139 1000 178 179 1000 183 1000 188 189 1000 228 229 1000 233 234 1000 238 239 1000 
+		elementNeighbourTbl[185][0-26]: 1000 130 131 1000 135 136 1000 140 141 1000 180 181 1000 186 1000 190 191 1000 230 231 1000 235 236 1000 240 241 
+		elementNeighbourTbl[186][0-26]: 130 131 132 135 136 137 140 141 142 180 181 182 185 187 190 191 192 230 231 232 235 236 237 240 241 242 
+		elementNeighbourTbl[187][0-26]: 131 132 133 136 137 138 141 142 143 181 182 183 186 188 191 192 193 231 232 233 236 237 238 241 242 243 
+		elementNeighbourTbl[188][0-26]: 132 133 134 137 138 139 142 143 144 182 183 184 187 189 192 193 194 232 233 234 237 238 239 242 243 244 
+		elementNeighbourTbl[189][0-26]: 133 134 1000 138 139 1000 143 144 1000 183 184 1000 188 1000 193 194 1000 233 234 1000 238 239 1000 243 244 1000 
+		elementNeighbourTbl[190][0-26]: 1000 135 136 1000 140 141 1000 145 146 1000 185 186 1000 191 1000 195 196 1000 235 236 1000 240 241 1000 245 246 
+		elementNeighbourTbl[191][0-26]: 135 136 137 140 141 142 145 146 147 185 186 187 190 192 195 196 197 235 236 237 240 241 242 245 246 247 
+		elementNeighbourTbl[192][0-26]: 136 137 138 141 142 143 146 147 148 186 187 188 191 193 196 197 198 236 237 238 241 242 243 246 247 248 
+		elementNeighbourTbl[193][0-26]: 137 138 139 142 143 144 147 148 149 187 188 189 192 194 197 198 199 237 238 239 242 243 244 247 248 249 
+		elementNeighbourTbl[194][0-26]: 138 139 1000 143 144 1000 148 149 1000 188 189 1000 193 1000 198 199 1000 238 239 1000 243 244 1000 248 249 1000 
+		elementNeighbourTbl[195][0-26]: 1000 140 141 1000 145 146 1000 1000 1000 1000 190 191 1000 196 1000 1000 1000 1000 240 241 1000 245 246 1000 1000 1000 
+		elementNeighbourTbl[196][0-26]: 140 141 142 145 146 147 1000 1000 1000 190 191 192 195 197 1000 1000 1000 240 241 242 245 246 247 1000 1000 1000 
+		elementNeighbourTbl[197][0-26]: 141 142 143 146 147 148 1000 1000 1000 191 192 193 196 198 1000 1000 1000 241 242 243 246 247 248 1000 1000 1000 
+		elementNeighbourTbl[198][0-26]: 142 143 144 147 148 149 1000 1000 1000 192 193 194 197 199 1000 1000 1000 242 243 244 247 248 249 1000 1000 1000 
+		elementNeighbourTbl[199][0-26]: 143 144 1000 148 149 1000 1000 1000 1000 193 194 1000 198 1000 1000 1000 1000 243 244 1000 248 249 1000 1000 1000 1000 
+		elementNeighbourTbl[200][0-26]: 1000 1000 1000 1000 150 151 1000 155 156 1000 1000 1000 1000 201 1000 205 206 1000 1000 1000 1000 250 251 1000 255 256 
+		elementNeighbourTbl[201][0-26]: 1000 1000 1000 150 151 152 155 156 157 1000 1000 1000 200 202 205 206 207 1000 1000 1000 250 251 252 255 256 257 
+		elementNeighbourTbl[202][0-26]: 1000 1000 1000 151 152 153 156 157 158 1000 1000 1000 201 203 206 207 208 1000 1000 1000 251 252 253 256 257 258 
+		elementNeighbourTbl[203][0-26]: 1000 1000 1000 152 153 154 157 158 159 1000 1000 1000 202 204 207 208 209 1000 1000 1000 252 253 254 257 258 259 
+		elementNeighbourTbl[204][0-26]: 1000 1000 1000 153 154 1000 158 159 1000 1000 1000 1000 203 1000 208 209 1000 1000 1000 1000 253 254 1000 258 259 1000 
+		elementNeighbourTbl[205][0-26]: 1000 150 151 1000 155 156 1000 160 161 1000 200 201 1000 206 1000 210 211 1000 250 251 1000 255 256 1000 260 261 
+		elementNeighbourTbl[206][0-26]: 150 151 152 155 156 157 160 161 162 200 201 202 205 207 210 211 212 250 251 252 255 256 257 260 261 262 
+		elementNeighbourTbl[207][0-26]: 151 152 153 156 157 158 161 162 163 201 202 203 206 208 211 212 213 251 252 253 256 257 258 261 262 263 
+		elementNeighbourTbl[208][0-26]: 152 153 154 157 158 159 162 163 164 202 203 204 207 209 212 213 214 252 253 254 257 258 259 262 263 264 
+		elementNeighbourTbl[209][0-26]: 153 154 1000 158 159 1000 163 164 1000 203 204 1000 208 1000 213 214 1000 253 254 1000 258 259 1000 263 264 1000 
+		elementNeighbourTbl[210][0-26]: 1000 155 156 1000 160 161 1000 165 166 1000 205 206 1000 211 1000 215 216 1000 255 256 1000 260 261 1000 265 266 
+		elementNeighbourTbl[211][0-26]: 155 156 157 160 161 162 165 166 167 205 206 207 210 212 215 216 217 255 256 257 260 261 262 265 266 267 
+		elementNeighbourTbl[212][0-26]: 156 157 158 161 162 163 166 167 168 206 207 208 211 213 216 217 218 256 257 258 261 262 263 266 267 268 
+		elementNeighbourTbl[213][0-26]: 157 158 159 162 163 164 167 168 169 207 208 209 212 214 217 218 219 257 258 259 262 263 264 267 268 269 
+		elementNeighbourTbl[214][0-26]: 158 159 1000 163 164 1000 168 169 1000 208 209 1000 213 1000 218 219 1000 258 259 1000 263 264 1000 268 269 1000 
+		elementNeighbourTbl[215][0-26]: 1000 160 161 1000 165 166 1000 170 171 1000 210 211 1000 216 1000 220 221 1000 260 261 1000 265 266 1000 270 271 
+		elementNeighbourTbl[216][0-26]: 160 161 162 165 166 167 170 171 172 210 211 212 215 217 220 221 222 260 261 262 265 266 267 270 271 272 
+		elementNeighbourTbl[217][0-26]: 161 162 163 166 167 168 171 172 173 211 212 213 216 218 221 222 223 261 262 263 266 267 268 271 272 273 
+		elementNeighbourTbl[218][0-26]: 162 163 164 167 168 169 172 173 174 212 213 214 217 219 222 223 224 262 263 264 267 268 269 272 273 274 
+		elementNeighbourTbl[219][0-26]: 163 164 1000 168 169 1000 173 174 1000 213 214 1000 218 1000 223 224 1000 263 264 1000 268 269 1000 273 274 1000 
+		elementNeighbourTbl[220][0-26]: 1000 165 166 1000 170 171 1000 175 176 1000 215 216 1000 221 1000 225 226 1000 265 266 1000 270 271 1000 275 276 
+		elementNeighbourTbl[221][0-26]: 165 166 167 170 171 172 175 176 177 215 216 217 220 222 225 226 227 265 266 267 270 271 272 275 276 277 
+		elementNeighbourTbl[222][0-26]: 166 167 168 171 172 173 176 177 178 216 217 218 221 223 226 227 228 266 267 268 271 272 273 276 277 278 
+		elementNeighbourTbl[223][0-26]: 167 168 169 172 173 174 177 178 179 217 218 219 222 224 227 228 229 267 268 269 272 273 274 277 278 279 
+		elementNeighbourTbl[224][0-26]: 168 169 1000 173 174 1000 178 179 1000 218 219 1000 223 1000 228 229 1000 268 269 1000 273 274 1000 278 279 1000 
+		elementNeighbourTbl[225][0-26]: 1000 170 171 1000 175 176 1000 180 181 1000 220 221 1000 226 1000 230 231 1000 270 271 1000 275 276 1000 280 281 
+		elementNeighbourTbl[226][0-26]: 170 171 172 175 176 177 180 181 182 220 221 222 225 227 230 231 232 270 271 272 275 276 277 280 281 282 
+		elementNeighbourTbl[227][0-26]: 171 172 173 176 177 178 181 182 183 221 222 223 226 228 231 232 233 271 272 273 276 277 278 281 282 283 
+		elementNeighbourTbl[228][0-26]: 172 173 174 177 178 179 182 183 184 222 223 224 227 229 232 233 234 272 273 274 277 278 279 282 283 284 
+		elementNeighbourTbl[229][0-26]: 173 174 1000 178 179 1000 183 184 1000 223 224 1000 228 1000 233 234 1000 273 274 1000 278 279 1000 283 284 1000 
+		elementNeighbourTbl[230][0-26]: 1000 175 176 1000 180 181 1000 185 186 1000 225 226 1000 231 1000 235 236 1000 275 276 1000 280 281 1000 285 286 
+		elementNeighbourTbl[231][0-26]: 175 176 177 180 181 182 185 186 187 225 226 227 230 232 235 236 237 275 276 277 280 281 282 285 286 287 
+		elementNeighbourTbl[232][0-26]: 176 177 178 181 182 183 186 187 188 226 227 228 231 233 236 237 238 276 277 278 281 282 283 286 287 288 
+		elementNeighbourTbl[233][0-26]: 177 178 179 182 183 184 187 188 189 227 228 229 232 234 237 238 239 277 278 279 282 283 284 287 288 289 
+		elementNeighbourTbl[234][0-26]: 178 179 1000 183 184 1000 188 189 1000 228 229 1000 233 1000 238 239 1000 278 279 1000 283 284 1000 288 289 1000 
+		elementNeighbourTbl[235][0-26]: 1000 180 181 1000 185 186 1000 190 191 1000 230 231 1000 236 1000 240 241 1000 280 281 1000 285 286 1000 290 291 
+		elementNeighbourTbl[236][0-26]: 180 181 182 185 186 187 190 191 192 230 231 232 235 237 240 241 242 280 281 282 285 286 287 290 291 292 
+		elementNeighbourTbl[237][0-26]: 181 182 183 186 187 188 191 192 193 231 232 233 236 238 241 242 243 281 282 283 286 287 288 291 292 293 
+		elementNeighbourTbl[238][0-26]: 182 183 184 187 188 189 192 193 194 232 233 234 237 239 242 243 244 282 283 284 287 288 289 292 293 294 
+		elementNeighbourTbl[239][0-26]: 183 184 1000 188 189 1000 193 194 1000 233 234 1000 238 1000 243 244 1000 283 284 1000 288 289 1000 293 294 1000 
+		elementNeighbourTbl[240][0-26]: 1000 185 186 1000 190 191 1000 195 196 1000 235 236 1000 241 1000 245 246 1000 285 286 1000 290 291 1000 295 296 
+		elementNeighbourTbl[241][0-26]: 185 186 187 190 191 192 195 196 197 235 236 237 240 242 245 246 247 285 286 287 290 291 292 295 296 297 
+		elementNeighbourTbl[242][0-26]: 186 187 188 191 192 193 196 197 198 236 237 238 241 243 246 247 248 286 287 288 291 292 293 296 297 298 
+		elementNeighbourTbl[243][0-26]: 187 188 189 192 193 194 197 198 199 237 238 239 242 244 247 248 249 287 288 289 292 293 294 297 298 299 
+		elementNeighbourTbl[244][0-26]: 188 189 1000 193 194 1000 198 199 1000 238 239 1000 243 1000 248 249 1000 288 289 1000 293 294 1000 298 299 1000 
+		elementNeighbourTbl[245][0-26]: 1000 190 191 1000 195 196 1000 1000 1000 1000 240 241 1000 246 1000 1000 1000 1000 290 291 1000 295 296 1000 1000 1000 
+		elementNeighbourTbl[246][0-26]: 190 191 192 195 196 197 1000 1000 1000 240 241 242 245 247 1000 1000 1000 290 291 292 295 296 297 1000 1000 1000 
+		elementNeighbourTbl[247][0-26]: 191 192 193 196 197 198 1000 1000 1000 241 242 243 246 248 1000 1000 1000 291 292 293 296 297 298 1000 1000 1000 
+		elementNeighbourTbl[248][0-26]: 192 193 194 197 198 199 1000 1000 1000 242 243 244 247 249 1000 1000 1000 292 293 294 297 298 299 1000 1000 1000 
+		elementNeighbourTbl[249][0-26]: 193 194 1000 198 199 1000 1000 1000 1000 243 244 1000 248 1000 1000 1000 1000 293 294 1000 298 299 1000 1000 1000 1000 
+		elementNeighbourTbl[250][0-26]: 1000 1000 1000 1000 200 201 1000 205 206 1000 1000 1000 1000 251 1000 255 256 1000 1000 1000 1000 300 301 1000 305 306 
+		elementNeighbourTbl[251][0-26]: 1000 1000 1000 200 201 202 205 206 207 1000 1000 1000 250 252 255 256 257 1000 1000 1000 300 301 302 305 306 307 
+		elementNeighbourTbl[252][0-26]: 1000 1000 1000 201 202 203 206 207 208 1000 1000 1000 251 253 256 257 258 1000 1000 1000 301 302 303 306 307 308 
+		elementNeighbourTbl[253][0-26]: 1000 1000 1000 202 203 204 207 208 209 1000 1000 1000 252 254 257 258 259 1000 1000 1000 302 303 304 307 308 309 
+		elementNeighbourTbl[254][0-26]: 1000 1000 1000 203 204 1000 208 209 1000 1000 1000 1000 253 1000 258 259 1000 1000 1000 1000 303 304 1000 308 309 1000 
+		elementNeighbourTbl[255][0-26]: 1000 200 201 1000 205 206 1000 210 211 1000 250 251 1000 256 1000 260 261 1000 300 301 1000 305 306 1000 310 311 
+		elementNeighbourTbl[256][0-26]: 200 201 202 205 206 207 210 211 212 250 251 252 255 257 260 261 262 300 301 302 305 306 307 310 311 312 
+		elementNeighbourTbl[257][0-26]: 201 202 203 206 207 208 211 212 213 251 252 253 256 258 261 262 263 301 302 303 306 307 308 311 312 313 
+		elementNeighbourTbl[258][0-26]: 202 203 204 207 208 209 212 213 214 252 253 254 257 259 262 263 264 302 303 304 307 308 309 312 313 314 
+		elementNeighbourTbl[259][0-26]: 203 204 1000 208 209 1000 213 214 1000 253 254 1000 258 1000 263 264 1000 303 304 1000 308 309 1000 313 314 1000 
+		elementNeighbourTbl[260][0-26]: 1000 205 206 1000 210 211 1000 215 216 1000 255 256 1000 261 1000 265 266 1000 305 306 1000 310 311 1000 315 316 
+		elementNeighbourTbl[261][0-26]: 205 206 207 210 211 212 215 216 217 255 256 257 260 262 265 266 267 305 306 307 310 311 312 315 316 317 
+		elementNeighbourTbl[262][0-26]: 206 207 208 211 212 213 216 217 218 256 257 258 261 263 266 267 268 306 307 308 311 312 313 316 317 318 
+		elementNeighbourTbl[263][0-26]: 207 208 209 212 213 214 217 218 219 257 258 259 262 264 267 268 269 307 308 309 312 313 314 317 318 319 
+		elementNeighbourTbl[264][0-26]: 208 209 1000 213 214 1000 218 219 1000 258 259 1000 263 1000 268 269 1000 308 309 1000 313 314 1000 318 319 1000 
+		elementNeighbourTbl[265][0-26]: 1000 210 211 1000 215 216 1000 220 221 1000 260 261 1000 266 1000 270 271 1000 310 311 1000 315 316 1000 320 321 
+		elementNeighbourTbl[266][0-26]: 210 211 212 215 216 217 220 221 222 260 261 262 265 267 270 271 272 310 311 312 315 316 317 320 321 322 
+		elementNeighbourTbl[267][0-26]: 211 212 213 216 217 218 221 222 223 261 262 263 266 268 271 272 273 311 312 313 316 317 318 321 322 323 
+		elementNeighbourTbl[268][0-26]: 212 213 214 217 218 219 222 223 224 262 263 264 267 269 272 273 274 312 313 314 317 318 319 322 323 324 
+		elementNeighbourTbl[269][0-26]: 213 214 1000 218 219 1000 223 224 1000 263 264 1000 268 1000 273 274 1000 313 314 1000 318 319 1000 323 324 1000 
+		elementNeighbourTbl[270][0-26]: 1000 215 216 1000 220 221 1000 225 226 1000 265 266 1000 271 1000 275 276 1000 315 316 1000 320 321 1000 325 326 
+		elementNeighbourTbl[271][0-26]: 215 216 217 220 221 222 225 226 227 265 266 267 270 272 275 276 277 315 316 317 320 321 322 325 326 327 
+		elementNeighbourTbl[272][0-26]: 216 217 218 221 222 223 226 227 228 266 267 268 271 273 276 277 278 316 317 318 321 322 323 326 327 328 
+		elementNeighbourTbl[273][0-26]: 217 218 219 222 223 224 227 228 229 267 268 269 272 274 277 278 279 317 318 319 322 323 324 327 328 329 
+		elementNeighbourTbl[274][0-26]: 218 219 1000 223 224 1000 228 229 1000 268 269 1000 273 1000 278 279 1000 318 319 1000 323 324 1000 328 329 1000 
+		elementNeighbourTbl[275][0-26]: 1000 220 221 1000 225 226 1000 230 231 1000 270 271 1000 276 1000 280 281 1000 320 321 1000 325 326 1000 330 331 
+		elementNeighbourTbl[276][0-26]: 220 221 222 225 226 227 230 231 232 270 271 272 275 277 280 281 282 320 321 322 325 326 327 330 331 332 
+		elementNeighbourTbl[277][0-26]: 221 222 223 226 227 228 231 232 233 271 272 273 276 278 281 282 283 321 322 323 326 327 328 331 332 333 
+		elementNeighbourTbl[278][0-26]: 222 223 224 227 228 229 232 233 234 272 273 274 277 279 282 283 284 322 323 324 327 328 329 332 333 334 
+		elementNeighbourTbl[279][0-26]: 223 224 1000 228 229 1000 233 234 1000 273 274 1000 278 1000 283 284 1000 323 324 1000 328 329 1000 333 334 1000 
+		elementNeighbourTbl[280][0-26]: 1000 225 226 1000 230 231 1000 235 236 1000 275 276 1000 281 1000 285 286 1000 325 326 1000 330 331 1000 335 336 
+		elementNeighbourTbl[281][0-26]: 225 226 227 230 231 232 235 236 237 275 276 277 280 282 285 286 287 325 326 327 330 331 332 335 336 337 
+		elementNeighbourTbl[282][0-26]: 226 227 228 231 232 233 236 237 238 276 277 278 281 283 286 287 288 326 327 328 331 332 333 336 337 338 
+		elementNeighbourTbl[283][0-26]: 227 228 229 232 233 234 237 238 239 277 278 279 282 284 287 288 289 327 328 329 332 333 334 337 338 339 
+		elementNeighbourTbl[284][0-26]: 228 229 1000 233 234 1000 238 239 1000 278 279 1000 283 1000 288 289 1000 328 329 1000 333 334 1000 338 339 1000 
+		elementNeighbourTbl[285][0-26]: 1000 230 231 1000 235 236 1000 240 241 1000 280 281 1000 286 1000 290 291 1000 330 331 1000 335 336 1000 340 341 
+		elementNeighbourTbl[286][0-26]: 230 231 232 235 236 237 240 241 242 280 281 282 285 287 290 291 292 330 331 332 335 336 337 340 341 342 
+		elementNeighbourTbl[287][0-26]: 231 232 233 236 237 238 241 242 243 281 282 283 286 288 291 292 293 331 332 333 336 337 338 341 342 343 
+		elementNeighbourTbl[288][0-26]: 232 233 234 237 238 239 242 243 244 282 283 284 287 289 292 293 294 332 333 334 337 338 339 342 343 344 
+		elementNeighbourTbl[289][0-26]: 233 234 1000 238 239 1000 243 244 1000 283 284 1000 288 1000 293 294 1000 333 334 1000 338 339 1000 343 344 1000 
+		elementNeighbourTbl[290][0-26]: 1000 235 236 1000 240 241 1000 245 246 1000 285 286 1000 291 1000 295 296 1000 335 336 1000 340 341 1000 345 346 
+		elementNeighbourTbl[291][0-26]: 235 236 237 240 241 242 245 246 247 285 286 287 290 292 295 296 297 335 336 337 340 341 342 345 346 347 
+		elementNeighbourTbl[292][0-26]: 236 237 238 241 242 243 246 247 248 286 287 288 291 293 296 297 298 336 337 338 341 342 343 346 347 348 
+		elementNeighbourTbl[293][0-26]: 237 238 239 242 243 244 247 248 249 287 288 289 292 294 297 298 299 337 338 339 342 343 344 347 348 349 
+		elementNeighbourTbl[294][0-26]: 238 239 1000 243 244 1000 248 249 1000 288 289 1000 293 1000 298 299 1000 338 339 1000 343 344 1000 348 349 1000 
+		elementNeighbourTbl[295][0-26]: 1000 240 241 1000 245 246 1000 1000 1000 1000 290 291 1000 296 1000 1000 1000 1000 340 341 1000 345 346 1000 1000 1000 
+		elementNeighbourTbl[296][0-26]: 240 241 242 245 246 247 1000 1000 1000 290 291 292 295 297 1000 1000 1000 340 341 342 345 346 347 1000 1000 1000 
+		elementNeighbourTbl[297][0-26]: 241 242 243 246 247 248 1000 1000 1000 291 292 293 296 298 1000 1000 1000 341 342 343 346 347 348 1000 1000 1000 
+		elementNeighbourTbl[298][0-26]: 242 243 244 247 248 249 1000 1000 1000 292 293 294 297 299 1000 1000 1000 342 343 344 347 348 349 1000 1000 1000 
+		elementNeighbourTbl[299][0-26]: 243 244 1000 248 249 1000 1000 1000 1000 293 294 1000 298 1000 1000 1000 1000 343 344 1000 348 349 1000 1000 1000 1000 
+		elementNeighbourTbl[300][0-26]: 1000 1000 1000 1000 250 251 1000 255 256 1000 1000 1000 1000 301 1000 305 306 1000 1000 1000 1000 350 351 1000 355 356 
+		elementNeighbourTbl[301][0-26]: 1000 1000 1000 250 251 252 255 256 257 1000 1000 1000 300 302 305 306 307 1000 1000 1000 350 351 352 355 356 357 
+		elementNeighbourTbl[302][0-26]: 1000 1000 1000 251 252 253 256 257 258 1000 1000 1000 301 303 306 307 308 1000 1000 1000 351 352 353 356 357 358 
+		elementNeighbourTbl[303][0-26]: 1000 1000 1000 252 253 254 257 258 259 1000 1000 1000 302 304 307 308 309 1000 1000 1000 352 353 354 357 358 359 
+		elementNeighbourTbl[304][0-26]: 1000 1000 1000 253 254 1000 258 259 1000 1000 1000 1000 303 1000 308 309 1000 1000 1000 1000 353 354 1000 358 359 1000 
+		elementNeighbourTbl[305][0-26]: 1000 250 251 1000 255 256 1000 260 261 1000 300 301 1000 306 1000 310 311 1000 350 351 1000 355 356 1000 360 361 
+		elementNeighbourTbl[306][0-26]: 250 251 252 255 256 257 260 261 262 300 301 302 305 307 310 311 312 350 351 352 355 356 357 360 361 362 
+		elementNeighbourTbl[307][0-26]: 251 252 253 256 257 258 261 262 263 301 302 303 306 308 311 312 313 351 352 353 356 357 358 361 362 363 
+		elementNeighbourTbl[308][0-26]: 252 253 254 257 258 259 262 263 264 302 303 304 307 309 312 313 314 352 353 354 357 358 359 362 363 364 
+		elementNeighbourTbl[309][0-26]: 253 254 1000 258 259 1000 263 264 1000 303 304 1000 308 1000 313 314 1000 353 354 1000 358 359 1000 363 364 1000 
+		elementNeighbourTbl[310][0-26]: 1000 255 256 1000 260 261 1000 265 266 1000 305 306 1000 311 1000 315 316 1000 355 356 1000 360 361 1000 365 366 
+		elementNeighbourTbl[311][0-26]: 255 256 257 260 261 262 265 266 267 305 306 307 310 312 315 316 317 355 356 357 360 361 362 365 366 367 
+		elementNeighbourTbl[312][0-26]: 256 257 258 261 262 263 266 267 268 306 307 308 311 313 316 317 318 356 357 358 361 362 363 366 367 368 
+		elementNeighbourTbl[313][0-26]: 257 258 259 262 263 264 267 268 269 307 308 309 312 314 317 318 319 357 358 359 362 363 364 367 368 369 
+		elementNeighbourTbl[314][0-26]: 258 259 1000 263 264 1000 268 269 1000 308 309 1000 313 1000 318 319 1000 358 359 1000 363 364 1000 368 369 1000 
+		elementNeighbourTbl[315][0-26]: 1000 260 261 1000 265 266 1000 270 271 1000 310 311 1000 316 1000 320 321 1000 360 361 1000 365 366 1000 370 371 
+		elementNeighbourTbl[316][0-26]: 260 261 262 265 266 267 270 271 272 310 311 312 315 317 320 321 322 360 361 362 365 366 367 370 371 372 
+		elementNeighbourTbl[317][0-26]: 261 262 263 266 267 268 271 272 273 311 312 313 316 318 321 322 323 361 362 363 366 367 368 371 372 373 
+		elementNeighbourTbl[318][0-26]: 262 263 264 267 268 269 272 273 274 312 313 314 317 319 322 323 324 362 363 364 367 368 369 372 373 374 
+		elementNeighbourTbl[319][0-26]: 263 264 1000 268 269 1000 273 274 1000 313 314 1000 318 1000 323 324 1000 363 364 1000 368 369 1000 373 374 1000 
+		elementNeighbourTbl[320][0-26]: 1000 265 266 1000 270 271 1000 275 276 1000 315 316 1000 321 1000 325 326 1000 365 366 1000 370 371 1000 375 376 
+		elementNeighbourTbl[321][0-26]: 265 266 267 270 271 272 275 276 277 315 316 317 320 322 325 326 327 365 366 367 370 371 372 375 376 377 
+		elementNeighbourTbl[322][0-26]: 266 267 268 271 272 273 276 277 278 316 317 318 321 323 326 327 328 366 367 368 371 372 373 376 377 378 
+		elementNeighbourTbl[323][0-26]: 267 268 269 272 273 274 277 278 279 317 318 319 322 324 327 328 329 367 368 369 372 373 374 377 378 379 
+		elementNeighbourTbl[324][0-26]: 268 269 1000 273 274 1000 278 279 1000 318 319 1000 323 1000 328 329 1000 368 369 1000 373 374 1000 378 379 1000 
+		elementNeighbourTbl[325][0-26]: 1000 270 271 1000 275 276 1000 280 281 1000 320 321 1000 326 1000 330 331 1000 370 371 1000 375 376 1000 380 381 
+		elementNeighbourTbl[326][0-26]: 270 271 272 275 276 277 280 281 282 320 321 322 325 327 330 331 332 370 371 372 375 376 377 380 381 382 
+		elementNeighbourTbl[327][0-26]: 271 272 273 276 277 278 281 282 283 321 322 323 326 328 331 332 333 371 372 373 376 377 378 381 382 383 
+		elementNeighbourTbl[328][0-26]: 272 273 274 277 278 279 282 283 284 322 323 324 327 329 332 333 334 372 373 374 377 378 379 382 383 384 
+		elementNeighbourTbl[329][0-26]: 273 274 1000 278 279 1000 283 284 1000 323 324 1000 328 1000 333 334 1000 373 374 1000 378 379 1000 383 384 1000 
+		elementNeighbourTbl[330][0-26]: 1000 275 276 1000 280 281 1000 285 286 1000 325 326 1000 331 1000 335 336 1000 375 376 1000 380 381 1000 385 386 
+		elementNeighbourTbl[331][0-26]: 275 276 277 280 281 282 285 286 287 325 326 327 330 332 335 336 337 375 376 377 380 381 382 385 386 387 
+		elementNeighbourTbl[332][0-26]: 276 277 278 281 282 283 286 287 288 326 327 328 331 333 336 337 338 376 377 378 381 382 383 386 387 388 
+		elementNeighbourTbl[333][0-26]: 277 278 279 282 283 284 287 288 289 327 328 329 332 334 337 338 339 377 378 379 382 383 384 387 388 389 
+		elementNeighbourTbl[334][0-26]: 278 279 1000 283 284 1000 288 289 1000 328 329 1000 333 1000 338 339 1000 378 379 1000 383 384 1000 388 389 1000 
+		elementNeighbourTbl[335][0-26]: 1000 280 281 1000 285 286 1000 290 291 1000 330 331 1000 336 1000 340 341 1000 380 381 1000 385 386 1000 390 391 
+		elementNeighbourTbl[336][0-26]: 280 281 282 285 286 287 290 291 292 330 331 332 335 337 340 341 342 380 381 382 385 386 387 390 391 392 
+		elementNeighbourTbl[337][0-26]: 281 282 283 286 287 288 291 292 293 331 332 333 336 338 341 342 343 381 382 383 386 387 388 391 392 393 
+		elementNeighbourTbl[338][0-26]: 282 283 284 287 288 289 292 293 294 332 333 334 337 339 342 343 344 382 383 384 387 388 389 392 393 394 
+		elementNeighbourTbl[339][0-26]: 283 284 1000 288 289 1000 293 294 1000 333 334 1000 338 1000 343 344 1000 383 384 1000 388 389 1000 393 394 1000 
+		elementNeighbourTbl[340][0-26]: 1000 285 286 1000 290 291 1000 295 296 1000 335 336 1000 341 1000 345 346 1000 385 386 1000 390 391 1000 395 396 
+		elementNeighbourTbl[341][0-26]: 285 286 287 290 291 292 295 296 297 335 336 337 340 342 345 346 347 385 386 387 390 391 392 395 396 397 
+		elementNeighbourTbl[342][0-26]: 286 287 288 291 292 293 296 297 298 336 337 338 341 343 346 347 348 386 387 388 391 392 393 396 397 398 
+		elementNeighbourTbl[343][0-26]: 287 288 289 292 293 294 297 298 299 337 338 339 342 344 347 348 349 387 388 389 392 393 394 397 398 399 
+		elementNeighbourTbl[344][0-26]: 288 289 1000 293 294 1000 298 299 1000 338 339 1000 343 1000 348 349 1000 388 389 1000 393 394 1000 398 399 1000 
+		elementNeighbourTbl[345][0-26]: 1000 290 291 1000 295 296 1000 1000 1000 1000 340 341 1000 346 1000 1000 1000 1000 390 391 1000 395 396 1000 1000 1000 
+		elementNeighbourTbl[346][0-26]: 290 291 292 295 296 297 1000 1000 1000 340 341 342 345 347 1000 1000 1000 390 391 392 395 396 397 1000 1000 1000 
+		elementNeighbourTbl[347][0-26]: 291 292 293 296 297 298 1000 1000 1000 341 342 343 346 348 1000 1000 1000 391 392 393 396 397 398 1000 1000 1000 
+		elementNeighbourTbl[348][0-26]: 292 293 294 297 298 299 1000 1000 1000 342 343 344 347 349 1000 1000 1000 392 393 394 397 398 399 1000 1000 1000 
+		elementNeighbourTbl[349][0-26]: 293 294 1000 298 299 1000 1000 1000 1000 343 344 1000 348 1000 1000 1000 1000 393 394 1000 398 399 1000 1000 1000 1000 
+		elementNeighbourTbl[350][0-26]: 1000 1000 1000 1000 300 301 1000 305 306 1000 1000 1000 1000 351 1000 355 356 1000 1000 1000 1000 400 401 1000 405 406 
+		elementNeighbourTbl[351][0-26]: 1000 1000 1000 300 301 302 305 306 307 1000 1000 1000 350 352 355 356 357 1000 1000 1000 400 401 402 405 406 407 
+		elementNeighbourTbl[352][0-26]: 1000 1000 1000 301 302 303 306 307 308 1000 1000 1000 351 353 356 357 358 1000 1000 1000 401 402 403 406 407 408 
+		elementNeighbourTbl[353][0-26]: 1000 1000 1000 302 303 304 307 308 309 1000 1000 1000 352 354 357 358 359 1000 1000 1000 402 403 404 407 408 409 
+		elementNeighbourTbl[354][0-26]: 1000 1000 1000 303 304 1000 308 309 1000 1000 1000 1000 353 1000 358 359 1000 1000 1000 1000 403 404 1000 408 409 1000 
+		elementNeighbourTbl[355][0-26]: 1000 300 301 1000 305 306 1000 310 311 1000 350 351 1000 356 1000 360 361 1000 400 401 1000 405 406 1000 410 411 
+		elementNeighbourTbl[356][0-26]: 300 301 302 305 306 307 310 311 312 350 351 352 355 357 360 361 362 400 401 402 405 406 407 410 411 412 
+		elementNeighbourTbl[357][0-26]: 301 302 303 306 307 308 311 312 313 351 352 353 356 358 361 362 363 401 402 403 406 407 408 411 412 413 
+		elementNeighbourTbl[358][0-26]: 302 303 304 307 308 309 312 313 314 352 353 354 357 359 362 363 364 402 403 404 407 408 409 412 413 414 
+		elementNeighbourTbl[359][0-26]: 303 304 1000 308 309 1000 313 314 1000 353 354 1000 358 1000 363 364 1000 403 404 1000 408 409 1000 413 414 1000 
+		elementNeighbourTbl[360][0-26]: 1000 305 306 1000 310 311 1000 315 316 1000 355 356 1000 361 1000 365 366 1000 405 406 1000 410 411 1000 415 416 
+		elementNeighbourTbl[361][0-26]: 305 306 307 310 311 312 315 316 317 355 356 357 360 362 365 366 367 405 406 407 410 411 412 415 416 417 
+		elementNeighbourTbl[362][0-26]: 306 307 308 311 312 313 316 317 318 356 357 358 361 363 366 367 368 406 407 408 411 412 413 416 417 418 
+		elementNeighbourTbl[363][0-26]: 307 308 309 312 313 314 317 318 319 357 358 359 362 364 367 368 369 407 408 409 412 413 414 417 418 419 
+		elementNeighbourTbl[364][0-26]: 308 309 1000 313 314 1000 318 319 1000 358 359 1000 363 1000 368 369 1000 408 409 1000 413 414 1000 418 419 1000 
+		elementNeighbourTbl[365][0-26]: 1000 310 311 1000 315 316 1000 320 321 1000 360 361 1000 366 1000 370 371 1000 410 411 1000 415 416 1000 420 421 
+		elementNeighbourTbl[366][0-26]: 310 311 312 315 316 317 320 321 322 360 361 362 365 367 370 371 372 410 411 412 415 416 417 420 421 422 
+		elementNeighbourTbl[367][0-26]: 311 312 313 316 317 318 321 322 323 361 362 363 366 368 371 372 373 411 412 413 416 417 418 421 422 423 
+		elementNeighbourTbl[368][0-26]: 312 313 314 317 318 319 322 323 324 362 363 364 367 369 372 373 374 412 413 414 417 418 419 422 423 424 
+		elementNeighbourTbl[369][0-26]: 313 314 1000 318 319 1000 323 324 1000 363 364 1000 368 1000 373 374 1000 413 414 1000 418 419 1000 423 424 1000 
+		elementNeighbourTbl[370][0-26]: 1000 315 316 1000 320 321 1000 325 326 1000 365 366 1000 371 1000 375 376 1000 415 416 1000 420 421 1000 425 426 
+		elementNeighbourTbl[371][0-26]: 315 316 317 320 321 322 325 326 327 365 366 367 370 372 375 376 377 415 416 417 420 421 422 425 426 427 
+		elementNeighbourTbl[372][0-26]: 316 317 318 321 322 323 326 327 328 366 367 368 371 373 376 377 378 416 417 418 421 422 423 426 427 428 
+		elementNeighbourTbl[373][0-26]: 317 318 319 322 323 324 327 328 329 367 368 369 372 374 377 378 379 417 418 419 422 423 424 427 428 429 
+		elementNeighbourTbl[374][0-26]: 318 319 1000 323 324 1000 328 329 1000 368 369 1000 373 1000 378 379 1000 418 419 1000 423 424 1000 428 429 1000 
+		elementNeighbourTbl[375][0-26]: 1000 320 321 1000 325 326 1000 330 331 1000 370 371 1000 376 1000 380 381 1000 420 421 1000 425 426 1000 430 431 
+		elementNeighbourTbl[376][0-26]: 320 321 322 325 326 327 330 331 332 370 371 372 375 377 380 381 382 420 421 422 425 426 427 430 431 432 
+		elementNeighbourTbl[377][0-26]: 321 322 323 326 327 328 331 332 333 371 372 373 376 378 381 382 383 421 422 423 426 427 428 431 432 433 
+		elementNeighbourTbl[378][0-26]: 322 323 324 327 328 329 332 333 334 372 373 374 377 379 382 383 384 422 423 424 427 428 429 432 433 434 
+		elementNeighbourTbl[379][0-26]: 323 324 1000 328 329 1000 333 334 1000 373 374 1000 378 1000 383 384 1000 423 424 1000 428 429 1000 433 434 1000 
+		elementNeighbourTbl[380][0-26]: 1000 325 326 1000 330 331 1000 335 336 1000 375 376 1000 381 1000 385 386 1000 425 426 1000 430 431 1000 435 436 
+		elementNeighbourTbl[381][0-26]: 325 326 327 330 331 332 335 336 337 375 376 377 380 382 385 386 387 425 426 427 430 431 432 435 436 437 
+		elementNeighbourTbl[382][0-26]: 326 327 328 331 332 333 336 337 338 376 377 378 381 383 386 387 388 426 427 428 431 432 433 436 437 438 
+		elementNeighbourTbl[383][0-26]: 327 328 329 332 333 334 337 338 339 377 378 379 382 384 387 388 389 427 428 429 432 433 434 437 438 439 
+		elementNeighbourTbl[384][0-26]: 328 329 1000 333 334 1000 338 339 1000 378 379 1000 383 1000 388 389 1000 428 429 1000 433 434 1000 438 439 1000 
+		elementNeighbourTbl[385][0-26]: 1000 330 331 1000 335 336 1000 340 341 1000 380 381 1000 386 1000 390 391 1000 430 431 1000 435 436 1000 440 441 
+		elementNeighbourTbl[386][0-26]: 330 331 332 335 336 337 340 341 342 380 381 382 385 387 390 391 392 430 431 432 435 436 437 440 441 442 
+		elementNeighbourTbl[387][0-26]: 331 332 333 336 337 338 341 342 343 381 382 383 386 388 391 392 393 431 432 433 436 437 438 441 442 443 
+		elementNeighbourTbl[388][0-26]: 332 333 334 337 338 339 342 343 344 382 383 384 387 389 392 393 394 432 433 434 437 438 439 442 443 444 
+		elementNeighbourTbl[389][0-26]: 333 334 1000 338 339 1000 343 344 1000 383 384 1000 388 1000 393 394 1000 433 434 1000 438 439 1000 443 444 1000 
+		elementNeighbourTbl[390][0-26]: 1000 335 336 1000 340 341 1000 345 346 1000 385 386 1000 391 1000 395 396 1000 435 436 1000 440 441 1000 445 446 
+		elementNeighbourTbl[391][0-26]: 335 336 337 340 341 342 345 346 347 385 386 387 390 392 395 396 397 435 436 437 440 441 442 445 446 447 
+		elementNeighbourTbl[392][0-26]: 336 337 338 341 342 343 346 347 348 386 387 388 391 393 396 397 398 436 437 438 441 442 443 446 447 448 
+		elementNeighbourTbl[393][0-26]: 337 338 339 342 343 344 347 348 349 387 388 389 392 394 397 398 399 437 438 439 442 443 444 447 448 449 
+		elementNeighbourTbl[394][0-26]: 338 339 1000 343 344 1000 348 349 1000 388 389 1000 393 1000 398 399 1000 438 439 1000 443 444 1000 448 449 1000 
+		elementNeighbourTbl[395][0-26]: 1000 340 341 1000 345 346 1000 1000 1000 1000 390 391 1000 396 1000 1000 1000 1000 440 441 1000 445 446 1000 1000 1000 
+		elementNeighbourTbl[396][0-26]: 340 341 342 345 346 347 1000 1000 1000 390 391 392 395 397 1000 1000 1000 440 441 442 445 446 447 1000 1000 1000 
+		elementNeighbourTbl[397][0-26]: 341 342 343 346 347 348 1000 1000 1000 391 392 393 396 398 1000 1000 1000 441 442 443 446 447 448 1000 1000 1000 
+		elementNeighbourTbl[398][0-26]: 342 343 344 347 348 349 1000 1000 1000 392 393 394 397 399 1000 1000 1000 442 443 444 447 448 449 1000 1000 1000 
+		elementNeighbourTbl[399][0-26]: 343 344 1000 348 349 1000 1000 1000 1000 393 394 1000 398 1000 1000 1000 1000 443 444 1000 448 449 1000 1000 1000 1000 
+		elementNeighbourTbl[400][0-26]: 1000 1000 1000 1000 350 351 1000 355 356 1000 1000 1000 1000 401 1000 405 406 1000 1000 1000 1000 450 451 1000 455 456 
+		elementNeighbourTbl[401][0-26]: 1000 1000 1000 350 351 352 355 356 357 1000 1000 1000 400 402 405 406 407 1000 1000 1000 450 451 452 455 456 457 
+		elementNeighbourTbl[402][0-26]: 1000 1000 1000 351 352 353 356 357 358 1000 1000 1000 401 403 406 407 408 1000 1000 1000 451 452 453 456 457 458 
+		elementNeighbourTbl[403][0-26]: 1000 1000 1000 352 353 354 357 358 359 1000 1000 1000 402 404 407 408 409 1000 1000 1000 452 453 454 457 458 459 
+		elementNeighbourTbl[404][0-26]: 1000 1000 1000 353 354 1000 358 359 1000 1000 1000 1000 403 1000 408 409 1000 1000 1000 1000 453 454 1000 458 459 1000 
+		elementNeighbourTbl[405][0-26]: 1000 350 351 1000 355 356 1000 360 361 1000 400 401 1000 406 1000 410 411 1000 450 451 1000 455 456 1000 460 461 
+		elementNeighbourTbl[406][0-26]: 350 351 352 355 356 357 360 361 362 400 401 402 405 407 410 411 412 450 451 452 455 456 457 460 461 462 
+		elementNeighbourTbl[407][0-26]: 351 352 353 356 357 358 361 362 363 401 402 403 406 408 411 412 413 451 452 453 456 457 458 461 462 463 
+		elementNeighbourTbl[408][0-26]: 352 353 354 357 358 359 362 363 364 402 403 404 407 409 412 413 414 452 453 454 457 458 459 462 463 464 
+		elementNeighbourTbl[409][0-26]: 353 354 1000 358 359 1000 363 364 1000 403 404 1000 408 1000 413 414 1000 453 454 1000 458 459 1000 463 464 1000 
+		elementNeighbourTbl[410][0-26]: 1000 355 356 1000 360 361 1000 365 366 1000 405 406 1000 411 1000 415 416 1000 455 456 1000 460 461 1000 465 466 
+		elementNeighbourTbl[411][0-26]: 355 356 357 360 361 362 365 366 367 405 406 407 410 412 415 416 417 455 456 457 460 461 462 465 466 467 
+		elementNeighbourTbl[412][0-26]: 356 357 358 361 362 363 366 367 368 406 407 408 411 413 416 417 418 456 457 458 461 462 463 466 467 468 
+		elementNeighbourTbl[413][0-26]: 357 358 359 362 363 364 367 368 369 407 408 409 412 414 417 418 419 457 458 459 462 463 464 467 468 469 
+		elementNeighbourTbl[414][0-26]: 358 359 1000 363 364 1000 368 369 1000 408 409 1000 413 1000 418 419 1000 458 459 1000 463 464 1000 468 469 1000 
+		elementNeighbourTbl[415][0-26]: 1000 360 361 1000 365 366 1000 370 371 1000 410 411 1000 416 1000 420 421 1000 460 461 1000 465 466 1000 470 471 
+		elementNeighbourTbl[416][0-26]: 360 361 362 365 366 367 370 371 372 410 411 412 415 417 420 421 422 460 461 462 465 466 467 470 471 472 
+		elementNeighbourTbl[417][0-26]: 361 362 363 366 367 368 371 372 373 411 412 413 416 418 421 422 423 461 462 463 466 467 468 471 472 473 
+		elementNeighbourTbl[418][0-26]: 362 363 364 367 368 369 372 373 374 412 413 414 417 419 422 423 424 462 463 464 467 468 469 472 473 474 
+		elementNeighbourTbl[419][0-26]: 363 364 1000 368 369 1000 373 374 1000 413 414 1000 418 1000 423 424 1000 463 464 1000 468 469 1000 473 474 1000 
+		elementNeighbourTbl[420][0-26]: 1000 365 366 1000 370 371 1000 375 376 1000 415 416 1000 421 1000 425 426 1000 465 466 1000 470 471 1000 475 476 
+		elementNeighbourTbl[421][0-26]: 365 366 367 370 371 372 375 376 377 415 416 417 420 422 425 426 427 465 466 467 470 471 472 475 476 477 
+		elementNeighbourTbl[422][0-26]: 366 367 368 371 372 373 376 377 378 416 417 418 421 423 426 427 428 466 467 468 471 472 473 476 477 478 
+		elementNeighbourTbl[423][0-26]: 367 368 369 372 373 374 377 378 379 417 418 419 422 424 427 428 429 467 468 469 472 473 474 477 478 479 
+		elementNeighbourTbl[424][0-26]: 368 369 1000 373 374 1000 378 379 1000 418 419 1000 423 1000 428 429 1000 468 469 1000 473 474 1000 478 479 1000 
+		elementNeighbourTbl[425][0-26]: 1000 370 371 1000 375 376 1000 380 381 1000 420 421 1000 426 1000 430 431 1000 470 471 1000 475 476 1000 480 481 
+		elementNeighbourTbl[426][0-26]: 370 371 372 375 376 377 380 381 382 420 421 422 425 427 430 431 432 470 471 472 475 476 477 480 481 482 
+		elementNeighbourTbl[427][0-26]: 371 372 373 376 377 378 381 382 383 421 422 423 426 428 431 432 433 471 472 473 476 477 478 481 482 483 
+		elementNeighbourTbl[428][0-26]: 372 373 374 377 378 379 382 383 384 422 423 424 427 429 432 433 434 472 473 474 477 478 479 482 483 484 
+		elementNeighbourTbl[429][0-26]: 373 374 1000 378 379 1000 383 384 1000 423 424 1000 428 1000 433 434 1000 473 474 1000 478 479 1000 483 484 1000 
+		elementNeighbourTbl[430][0-26]: 1000 375 376 1000 380 381 1000 385 386 1000 425 426 1000 431 1000 435 436 1000 475 476 1000 480 481 1000 485 486 
+		elementNeighbourTbl[431][0-26]: 375 376 377 380 381 382 385 386 387 425 426 427 430 432 435 436 437 475 476 477 480 481 482 485 486 487 
+		elementNeighbourTbl[432][0-26]: 376 377 378 381 382 383 386 387 388 426 427 428 431 433 436 437 438 476 477 478 481 482 483 486 487 488 
+		elementNeighbourTbl[433][0-26]: 377 378 379 382 383 384 387 388 389 427 428 429 432 434 437 438 439 477 478 479 482 483 484 487 488 489 
+		elementNeighbourTbl[434][0-26]: 378 379 1000 383 384 1000 388 389 1000 428 429 1000 433 1000 438 439 1000 478 479 1000 483 484 1000 488 489 1000 
+		elementNeighbourTbl[435][0-26]: 1000 380 381 1000 385 386 1000 390 391 1000 430 431 1000 436 1000 440 441 1000 480 481 1000 485 486 1000 490 491 
+		elementNeighbourTbl[436][0-26]: 380 381 382 385 386 387 390 391 392 430 431 432 435 437 440 441 442 480 481 482 485 486 487 490 491 492 
+		elementNeighbourTbl[437][0-26]: 381 382 383 386 387 388 391 392 393 431 432 433 436 438 441 442 443 481 482 483 486 487 488 491 492 493 
+		elementNeighbourTbl[438][0-26]: 382 383 384 387 388 389 392 393 394 432 433 434 437 439 442 443 444 482 483 484 487 488 489 492 493 494 
+		elementNeighbourTbl[439][0-26]: 383 384 1000 388 389 1000 393 394 1000 433 434 1000 438 1000 443 444 1000 483 484 1000 488 489 1000 493 494 1000 
+		elementNeighbourTbl[440][0-26]: 1000 385 386 1000 390 391 1000 395 396 1000 435 436 1000 441 1000 445 446 1000 485 486 1000 490 491 1000 495 496 
+		elementNeighbourTbl[441][0-26]: 385 386 387 390 391 392 395 396 397 435 436 437 440 442 445 446 447 485 486 487 490 491 492 495 496 497 
+		elementNeighbourTbl[442][0-26]: 386 387 388 391 392 393 396 397 398 436 437 438 441 443 446 447 448 486 487 488 491 492 493 496 497 498 
+		elementNeighbourTbl[443][0-26]: 387 388 389 392 393 394 397 398 399 437 438 439 442 444 447 448 449 487 488 489 492 493 494 497 498 499 
+		elementNeighbourTbl[444][0-26]: 388 389 1000 393 394 1000 398 399 1000 438 439 1000 443 1000 448 449 1000 488 489 1000 493 494 1000 498 499 1000 
+		elementNeighbourTbl[445][0-26]: 1000 390 391 1000 395 396 1000 1000 1000 1000 440 441 1000 446 1000 1000 1000 1000 490 491 1000 495 496 1000 1000 1000 
+		elementNeighbourTbl[446][0-26]: 390 391 392 395 396 397 1000 1000 1000 440 441 442 445 447 1000 1000 1000 490 491 492 495 496 497 1000 1000 1000 
+		elementNeighbourTbl[447][0-26]: 391 392 393 396 397 398 1000 1000 1000 441 442 443 446 448 1000 1000 1000 491 492 493 496 497 498 1000 1000 1000 
+		elementNeighbourTbl[448][0-26]: 392 393 394 397 398 399 1000 1000 1000 442 443 444 447 449 1000 1000 1000 492 493 494 497 498 499 1000 1000 1000 
+		elementNeighbourTbl[449][0-26]: 393 394 1000 398 399 1000 1000 1000 1000 443 444 1000 448 1000 1000 1000 1000 493 494 1000 498 499 1000 1000 1000 1000 
+		elementNeighbourTbl[450][0-26]: 1000 1000 1000 1000 400 401 1000 405 406 1000 1000 1000 1000 451 1000 455 456 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[451][0-26]: 1000 1000 1000 400 401 402 405 406 407 1000 1000 1000 450 452 455 456 457 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[452][0-26]: 1000 1000 1000 401 402 403 406 407 408 1000 1000 1000 451 453 456 457 458 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[453][0-26]: 1000 1000 1000 402 403 404 407 408 409 1000 1000 1000 452 454 457 458 459 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[454][0-26]: 1000 1000 1000 403 404 1000 408 409 1000 1000 1000 1000 453 1000 458 459 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[455][0-26]: 1000 400 401 1000 405 406 1000 410 411 1000 450 451 1000 456 1000 460 461 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[456][0-26]: 400 401 402 405 406 407 410 411 412 450 451 452 455 457 460 461 462 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[457][0-26]: 401 402 403 406 407 408 411 412 413 451 452 453 456 458 461 462 463 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[458][0-26]: 402 403 404 407 408 409 412 413 414 452 453 454 457 459 462 463 464 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[459][0-26]: 403 404 1000 408 409 1000 413 414 1000 453 454 1000 458 1000 463 464 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[460][0-26]: 1000 405 406 1000 410 411 1000 415 416 1000 455 456 1000 461 1000 465 466 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[461][0-26]: 405 406 407 410 411 412 415 416 417 455 456 457 460 462 465 466 467 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[462][0-26]: 406 407 408 411 412 413 416 417 418 456 457 458 461 463 466 467 468 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[463][0-26]: 407 408 409 412 413 414 417 418 419 457 458 459 462 464 467 468 469 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[464][0-26]: 408 409 1000 413 414 1000 418 419 1000 458 459 1000 463 1000 468 469 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[465][0-26]: 1000 410 411 1000 415 416 1000 420 421 1000 460 461 1000 466 1000 470 471 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[466][0-26]: 410 411 412 415 416 417 420 421 422 460 461 462 465 467 470 471 472 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[467][0-26]: 411 412 413 416 417 418 421 422 423 461 462 463 466 468 471 472 473 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[468][0-26]: 412 413 414 417 418 419 422 423 424 462 463 464 467 469 472 473 474 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[469][0-26]: 413 414 1000 418 419 1000 423 424 1000 463 464 1000 468 1000 473 474 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[470][0-26]: 1000 415 416 1000 420 421 1000 425 426 1000 465 466 1000 471 1000 475 476 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[471][0-26]: 415 416 417 420 421 422 425 426 427 465 466 467 470 472 475 476 477 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[472][0-26]: 416 417 418 421 422 423 426 427 428 466 467 468 471 473 476 477 478 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[473][0-26]: 417 418 419 422 423 424 427 428 429 467 468 469 472 474 477 478 479 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[474][0-26]: 418 419 1000 423 424 1000 428 429 1000 468 469 1000 473 1000 478 479 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[475][0-26]: 1000 420 421 1000 425 426 1000 430 431 1000 470 471 1000 476 1000 480 481 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[476][0-26]: 420 421 422 425 426 427 430 431 432 470 471 472 475 477 480 481 482 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[477][0-26]: 421 422 423 426 427 428 431 432 433 471 472 473 476 478 481 482 483 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[478][0-26]: 422 423 424 427 428 429 432 433 434 472 473 474 477 479 482 483 484 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[479][0-26]: 423 424 1000 428 429 1000 433 434 1000 473 474 1000 478 1000 483 484 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[480][0-26]: 1000 425 426 1000 430 431 1000 435 436 1000 475 476 1000 481 1000 485 486 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[481][0-26]: 425 426 427 430 431 432 435 436 437 475 476 477 480 482 485 486 487 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[482][0-26]: 426 427 428 431 432 433 436 437 438 476 477 478 481 483 486 487 488 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[483][0-26]: 427 428 429 432 433 434 437 438 439 477 478 479 482 484 487 488 489 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[484][0-26]: 428 429 1000 433 434 1000 438 439 1000 478 479 1000 483 1000 488 489 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[485][0-26]: 1000 430 431 1000 435 436 1000 440 441 1000 480 481 1000 486 1000 490 491 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[486][0-26]: 430 431 432 435 436 437 440 441 442 480 481 482 485 487 490 491 492 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[487][0-26]: 431 432 433 436 437 438 441 442 443 481 482 483 486 488 491 492 493 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[488][0-26]: 432 433 434 437 438 439 442 443 444 482 483 484 487 489 492 493 494 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[489][0-26]: 433 434 1000 438 439 1000 443 444 1000 483 484 1000 488 1000 493 494 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[490][0-26]: 1000 435 436 1000 440 441 1000 445 446 1000 485 486 1000 491 1000 495 496 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[491][0-26]: 435 436 437 440 441 442 445 446 447 485 486 487 490 492 495 496 497 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[492][0-26]: 436 437 438 441 442 443 446 447 448 486 487 488 491 493 496 497 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[493][0-26]: 437 438 439 442 443 444 447 448 449 487 488 489 492 494 497 498 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[494][0-26]: 438 439 1000 443 444 1000 448 449 1000 488 489 1000 493 1000 498 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[495][0-26]: 1000 440 441 1000 445 446 1000 1000 1000 1000 490 491 1000 496 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[496][0-26]: 440 441 442 445 446 447 1000 1000 1000 490 491 492 495 497 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[497][0-26]: 441 442 443 446 447 448 1000 1000 1000 491 492 493 496 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[498][0-26]: 442 443 444 447 448 449 1000 1000 1000 492 493 494 497 499 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+		elementNeighbourTbl[499][0-26]: 443 444 1000 448 449 1000 1000 1000 1000 493 494 1000 498 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8086c78
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8087458
+	elementNodeTbl[0-500]:
+		elementNodeTbl[0][0-8]: 000 001 007 006 066 067 073 072 
+		elementNodeTbl[1][0-8]: 001 002 008 007 067 068 074 073 
+		elementNodeTbl[2][0-8]: 002 003 009 008 068 069 075 074 
+		elementNodeTbl[3][0-8]: 003 004 010 009 069 070 076 075 
+		elementNodeTbl[4][0-8]: 004 005 011 010 070 071 077 076 
+		elementNodeTbl[5][0-8]: 006 007 013 012 072 073 079 078 
+		elementNodeTbl[6][0-8]: 007 008 014 013 073 074 080 079 
+		elementNodeTbl[7][0-8]: 008 009 015 014 074 075 081 080 
+		elementNodeTbl[8][0-8]: 009 010 016 015 075 076 082 081 
+		elementNodeTbl[9][0-8]: 010 011 017 016 076 077 083 082 
+		elementNodeTbl[10][0-8]: 012 013 019 018 078 079 085 084 
+		elementNodeTbl[11][0-8]: 013 014 020 019 079 080 086 085 
+		elementNodeTbl[12][0-8]: 014 015 021 020 080 081 087 086 
+		elementNodeTbl[13][0-8]: 015 016 022 021 081 082 088 087 
+		elementNodeTbl[14][0-8]: 016 017 023 022 082 083 089 088 
+		elementNodeTbl[15][0-8]: 018 019 025 024 084 085 091 090 
+		elementNodeTbl[16][0-8]: 019 020 026 025 085 086 092 091 
+		elementNodeTbl[17][0-8]: 020 021 027 026 086 087 093 092 
+		elementNodeTbl[18][0-8]: 021 022 028 027 087 088 094 093 
+		elementNodeTbl[19][0-8]: 022 023 029 028 088 089 095 094 
+		elementNodeTbl[20][0-8]: 024 025 031 030 090 091 097 096 
+		elementNodeTbl[21][0-8]: 025 026 032 031 091 092 098 097 
+		elementNodeTbl[22][0-8]: 026 027 033 032 092 093 099 098 
+		elementNodeTbl[23][0-8]: 027 028 034 033 093 094 100 099 
+		elementNodeTbl[24][0-8]: 028 029 035 034 094 095 101 100 
+		elementNodeTbl[25][0-8]: 030 031 037 036 096 097 103 102 
+		elementNodeTbl[26][0-8]: 031 032 038 037 097 098 104 103 
+		elementNodeTbl[27][0-8]: 032 033 039 038 098 099 105 104 
+		elementNodeTbl[28][0-8]: 033 034 040 039 099 100 106 105 
+		elementNodeTbl[29][0-8]: 034 035 041 040 100 101 107 106 
+		elementNodeTbl[30][0-8]: 036 037 043 042 102 103 109 108 
+		elementNodeTbl[31][0-8]: 037 038 044 043 103 104 110 109 
+		elementNodeTbl[32][0-8]: 038 039 045 044 104 105 111 110 
+		elementNodeTbl[33][0-8]: 039 040 046 045 105 106 112 111 
+		elementNodeTbl[34][0-8]: 040 041 047 046 106 107 113 112 
+		elementNodeTbl[35][0-8]: 042 043 049 048 108 109 115 114 
+		elementNodeTbl[36][0-8]: 043 044 050 049 109 110 116 115 
+		elementNodeTbl[37][0-8]: 044 045 051 050 110 111 117 116 
+		elementNodeTbl[38][0-8]: 045 046 052 051 111 112 118 117 
+		elementNodeTbl[39][0-8]: 046 047 053 052 112 113 119 118 
+		elementNodeTbl[40][0-8]: 048 049 055 054 114 115 121 120 
+		elementNodeTbl[41][0-8]: 049 050 056 055 115 116 122 121 
+		elementNodeTbl[42][0-8]: 050 051 057 056 116 117 123 122 
+		elementNodeTbl[43][0-8]: 051 052 058 057 117 118 124 123 
+		elementNodeTbl[44][0-8]: 052 053 059 058 118 119 125 124 
+		elementNodeTbl[45][0-8]: 054 055 061 060 120 121 127 126 
+		elementNodeTbl[46][0-8]: 055 056 062 061 121 122 128 127 
+		elementNodeTbl[47][0-8]: 056 057 063 062 122 123 129 128 
+		elementNodeTbl[48][0-8]: 057 058 064 063 123 124 130 129 
+		elementNodeTbl[49][0-8]: 058 059 065 064 124 125 131 130 
+		elementNodeTbl[50][0-8]: 066 067 073 072 132 133 139 138 
+		elementNodeTbl[51][0-8]: 067 068 074 073 133 134 140 139 
+		elementNodeTbl[52][0-8]: 068 069 075 074 134 135 141 140 
+		elementNodeTbl[53][0-8]: 069 070 076 075 135 136 142 141 
+		elementNodeTbl[54][0-8]: 070 071 077 076 136 137 143 142 
+		elementNodeTbl[55][0-8]: 072 073 079 078 138 139 145 144 
+		elementNodeTbl[56][0-8]: 073 074 080 079 139 140 146 145 
+		elementNodeTbl[57][0-8]: 074 075 081 080 140 141 147 146 
+		elementNodeTbl[58][0-8]: 075 076 082 081 141 142 148 147 
+		elementNodeTbl[59][0-8]: 076 077 083 082 142 143 149 148 
+		elementNodeTbl[60][0-8]: 078 079 085 084 144 145 151 150 
+		elementNodeTbl[61][0-8]: 079 080 086 085 145 146 152 151 
+		elementNodeTbl[62][0-8]: 080 081 087 086 146 147 153 152 
+		elementNodeTbl[63][0-8]: 081 082 088 087 147 148 154 153 
+		elementNodeTbl[64][0-8]: 082 083 089 088 148 149 155 154 
+		elementNodeTbl[65][0-8]: 084 085 091 090 150 151 157 156 
+		elementNodeTbl[66][0-8]: 085 086 092 091 151 152 158 157 
+		elementNodeTbl[67][0-8]: 086 087 093 092 152 153 159 158 
+		elementNodeTbl[68][0-8]: 087 088 094 093 153 154 160 159 
+		elementNodeTbl[69][0-8]: 088 089 095 094 154 155 161 160 
+		elementNodeTbl[70][0-8]: 090 091 097 096 156 157 163 162 
+		elementNodeTbl[71][0-8]: 091 092 098 097 157 158 164 163 
+		elementNodeTbl[72][0-8]: 092 093 099 098 158 159 165 164 
+		elementNodeTbl[73][0-8]: 093 094 100 099 159 160 166 165 
+		elementNodeTbl[74][0-8]: 094 095 101 100 160 161 167 166 
+		elementNodeTbl[75][0-8]: 096 097 103 102 162 163 169 168 
+		elementNodeTbl[76][0-8]: 097 098 104 103 163 164 170 169 
+		elementNodeTbl[77][0-8]: 098 099 105 104 164 165 171 170 
+		elementNodeTbl[78][0-8]: 099 100 106 105 165 166 172 171 
+		elementNodeTbl[79][0-8]: 100 101 107 106 166 167 173 172 
+		elementNodeTbl[80][0-8]: 102 103 109 108 168 169 175 174 
+		elementNodeTbl[81][0-8]: 103 104 110 109 169 170 176 175 
+		elementNodeTbl[82][0-8]: 104 105 111 110 170 171 177 176 
+		elementNodeTbl[83][0-8]: 105 106 112 111 171 172 178 177 
+		elementNodeTbl[84][0-8]: 106 107 113 112 172 173 179 178 
+		elementNodeTbl[85][0-8]: 108 109 115 114 174 175 181 180 
+		elementNodeTbl[86][0-8]: 109 110 116 115 175 176 182 181 
+		elementNodeTbl[87][0-8]: 110 111 117 116 176 177 183 182 
+		elementNodeTbl[88][0-8]: 111 112 118 117 177 178 184 183 
+		elementNodeTbl[89][0-8]: 112 113 119 118 178 179 185 184 
+		elementNodeTbl[90][0-8]: 114 115 121 120 180 181 187 186 
+		elementNodeTbl[91][0-8]: 115 116 122 121 181 182 188 187 
+		elementNodeTbl[92][0-8]: 116 117 123 122 182 183 189 188 
+		elementNodeTbl[93][0-8]: 117 118 124 123 183 184 190 189 
+		elementNodeTbl[94][0-8]: 118 119 125 124 184 185 191 190 
+		elementNodeTbl[95][0-8]: 120 121 127 126 186 187 193 192 
+		elementNodeTbl[96][0-8]: 121 122 128 127 187 188 194 193 
+		elementNodeTbl[97][0-8]: 122 123 129 128 188 189 195 194 
+		elementNodeTbl[98][0-8]: 123 124 130 129 189 190 196 195 
+		elementNodeTbl[99][0-8]: 124 125 131 130 190 191 197 196 
+		elementNodeTbl[100][0-8]: 132 133 139 138 198 199 205 204 
+		elementNodeTbl[101][0-8]: 133 134 140 139 199 200 206 205 
+		elementNodeTbl[102][0-8]: 134 135 141 140 200 201 207 206 
+		elementNodeTbl[103][0-8]: 135 136 142 141 201 202 208 207 
+		elementNodeTbl[104][0-8]: 136 137 143 142 202 203 209 208 
+		elementNodeTbl[105][0-8]: 138 139 145 144 204 205 211 210 
+		elementNodeTbl[106][0-8]: 139 140 146 145 205 206 212 211 
+		elementNodeTbl[107][0-8]: 140 141 147 146 206 207 213 212 
+		elementNodeTbl[108][0-8]: 141 142 148 147 207 208 214 213 
+		elementNodeTbl[109][0-8]: 142 143 149 148 208 209 215 214 
+		elementNodeTbl[110][0-8]: 144 145 151 150 210 211 217 216 
+		elementNodeTbl[111][0-8]: 145 146 152 151 211 212 218 217 
+		elementNodeTbl[112][0-8]: 146 147 153 152 212 213 219 218 
+		elementNodeTbl[113][0-8]: 147 148 154 153 213 214 220 219 
+		elementNodeTbl[114][0-8]: 148 149 155 154 214 215 221 220 
+		elementNodeTbl[115][0-8]: 150 151 157 156 216 217 223 222 
+		elementNodeTbl[116][0-8]: 151 152 158 157 217 218 224 223 
+		elementNodeTbl[117][0-8]: 152 153 159 158 218 219 225 224 
+		elementNodeTbl[118][0-8]: 153 154 160 159 219 220 226 225 
+		elementNodeTbl[119][0-8]: 154 155 161 160 220 221 227 226 
+		elementNodeTbl[120][0-8]: 156 157 163 162 222 223 229 228 
+		elementNodeTbl[121][0-8]: 157 158 164 163 223 224 230 229 
+		elementNodeTbl[122][0-8]: 158 159 165 164 224 225 231 230 
+		elementNodeTbl[123][0-8]: 159 160 166 165 225 226 232 231 
+		elementNodeTbl[124][0-8]: 160 161 167 166 226 227 233 232 
+		elementNodeTbl[125][0-8]: 162 163 169 168 228 229 235 234 
+		elementNodeTbl[126][0-8]: 163 164 170 169 229 230 236 235 
+		elementNodeTbl[127][0-8]: 164 165 171 170 230 231 237 236 
+		elementNodeTbl[128][0-8]: 165 166 172 171 231 232 238 237 
+		elementNodeTbl[129][0-8]: 166 167 173 172 232 233 239 238 
+		elementNodeTbl[130][0-8]: 168 169 175 174 234 235 241 240 
+		elementNodeTbl[131][0-8]: 169 170 176 175 235 236 242 241 
+		elementNodeTbl[132][0-8]: 170 171 177 176 236 237 243 242 
+		elementNodeTbl[133][0-8]: 171 172 178 177 237 238 244 243 
+		elementNodeTbl[134][0-8]: 172 173 179 178 238 239 245 244 
+		elementNodeTbl[135][0-8]: 174 175 181 180 240 241 247 246 
+		elementNodeTbl[136][0-8]: 175 176 182 181 241 242 248 247 
+		elementNodeTbl[137][0-8]: 176 177 183 182 242 243 249 248 
+		elementNodeTbl[138][0-8]: 177 178 184 183 243 244 250 249 
+		elementNodeTbl[139][0-8]: 178 179 185 184 244 245 251 250 
+		elementNodeTbl[140][0-8]: 180 181 187 186 246 247 253 252 
+		elementNodeTbl[141][0-8]: 181 182 188 187 247 248 254 253 
+		elementNodeTbl[142][0-8]: 182 183 189 188 248 249 255 254 
+		elementNodeTbl[143][0-8]: 183 184 190 189 249 250 256 255 
+		elementNodeTbl[144][0-8]: 184 185 191 190 250 251 257 256 
+		elementNodeTbl[145][0-8]: 186 187 193 192 252 253 259 258 
+		elementNodeTbl[146][0-8]: 187 188 194 193 253 254 260 259 
+		elementNodeTbl[147][0-8]: 188 189 195 194 254 255 261 260 
+		elementNodeTbl[148][0-8]: 189 190 196 195 255 256 262 261 
+		elementNodeTbl[149][0-8]: 190 191 197 196 256 257 263 262 
+		elementNodeTbl[150][0-8]: 198 199 205 204 264 265 271 270 
+		elementNodeTbl[151][0-8]: 199 200 206 205 265 266 272 271 
+		elementNodeTbl[152][0-8]: 200 201 207 206 266 267 273 272 
+		elementNodeTbl[153][0-8]: 201 202 208 207 267 268 274 273 
+		elementNodeTbl[154][0-8]: 202 203 209 208 268 269 275 274 
+		elementNodeTbl[155][0-8]: 204 205 211 210 270 271 277 276 
+		elementNodeTbl[156][0-8]: 205 206 212 211 271 272 278 277 
+		elementNodeTbl[157][0-8]: 206 207 213 212 272 273 279 278 
+		elementNodeTbl[158][0-8]: 207 208 214 213 273 274 280 279 
+		elementNodeTbl[159][0-8]: 208 209 215 214 274 275 281 280 
+		elementNodeTbl[160][0-8]: 210 211 217 216 276 277 283 282 
+		elementNodeTbl[161][0-8]: 211 212 218 217 277 278 284 283 
+		elementNodeTbl[162][0-8]: 212 213 219 218 278 279 285 284 
+		elementNodeTbl[163][0-8]: 213 214 220 219 279 280 286 285 
+		elementNodeTbl[164][0-8]: 214 215 221 220 280 281 287 286 
+		elementNodeTbl[165][0-8]: 216 217 223 222 282 283 289 288 
+		elementNodeTbl[166][0-8]: 217 218 224 223 283 284 290 289 
+		elementNodeTbl[167][0-8]: 218 219 225 224 284 285 291 290 
+		elementNodeTbl[168][0-8]: 219 220 226 225 285 286 292 291 
+		elementNodeTbl[169][0-8]: 220 221 227 226 286 287 293 292 
+		elementNodeTbl[170][0-8]: 222 223 229 228 288 289 295 294 
+		elementNodeTbl[171][0-8]: 223 224 230 229 289 290 296 295 
+		elementNodeTbl[172][0-8]: 224 225 231 230 290 291 297 296 
+		elementNodeTbl[173][0-8]: 225 226 232 231 291 292 298 297 
+		elementNodeTbl[174][0-8]: 226 227 233 232 292 293 299 298 
+		elementNodeTbl[175][0-8]: 228 229 235 234 294 295 301 300 
+		elementNodeTbl[176][0-8]: 229 230 236 235 295 296 302 301 
+		elementNodeTbl[177][0-8]: 230 231 237 236 296 297 303 302 
+		elementNodeTbl[178][0-8]: 231 232 238 237 297 298 304 303 
+		elementNodeTbl[179][0-8]: 232 233 239 238 298 299 305 304 
+		elementNodeTbl[180][0-8]: 234 235 241 240 300 301 307 306 
+		elementNodeTbl[181][0-8]: 235 236 242 241 301 302 308 307 
+		elementNodeTbl[182][0-8]: 236 237 243 242 302 303 309 308 
+		elementNodeTbl[183][0-8]: 237 238 244 243 303 304 310 309 
+		elementNodeTbl[184][0-8]: 238 239 245 244 304 305 311 310 
+		elementNodeTbl[185][0-8]: 240 241 247 246 306 307 313 312 
+		elementNodeTbl[186][0-8]: 241 242 248 247 307 308 314 313 
+		elementNodeTbl[187][0-8]: 242 243 249 248 308 309 315 314 
+		elementNodeTbl[188][0-8]: 243 244 250 249 309 310 316 315 
+		elementNodeTbl[189][0-8]: 244 245 251 250 310 311 317 316 
+		elementNodeTbl[190][0-8]: 246 247 253 252 312 313 319 318 
+		elementNodeTbl[191][0-8]: 247 248 254 253 313 314 320 319 
+		elementNodeTbl[192][0-8]: 248 249 255 254 314 315 321 320 
+		elementNodeTbl[193][0-8]: 249 250 256 255 315 316 322 321 
+		elementNodeTbl[194][0-8]: 250 251 257 256 316 317 323 322 
+		elementNodeTbl[195][0-8]: 252 253 259 258 318 319 325 324 
+		elementNodeTbl[196][0-8]: 253 254 260 259 319 320 326 325 
+		elementNodeTbl[197][0-8]: 254 255 261 260 320 321 327 326 
+		elementNodeTbl[198][0-8]: 255 256 262 261 321 322 328 327 
+		elementNodeTbl[199][0-8]: 256 257 263 262 322 323 329 328 
+		elementNodeTbl[200][0-8]: 264 265 271 270 330 331 337 336 
+		elementNodeTbl[201][0-8]: 265 266 272 271 331 332 338 337 
+		elementNodeTbl[202][0-8]: 266 267 273 272 332 333 339 338 
+		elementNodeTbl[203][0-8]: 267 268 274 273 333 334 340 339 
+		elementNodeTbl[204][0-8]: 268 269 275 274 334 335 341 340 
+		elementNodeTbl[205][0-8]: 270 271 277 276 336 337 343 342 
+		elementNodeTbl[206][0-8]: 271 272 278 277 337 338 344 343 
+		elementNodeTbl[207][0-8]: 272 273 279 278 338 339 345 344 
+		elementNodeTbl[208][0-8]: 273 274 280 279 339 340 346 345 
+		elementNodeTbl[209][0-8]: 274 275 281 280 340 341 347 346 
+		elementNodeTbl[210][0-8]: 276 277 283 282 342 343 349 348 
+		elementNodeTbl[211][0-8]: 277 278 284 283 343 344 350 349 
+		elementNodeTbl[212][0-8]: 278 279 285 284 344 345 351 350 
+		elementNodeTbl[213][0-8]: 279 280 286 285 345 346 352 351 
+		elementNodeTbl[214][0-8]: 280 281 287 286 346 347 353 352 
+		elementNodeTbl[215][0-8]: 282 283 289 288 348 349 355 354 
+		elementNodeTbl[216][0-8]: 283 284 290 289 349 350 356 355 
+		elementNodeTbl[217][0-8]: 284 285 291 290 350 351 357 356 
+		elementNodeTbl[218][0-8]: 285 286 292 291 351 352 358 357 
+		elementNodeTbl[219][0-8]: 286 287 293 292 352 353 359 358 
+		elementNodeTbl[220][0-8]: 288 289 295 294 354 355 361 360 
+		elementNodeTbl[221][0-8]: 289 290 296 295 355 356 362 361 
+		elementNodeTbl[222][0-8]: 290 291 297 296 356 357 363 362 
+		elementNodeTbl[223][0-8]: 291 292 298 297 357 358 364 363 
+		elementNodeTbl[224][0-8]: 292 293 299 298 358 359 365 364 
+		elementNodeTbl[225][0-8]: 294 295 301 300 360 361 367 366 
+		elementNodeTbl[226][0-8]: 295 296 302 301 361 362 368 367 
+		elementNodeTbl[227][0-8]: 296 297 303 302 362 363 369 368 
+		elementNodeTbl[228][0-8]: 297 298 304 303 363 364 370 369 
+		elementNodeTbl[229][0-8]: 298 299 305 304 364 365 371 370 
+		elementNodeTbl[230][0-8]: 300 301 307 306 366 367 373 372 
+		elementNodeTbl[231][0-8]: 301 302 308 307 367 368 374 373 
+		elementNodeTbl[232][0-8]: 302 303 309 308 368 369 375 374 
+		elementNodeTbl[233][0-8]: 303 304 310 309 369 370 376 375 
+		elementNodeTbl[234][0-8]: 304 305 311 310 370 371 377 376 
+		elementNodeTbl[235][0-8]: 306 307 313 312 372 373 379 378 
+		elementNodeTbl[236][0-8]: 307 308 314 313 373 374 380 379 
+		elementNodeTbl[237][0-8]: 308 309 315 314 374 375 381 380 
+		elementNodeTbl[238][0-8]: 309 310 316 315 375 376 382 381 
+		elementNodeTbl[239][0-8]: 310 311 317 316 376 377 383 382 
+		elementNodeTbl[240][0-8]: 312 313 319 318 378 379 385 384 
+		elementNodeTbl[241][0-8]: 313 314 320 319 379 380 386 385 
+		elementNodeTbl[242][0-8]: 314 315 321 320 380 381 387 386 
+		elementNodeTbl[243][0-8]: 315 316 322 321 381 382 388 387 
+		elementNodeTbl[244][0-8]: 316 317 323 322 382 383 389 388 
+		elementNodeTbl[245][0-8]: 318 319 325 324 384 385 391 390 
+		elementNodeTbl[246][0-8]: 319 320 326 325 385 386 392 391 
+		elementNodeTbl[247][0-8]: 320 321 327 326 386 387 393 392 
+		elementNodeTbl[248][0-8]: 321 322 328 327 387 388 394 393 
+		elementNodeTbl[249][0-8]: 322 323 329 328 388 389 395 394 
+		elementNodeTbl[250][0-8]: 330 331 337 336 396 397 403 402 
+		elementNodeTbl[251][0-8]: 331 332 338 337 397 398 404 403 
+		elementNodeTbl[252][0-8]: 332 333 339 338 398 399 405 404 
+		elementNodeTbl[253][0-8]: 333 334 340 339 399 400 406 405 
+		elementNodeTbl[254][0-8]: 334 335 341 340 400 401 407 406 
+		elementNodeTbl[255][0-8]: 336 337 343 342 402 403 409 408 
+		elementNodeTbl[256][0-8]: 337 338 344 343 403 404 410 409 
+		elementNodeTbl[257][0-8]: 338 339 345 344 404 405 411 410 
+		elementNodeTbl[258][0-8]: 339 340 346 345 405 406 412 411 
+		elementNodeTbl[259][0-8]: 340 341 347 346 406 407 413 412 
+		elementNodeTbl[260][0-8]: 342 343 349 348 408 409 415 414 
+		elementNodeTbl[261][0-8]: 343 344 350 349 409 410 416 415 
+		elementNodeTbl[262][0-8]: 344 345 351 350 410 411 417 416 
+		elementNodeTbl[263][0-8]: 345 346 352 351 411 412 418 417 
+		elementNodeTbl[264][0-8]: 346 347 353 352 412 413 419 418 
+		elementNodeTbl[265][0-8]: 348 349 355 354 414 415 421 420 
+		elementNodeTbl[266][0-8]: 349 350 356 355 415 416 422 421 
+		elementNodeTbl[267][0-8]: 350 351 357 356 416 417 423 422 
+		elementNodeTbl[268][0-8]: 351 352 358 357 417 418 424 423 
+		elementNodeTbl[269][0-8]: 352 353 359 358 418 419 425 424 
+		elementNodeTbl[270][0-8]: 354 355 361 360 420 421 427 426 
+		elementNodeTbl[271][0-8]: 355 356 362 361 421 422 428 427 
+		elementNodeTbl[272][0-8]: 356 357 363 362 422 423 429 428 
+		elementNodeTbl[273][0-8]: 357 358 364 363 423 424 430 429 
+		elementNodeTbl[274][0-8]: 358 359 365 364 424 425 431 430 
+		elementNodeTbl[275][0-8]: 360 361 367 366 426 427 433 432 
+		elementNodeTbl[276][0-8]: 361 362 368 367 427 428 434 433 
+		elementNodeTbl[277][0-8]: 362 363 369 368 428 429 435 434 
+		elementNodeTbl[278][0-8]: 363 364 370 369 429 430 436 435 
+		elementNodeTbl[279][0-8]: 364 365 371 370 430 431 437 436 
+		elementNodeTbl[280][0-8]: 366 367 373 372 432 433 439 438 
+		elementNodeTbl[281][0-8]: 367 368 374 373 433 434 440 439 
+		elementNodeTbl[282][0-8]: 368 369 375 374 434 435 441 440 
+		elementNodeTbl[283][0-8]: 369 370 376 375 435 436 442 441 
+		elementNodeTbl[284][0-8]: 370 371 377 376 436 437 443 442 
+		elementNodeTbl[285][0-8]: 372 373 379 378 438 439 445 444 
+		elementNodeTbl[286][0-8]: 373 374 380 379 439 440 446 445 
+		elementNodeTbl[287][0-8]: 374 375 381 380 440 441 447 446 
+		elementNodeTbl[288][0-8]: 375 376 382 381 441 442 448 447 
+		elementNodeTbl[289][0-8]: 376 377 383 382 442 443 449 448 
+		elementNodeTbl[290][0-8]: 378 379 385 384 444 445 451 450 
+		elementNodeTbl[291][0-8]: 379 380 386 385 445 446 452 451 
+		elementNodeTbl[292][0-8]: 380 381 387 386 446 447 453 452 
+		elementNodeTbl[293][0-8]: 381 382 388 387 447 448 454 453 
+		elementNodeTbl[294][0-8]: 382 383 389 388 448 449 455 454 
+		elementNodeTbl[295][0-8]: 384 385 391 390 450 451 457 456 
+		elementNodeTbl[296][0-8]: 385 386 392 391 451 452 458 457 
+		elementNodeTbl[297][0-8]: 386 387 393 392 452 453 459 458 
+		elementNodeTbl[298][0-8]: 387 388 394 393 453 454 460 459 
+		elementNodeTbl[299][0-8]: 388 389 395 394 454 455 461 460 
+		elementNodeTbl[300][0-8]: 396 397 403 402 462 463 469 468 
+		elementNodeTbl[301][0-8]: 397 398 404 403 463 464 470 469 
+		elementNodeTbl[302][0-8]: 398 399 405 404 464 465 471 470 
+		elementNodeTbl[303][0-8]: 399 400 406 405 465 466 472 471 
+		elementNodeTbl[304][0-8]: 400 401 407 406 466 467 473 472 
+		elementNodeTbl[305][0-8]: 402 403 409 408 468 469 475 474 
+		elementNodeTbl[306][0-8]: 403 404 410 409 469 470 476 475 
+		elementNodeTbl[307][0-8]: 404 405 411 410 470 471 477 476 
+		elementNodeTbl[308][0-8]: 405 406 412 411 471 472 478 477 
+		elementNodeTbl[309][0-8]: 406 407 413 412 472 473 479 478 
+		elementNodeTbl[310][0-8]: 408 409 415 414 474 475 481 480 
+		elementNodeTbl[311][0-8]: 409 410 416 415 475 476 482 481 
+		elementNodeTbl[312][0-8]: 410 411 417 416 476 477 483 482 
+		elementNodeTbl[313][0-8]: 411 412 418 417 477 478 484 483 
+		elementNodeTbl[314][0-8]: 412 413 419 418 478 479 485 484 
+		elementNodeTbl[315][0-8]: 414 415 421 420 480 481 487 486 
+		elementNodeTbl[316][0-8]: 415 416 422 421 481 482 488 487 
+		elementNodeTbl[317][0-8]: 416 417 423 422 482 483 489 488 
+		elementNodeTbl[318][0-8]: 417 418 424 423 483 484 490 489 
+		elementNodeTbl[319][0-8]: 418 419 425 424 484 485 491 490 
+		elementNodeTbl[320][0-8]: 420 421 427 426 486 487 493 492 
+		elementNodeTbl[321][0-8]: 421 422 428 427 487 488 494 493 
+		elementNodeTbl[322][0-8]: 422 423 429 428 488 489 495 494 
+		elementNodeTbl[323][0-8]: 423 424 430 429 489 490 496 495 
+		elementNodeTbl[324][0-8]: 424 425 431 430 490 491 497 496 
+		elementNodeTbl[325][0-8]: 426 427 433 432 492 493 499 498 
+		elementNodeTbl[326][0-8]: 427 428 434 433 493 494 500 499 
+		elementNodeTbl[327][0-8]: 428 429 435 434 494 495 501 500 
+		elementNodeTbl[328][0-8]: 429 430 436 435 495 496 502 501 
+		elementNodeTbl[329][0-8]: 430 431 437 436 496 497 503 502 
+		elementNodeTbl[330][0-8]: 432 433 439 438 498 499 505 504 
+		elementNodeTbl[331][0-8]: 433 434 440 439 499 500 506 505 
+		elementNodeTbl[332][0-8]: 434 435 441 440 500 501 507 506 
+		elementNodeTbl[333][0-8]: 435 436 442 441 501 502 508 507 
+		elementNodeTbl[334][0-8]: 436 437 443 442 502 503 509 508 
+		elementNodeTbl[335][0-8]: 438 439 445 444 504 505 511 510 
+		elementNodeTbl[336][0-8]: 439 440 446 445 505 506 512 511 
+		elementNodeTbl[337][0-8]: 440 441 447 446 506 507 513 512 
+		elementNodeTbl[338][0-8]: 441 442 448 447 507 508 514 513 
+		elementNodeTbl[339][0-8]: 442 443 449 448 508 509 515 514 
+		elementNodeTbl[340][0-8]: 444 445 451 450 510 511 517 516 
+		elementNodeTbl[341][0-8]: 445 446 452 451 511 512 518 517 
+		elementNodeTbl[342][0-8]: 446 447 453 452 512 513 519 518 
+		elementNodeTbl[343][0-8]: 447 448 454 453 513 514 520 519 
+		elementNodeTbl[344][0-8]: 448 449 455 454 514 515 521 520 
+		elementNodeTbl[345][0-8]: 450 451 457 456 516 517 523 522 
+		elementNodeTbl[346][0-8]: 451 452 458 457 517 518 524 523 
+		elementNodeTbl[347][0-8]: 452 453 459 458 518 519 525 524 
+		elementNodeTbl[348][0-8]: 453 454 460 459 519 520 526 525 
+		elementNodeTbl[349][0-8]: 454 455 461 460 520 521 527 526 
+		elementNodeTbl[350][0-8]: 462 463 469 468 528 529 535 534 
+		elementNodeTbl[351][0-8]: 463 464 470 469 529 530 536 535 
+		elementNodeTbl[352][0-8]: 464 465 471 470 530 531 537 536 
+		elementNodeTbl[353][0-8]: 465 466 472 471 531 532 538 537 
+		elementNodeTbl[354][0-8]: 466 467 473 472 532 533 539 538 
+		elementNodeTbl[355][0-8]: 468 469 475 474 534 535 541 540 
+		elementNodeTbl[356][0-8]: 469 470 476 475 535 536 542 541 
+		elementNodeTbl[357][0-8]: 470 471 477 476 536 537 543 542 
+		elementNodeTbl[358][0-8]: 471 472 478 477 537 538 544 543 
+		elementNodeTbl[359][0-8]: 472 473 479 478 538 539 545 544 
+		elementNodeTbl[360][0-8]: 474 475 481 480 540 541 547 546 
+		elementNodeTbl[361][0-8]: 475 476 482 481 541 542 548 547 
+		elementNodeTbl[362][0-8]: 476 477 483 482 542 543 549 548 
+		elementNodeTbl[363][0-8]: 477 478 484 483 543 544 550 549 
+		elementNodeTbl[364][0-8]: 478 479 485 484 544 545 551 550 
+		elementNodeTbl[365][0-8]: 480 481 487 486 546 547 553 552 
+		elementNodeTbl[366][0-8]: 481 482 488 487 547 548 554 553 
+		elementNodeTbl[367][0-8]: 482 483 489 488 548 549 555 554 
+		elementNodeTbl[368][0-8]: 483 484 490 489 549 550 556 555 
+		elementNodeTbl[369][0-8]: 484 485 491 490 550 551 557 556 
+		elementNodeTbl[370][0-8]: 486 487 493 492 552 553 559 558 
+		elementNodeTbl[371][0-8]: 487 488 494 493 553 554 560 559 
+		elementNodeTbl[372][0-8]: 488 489 495 494 554 555 561 560 
+		elementNodeTbl[373][0-8]: 489 490 496 495 555 556 562 561 
+		elementNodeTbl[374][0-8]: 490 491 497 496 556 557 563 562 
+		elementNodeTbl[375][0-8]: 492 493 499 498 558 559 565 564 
+		elementNodeTbl[376][0-8]: 493 494 500 499 559 560 566 565 
+		elementNodeTbl[377][0-8]: 494 495 501 500 560 561 567 566 
+		elementNodeTbl[378][0-8]: 495 496 502 501 561 562 568 567 
+		elementNodeTbl[379][0-8]: 496 497 503 502 562 563 569 568 
+		elementNodeTbl[380][0-8]: 498 499 505 504 564 565 571 570 
+		elementNodeTbl[381][0-8]: 499 500 506 505 565 566 572 571 
+		elementNodeTbl[382][0-8]: 500 501 507 506 566 567 573 572 
+		elementNodeTbl[383][0-8]: 501 502 508 507 567 568 574 573 
+		elementNodeTbl[384][0-8]: 502 503 509 508 568 569 575 574 
+		elementNodeTbl[385][0-8]: 504 505 511 510 570 571 577 576 
+		elementNodeTbl[386][0-8]: 505 506 512 511 571 572 578 577 
+		elementNodeTbl[387][0-8]: 506 507 513 512 572 573 579 578 
+		elementNodeTbl[388][0-8]: 507 508 514 513 573 574 580 579 
+		elementNodeTbl[389][0-8]: 508 509 515 514 574 575 581 580 
+		elementNodeTbl[390][0-8]: 510 511 517 516 576 577 583 582 
+		elementNodeTbl[391][0-8]: 511 512 518 517 577 578 584 583 
+		elementNodeTbl[392][0-8]: 512 513 519 518 578 579 585 584 
+		elementNodeTbl[393][0-8]: 513 514 520 519 579 580 586 585 
+		elementNodeTbl[394][0-8]: 514 515 521 520 580 581 587 586 
+		elementNodeTbl[395][0-8]: 516 517 523 522 582 583 589 588 
+		elementNodeTbl[396][0-8]: 517 518 524 523 583 584 590 589 
+		elementNodeTbl[397][0-8]: 518 519 525 524 584 585 591 590 
+		elementNodeTbl[398][0-8]: 519 520 526 525 585 586 592 591 
+		elementNodeTbl[399][0-8]: 520 521 527 526 586 587 593 592 
+		elementNodeTbl[400][0-8]: 528 529 535 534 594 595 601 600 
+		elementNodeTbl[401][0-8]: 529 530 536 535 595 596 602 601 
+		elementNodeTbl[402][0-8]: 530 531 537 536 596 597 603 602 
+		elementNodeTbl[403][0-8]: 531 532 538 537 597 598 604 603 
+		elementNodeTbl[404][0-8]: 532 533 539 538 598 599 605 604 
+		elementNodeTbl[405][0-8]: 534 535 541 540 600 601 607 606 
+		elementNodeTbl[406][0-8]: 535 536 542 541 601 602 608 607 
+		elementNodeTbl[407][0-8]: 536 537 543 542 602 603 609 608 
+		elementNodeTbl[408][0-8]: 537 538 544 543 603 604 610 609 
+		elementNodeTbl[409][0-8]: 538 539 545 544 604 605 611 610 
+		elementNodeTbl[410][0-8]: 540 541 547 546 606 607 613 612 
+		elementNodeTbl[411][0-8]: 541 542 548 547 607 608 614 613 
+		elementNodeTbl[412][0-8]: 542 543 549 548 608 609 615 614 
+		elementNodeTbl[413][0-8]: 543 544 550 549 609 610 616 615 
+		elementNodeTbl[414][0-8]: 544 545 551 550 610 611 617 616 
+		elementNodeTbl[415][0-8]: 546 547 553 552 612 613 619 618 
+		elementNodeTbl[416][0-8]: 547 548 554 553 613 614 620 619 
+		elementNodeTbl[417][0-8]: 548 549 555 554 614 615 621 620 
+		elementNodeTbl[418][0-8]: 549 550 556 555 615 616 622 621 
+		elementNodeTbl[419][0-8]: 550 551 557 556 616 617 623 622 
+		elementNodeTbl[420][0-8]: 552 553 559 558 618 619 625 624 
+		elementNodeTbl[421][0-8]: 553 554 560 559 619 620 626 625 
+		elementNodeTbl[422][0-8]: 554 555 561 560 620 621 627 626 
+		elementNodeTbl[423][0-8]: 555 556 562 561 621 622 628 627 
+		elementNodeTbl[424][0-8]: 556 557 563 562 622 623 629 628 
+		elementNodeTbl[425][0-8]: 558 559 565 564 624 625 631 630 
+		elementNodeTbl[426][0-8]: 559 560 566 565 625 626 632 631 
+		elementNodeTbl[427][0-8]: 560 561 567 566 626 627 633 632 
+		elementNodeTbl[428][0-8]: 561 562 568 567 627 628 634 633 
+		elementNodeTbl[429][0-8]: 562 563 569 568 628 629 635 634 
+		elementNodeTbl[430][0-8]: 564 565 571 570 630 631 637 636 
+		elementNodeTbl[431][0-8]: 565 566 572 571 631 632 638 637 
+		elementNodeTbl[432][0-8]: 566 567 573 572 632 633 639 638 
+		elementNodeTbl[433][0-8]: 567 568 574 573 633 634 640 639 
+		elementNodeTbl[434][0-8]: 568 569 575 574 634 635 641 640 
+		elementNodeTbl[435][0-8]: 570 571 577 576 636 637 643 642 
+		elementNodeTbl[436][0-8]: 571 572 578 577 637 638 644 643 
+		elementNodeTbl[437][0-8]: 572 573 579 578 638 639 645 644 
+		elementNodeTbl[438][0-8]: 573 574 580 579 639 640 646 645 
+		elementNodeTbl[439][0-8]: 574 575 581 580 640 641 647 646 
+		elementNodeTbl[440][0-8]: 576 577 583 582 642 643 649 648 
+		elementNodeTbl[441][0-8]: 577 578 584 583 643 644 650 649 
+		elementNodeTbl[442][0-8]: 578 579 585 584 644 645 651 650 
+		elementNodeTbl[443][0-8]: 579 580 586 585 645 646 652 651 
+		elementNodeTbl[444][0-8]: 580 581 587 586 646 647 653 652 
+		elementNodeTbl[445][0-8]: 582 583 589 588 648 649 655 654 
+		elementNodeTbl[446][0-8]: 583 584 590 589 649 650 656 655 
+		elementNodeTbl[447][0-8]: 584 585 591 590 650 651 657 656 
+		elementNodeTbl[448][0-8]: 585 586 592 591 651 652 658 657 
+		elementNodeTbl[449][0-8]: 586 587 593 592 652 653 659 658 
+		elementNodeTbl[450][0-8]: 594 595 601 600 660 661 667 666 
+		elementNodeTbl[451][0-8]: 595 596 602 601 661 662 668 667 
+		elementNodeTbl[452][0-8]: 596 597 603 602 662 663 669 668 
+		elementNodeTbl[453][0-8]: 597 598 604 603 663 664 670 669 
+		elementNodeTbl[454][0-8]: 598 599 605 604 664 665 671 670 
+		elementNodeTbl[455][0-8]: 600 601 607 606 666 667 673 672 
+		elementNodeTbl[456][0-8]: 601 602 608 607 667 668 674 673 
+		elementNodeTbl[457][0-8]: 602 603 609 608 668 669 675 674 
+		elementNodeTbl[458][0-8]: 603 604 610 609 669 670 676 675 
+		elementNodeTbl[459][0-8]: 604 605 611 610 670 671 677 676 
+		elementNodeTbl[460][0-8]: 606 607 613 612 672 673 679 678 
+		elementNodeTbl[461][0-8]: 607 608 614 613 673 674 680 679 
+		elementNodeTbl[462][0-8]: 608 609 615 614 674 675 681 680 
+		elementNodeTbl[463][0-8]: 609 610 616 615 675 676 682 681 
+		elementNodeTbl[464][0-8]: 610 611 617 616 676 677 683 682 
+		elementNodeTbl[465][0-8]: 612 613 619 618 678 679 685 684 
+		elementNodeTbl[466][0-8]: 613 614 620 619 679 680 686 685 
+		elementNodeTbl[467][0-8]: 614 615 621 620 680 681 687 686 
+		elementNodeTbl[468][0-8]: 615 616 622 621 681 682 688 687 
+		elementNodeTbl[469][0-8]: 616 617 623 622 682 683 689 688 
+		elementNodeTbl[470][0-8]: 618 619 625 624 684 685 691 690 
+		elementNodeTbl[471][0-8]: 619 620 626 625 685 686 692 691 
+		elementNodeTbl[472][0-8]: 620 621 627 626 686 687 693 692 
+		elementNodeTbl[473][0-8]: 621 622 628 627 687 688 694 693 
+		elementNodeTbl[474][0-8]: 622 623 629 628 688 689 695 694 
+		elementNodeTbl[475][0-8]: 624 625 631 630 690 691 697 696 
+		elementNodeTbl[476][0-8]: 625 626 632 631 691 692 698 697 
+		elementNodeTbl[477][0-8]: 626 627 633 632 692 693 699 698 
+		elementNodeTbl[478][0-8]: 627 628 634 633 693 694 700 699 
+		elementNodeTbl[479][0-8]: 628 629 635 634 694 695 701 700 
+		elementNodeTbl[480][0-8]: 630 631 637 636 696 697 703 702 
+		elementNodeTbl[481][0-8]: 631 632 638 637 697 698 704 703 
+		elementNodeTbl[482][0-8]: 632 633 639 638 698 699 705 704 
+		elementNodeTbl[483][0-8]: 633 634 640 639 699 700 706 705 
+		elementNodeTbl[484][0-8]: 634 635 641 640 700 701 707 706 
+		elementNodeTbl[485][0-8]: 636 637 643 642 702 703 709 708 
+		elementNodeTbl[486][0-8]: 637 638 644 643 703 704 710 709 
+		elementNodeTbl[487][0-8]: 638 639 645 644 704 705 711 710 
+		elementNodeTbl[488][0-8]: 639 640 646 645 705 706 712 711 
+		elementNodeTbl[489][0-8]: 640 641 647 646 706 707 713 712 
+		elementNodeTbl[490][0-8]: 642 643 649 648 708 709 715 714 
+		elementNodeTbl[491][0-8]: 643 644 650 649 709 710 716 715 
+		elementNodeTbl[492][0-8]: 644 645 651 650 710 711 717 716 
+		elementNodeTbl[493][0-8]: 645 646 652 651 711 712 718 717 
+		elementNodeTbl[494][0-8]: 646 647 653 652 712 713 719 718 
+		elementNodeTbl[495][0-8]: 648 649 655 654 714 715 721 720 
+		elementNodeTbl[496][0-8]: 649 650 656 655 715 716 722 721 
+		elementNodeTbl[497][0-8]: 650 651 657 656 716 717 723 722 
+		elementNodeTbl[498][0-8]: 651 652 658 657 717 718 724 723 
+		elementNodeTbl[499][0-8]: 652 653 659 658 718 719 725 724 
+	procNbrCnt: 0
+	procNbrTbl (ptr): (nil)
+	elementShadowInfo->procShadowedCnt (ptr): (nil)
+	elementShadowInfo->procShadowedTbl (ptr): (nil)
+	elementShadowInfo->procShadowCnt (ptr): (nil)
+	elementShadowInfo->procShadowTbl (ptr): (nil)
+	nodeShadowInfo->procShadowedCnt (ptr): (nil)
+	nodeShadowInfo->procShadowedTbl (ptr): (nil)
+	nodeShadowInfo->procShadowCnt (ptr): (nil)
+	nodeShadowInfo->procShadowTbl (ptr): (nil)
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testMeshCoarsener_Hexa.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testMeshCoarsener_Hexa.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,154 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testMesh.c 2498 2005-01-07 03:57:00Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+struct _Node
+{
+	double temp;
+};
+
+struct _Element
+{
+	double temp;
+};
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	ExtensionManager_Register*	extensionMgr_Register;
+	Topology*		nTopology;
+	ElementLayout*		eLayout;
+	NodeLayout*		nLayout;
+	MeshDecomp*		decomp;
+	MeshLayout*		ml;
+	Mesh*			mesh;
+	MeshCoarsener_Hexa*	coarsener;
+	Stream*			stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+
+	MPI_Barrier( CommWorld );
+
+	stream = Journal_Register (Info_Type, "myStream");
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( procCount ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 21 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 21 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 21 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnNode", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 0 ) );
+	
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "PPHexaEL", 3, dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	decomp = (MeshDecomp*)HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+	ml = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", ml, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	mesh->buildNodeLocalToGlobalMap = True;
+	mesh->buildNodeDomainToGlobalMap = True;
+	mesh->buildNodeGlobalToLocalMap = True;
+	mesh->buildNodeGlobalToDomainMap = True;
+	mesh->buildNodeNeighbourTbl = True;
+	mesh->buildNodeElementTbl = True;
+	mesh->buildElementLocalToGlobalMap = True;
+	mesh->buildElementDomainToGlobalMap = True;
+	mesh->buildElementGlobalToDomainMap = True;
+	mesh->buildElementGlobalToLocalMap = True;
+	mesh->buildElementNeighbourTbl = True;
+	mesh->buildElementNodeTbl = True;
+	
+	/* Coarsen by one level */
+	coarsener = MeshCoarsener_Hexa_New("meshCoarsener");
+	MeshCoarsener_Hexa_Coarsen( coarsener, mesh, 1, NULL, NULL );
+	Stg_Class_Delete( coarsener );
+	
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+	if (rank == procToWatch)
+	{
+		Print(mesh, stream);
+	}
+	
+	Stg_Class_Delete(mesh);
+	Stg_Class_Delete(ml);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete(dictionary);
+	
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testOperatorFieldVariable.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testOperatorFieldVariable.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,36 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+coord = {0.400000, 2.000000, 7.000000}
+velocity = {-2.000000, 0.400000, 7.000000}
+velocity squared 2d = {4.160000}
+velocity squared 3d = {53.160000}
+velocity magnitude 2d = {2.039608}
+velocity magnitude 3d = {7.291090}
+
+coord = {-0.200000, 6.000000, 2.000000}
+velocity = {-6.000000, -0.200000, 2.000000}
+velocity squared 2d = {36.040000}
+velocity squared 3d = {40.040000}
+velocity magnitude 2d = {6.003332}
+velocity magnitude 3d = {6.327717}
+
+coord = {0.300000, -2.000000, -13.000000}
+velocity = {2.000000, 0.300000, -13.000000}
+velocity squared 2d = {4.090000}
+velocity squared 3d = {173.090000}
+velocity magnitude 2d = {2.022375}
+velocity magnitude 3d = {13.156367}
+
+testing min max local coords:
+velocity:
+min - {-1.000000, -2.300000, -4.000000}
+max - {11.000000, 12.300000, 14.000000}
+velocity squared 2d = 
+min - {-1.000000, -2.300000, -4.000000}
+max - {11.000000, 12.300000, 14.000000}
+testing min max global coords:
+velocity:
+min - {-111.000000, -112.300000, -114.000000}
+max - {111.000000, 112.300000, 114.000000}
+velocity squared 2d = 
+min - {-111.000000, -112.300000, -114.000000}
+max - {111.000000, 112.300000, 114.000000}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testOperatorFieldVariable.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testOperatorFieldVariable.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testOperatorFieldVariable " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testOperatorFieldVariable.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testOperatorFieldVariable.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,220 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testOperatorFieldVariable.c 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Simulate Solid Body Rotation */
+InterpolationResult dummyInterpolateValueAt( void* sdVariable, Coord coord, double* value ) {  
+	value[0] = -coord[1];
+	value[1] =  coord[0];
+	value[2] =  coord[2];
+	return LOCAL;
+}
+
+void dummyWithinElement( void* sdVariable, Element_DomainIndex dEl_I, Coord coord, double* value ) { return ; }
+double dummyGetMinGlobalValue( void* sdVariable ) { return 0; }
+double dummyGetMaxGlobalValue( void* sdVariable ) { return 1; }
+void dummyGetMinAndMaxLocalCoords( void* sdVariable, Coord min, Coord max ) { 
+	min[0] = -1.0;
+	min[1] = -2.3;
+	min[2] = -4.0;
+	
+	max[0] = 11.0;
+	max[1] = 12.3;
+	max[2] = 14.0;
+	return ; 
+}
+void dummyGetMinAndMaxGlobalCoords( void* sdVariable, Coord min, Coord max ) {	min[0] = -1.0;
+	min[0] = -111.0;
+	min[1] = -112.3;
+	min[2] = -114.0;
+	
+	max[0] = 111.0;
+	max[1] = 112.3;
+	max[2] = 114.0;
+	return ; 
+}
+
+
+int main(int argc, char *argv[]) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         procCount;
+	Stream*                     stream;
+	FieldVariable_Register*	    fV_Register;
+	FieldVariable*              velocityField;
+	OperatorFieldVariable* velSquared2D;
+	OperatorFieldVariable* velSquared3D;
+	OperatorFieldVariable* velMag2D;
+	OperatorFieldVariable* velMag3D;
+	double                      coord[3][3] = {{ 0.4 , 2.0 , 7.0 }, { -0.2 , 6.0 , 2.0 },{ 0.3 , -2.0 , -13.0 }} ;
+	double                      value[3];
+	Index                       index;
+	Coord                       min, max;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	fV_Register = FieldVariable_Register_New();
+
+	/* constructor  */
+	velocityField = _FieldVariable_New( 
+			sizeof(FieldVariable),
+			FieldVariable_Type,
+			_FieldVariable_Delete,
+			_FieldVariable_Print,
+			_FieldVariable_Copy,
+			(Stg_Component_DefaultConstructorFunction*)FieldVariable_DefaultNew,
+			_FieldVariable_Construct,
+			_FieldVariable_Build,
+			_FieldVariable_Initialise,
+			_FieldVariable_Execute,
+			_FieldVariable_Destroy,
+			"Velocity", 
+			True,
+			dummyInterpolateValueAt,
+			dummyGetMinGlobalValue, 
+			dummyGetMaxGlobalValue,
+			dummyGetMinAndMaxLocalCoords, 
+			dummyGetMinAndMaxGlobalCoords, 
+			3,
+			3,
+			False,
+			MPI_COMM_WORLD,
+			fV_Register );
+
+	/* Construct Unary Operator Field Variables */
+	velSquared2D = OperatorFieldVariable_NewUnary( 
+			"VelocitySquaredField2D", 
+			velocityField, 
+			"VectorSquare" );
+	velSquared2D->_operator->operandDofs = 2;
+
+	velSquared3D = OperatorFieldVariable_NewUnary( 
+			"VelocitySquaredField3D", 
+			velocityField, 
+			"VectorSquare" );
+
+	velMag2D = OperatorFieldVariable_NewUnary( 
+			"VelocityMagnitudeField2D", 
+			velocityField,
+			"Magnitude" );
+	velMag2D->_operator->operandDofs = 2;
+
+	velMag3D = OperatorFieldVariable_NewUnary( 
+			"VelocityMagnitudeField3D",
+			velocityField,
+			"Magnitude" );
+
+	/* Do Interpolations */
+	for ( index = 0 ; index < 3 ; index++ ) {
+		Journal_Printf( stream, "coord = ");
+		StGermain_PrintVector( stream, coord[ index ], 3 );
+
+		Journal_Printf( stream, "velocity = ");
+		FieldVariable_InterpolateValueAt( velocityField, coord[ index ], value );
+		StGermain_PrintVector( stream, value, 3 );
+
+		Journal_Printf( stream, "velocity squared 2d = ");
+		FieldVariable_InterpolateValueAt( velSquared2D, coord[ index ], value );
+		StGermain_PrintVector( stream, value, 1 );
+		Journal_Printf( stream, "velocity squared 3d = ");
+		FieldVariable_InterpolateValueAt( velSquared3D, coord[ index ], value );
+		StGermain_PrintVector( stream, value, 1 );
+
+		Journal_Printf( stream, "velocity magnitude 2d = ");
+		FieldVariable_InterpolateValueAt( velMag2D, coord[ index ], value );
+		StGermain_PrintVector( stream, value, 1 );
+		Journal_Printf( stream, "velocity magnitude 3d = ");
+		FieldVariable_InterpolateValueAt( velMag3D, coord[ index ], value );
+		StGermain_PrintVector( stream, value, 1 );
+		Journal_Printf(stream, "\n");
+	}
+
+	Journal_Printf( stream , "testing min max local coords:\n" );
+	Journal_Printf( stream, "velocity:\n");
+	FieldVariable_GetMinAndMaxLocalCoords( velocityField, min, max );
+	StGermain_PrintNamedVector( stream, min, 3 );
+	StGermain_PrintNamedVector( stream, max, 3 );
+
+	Journal_Printf( stream, "velocity squared 2d = \n");
+	FieldVariable_GetMinAndMaxLocalCoords( velSquared2D, min, max );
+	StGermain_PrintNamedVector( stream, min, 3 );
+	StGermain_PrintNamedVector( stream, max, 3 );
+
+	Journal_Printf( stream , "testing min max global coords:\n" );
+	Journal_Printf( stream, "velocity:\n");
+	FieldVariable_GetMinAndMaxGlobalCoords( velocityField, min, max );
+	StGermain_PrintNamedVector( stream, min, 3 );
+	StGermain_PrintNamedVector( stream, max, 3 );
+
+	Journal_Printf( stream, "velocity squared 2d = \n");
+	FieldVariable_GetMinAndMaxGlobalCoords( velSquared2D, min, max );
+	StGermain_PrintNamedVector( stream, min, 3 );
+	StGermain_PrintNamedVector( stream, max, 3 );
+
+	/* Clean Up */
+	Stg_Class_Delete(fV_Register);
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1729 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Element #: 0, Current Node #: 0, Diagonal Node #: 57, (57) 
+Element #: 0, Current Node #: 1, Diagonal Node #: 56, (56) 
+Element #: 0, Current Node #: 7, Diagonal Node #: 50, (50) 
+Element #: 0, Current Node #: 8, Diagonal Node #: 49, (49) 
+Element #: 0, Current Node #: 49, Diagonal Node #: 8, (8) 
+Element #: 0, Current Node #: 50, Diagonal Node #: 7, (7) 
+Element #: 0, Current Node #: 56, Diagonal Node #: 1, (1) 
+Element #: 0, Current Node #: 57, Diagonal Node #: 0, (0) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 58, (58) 
+Element #: 1, Current Node #: 2, Diagonal Node #: 57, (57) 
+Element #: 1, Current Node #: 8, Diagonal Node #: 51, (51) 
+Element #: 1, Current Node #: 9, Diagonal Node #: 50, (50) 
+Element #: 1, Current Node #: 50, Diagonal Node #: 9, (9) 
+Element #: 1, Current Node #: 51, Diagonal Node #: 8, (8) 
+Element #: 1, Current Node #: 57, Diagonal Node #: 2, (2) 
+Element #: 1, Current Node #: 58, Diagonal Node #: 1, (1) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 59, (59) 
+Element #: 2, Current Node #: 3, Diagonal Node #: 58, (58) 
+Element #: 2, Current Node #: 9, Diagonal Node #: 52, (52) 
+Element #: 2, Current Node #: 10, Diagonal Node #: 51, (51) 
+Element #: 2, Current Node #: 51, Diagonal Node #: 10, (10) 
+Element #: 2, Current Node #: 52, Diagonal Node #: 9, (9) 
+Element #: 2, Current Node #: 58, Diagonal Node #: 3, (3) 
+Element #: 2, Current Node #: 59, Diagonal Node #: 2, (2) 
+Element #: 3, Current Node #: 3, Diagonal Node #: 60, (60) 
+Element #: 3, Current Node #: 4, Diagonal Node #: 59, (59) 
+Element #: 3, Current Node #: 10, Diagonal Node #: 53, (53) 
+Element #: 3, Current Node #: 11, Diagonal Node #: 52, (52) 
+Element #: 3, Current Node #: 52, Diagonal Node #: 11, (11) 
+Element #: 3, Current Node #: 53, Diagonal Node #: 10, (10) 
+Element #: 3, Current Node #: 59, Diagonal Node #: 4, (4) 
+Element #: 3, Current Node #: 60, Diagonal Node #: 3, (3) 
+Element #: 4, Current Node #: 4, Diagonal Node #: 61, (61) 
+Element #: 4, Current Node #: 5, Diagonal Node #: 60, (60) 
+Element #: 4, Current Node #: 11, Diagonal Node #: 54, (54) 
+Element #: 4, Current Node #: 12, Diagonal Node #: 53, (53) 
+Element #: 4, Current Node #: 53, Diagonal Node #: 12, (12) 
+Element #: 4, Current Node #: 54, Diagonal Node #: 11, (11) 
+Element #: 4, Current Node #: 60, Diagonal Node #: 5, (5) 
+Element #: 4, Current Node #: 61, Diagonal Node #: 4, (4) 
+Element #: 5, Current Node #: 5, Diagonal Node #: 62, (62) 
+Element #: 5, Current Node #: 6, Diagonal Node #: 61, (61) 
+Element #: 5, Current Node #: 12, Diagonal Node #: 55, (55) 
+Element #: 5, Current Node #: 13, Diagonal Node #: 54, (54) 
+Element #: 5, Current Node #: 54, Diagonal Node #: 13, (13) 
+Element #: 5, Current Node #: 55, Diagonal Node #: 12, (12) 
+Element #: 5, Current Node #: 61, Diagonal Node #: 6, (6) 
+Element #: 5, Current Node #: 62, Diagonal Node #: 5, (5) 
+Element #: 6, Current Node #: 7, Diagonal Node #: 64, (64) 
+Element #: 6, Current Node #: 8, Diagonal Node #: 63, (63) 
+Element #: 6, Current Node #: 14, Diagonal Node #: 57, (57) 
+Element #: 6, Current Node #: 15, Diagonal Node #: 56, (56) 
+Element #: 6, Current Node #: 56, Diagonal Node #: 15, (15) 
+Element #: 6, Current Node #: 57, Diagonal Node #: 14, (14) 
+Element #: 6, Current Node #: 63, Diagonal Node #: 8, (8) 
+Element #: 6, Current Node #: 64, Diagonal Node #: 7, (7) 
+Element #: 7, Current Node #: 8, Diagonal Node #: 65, (65) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 64, (64) 
+Element #: 7, Current Node #: 15, Diagonal Node #: 58, (58) 
+Element #: 7, Current Node #: 16, Diagonal Node #: 57, (57) 
+Element #: 7, Current Node #: 57, Diagonal Node #: 16, (16) 
+Element #: 7, Current Node #: 58, Diagonal Node #: 15, (15) 
+Element #: 7, Current Node #: 64, Diagonal Node #: 9, (9) 
+Element #: 7, Current Node #: 65, Diagonal Node #: 8, (8) 
+Element #: 8, Current Node #: 9, Diagonal Node #: 66, (66) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 65, (65) 
+Element #: 8, Current Node #: 16, Diagonal Node #: 59, (59) 
+Element #: 8, Current Node #: 17, Diagonal Node #: 58, (58) 
+Element #: 8, Current Node #: 58, Diagonal Node #: 17, (17) 
+Element #: 8, Current Node #: 59, Diagonal Node #: 16, (16) 
+Element #: 8, Current Node #: 65, Diagonal Node #: 10, (10) 
+Element #: 8, Current Node #: 66, Diagonal Node #: 9, (9) 
+Element #: 9, Current Node #: 10, Diagonal Node #: 67, (67) 
+Element #: 9, Current Node #: 11, Diagonal Node #: 66, (66) 
+Element #: 9, Current Node #: 17, Diagonal Node #: 60, (60) 
+Element #: 9, Current Node #: 18, Diagonal Node #: 59, (59) 
+Element #: 9, Current Node #: 59, Diagonal Node #: 18, (18) 
+Element #: 9, Current Node #: 60, Diagonal Node #: 17, (17) 
+Element #: 9, Current Node #: 66, Diagonal Node #: 11, (11) 
+Element #: 9, Current Node #: 67, Diagonal Node #: 10, (10) 
+Element #: 10, Current Node #: 11, Diagonal Node #: 68, (68) 
+Element #: 10, Current Node #: 12, Diagonal Node #: 67, (67) 
+Element #: 10, Current Node #: 18, Diagonal Node #: 61, (61) 
+Element #: 10, Current Node #: 19, Diagonal Node #: 60, (60) 
+Element #: 10, Current Node #: 60, Diagonal Node #: 19, (19) 
+Element #: 10, Current Node #: 61, Diagonal Node #: 18, (18) 
+Element #: 10, Current Node #: 67, Diagonal Node #: 12, (12) 
+Element #: 10, Current Node #: 68, Diagonal Node #: 11, (11) 
+Element #: 11, Current Node #: 12, Diagonal Node #: 69, (69) 
+Element #: 11, Current Node #: 13, Diagonal Node #: 68, (68) 
+Element #: 11, Current Node #: 19, Diagonal Node #: 62, (62) 
+Element #: 11, Current Node #: 20, Diagonal Node #: 61, (61) 
+Element #: 11, Current Node #: 61, Diagonal Node #: 20, (20) 
+Element #: 11, Current Node #: 62, Diagonal Node #: 19, (19) 
+Element #: 11, Current Node #: 68, Diagonal Node #: 13, (13) 
+Element #: 11, Current Node #: 69, Diagonal Node #: 12, (12) 
+Element #: 12, Current Node #: 14, Diagonal Node #: 71, (71) 
+Element #: 12, Current Node #: 15, Diagonal Node #: 70, (70) 
+Element #: 12, Current Node #: 21, Diagonal Node #: 64, (64) 
+Element #: 12, Current Node #: 22, Diagonal Node #: 63, (63) 
+Element #: 12, Current Node #: 63, Diagonal Node #: 22, (22) 
+Element #: 12, Current Node #: 64, Diagonal Node #: 21, (21) 
+Element #: 12, Current Node #: 70, Diagonal Node #: 15, (15) 
+Element #: 12, Current Node #: 71, Diagonal Node #: 14, (14) 
+Element #: 13, Current Node #: 15, Diagonal Node #: 72, (72) 
+Element #: 13, Current Node #: 16, Diagonal Node #: 71, (71) 
+Element #: 13, Current Node #: 22, Diagonal Node #: 65, (65) 
+Element #: 13, Current Node #: 23, Diagonal Node #: 64, (64) 
+Element #: 13, Current Node #: 64, Diagonal Node #: 23, (23) 
+Element #: 13, Current Node #: 65, Diagonal Node #: 22, (22) 
+Element #: 13, Current Node #: 71, Diagonal Node #: 16, (16) 
+Element #: 13, Current Node #: 72, Diagonal Node #: 15, (15) 
+Element #: 14, Current Node #: 16, Diagonal Node #: 73, (73) 
+Element #: 14, Current Node #: 17, Diagonal Node #: 72, (72) 
+Element #: 14, Current Node #: 23, Diagonal Node #: 66, (66) 
+Element #: 14, Current Node #: 24, Diagonal Node #: 65, (65) 
+Element #: 14, Current Node #: 65, Diagonal Node #: 24, (24) 
+Element #: 14, Current Node #: 66, Diagonal Node #: 23, (23) 
+Element #: 14, Current Node #: 72, Diagonal Node #: 17, (17) 
+Element #: 14, Current Node #: 73, Diagonal Node #: 16, (16) 
+Element #: 15, Current Node #: 17, Diagonal Node #: 74, (74) 
+Element #: 15, Current Node #: 18, Diagonal Node #: 73, (73) 
+Element #: 15, Current Node #: 24, Diagonal Node #: 67, (67) 
+Element #: 15, Current Node #: 25, Diagonal Node #: 66, (66) 
+Element #: 15, Current Node #: 66, Diagonal Node #: 25, (25) 
+Element #: 15, Current Node #: 67, Diagonal Node #: 24, (24) 
+Element #: 15, Current Node #: 73, Diagonal Node #: 18, (18) 
+Element #: 15, Current Node #: 74, Diagonal Node #: 17, (17) 
+Element #: 16, Current Node #: 18, Diagonal Node #: 75, (75) 
+Element #: 16, Current Node #: 19, Diagonal Node #: 74, (74) 
+Element #: 16, Current Node #: 25, Diagonal Node #: 68, (68) 
+Element #: 16, Current Node #: 26, Diagonal Node #: 67, (67) 
+Element #: 16, Current Node #: 67, Diagonal Node #: 26, (26) 
+Element #: 16, Current Node #: 68, Diagonal Node #: 25, (25) 
+Element #: 16, Current Node #: 74, Diagonal Node #: 19, (19) 
+Element #: 16, Current Node #: 75, Diagonal Node #: 18, (18) 
+Element #: 17, Current Node #: 19, Diagonal Node #: 76, (76) 
+Element #: 17, Current Node #: 20, Diagonal Node #: 75, (75) 
+Element #: 17, Current Node #: 26, Diagonal Node #: 69, (69) 
+Element #: 17, Current Node #: 27, Diagonal Node #: 68, (68) 
+Element #: 17, Current Node #: 68, Diagonal Node #: 27, (27) 
+Element #: 17, Current Node #: 69, Diagonal Node #: 26, (26) 
+Element #: 17, Current Node #: 75, Diagonal Node #: 20, (20) 
+Element #: 17, Current Node #: 76, Diagonal Node #: 19, (19) 
+Element #: 18, Current Node #: 21, Diagonal Node #: 78, (78) 
+Element #: 18, Current Node #: 22, Diagonal Node #: 77, (77) 
+Element #: 18, Current Node #: 28, Diagonal Node #: 71, (71) 
+Element #: 18, Current Node #: 29, Diagonal Node #: 70, (70) 
+Element #: 18, Current Node #: 70, Diagonal Node #: 29, (29) 
+Element #: 18, Current Node #: 71, Diagonal Node #: 28, (28) 
+Element #: 18, Current Node #: 77, Diagonal Node #: 22, (22) 
+Element #: 18, Current Node #: 78, Diagonal Node #: 21, (21) 
+Element #: 19, Current Node #: 22, Diagonal Node #: 79, (79) 
+Element #: 19, Current Node #: 23, Diagonal Node #: 78, (78) 
+Element #: 19, Current Node #: 29, Diagonal Node #: 72, (72) 
+Element #: 19, Current Node #: 30, Diagonal Node #: 71, (71) 
+Element #: 19, Current Node #: 71, Diagonal Node #: 30, (30) 
+Element #: 19, Current Node #: 72, Diagonal Node #: 29, (29) 
+Element #: 19, Current Node #: 78, Diagonal Node #: 23, (23) 
+Element #: 19, Current Node #: 79, Diagonal Node #: 22, (22) 
+Element #: 20, Current Node #: 23, Diagonal Node #: 80, (80) 
+Element #: 20, Current Node #: 24, Diagonal Node #: 79, (79) 
+Element #: 20, Current Node #: 30, Diagonal Node #: 73, (73) 
+Element #: 20, Current Node #: 31, Diagonal Node #: 72, (72) 
+Element #: 20, Current Node #: 72, Diagonal Node #: 31, (31) 
+Element #: 20, Current Node #: 73, Diagonal Node #: 30, (30) 
+Element #: 20, Current Node #: 79, Diagonal Node #: 24, (24) 
+Element #: 20, Current Node #: 80, Diagonal Node #: 23, (23) 
+Element #: 21, Current Node #: 24, Diagonal Node #: 81, (81) 
+Element #: 21, Current Node #: 25, Diagonal Node #: 80, (80) 
+Element #: 21, Current Node #: 31, Diagonal Node #: 74, (74) 
+Element #: 21, Current Node #: 32, Diagonal Node #: 73, (73) 
+Element #: 21, Current Node #: 73, Diagonal Node #: 32, (32) 
+Element #: 21, Current Node #: 74, Diagonal Node #: 31, (31) 
+Element #: 21, Current Node #: 80, Diagonal Node #: 25, (25) 
+Element #: 21, Current Node #: 81, Diagonal Node #: 24, (24) 
+Element #: 22, Current Node #: 25, Diagonal Node #: 82, (82) 
+Element #: 22, Current Node #: 26, Diagonal Node #: 81, (81) 
+Element #: 22, Current Node #: 32, Diagonal Node #: 75, (75) 
+Element #: 22, Current Node #: 33, Diagonal Node #: 74, (74) 
+Element #: 22, Current Node #: 74, Diagonal Node #: 33, (33) 
+Element #: 22, Current Node #: 75, Diagonal Node #: 32, (32) 
+Element #: 22, Current Node #: 81, Diagonal Node #: 26, (26) 
+Element #: 22, Current Node #: 82, Diagonal Node #: 25, (25) 
+Element #: 23, Current Node #: 26, Diagonal Node #: 83, (83) 
+Element #: 23, Current Node #: 27, Diagonal Node #: 82, (82) 
+Element #: 23, Current Node #: 33, Diagonal Node #: 76, (76) 
+Element #: 23, Current Node #: 34, Diagonal Node #: 75, (75) 
+Element #: 23, Current Node #: 75, Diagonal Node #: 34, (34) 
+Element #: 23, Current Node #: 76, Diagonal Node #: 33, (33) 
+Element #: 23, Current Node #: 82, Diagonal Node #: 27, (27) 
+Element #: 23, Current Node #: 83, Diagonal Node #: 26, (26) 
+Element #: 24, Current Node #: 28, Diagonal Node #: 85, (85) 
+Element #: 24, Current Node #: 29, Diagonal Node #: 84, (84) 
+Element #: 24, Current Node #: 35, Diagonal Node #: 78, (78) 
+Element #: 24, Current Node #: 36, Diagonal Node #: 77, (77) 
+Element #: 24, Current Node #: 77, Diagonal Node #: 36, (36) 
+Element #: 24, Current Node #: 78, Diagonal Node #: 35, (35) 
+Element #: 24, Current Node #: 84, Diagonal Node #: 29, (29) 
+Element #: 24, Current Node #: 85, Diagonal Node #: 28, (28) 
+Element #: 25, Current Node #: 29, Diagonal Node #: 86, (86) 
+Element #: 25, Current Node #: 30, Diagonal Node #: 85, (85) 
+Element #: 25, Current Node #: 36, Diagonal Node #: 79, (79) 
+Element #: 25, Current Node #: 37, Diagonal Node #: 78, (78) 
+Element #: 25, Current Node #: 78, Diagonal Node #: 37, (37) 
+Element #: 25, Current Node #: 79, Diagonal Node #: 36, (36) 
+Element #: 25, Current Node #: 85, Diagonal Node #: 30, (30) 
+Element #: 25, Current Node #: 86, Diagonal Node #: 29, (29) 
+Element #: 26, Current Node #: 30, Diagonal Node #: 87, (87) 
+Element #: 26, Current Node #: 31, Diagonal Node #: 86, (86) 
+Element #: 26, Current Node #: 37, Diagonal Node #: 80, (80) 
+Element #: 26, Current Node #: 38, Diagonal Node #: 79, (79) 
+Element #: 26, Current Node #: 79, Diagonal Node #: 38, (38) 
+Element #: 26, Current Node #: 80, Diagonal Node #: 37, (37) 
+Element #: 26, Current Node #: 86, Diagonal Node #: 31, (31) 
+Element #: 26, Current Node #: 87, Diagonal Node #: 30, (30) 
+Element #: 27, Current Node #: 31, Diagonal Node #: 88, (88) 
+Element #: 27, Current Node #: 32, Diagonal Node #: 87, (87) 
+Element #: 27, Current Node #: 38, Diagonal Node #: 81, (81) 
+Element #: 27, Current Node #: 39, Diagonal Node #: 80, (80) 
+Element #: 27, Current Node #: 80, Diagonal Node #: 39, (39) 
+Element #: 27, Current Node #: 81, Diagonal Node #: 38, (38) 
+Element #: 27, Current Node #: 87, Diagonal Node #: 32, (32) 
+Element #: 27, Current Node #: 88, Diagonal Node #: 31, (31) 
+Element #: 28, Current Node #: 32, Diagonal Node #: 89, (89) 
+Element #: 28, Current Node #: 33, Diagonal Node #: 88, (88) 
+Element #: 28, Current Node #: 39, Diagonal Node #: 82, (82) 
+Element #: 28, Current Node #: 40, Diagonal Node #: 81, (81) 
+Element #: 28, Current Node #: 81, Diagonal Node #: 40, (40) 
+Element #: 28, Current Node #: 82, Diagonal Node #: 39, (39) 
+Element #: 28, Current Node #: 88, Diagonal Node #: 33, (33) 
+Element #: 28, Current Node #: 89, Diagonal Node #: 32, (32) 
+Element #: 29, Current Node #: 33, Diagonal Node #: 90, (90) 
+Element #: 29, Current Node #: 34, Diagonal Node #: 89, (89) 
+Element #: 29, Current Node #: 40, Diagonal Node #: 83, (83) 
+Element #: 29, Current Node #: 41, Diagonal Node #: 82, (82) 
+Element #: 29, Current Node #: 82, Diagonal Node #: 41, (41) 
+Element #: 29, Current Node #: 83, Diagonal Node #: 40, (40) 
+Element #: 29, Current Node #: 89, Diagonal Node #: 34, (34) 
+Element #: 29, Current Node #: 90, Diagonal Node #: 33, (33) 
+Element #: 30, Current Node #: 35, Diagonal Node #: 92, (92) 
+Element #: 30, Current Node #: 36, Diagonal Node #: 91, (91) 
+Element #: 30, Current Node #: 42, Diagonal Node #: 85, (85) 
+Element #: 30, Current Node #: 43, Diagonal Node #: 84, (84) 
+Element #: 30, Current Node #: 84, Diagonal Node #: 43, (43) 
+Element #: 30, Current Node #: 85, Diagonal Node #: 42, (42) 
+Element #: 30, Current Node #: 91, Diagonal Node #: 36, (36) 
+Element #: 30, Current Node #: 92, Diagonal Node #: 35, (35) 
+Element #: 31, Current Node #: 36, Diagonal Node #: 93, (93) 
+Element #: 31, Current Node #: 37, Diagonal Node #: 92, (92) 
+Element #: 31, Current Node #: 43, Diagonal Node #: 86, (86) 
+Element #: 31, Current Node #: 44, Diagonal Node #: 85, (85) 
+Element #: 31, Current Node #: 85, Diagonal Node #: 44, (44) 
+Element #: 31, Current Node #: 86, Diagonal Node #: 43, (43) 
+Element #: 31, Current Node #: 92, Diagonal Node #: 37, (37) 
+Element #: 31, Current Node #: 93, Diagonal Node #: 36, (36) 
+Element #: 32, Current Node #: 37, Diagonal Node #: 94, (94) 
+Element #: 32, Current Node #: 38, Diagonal Node #: 93, (93) 
+Element #: 32, Current Node #: 44, Diagonal Node #: 87, (87) 
+Element #: 32, Current Node #: 45, Diagonal Node #: 86, (86) 
+Element #: 32, Current Node #: 86, Diagonal Node #: 45, (45) 
+Element #: 32, Current Node #: 87, Diagonal Node #: 44, (44) 
+Element #: 32, Current Node #: 93, Diagonal Node #: 38, (38) 
+Element #: 32, Current Node #: 94, Diagonal Node #: 37, (37) 
+Element #: 33, Current Node #: 38, Diagonal Node #: 95, (95) 
+Element #: 33, Current Node #: 39, Diagonal Node #: 94, (94) 
+Element #: 33, Current Node #: 45, Diagonal Node #: 88, (88) 
+Element #: 33, Current Node #: 46, Diagonal Node #: 87, (87) 
+Element #: 33, Current Node #: 87, Diagonal Node #: 46, (46) 
+Element #: 33, Current Node #: 88, Diagonal Node #: 45, (45) 
+Element #: 33, Current Node #: 94, Diagonal Node #: 39, (39) 
+Element #: 33, Current Node #: 95, Diagonal Node #: 38, (38) 
+Element #: 34, Current Node #: 39, Diagonal Node #: 96, (96) 
+Element #: 34, Current Node #: 40, Diagonal Node #: 95, (95) 
+Element #: 34, Current Node #: 46, Diagonal Node #: 89, (89) 
+Element #: 34, Current Node #: 47, Diagonal Node #: 88, (88) 
+Element #: 34, Current Node #: 88, Diagonal Node #: 47, (47) 
+Element #: 34, Current Node #: 89, Diagonal Node #: 46, (46) 
+Element #: 34, Current Node #: 95, Diagonal Node #: 40, (40) 
+Element #: 34, Current Node #: 96, Diagonal Node #: 39, (39) 
+Element #: 35, Current Node #: 40, Diagonal Node #: 97, (97) 
+Element #: 35, Current Node #: 41, Diagonal Node #: 96, (96) 
+Element #: 35, Current Node #: 47, Diagonal Node #: 90, (90) 
+Element #: 35, Current Node #: 48, Diagonal Node #: 89, (89) 
+Element #: 35, Current Node #: 89, Diagonal Node #: 48, (48) 
+Element #: 35, Current Node #: 90, Diagonal Node #: 47, (47) 
+Element #: 35, Current Node #: 96, Diagonal Node #: 41, (41) 
+Element #: 35, Current Node #: 97, Diagonal Node #: 40, (40) 
+Element #: 36, Current Node #: 49, Diagonal Node #: 106, (106) 
+Element #: 36, Current Node #: 50, Diagonal Node #: 105, (105) 
+Element #: 36, Current Node #: 56, Diagonal Node #: 99, (99) 
+Element #: 36, Current Node #: 57, Diagonal Node #: 98, (98) 
+Element #: 36, Current Node #: 98, Diagonal Node #: 57, (57) 
+Element #: 36, Current Node #: 99, Diagonal Node #: 56, (56) 
+Element #: 36, Current Node #: 105, Diagonal Node #: 50, (50) 
+Element #: 36, Current Node #: 106, Diagonal Node #: 49, (49) 
+Element #: 37, Current Node #: 50, Diagonal Node #: 107, (107) 
+Element #: 37, Current Node #: 51, Diagonal Node #: 106, (106) 
+Element #: 37, Current Node #: 57, Diagonal Node #: 100, (100) 
+Element #: 37, Current Node #: 58, Diagonal Node #: 99, (99) 
+Element #: 37, Current Node #: 99, Diagonal Node #: 58, (58) 
+Element #: 37, Current Node #: 100, Diagonal Node #: 57, (57) 
+Element #: 37, Current Node #: 106, Diagonal Node #: 51, (51) 
+Element #: 37, Current Node #: 107, Diagonal Node #: 50, (50) 
+Element #: 38, Current Node #: 51, Diagonal Node #: 108, (108) 
+Element #: 38, Current Node #: 52, Diagonal Node #: 107, (107) 
+Element #: 38, Current Node #: 58, Diagonal Node #: 101, (101) 
+Element #: 38, Current Node #: 59, Diagonal Node #: 100, (100) 
+Element #: 38, Current Node #: 100, Diagonal Node #: 59, (59) 
+Element #: 38, Current Node #: 101, Diagonal Node #: 58, (58) 
+Element #: 38, Current Node #: 107, Diagonal Node #: 52, (52) 
+Element #: 38, Current Node #: 108, Diagonal Node #: 51, (51) 
+Element #: 39, Current Node #: 52, Diagonal Node #: 109, (109) 
+Element #: 39, Current Node #: 53, Diagonal Node #: 108, (108) 
+Element #: 39, Current Node #: 59, Diagonal Node #: 102, (102) 
+Element #: 39, Current Node #: 60, Diagonal Node #: 101, (101) 
+Element #: 39, Current Node #: 101, Diagonal Node #: 60, (60) 
+Element #: 39, Current Node #: 102, Diagonal Node #: 59, (59) 
+Element #: 39, Current Node #: 108, Diagonal Node #: 53, (53) 
+Element #: 39, Current Node #: 109, Diagonal Node #: 52, (52) 
+Element #: 40, Current Node #: 53, Diagonal Node #: 110, (110) 
+Element #: 40, Current Node #: 54, Diagonal Node #: 109, (109) 
+Element #: 40, Current Node #: 60, Diagonal Node #: 103, (103) 
+Element #: 40, Current Node #: 61, Diagonal Node #: 102, (102) 
+Element #: 40, Current Node #: 102, Diagonal Node #: 61, (61) 
+Element #: 40, Current Node #: 103, Diagonal Node #: 60, (60) 
+Element #: 40, Current Node #: 109, Diagonal Node #: 54, (54) 
+Element #: 40, Current Node #: 110, Diagonal Node #: 53, (53) 
+Element #: 41, Current Node #: 54, Diagonal Node #: 111, (111) 
+Element #: 41, Current Node #: 55, Diagonal Node #: 110, (110) 
+Element #: 41, Current Node #: 61, Diagonal Node #: 104, (104) 
+Element #: 41, Current Node #: 62, Diagonal Node #: 103, (103) 
+Element #: 41, Current Node #: 103, Diagonal Node #: 62, (62) 
+Element #: 41, Current Node #: 104, Diagonal Node #: 61, (61) 
+Element #: 41, Current Node #: 110, Diagonal Node #: 55, (55) 
+Element #: 41, Current Node #: 111, Diagonal Node #: 54, (54) 
+Element #: 42, Current Node #: 56, Diagonal Node #: 113, (113) 
+Element #: 42, Current Node #: 57, Diagonal Node #: 112, (112) 
+Element #: 42, Current Node #: 63, Diagonal Node #: 106, (106) 
+Element #: 42, Current Node #: 64, Diagonal Node #: 105, (105) 
+Element #: 42, Current Node #: 105, Diagonal Node #: 64, (64) 
+Element #: 42, Current Node #: 106, Diagonal Node #: 63, (63) 
+Element #: 42, Current Node #: 112, Diagonal Node #: 57, (57) 
+Element #: 42, Current Node #: 113, Diagonal Node #: 56, (56) 
+Element #: 43, Current Node #: 57, Diagonal Node #: 114, (114) 
+Element #: 43, Current Node #: 58, Diagonal Node #: 113, (113) 
+Element #: 43, Current Node #: 64, Diagonal Node #: 107, (107) 
+Element #: 43, Current Node #: 65, Diagonal Node #: 106, (106) 
+Element #: 43, Current Node #: 106, Diagonal Node #: 65, (65) 
+Element #: 43, Current Node #: 107, Diagonal Node #: 64, (64) 
+Element #: 43, Current Node #: 113, Diagonal Node #: 58, (58) 
+Element #: 43, Current Node #: 114, Diagonal Node #: 57, (57) 
+Element #: 44, Current Node #: 58, Diagonal Node #: 115, (115) 
+Element #: 44, Current Node #: 59, Diagonal Node #: 114, (114) 
+Element #: 44, Current Node #: 65, Diagonal Node #: 108, (108) 
+Element #: 44, Current Node #: 66, Diagonal Node #: 107, (107) 
+Element #: 44, Current Node #: 107, Diagonal Node #: 66, (66) 
+Element #: 44, Current Node #: 108, Diagonal Node #: 65, (65) 
+Element #: 44, Current Node #: 114, Diagonal Node #: 59, (59) 
+Element #: 44, Current Node #: 115, Diagonal Node #: 58, (58) 
+Element #: 45, Current Node #: 59, Diagonal Node #: 116, (116) 
+Element #: 45, Current Node #: 60, Diagonal Node #: 115, (115) 
+Element #: 45, Current Node #: 66, Diagonal Node #: 109, (109) 
+Element #: 45, Current Node #: 67, Diagonal Node #: 108, (108) 
+Element #: 45, Current Node #: 108, Diagonal Node #: 67, (67) 
+Element #: 45, Current Node #: 109, Diagonal Node #: 66, (66) 
+Element #: 45, Current Node #: 115, Diagonal Node #: 60, (60) 
+Element #: 45, Current Node #: 116, Diagonal Node #: 59, (59) 
+Element #: 46, Current Node #: 60, Diagonal Node #: 117, (117) 
+Element #: 46, Current Node #: 61, Diagonal Node #: 116, (116) 
+Element #: 46, Current Node #: 67, Diagonal Node #: 110, (110) 
+Element #: 46, Current Node #: 68, Diagonal Node #: 109, (109) 
+Element #: 46, Current Node #: 109, Diagonal Node #: 68, (68) 
+Element #: 46, Current Node #: 110, Diagonal Node #: 67, (67) 
+Element #: 46, Current Node #: 116, Diagonal Node #: 61, (61) 
+Element #: 46, Current Node #: 117, Diagonal Node #: 60, (60) 
+Element #: 47, Current Node #: 61, Diagonal Node #: 118, (118) 
+Element #: 47, Current Node #: 62, Diagonal Node #: 117, (117) 
+Element #: 47, Current Node #: 68, Diagonal Node #: 111, (111) 
+Element #: 47, Current Node #: 69, Diagonal Node #: 110, (110) 
+Element #: 47, Current Node #: 110, Diagonal Node #: 69, (69) 
+Element #: 47, Current Node #: 111, Diagonal Node #: 68, (68) 
+Element #: 47, Current Node #: 117, Diagonal Node #: 62, (62) 
+Element #: 47, Current Node #: 118, Diagonal Node #: 61, (61) 
+Element #: 48, Current Node #: 63, Diagonal Node #: 120, (120) 
+Element #: 48, Current Node #: 64, Diagonal Node #: 119, (119) 
+Element #: 48, Current Node #: 70, Diagonal Node #: 113, (113) 
+Element #: 48, Current Node #: 71, Diagonal Node #: 112, (112) 
+Element #: 48, Current Node #: 112, Diagonal Node #: 71, (71) 
+Element #: 48, Current Node #: 113, Diagonal Node #: 70, (70) 
+Element #: 48, Current Node #: 119, Diagonal Node #: 64, (64) 
+Element #: 48, Current Node #: 120, Diagonal Node #: 63, (63) 
+Element #: 49, Current Node #: 64, Diagonal Node #: 121, (121) 
+Element #: 49, Current Node #: 65, Diagonal Node #: 120, (120) 
+Element #: 49, Current Node #: 71, Diagonal Node #: 114, (114) 
+Element #: 49, Current Node #: 72, Diagonal Node #: 113, (113) 
+Element #: 49, Current Node #: 113, Diagonal Node #: 72, (72) 
+Element #: 49, Current Node #: 114, Diagonal Node #: 71, (71) 
+Element #: 49, Current Node #: 120, Diagonal Node #: 65, (65) 
+Element #: 49, Current Node #: 121, Diagonal Node #: 64, (64) 
+Element #: 50, Current Node #: 65, Diagonal Node #: 122, (122) 
+Element #: 50, Current Node #: 66, Diagonal Node #: 121, (121) 
+Element #: 50, Current Node #: 72, Diagonal Node #: 115, (115) 
+Element #: 50, Current Node #: 73, Diagonal Node #: 114, (114) 
+Element #: 50, Current Node #: 114, Diagonal Node #: 73, (73) 
+Element #: 50, Current Node #: 115, Diagonal Node #: 72, (72) 
+Element #: 50, Current Node #: 121, Diagonal Node #: 66, (66) 
+Element #: 50, Current Node #: 122, Diagonal Node #: 65, (65) 
+Element #: 51, Current Node #: 66, Diagonal Node #: 123, (123) 
+Element #: 51, Current Node #: 67, Diagonal Node #: 122, (122) 
+Element #: 51, Current Node #: 73, Diagonal Node #: 116, (116) 
+Element #: 51, Current Node #: 74, Diagonal Node #: 115, (115) 
+Element #: 51, Current Node #: 115, Diagonal Node #: 74, (74) 
+Element #: 51, Current Node #: 116, Diagonal Node #: 73, (73) 
+Element #: 51, Current Node #: 122, Diagonal Node #: 67, (67) 
+Element #: 51, Current Node #: 123, Diagonal Node #: 66, (66) 
+Element #: 52, Current Node #: 67, Diagonal Node #: 124, (124) 
+Element #: 52, Current Node #: 68, Diagonal Node #: 123, (123) 
+Element #: 52, Current Node #: 74, Diagonal Node #: 117, (117) 
+Element #: 52, Current Node #: 75, Diagonal Node #: 116, (116) 
+Element #: 52, Current Node #: 116, Diagonal Node #: 75, (75) 
+Element #: 52, Current Node #: 117, Diagonal Node #: 74, (74) 
+Element #: 52, Current Node #: 123, Diagonal Node #: 68, (68) 
+Element #: 52, Current Node #: 124, Diagonal Node #: 67, (67) 
+Element #: 53, Current Node #: 68, Diagonal Node #: 125, (125) 
+Element #: 53, Current Node #: 69, Diagonal Node #: 124, (124) 
+Element #: 53, Current Node #: 75, Diagonal Node #: 118, (118) 
+Element #: 53, Current Node #: 76, Diagonal Node #: 117, (117) 
+Element #: 53, Current Node #: 117, Diagonal Node #: 76, (76) 
+Element #: 53, Current Node #: 118, Diagonal Node #: 75, (75) 
+Element #: 53, Current Node #: 124, Diagonal Node #: 69, (69) 
+Element #: 53, Current Node #: 125, Diagonal Node #: 68, (68) 
+Element #: 54, Current Node #: 70, Diagonal Node #: 127, (127) 
+Element #: 54, Current Node #: 71, Diagonal Node #: 126, (126) 
+Element #: 54, Current Node #: 77, Diagonal Node #: 120, (120) 
+Element #: 54, Current Node #: 78, Diagonal Node #: 119, (119) 
+Element #: 54, Current Node #: 119, Diagonal Node #: 78, (78) 
+Element #: 54, Current Node #: 120, Diagonal Node #: 77, (77) 
+Element #: 54, Current Node #: 126, Diagonal Node #: 71, (71) 
+Element #: 54, Current Node #: 127, Diagonal Node #: 70, (70) 
+Element #: 55, Current Node #: 71, Diagonal Node #: 128, (128) 
+Element #: 55, Current Node #: 72, Diagonal Node #: 127, (127) 
+Element #: 55, Current Node #: 78, Diagonal Node #: 121, (121) 
+Element #: 55, Current Node #: 79, Diagonal Node #: 120, (120) 
+Element #: 55, Current Node #: 120, Diagonal Node #: 79, (79) 
+Element #: 55, Current Node #: 121, Diagonal Node #: 78, (78) 
+Element #: 55, Current Node #: 127, Diagonal Node #: 72, (72) 
+Element #: 55, Current Node #: 128, Diagonal Node #: 71, (71) 
+Element #: 56, Current Node #: 72, Diagonal Node #: 129, (129) 
+Element #: 56, Current Node #: 73, Diagonal Node #: 128, (128) 
+Element #: 56, Current Node #: 79, Diagonal Node #: 122, (122) 
+Element #: 56, Current Node #: 80, Diagonal Node #: 121, (121) 
+Element #: 56, Current Node #: 121, Diagonal Node #: 80, (80) 
+Element #: 56, Current Node #: 122, Diagonal Node #: 79, (79) 
+Element #: 56, Current Node #: 128, Diagonal Node #: 73, (73) 
+Element #: 56, Current Node #: 129, Diagonal Node #: 72, (72) 
+Element #: 57, Current Node #: 73, Diagonal Node #: 130, (130) 
+Element #: 57, Current Node #: 74, Diagonal Node #: 129, (129) 
+Element #: 57, Current Node #: 80, Diagonal Node #: 123, (123) 
+Element #: 57, Current Node #: 81, Diagonal Node #: 122, (122) 
+Element #: 57, Current Node #: 122, Diagonal Node #: 81, (81) 
+Element #: 57, Current Node #: 123, Diagonal Node #: 80, (80) 
+Element #: 57, Current Node #: 129, Diagonal Node #: 74, (74) 
+Element #: 57, Current Node #: 130, Diagonal Node #: 73, (73) 
+Element #: 58, Current Node #: 74, Diagonal Node #: 131, (131) 
+Element #: 58, Current Node #: 75, Diagonal Node #: 130, (130) 
+Element #: 58, Current Node #: 81, Diagonal Node #: 124, (124) 
+Element #: 58, Current Node #: 82, Diagonal Node #: 123, (123) 
+Element #: 58, Current Node #: 123, Diagonal Node #: 82, (82) 
+Element #: 58, Current Node #: 124, Diagonal Node #: 81, (81) 
+Element #: 58, Current Node #: 130, Diagonal Node #: 75, (75) 
+Element #: 58, Current Node #: 131, Diagonal Node #: 74, (74) 
+Element #: 59, Current Node #: 75, Diagonal Node #: 132, (132) 
+Element #: 59, Current Node #: 76, Diagonal Node #: 131, (131) 
+Element #: 59, Current Node #: 82, Diagonal Node #: 125, (125) 
+Element #: 59, Current Node #: 83, Diagonal Node #: 124, (124) 
+Element #: 59, Current Node #: 124, Diagonal Node #: 83, (83) 
+Element #: 59, Current Node #: 125, Diagonal Node #: 82, (82) 
+Element #: 59, Current Node #: 131, Diagonal Node #: 76, (76) 
+Element #: 59, Current Node #: 132, Diagonal Node #: 75, (75) 
+Element #: 60, Current Node #: 77, Diagonal Node #: 134, (134) 
+Element #: 60, Current Node #: 78, Diagonal Node #: 133, (133) 
+Element #: 60, Current Node #: 84, Diagonal Node #: 127, (127) 
+Element #: 60, Current Node #: 85, Diagonal Node #: 126, (126) 
+Element #: 60, Current Node #: 126, Diagonal Node #: 85, (85) 
+Element #: 60, Current Node #: 127, Diagonal Node #: 84, (84) 
+Element #: 60, Current Node #: 133, Diagonal Node #: 78, (78) 
+Element #: 60, Current Node #: 134, Diagonal Node #: 77, (77) 
+Element #: 61, Current Node #: 78, Diagonal Node #: 135, (135) 
+Element #: 61, Current Node #: 79, Diagonal Node #: 134, (134) 
+Element #: 61, Current Node #: 85, Diagonal Node #: 128, (128) 
+Element #: 61, Current Node #: 86, Diagonal Node #: 127, (127) 
+Element #: 61, Current Node #: 127, Diagonal Node #: 86, (86) 
+Element #: 61, Current Node #: 128, Diagonal Node #: 85, (85) 
+Element #: 61, Current Node #: 134, Diagonal Node #: 79, (79) 
+Element #: 61, Current Node #: 135, Diagonal Node #: 78, (78) 
+Element #: 62, Current Node #: 79, Diagonal Node #: 136, (136) 
+Element #: 62, Current Node #: 80, Diagonal Node #: 135, (135) 
+Element #: 62, Current Node #: 86, Diagonal Node #: 129, (129) 
+Element #: 62, Current Node #: 87, Diagonal Node #: 128, (128) 
+Element #: 62, Current Node #: 128, Diagonal Node #: 87, (87) 
+Element #: 62, Current Node #: 129, Diagonal Node #: 86, (86) 
+Element #: 62, Current Node #: 135, Diagonal Node #: 80, (80) 
+Element #: 62, Current Node #: 136, Diagonal Node #: 79, (79) 
+Element #: 63, Current Node #: 80, Diagonal Node #: 137, (137) 
+Element #: 63, Current Node #: 81, Diagonal Node #: 136, (136) 
+Element #: 63, Current Node #: 87, Diagonal Node #: 130, (130) 
+Element #: 63, Current Node #: 88, Diagonal Node #: 129, (129) 
+Element #: 63, Current Node #: 129, Diagonal Node #: 88, (88) 
+Element #: 63, Current Node #: 130, Diagonal Node #: 87, (87) 
+Element #: 63, Current Node #: 136, Diagonal Node #: 81, (81) 
+Element #: 63, Current Node #: 137, Diagonal Node #: 80, (80) 
+Element #: 64, Current Node #: 81, Diagonal Node #: 138, (138) 
+Element #: 64, Current Node #: 82, Diagonal Node #: 137, (137) 
+Element #: 64, Current Node #: 88, Diagonal Node #: 131, (131) 
+Element #: 64, Current Node #: 89, Diagonal Node #: 130, (130) 
+Element #: 64, Current Node #: 130, Diagonal Node #: 89, (89) 
+Element #: 64, Current Node #: 131, Diagonal Node #: 88, (88) 
+Element #: 64, Current Node #: 137, Diagonal Node #: 82, (82) 
+Element #: 64, Current Node #: 138, Diagonal Node #: 81, (81) 
+Element #: 65, Current Node #: 82, Diagonal Node #: 139, (139) 
+Element #: 65, Current Node #: 83, Diagonal Node #: 138, (138) 
+Element #: 65, Current Node #: 89, Diagonal Node #: 132, (132) 
+Element #: 65, Current Node #: 90, Diagonal Node #: 131, (131) 
+Element #: 65, Current Node #: 131, Diagonal Node #: 90, (90) 
+Element #: 65, Current Node #: 132, Diagonal Node #: 89, (89) 
+Element #: 65, Current Node #: 138, Diagonal Node #: 83, (83) 
+Element #: 65, Current Node #: 139, Diagonal Node #: 82, (82) 
+Element #: 66, Current Node #: 84, Diagonal Node #: 141, (141) 
+Element #: 66, Current Node #: 85, Diagonal Node #: 140, (140) 
+Element #: 66, Current Node #: 91, Diagonal Node #: 134, (134) 
+Element #: 66, Current Node #: 92, Diagonal Node #: 133, (133) 
+Element #: 66, Current Node #: 133, Diagonal Node #: 92, (92) 
+Element #: 66, Current Node #: 134, Diagonal Node #: 91, (91) 
+Element #: 66, Current Node #: 140, Diagonal Node #: 85, (85) 
+Element #: 66, Current Node #: 141, Diagonal Node #: 84, (84) 
+Element #: 67, Current Node #: 85, Diagonal Node #: 142, (142) 
+Element #: 67, Current Node #: 86, Diagonal Node #: 141, (141) 
+Element #: 67, Current Node #: 92, Diagonal Node #: 135, (135) 
+Element #: 67, Current Node #: 93, Diagonal Node #: 134, (134) 
+Element #: 67, Current Node #: 134, Diagonal Node #: 93, (93) 
+Element #: 67, Current Node #: 135, Diagonal Node #: 92, (92) 
+Element #: 67, Current Node #: 141, Diagonal Node #: 86, (86) 
+Element #: 67, Current Node #: 142, Diagonal Node #: 85, (85) 
+Element #: 68, Current Node #: 86, Diagonal Node #: 143, (143) 
+Element #: 68, Current Node #: 87, Diagonal Node #: 142, (142) 
+Element #: 68, Current Node #: 93, Diagonal Node #: 136, (136) 
+Element #: 68, Current Node #: 94, Diagonal Node #: 135, (135) 
+Element #: 68, Current Node #: 135, Diagonal Node #: 94, (94) 
+Element #: 68, Current Node #: 136, Diagonal Node #: 93, (93) 
+Element #: 68, Current Node #: 142, Diagonal Node #: 87, (87) 
+Element #: 68, Current Node #: 143, Diagonal Node #: 86, (86) 
+Element #: 69, Current Node #: 87, Diagonal Node #: 144, (144) 
+Element #: 69, Current Node #: 88, Diagonal Node #: 143, (143) 
+Element #: 69, Current Node #: 94, Diagonal Node #: 137, (137) 
+Element #: 69, Current Node #: 95, Diagonal Node #: 136, (136) 
+Element #: 69, Current Node #: 136, Diagonal Node #: 95, (95) 
+Element #: 69, Current Node #: 137, Diagonal Node #: 94, (94) 
+Element #: 69, Current Node #: 143, Diagonal Node #: 88, (88) 
+Element #: 69, Current Node #: 144, Diagonal Node #: 87, (87) 
+Element #: 70, Current Node #: 88, Diagonal Node #: 145, (145) 
+Element #: 70, Current Node #: 89, Diagonal Node #: 144, (144) 
+Element #: 70, Current Node #: 95, Diagonal Node #: 138, (138) 
+Element #: 70, Current Node #: 96, Diagonal Node #: 137, (137) 
+Element #: 70, Current Node #: 137, Diagonal Node #: 96, (96) 
+Element #: 70, Current Node #: 138, Diagonal Node #: 95, (95) 
+Element #: 70, Current Node #: 144, Diagonal Node #: 89, (89) 
+Element #: 70, Current Node #: 145, Diagonal Node #: 88, (88) 
+Element #: 71, Current Node #: 89, Diagonal Node #: 146, (146) 
+Element #: 71, Current Node #: 90, Diagonal Node #: 145, (145) 
+Element #: 71, Current Node #: 96, Diagonal Node #: 139, (139) 
+Element #: 71, Current Node #: 97, Diagonal Node #: 138, (138) 
+Element #: 71, Current Node #: 138, Diagonal Node #: 97, (97) 
+Element #: 71, Current Node #: 139, Diagonal Node #: 96, (96) 
+Element #: 71, Current Node #: 145, Diagonal Node #: 90, (90) 
+Element #: 71, Current Node #: 146, Diagonal Node #: 89, (89) 
+Element #: 72, Current Node #: 98, Diagonal Node #: 155, (155) 
+Element #: 72, Current Node #: 99, Diagonal Node #: 154, (154) 
+Element #: 72, Current Node #: 105, Diagonal Node #: 148, (148) 
+Element #: 72, Current Node #: 106, Diagonal Node #: 147, (147) 
+Element #: 72, Current Node #: 147, Diagonal Node #: 106, (106) 
+Element #: 72, Current Node #: 148, Diagonal Node #: 105, (105) 
+Element #: 72, Current Node #: 154, Diagonal Node #: 99, (99) 
+Element #: 72, Current Node #: 155, Diagonal Node #: 98, (98) 
+Element #: 73, Current Node #: 99, Diagonal Node #: 156, (156) 
+Element #: 73, Current Node #: 100, Diagonal Node #: 155, (155) 
+Element #: 73, Current Node #: 106, Diagonal Node #: 149, (149) 
+Element #: 73, Current Node #: 107, Diagonal Node #: 148, (148) 
+Element #: 73, Current Node #: 148, Diagonal Node #: 107, (107) 
+Element #: 73, Current Node #: 149, Diagonal Node #: 106, (106) 
+Element #: 73, Current Node #: 155, Diagonal Node #: 100, (100) 
+Element #: 73, Current Node #: 156, Diagonal Node #: 99, (99) 
+Element #: 74, Current Node #: 100, Diagonal Node #: 157, (157) 
+Element #: 74, Current Node #: 101, Diagonal Node #: 156, (156) 
+Element #: 74, Current Node #: 107, Diagonal Node #: 150, (150) 
+Element #: 74, Current Node #: 108, Diagonal Node #: 149, (149) 
+Element #: 74, Current Node #: 149, Diagonal Node #: 108, (108) 
+Element #: 74, Current Node #: 150, Diagonal Node #: 107, (107) 
+Element #: 74, Current Node #: 156, Diagonal Node #: 101, (101) 
+Element #: 74, Current Node #: 157, Diagonal Node #: 100, (100) 
+Element #: 75, Current Node #: 101, Diagonal Node #: 158, (158) 
+Element #: 75, Current Node #: 102, Diagonal Node #: 157, (157) 
+Element #: 75, Current Node #: 108, Diagonal Node #: 151, (151) 
+Element #: 75, Current Node #: 109, Diagonal Node #: 150, (150) 
+Element #: 75, Current Node #: 150, Diagonal Node #: 109, (109) 
+Element #: 75, Current Node #: 151, Diagonal Node #: 108, (108) 
+Element #: 75, Current Node #: 157, Diagonal Node #: 102, (102) 
+Element #: 75, Current Node #: 158, Diagonal Node #: 101, (101) 
+Element #: 76, Current Node #: 102, Diagonal Node #: 159, (159) 
+Element #: 76, Current Node #: 103, Diagonal Node #: 158, (158) 
+Element #: 76, Current Node #: 109, Diagonal Node #: 152, (152) 
+Element #: 76, Current Node #: 110, Diagonal Node #: 151, (151) 
+Element #: 76, Current Node #: 151, Diagonal Node #: 110, (110) 
+Element #: 76, Current Node #: 152, Diagonal Node #: 109, (109) 
+Element #: 76, Current Node #: 158, Diagonal Node #: 103, (103) 
+Element #: 76, Current Node #: 159, Diagonal Node #: 102, (102) 
+Element #: 77, Current Node #: 103, Diagonal Node #: 160, (160) 
+Element #: 77, Current Node #: 104, Diagonal Node #: 159, (159) 
+Element #: 77, Current Node #: 110, Diagonal Node #: 153, (153) 
+Element #: 77, Current Node #: 111, Diagonal Node #: 152, (152) 
+Element #: 77, Current Node #: 152, Diagonal Node #: 111, (111) 
+Element #: 77, Current Node #: 153, Diagonal Node #: 110, (110) 
+Element #: 77, Current Node #: 159, Diagonal Node #: 104, (104) 
+Element #: 77, Current Node #: 160, Diagonal Node #: 103, (103) 
+Element #: 78, Current Node #: 105, Diagonal Node #: 162, (162) 
+Element #: 78, Current Node #: 106, Diagonal Node #: 161, (161) 
+Element #: 78, Current Node #: 112, Diagonal Node #: 155, (155) 
+Element #: 78, Current Node #: 113, Diagonal Node #: 154, (154) 
+Element #: 78, Current Node #: 154, Diagonal Node #: 113, (113) 
+Element #: 78, Current Node #: 155, Diagonal Node #: 112, (112) 
+Element #: 78, Current Node #: 161, Diagonal Node #: 106, (106) 
+Element #: 78, Current Node #: 162, Diagonal Node #: 105, (105) 
+Element #: 79, Current Node #: 106, Diagonal Node #: 163, (163) 
+Element #: 79, Current Node #: 107, Diagonal Node #: 162, (162) 
+Element #: 79, Current Node #: 113, Diagonal Node #: 156, (156) 
+Element #: 79, Current Node #: 114, Diagonal Node #: 155, (155) 
+Element #: 79, Current Node #: 155, Diagonal Node #: 114, (114) 
+Element #: 79, Current Node #: 156, Diagonal Node #: 113, (113) 
+Element #: 79, Current Node #: 162, Diagonal Node #: 107, (107) 
+Element #: 79, Current Node #: 163, Diagonal Node #: 106, (106) 
+Element #: 80, Current Node #: 107, Diagonal Node #: 164, (164) 
+Element #: 80, Current Node #: 108, Diagonal Node #: 163, (163) 
+Element #: 80, Current Node #: 114, Diagonal Node #: 157, (157) 
+Element #: 80, Current Node #: 115, Diagonal Node #: 156, (156) 
+Element #: 80, Current Node #: 156, Diagonal Node #: 115, (115) 
+Element #: 80, Current Node #: 157, Diagonal Node #: 114, (114) 
+Element #: 80, Current Node #: 163, Diagonal Node #: 108, (108) 
+Element #: 80, Current Node #: 164, Diagonal Node #: 107, (107) 
+Element #: 81, Current Node #: 108, Diagonal Node #: 165, (165) 
+Element #: 81, Current Node #: 109, Diagonal Node #: 164, (164) 
+Element #: 81, Current Node #: 115, Diagonal Node #: 158, (158) 
+Element #: 81, Current Node #: 116, Diagonal Node #: 157, (157) 
+Element #: 81, Current Node #: 157, Diagonal Node #: 116, (116) 
+Element #: 81, Current Node #: 158, Diagonal Node #: 115, (115) 
+Element #: 81, Current Node #: 164, Diagonal Node #: 109, (109) 
+Element #: 81, Current Node #: 165, Diagonal Node #: 108, (108) 
+Element #: 82, Current Node #: 109, Diagonal Node #: 166, (166) 
+Element #: 82, Current Node #: 110, Diagonal Node #: 165, (165) 
+Element #: 82, Current Node #: 116, Diagonal Node #: 159, (159) 
+Element #: 82, Current Node #: 117, Diagonal Node #: 158, (158) 
+Element #: 82, Current Node #: 158, Diagonal Node #: 117, (117) 
+Element #: 82, Current Node #: 159, Diagonal Node #: 116, (116) 
+Element #: 82, Current Node #: 165, Diagonal Node #: 110, (110) 
+Element #: 82, Current Node #: 166, Diagonal Node #: 109, (109) 
+Element #: 83, Current Node #: 110, Diagonal Node #: 167, (167) 
+Element #: 83, Current Node #: 111, Diagonal Node #: 166, (166) 
+Element #: 83, Current Node #: 117, Diagonal Node #: 160, (160) 
+Element #: 83, Current Node #: 118, Diagonal Node #: 159, (159) 
+Element #: 83, Current Node #: 159, Diagonal Node #: 118, (118) 
+Element #: 83, Current Node #: 160, Diagonal Node #: 117, (117) 
+Element #: 83, Current Node #: 166, Diagonal Node #: 111, (111) 
+Element #: 83, Current Node #: 167, Diagonal Node #: 110, (110) 
+Element #: 84, Current Node #: 112, Diagonal Node #: 169, (169) 
+Element #: 84, Current Node #: 113, Diagonal Node #: 168, (168) 
+Element #: 84, Current Node #: 119, Diagonal Node #: 162, (162) 
+Element #: 84, Current Node #: 120, Diagonal Node #: 161, (161) 
+Element #: 84, Current Node #: 161, Diagonal Node #: 120, (120) 
+Element #: 84, Current Node #: 162, Diagonal Node #: 119, (119) 
+Element #: 84, Current Node #: 168, Diagonal Node #: 113, (113) 
+Element #: 84, Current Node #: 169, Diagonal Node #: 112, (112) 
+Element #: 85, Current Node #: 113, Diagonal Node #: 170, (170) 
+Element #: 85, Current Node #: 114, Diagonal Node #: 169, (169) 
+Element #: 85, Current Node #: 120, Diagonal Node #: 163, (163) 
+Element #: 85, Current Node #: 121, Diagonal Node #: 162, (162) 
+Element #: 85, Current Node #: 162, Diagonal Node #: 121, (121) 
+Element #: 85, Current Node #: 163, Diagonal Node #: 120, (120) 
+Element #: 85, Current Node #: 169, Diagonal Node #: 114, (114) 
+Element #: 85, Current Node #: 170, Diagonal Node #: 113, (113) 
+Element #: 86, Current Node #: 114, Diagonal Node #: 171, (171) 
+Element #: 86, Current Node #: 115, Diagonal Node #: 170, (170) 
+Element #: 86, Current Node #: 121, Diagonal Node #: 164, (164) 
+Element #: 86, Current Node #: 122, Diagonal Node #: 163, (163) 
+Element #: 86, Current Node #: 163, Diagonal Node #: 122, (122) 
+Element #: 86, Current Node #: 164, Diagonal Node #: 121, (121) 
+Element #: 86, Current Node #: 170, Diagonal Node #: 115, (115) 
+Element #: 86, Current Node #: 171, Diagonal Node #: 114, (114) 
+Element #: 87, Current Node #: 115, Diagonal Node #: 172, (172) 
+Element #: 87, Current Node #: 116, Diagonal Node #: 171, (171) 
+Element #: 87, Current Node #: 122, Diagonal Node #: 165, (165) 
+Element #: 87, Current Node #: 123, Diagonal Node #: 164, (164) 
+Element #: 87, Current Node #: 164, Diagonal Node #: 123, (123) 
+Element #: 87, Current Node #: 165, Diagonal Node #: 122, (122) 
+Element #: 87, Current Node #: 171, Diagonal Node #: 116, (116) 
+Element #: 87, Current Node #: 172, Diagonal Node #: 115, (115) 
+Element #: 88, Current Node #: 116, Diagonal Node #: 173, (173) 
+Element #: 88, Current Node #: 117, Diagonal Node #: 172, (172) 
+Element #: 88, Current Node #: 123, Diagonal Node #: 166, (166) 
+Element #: 88, Current Node #: 124, Diagonal Node #: 165, (165) 
+Element #: 88, Current Node #: 165, Diagonal Node #: 124, (124) 
+Element #: 88, Current Node #: 166, Diagonal Node #: 123, (123) 
+Element #: 88, Current Node #: 172, Diagonal Node #: 117, (117) 
+Element #: 88, Current Node #: 173, Diagonal Node #: 116, (116) 
+Element #: 89, Current Node #: 117, Diagonal Node #: 174, (174) 
+Element #: 89, Current Node #: 118, Diagonal Node #: 173, (173) 
+Element #: 89, Current Node #: 124, Diagonal Node #: 167, (167) 
+Element #: 89, Current Node #: 125, Diagonal Node #: 166, (166) 
+Element #: 89, Current Node #: 166, Diagonal Node #: 125, (125) 
+Element #: 89, Current Node #: 167, Diagonal Node #: 124, (124) 
+Element #: 89, Current Node #: 173, Diagonal Node #: 118, (118) 
+Element #: 89, Current Node #: 174, Diagonal Node #: 117, (117) 
+Element #: 90, Current Node #: 119, Diagonal Node #: 176, (176) 
+Element #: 90, Current Node #: 120, Diagonal Node #: 175, (175) 
+Element #: 90, Current Node #: 126, Diagonal Node #: 169, (169) 
+Element #: 90, Current Node #: 127, Diagonal Node #: 168, (168) 
+Element #: 90, Current Node #: 168, Diagonal Node #: 127, (127) 
+Element #: 90, Current Node #: 169, Diagonal Node #: 126, (126) 
+Element #: 90, Current Node #: 175, Diagonal Node #: 120, (120) 
+Element #: 90, Current Node #: 176, Diagonal Node #: 119, (119) 
+Element #: 91, Current Node #: 120, Diagonal Node #: 177, (177) 
+Element #: 91, Current Node #: 121, Diagonal Node #: 176, (176) 
+Element #: 91, Current Node #: 127, Diagonal Node #: 170, (170) 
+Element #: 91, Current Node #: 128, Diagonal Node #: 169, (169) 
+Element #: 91, Current Node #: 169, Diagonal Node #: 128, (128) 
+Element #: 91, Current Node #: 170, Diagonal Node #: 127, (127) 
+Element #: 91, Current Node #: 176, Diagonal Node #: 121, (121) 
+Element #: 91, Current Node #: 177, Diagonal Node #: 120, (120) 
+Element #: 92, Current Node #: 121, Diagonal Node #: 178, (178) 
+Element #: 92, Current Node #: 122, Diagonal Node #: 177, (177) 
+Element #: 92, Current Node #: 128, Diagonal Node #: 171, (171) 
+Element #: 92, Current Node #: 129, Diagonal Node #: 170, (170) 
+Element #: 92, Current Node #: 170, Diagonal Node #: 129, (129) 
+Element #: 92, Current Node #: 171, Diagonal Node #: 128, (128) 
+Element #: 92, Current Node #: 177, Diagonal Node #: 122, (122) 
+Element #: 92, Current Node #: 178, Diagonal Node #: 121, (121) 
+Element #: 93, Current Node #: 122, Diagonal Node #: 179, (179) 
+Element #: 93, Current Node #: 123, Diagonal Node #: 178, (178) 
+Element #: 93, Current Node #: 129, Diagonal Node #: 172, (172) 
+Element #: 93, Current Node #: 130, Diagonal Node #: 171, (171) 
+Element #: 93, Current Node #: 171, Diagonal Node #: 130, (130) 
+Element #: 93, Current Node #: 172, Diagonal Node #: 129, (129) 
+Element #: 93, Current Node #: 178, Diagonal Node #: 123, (123) 
+Element #: 93, Current Node #: 179, Diagonal Node #: 122, (122) 
+Element #: 94, Current Node #: 123, Diagonal Node #: 180, (180) 
+Element #: 94, Current Node #: 124, Diagonal Node #: 179, (179) 
+Element #: 94, Current Node #: 130, Diagonal Node #: 173, (173) 
+Element #: 94, Current Node #: 131, Diagonal Node #: 172, (172) 
+Element #: 94, Current Node #: 172, Diagonal Node #: 131, (131) 
+Element #: 94, Current Node #: 173, Diagonal Node #: 130, (130) 
+Element #: 94, Current Node #: 179, Diagonal Node #: 124, (124) 
+Element #: 94, Current Node #: 180, Diagonal Node #: 123, (123) 
+Element #: 95, Current Node #: 124, Diagonal Node #: 181, (181) 
+Element #: 95, Current Node #: 125, Diagonal Node #: 180, (180) 
+Element #: 95, Current Node #: 131, Diagonal Node #: 174, (174) 
+Element #: 95, Current Node #: 132, Diagonal Node #: 173, (173) 
+Element #: 95, Current Node #: 173, Diagonal Node #: 132, (132) 
+Element #: 95, Current Node #: 174, Diagonal Node #: 131, (131) 
+Element #: 95, Current Node #: 180, Diagonal Node #: 125, (125) 
+Element #: 95, Current Node #: 181, Diagonal Node #: 124, (124) 
+Element #: 96, Current Node #: 126, Diagonal Node #: 183, (183) 
+Element #: 96, Current Node #: 127, Diagonal Node #: 182, (182) 
+Element #: 96, Current Node #: 133, Diagonal Node #: 176, (176) 
+Element #: 96, Current Node #: 134, Diagonal Node #: 175, (175) 
+Element #: 96, Current Node #: 175, Diagonal Node #: 134, (134) 
+Element #: 96, Current Node #: 176, Diagonal Node #: 133, (133) 
+Element #: 96, Current Node #: 182, Diagonal Node #: 127, (127) 
+Element #: 96, Current Node #: 183, Diagonal Node #: 126, (126) 
+Element #: 97, Current Node #: 127, Diagonal Node #: 184, (184) 
+Element #: 97, Current Node #: 128, Diagonal Node #: 183, (183) 
+Element #: 97, Current Node #: 134, Diagonal Node #: 177, (177) 
+Element #: 97, Current Node #: 135, Diagonal Node #: 176, (176) 
+Element #: 97, Current Node #: 176, Diagonal Node #: 135, (135) 
+Element #: 97, Current Node #: 177, Diagonal Node #: 134, (134) 
+Element #: 97, Current Node #: 183, Diagonal Node #: 128, (128) 
+Element #: 97, Current Node #: 184, Diagonal Node #: 127, (127) 
+Element #: 98, Current Node #: 128, Diagonal Node #: 185, (185) 
+Element #: 98, Current Node #: 129, Diagonal Node #: 184, (184) 
+Element #: 98, Current Node #: 135, Diagonal Node #: 178, (178) 
+Element #: 98, Current Node #: 136, Diagonal Node #: 177, (177) 
+Element #: 98, Current Node #: 177, Diagonal Node #: 136, (136) 
+Element #: 98, Current Node #: 178, Diagonal Node #: 135, (135) 
+Element #: 98, Current Node #: 184, Diagonal Node #: 129, (129) 
+Element #: 98, Current Node #: 185, Diagonal Node #: 128, (128) 
+Element #: 99, Current Node #: 129, Diagonal Node #: 186, (186) 
+Element #: 99, Current Node #: 130, Diagonal Node #: 185, (185) 
+Element #: 99, Current Node #: 136, Diagonal Node #: 179, (179) 
+Element #: 99, Current Node #: 137, Diagonal Node #: 178, (178) 
+Element #: 99, Current Node #: 178, Diagonal Node #: 137, (137) 
+Element #: 99, Current Node #: 179, Diagonal Node #: 136, (136) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 130, (130) 
+Element #: 99, Current Node #: 186, Diagonal Node #: 129, (129) 
+Element #: 100, Current Node #: 130, Diagonal Node #: 187, (187) 
+Element #: 100, Current Node #: 131, Diagonal Node #: 186, (186) 
+Element #: 100, Current Node #: 137, Diagonal Node #: 180, (180) 
+Element #: 100, Current Node #: 138, Diagonal Node #: 179, (179) 
+Element #: 100, Current Node #: 179, Diagonal Node #: 138, (138) 
+Element #: 100, Current Node #: 180, Diagonal Node #: 137, (137) 
+Element #: 100, Current Node #: 186, Diagonal Node #: 131, (131) 
+Element #: 100, Current Node #: 187, Diagonal Node #: 130, (130) 
+Element #: 101, Current Node #: 131, Diagonal Node #: 188, (188) 
+Element #: 101, Current Node #: 132, Diagonal Node #: 187, (187) 
+Element #: 101, Current Node #: 138, Diagonal Node #: 181, (181) 
+Element #: 101, Current Node #: 139, Diagonal Node #: 180, (180) 
+Element #: 101, Current Node #: 180, Diagonal Node #: 139, (139) 
+Element #: 101, Current Node #: 181, Diagonal Node #: 138, (138) 
+Element #: 101, Current Node #: 187, Diagonal Node #: 132, (132) 
+Element #: 101, Current Node #: 188, Diagonal Node #: 131, (131) 
+Element #: 102, Current Node #: 133, Diagonal Node #: 190, (190) 
+Element #: 102, Current Node #: 134, Diagonal Node #: 189, (189) 
+Element #: 102, Current Node #: 140, Diagonal Node #: 183, (183) 
+Element #: 102, Current Node #: 141, Diagonal Node #: 182, (182) 
+Element #: 102, Current Node #: 182, Diagonal Node #: 141, (141) 
+Element #: 102, Current Node #: 183, Diagonal Node #: 140, (140) 
+Element #: 102, Current Node #: 189, Diagonal Node #: 134, (134) 
+Element #: 102, Current Node #: 190, Diagonal Node #: 133, (133) 
+Element #: 103, Current Node #: 134, Diagonal Node #: 191, (191) 
+Element #: 103, Current Node #: 135, Diagonal Node #: 190, (190) 
+Element #: 103, Current Node #: 141, Diagonal Node #: 184, (184) 
+Element #: 103, Current Node #: 142, Diagonal Node #: 183, (183) 
+Element #: 103, Current Node #: 183, Diagonal Node #: 142, (142) 
+Element #: 103, Current Node #: 184, Diagonal Node #: 141, (141) 
+Element #: 103, Current Node #: 190, Diagonal Node #: 135, (135) 
+Element #: 103, Current Node #: 191, Diagonal Node #: 134, (134) 
+Element #: 104, Current Node #: 135, Diagonal Node #: 192, (192) 
+Element #: 104, Current Node #: 136, Diagonal Node #: 191, (191) 
+Element #: 104, Current Node #: 142, Diagonal Node #: 185, (185) 
+Element #: 104, Current Node #: 143, Diagonal Node #: 184, (184) 
+Element #: 104, Current Node #: 184, Diagonal Node #: 143, (143) 
+Element #: 104, Current Node #: 185, Diagonal Node #: 142, (142) 
+Element #: 104, Current Node #: 191, Diagonal Node #: 136, (136) 
+Element #: 104, Current Node #: 192, Diagonal Node #: 135, (135) 
+Element #: 105, Current Node #: 136, Diagonal Node #: 193, (193) 
+Element #: 105, Current Node #: 137, Diagonal Node #: 192, (192) 
+Element #: 105, Current Node #: 143, Diagonal Node #: 186, (186) 
+Element #: 105, Current Node #: 144, Diagonal Node #: 185, (185) 
+Element #: 105, Current Node #: 185, Diagonal Node #: 144, (144) 
+Element #: 105, Current Node #: 186, Diagonal Node #: 143, (143) 
+Element #: 105, Current Node #: 192, Diagonal Node #: 137, (137) 
+Element #: 105, Current Node #: 193, Diagonal Node #: 136, (136) 
+Element #: 106, Current Node #: 137, Diagonal Node #: 194, (194) 
+Element #: 106, Current Node #: 138, Diagonal Node #: 193, (193) 
+Element #: 106, Current Node #: 144, Diagonal Node #: 187, (187) 
+Element #: 106, Current Node #: 145, Diagonal Node #: 186, (186) 
+Element #: 106, Current Node #: 186, Diagonal Node #: 145, (145) 
+Element #: 106, Current Node #: 187, Diagonal Node #: 144, (144) 
+Element #: 106, Current Node #: 193, Diagonal Node #: 138, (138) 
+Element #: 106, Current Node #: 194, Diagonal Node #: 137, (137) 
+Element #: 107, Current Node #: 138, Diagonal Node #: 195, (195) 
+Element #: 107, Current Node #: 139, Diagonal Node #: 194, (194) 
+Element #: 107, Current Node #: 145, Diagonal Node #: 188, (188) 
+Element #: 107, Current Node #: 146, Diagonal Node #: 187, (187) 
+Element #: 107, Current Node #: 187, Diagonal Node #: 146, (146) 
+Element #: 107, Current Node #: 188, Diagonal Node #: 145, (145) 
+Element #: 107, Current Node #: 194, Diagonal Node #: 139, (139) 
+Element #: 107, Current Node #: 195, Diagonal Node #: 138, (138) 
+Element #: 108, Current Node #: 147, Diagonal Node #: 204, (204) 
+Element #: 108, Current Node #: 148, Diagonal Node #: 203, (203) 
+Element #: 108, Current Node #: 154, Diagonal Node #: 197, (197) 
+Element #: 108, Current Node #: 155, Diagonal Node #: 196, (196) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 155, (155) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 154, (154) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 148, (148) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 147, (147) 
+Element #: 109, Current Node #: 148, Diagonal Node #: 205, (205) 
+Element #: 109, Current Node #: 149, Diagonal Node #: 204, (204) 
+Element #: 109, Current Node #: 155, Diagonal Node #: 198, (198) 
+Element #: 109, Current Node #: 156, Diagonal Node #: 197, (197) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 156, (156) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 155, (155) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 149, (149) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 148, (148) 
+Element #: 110, Current Node #: 149, Diagonal Node #: 206, (206) 
+Element #: 110, Current Node #: 150, Diagonal Node #: 205, (205) 
+Element #: 110, Current Node #: 156, Diagonal Node #: 199, (199) 
+Element #: 110, Current Node #: 157, Diagonal Node #: 198, (198) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 157, (157) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 156, (156) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 150, (150) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 149, (149) 
+Element #: 111, Current Node #: 150, Diagonal Node #: 207, (207) 
+Element #: 111, Current Node #: 151, Diagonal Node #: 206, (206) 
+Element #: 111, Current Node #: 157, Diagonal Node #: 200, (200) 
+Element #: 111, Current Node #: 158, Diagonal Node #: 199, (199) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 158, (158) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 157, (157) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 151, (151) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 150, (150) 
+Element #: 112, Current Node #: 151, Diagonal Node #: 208, (208) 
+Element #: 112, Current Node #: 152, Diagonal Node #: 207, (207) 
+Element #: 112, Current Node #: 158, Diagonal Node #: 201, (201) 
+Element #: 112, Current Node #: 159, Diagonal Node #: 200, (200) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 159, (159) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 158, (158) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 152, (152) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 151, (151) 
+Element #: 113, Current Node #: 152, Diagonal Node #: 209, (209) 
+Element #: 113, Current Node #: 153, Diagonal Node #: 208, (208) 
+Element #: 113, Current Node #: 159, Diagonal Node #: 202, (202) 
+Element #: 113, Current Node #: 160, Diagonal Node #: 201, (201) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 160, (160) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 159, (159) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 153, (153) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 152, (152) 
+Element #: 114, Current Node #: 154, Diagonal Node #: 211, (211) 
+Element #: 114, Current Node #: 155, Diagonal Node #: 210, (210) 
+Element #: 114, Current Node #: 161, Diagonal Node #: 204, (204) 
+Element #: 114, Current Node #: 162, Diagonal Node #: 203, (203) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 162, (162) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 161, (161) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 155, (155) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 154, (154) 
+Element #: 115, Current Node #: 155, Diagonal Node #: 212, (212) 
+Element #: 115, Current Node #: 156, Diagonal Node #: 211, (211) 
+Element #: 115, Current Node #: 162, Diagonal Node #: 205, (205) 
+Element #: 115, Current Node #: 163, Diagonal Node #: 204, (204) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 163, (163) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 162, (162) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 156, (156) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 155, (155) 
+Element #: 116, Current Node #: 156, Diagonal Node #: 213, (213) 
+Element #: 116, Current Node #: 157, Diagonal Node #: 212, (212) 
+Element #: 116, Current Node #: 163, Diagonal Node #: 206, (206) 
+Element #: 116, Current Node #: 164, Diagonal Node #: 205, (205) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 164, (164) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 163, (163) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 157, (157) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 156, (156) 
+Element #: 117, Current Node #: 157, Diagonal Node #: 214, (214) 
+Element #: 117, Current Node #: 158, Diagonal Node #: 213, (213) 
+Element #: 117, Current Node #: 164, Diagonal Node #: 207, (207) 
+Element #: 117, Current Node #: 165, Diagonal Node #: 206, (206) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 165, (165) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 164, (164) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 158, (158) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 157, (157) 
+Element #: 118, Current Node #: 158, Diagonal Node #: 215, (215) 
+Element #: 118, Current Node #: 159, Diagonal Node #: 214, (214) 
+Element #: 118, Current Node #: 165, Diagonal Node #: 208, (208) 
+Element #: 118, Current Node #: 166, Diagonal Node #: 207, (207) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 166, (166) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 165, (165) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 159, (159) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 158, (158) 
+Element #: 119, Current Node #: 159, Diagonal Node #: 216, (216) 
+Element #: 119, Current Node #: 160, Diagonal Node #: 215, (215) 
+Element #: 119, Current Node #: 166, Diagonal Node #: 209, (209) 
+Element #: 119, Current Node #: 167, Diagonal Node #: 208, (208) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 167, (167) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 166, (166) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 160, (160) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 159, (159) 
+Element #: 120, Current Node #: 161, Diagonal Node #: 218, (218) 
+Element #: 120, Current Node #: 162, Diagonal Node #: 217, (217) 
+Element #: 120, Current Node #: 168, Diagonal Node #: 211, (211) 
+Element #: 120, Current Node #: 169, Diagonal Node #: 210, (210) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 169, (169) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 168, (168) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 162, (162) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 161, (161) 
+Element #: 121, Current Node #: 162, Diagonal Node #: 219, (219) 
+Element #: 121, Current Node #: 163, Diagonal Node #: 218, (218) 
+Element #: 121, Current Node #: 169, Diagonal Node #: 212, (212) 
+Element #: 121, Current Node #: 170, Diagonal Node #: 211, (211) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 170, (170) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 169, (169) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 163, (163) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 162, (162) 
+Element #: 122, Current Node #: 163, Diagonal Node #: 220, (220) 
+Element #: 122, Current Node #: 164, Diagonal Node #: 219, (219) 
+Element #: 122, Current Node #: 170, Diagonal Node #: 213, (213) 
+Element #: 122, Current Node #: 171, Diagonal Node #: 212, (212) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 171, (171) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 170, (170) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 164, (164) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 163, (163) 
+Element #: 123, Current Node #: 164, Diagonal Node #: 221, (221) 
+Element #: 123, Current Node #: 165, Diagonal Node #: 220, (220) 
+Element #: 123, Current Node #: 171, Diagonal Node #: 214, (214) 
+Element #: 123, Current Node #: 172, Diagonal Node #: 213, (213) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 172, (172) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 171, (171) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 165, (165) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 164, (164) 
+Element #: 124, Current Node #: 165, Diagonal Node #: 222, (222) 
+Element #: 124, Current Node #: 166, Diagonal Node #: 221, (221) 
+Element #: 124, Current Node #: 172, Diagonal Node #: 215, (215) 
+Element #: 124, Current Node #: 173, Diagonal Node #: 214, (214) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 173, (173) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 172, (172) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 166, (166) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 165, (165) 
+Element #: 125, Current Node #: 166, Diagonal Node #: 223, (223) 
+Element #: 125, Current Node #: 167, Diagonal Node #: 222, (222) 
+Element #: 125, Current Node #: 173, Diagonal Node #: 216, (216) 
+Element #: 125, Current Node #: 174, Diagonal Node #: 215, (215) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 174, (174) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 173, (173) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 167, (167) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 166, (166) 
+Element #: 126, Current Node #: 168, Diagonal Node #: 225, (225) 
+Element #: 126, Current Node #: 169, Diagonal Node #: 224, (224) 
+Element #: 126, Current Node #: 175, Diagonal Node #: 218, (218) 
+Element #: 126, Current Node #: 176, Diagonal Node #: 217, (217) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 176, (176) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 175, (175) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 169, (169) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 168, (168) 
+Element #: 127, Current Node #: 169, Diagonal Node #: 226, (226) 
+Element #: 127, Current Node #: 170, Diagonal Node #: 225, (225) 
+Element #: 127, Current Node #: 176, Diagonal Node #: 219, (219) 
+Element #: 127, Current Node #: 177, Diagonal Node #: 218, (218) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 177, (177) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 176, (176) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 170, (170) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 169, (169) 
+Element #: 128, Current Node #: 170, Diagonal Node #: 227, (227) 
+Element #: 128, Current Node #: 171, Diagonal Node #: 226, (226) 
+Element #: 128, Current Node #: 177, Diagonal Node #: 220, (220) 
+Element #: 128, Current Node #: 178, Diagonal Node #: 219, (219) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 178, (178) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 177, (177) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 171, (171) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 170, (170) 
+Element #: 129, Current Node #: 171, Diagonal Node #: 228, (228) 
+Element #: 129, Current Node #: 172, Diagonal Node #: 227, (227) 
+Element #: 129, Current Node #: 178, Diagonal Node #: 221, (221) 
+Element #: 129, Current Node #: 179, Diagonal Node #: 220, (220) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 179, (179) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 178, (178) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 172, (172) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 171, (171) 
+Element #: 130, Current Node #: 172, Diagonal Node #: 229, (229) 
+Element #: 130, Current Node #: 173, Diagonal Node #: 228, (228) 
+Element #: 130, Current Node #: 179, Diagonal Node #: 222, (222) 
+Element #: 130, Current Node #: 180, Diagonal Node #: 221, (221) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 180, (180) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 179, (179) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 173, (173) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 172, (172) 
+Element #: 131, Current Node #: 173, Diagonal Node #: 230, (230) 
+Element #: 131, Current Node #: 174, Diagonal Node #: 229, (229) 
+Element #: 131, Current Node #: 180, Diagonal Node #: 223, (223) 
+Element #: 131, Current Node #: 181, Diagonal Node #: 222, (222) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 181, (181) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 180, (180) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 174, (174) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 173, (173) 
+Element #: 132, Current Node #: 175, Diagonal Node #: 232, (232) 
+Element #: 132, Current Node #: 176, Diagonal Node #: 231, (231) 
+Element #: 132, Current Node #: 182, Diagonal Node #: 225, (225) 
+Element #: 132, Current Node #: 183, Diagonal Node #: 224, (224) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 183, (183) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 182, (182) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 176, (176) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 175, (175) 
+Element #: 133, Current Node #: 176, Diagonal Node #: 233, (233) 
+Element #: 133, Current Node #: 177, Diagonal Node #: 232, (232) 
+Element #: 133, Current Node #: 183, Diagonal Node #: 226, (226) 
+Element #: 133, Current Node #: 184, Diagonal Node #: 225, (225) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 184, (184) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 183, (183) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 177, (177) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 176, (176) 
+Element #: 134, Current Node #: 177, Diagonal Node #: 234, (234) 
+Element #: 134, Current Node #: 178, Diagonal Node #: 233, (233) 
+Element #: 134, Current Node #: 184, Diagonal Node #: 227, (227) 
+Element #: 134, Current Node #: 185, Diagonal Node #: 226, (226) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 185, (185) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 184, (184) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 178, (178) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 177, (177) 
+Element #: 135, Current Node #: 178, Diagonal Node #: 235, (235) 
+Element #: 135, Current Node #: 179, Diagonal Node #: 234, (234) 
+Element #: 135, Current Node #: 185, Diagonal Node #: 228, (228) 
+Element #: 135, Current Node #: 186, Diagonal Node #: 227, (227) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 186, (186) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 185, (185) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 179, (179) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 178, (178) 
+Element #: 136, Current Node #: 179, Diagonal Node #: 236, (236) 
+Element #: 136, Current Node #: 180, Diagonal Node #: 235, (235) 
+Element #: 136, Current Node #: 186, Diagonal Node #: 229, (229) 
+Element #: 136, Current Node #: 187, Diagonal Node #: 228, (228) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 187, (187) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 186, (186) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 180, (180) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 179, (179) 
+Element #: 137, Current Node #: 180, Diagonal Node #: 237, (237) 
+Element #: 137, Current Node #: 181, Diagonal Node #: 236, (236) 
+Element #: 137, Current Node #: 187, Diagonal Node #: 230, (230) 
+Element #: 137, Current Node #: 188, Diagonal Node #: 229, (229) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 188, (188) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 187, (187) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 181, (181) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 180, (180) 
+Element #: 138, Current Node #: 182, Diagonal Node #: 239, (239) 
+Element #: 138, Current Node #: 183, Diagonal Node #: 238, (238) 
+Element #: 138, Current Node #: 189, Diagonal Node #: 232, (232) 
+Element #: 138, Current Node #: 190, Diagonal Node #: 231, (231) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 190, (190) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 189, (189) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 183, (183) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 182, (182) 
+Element #: 139, Current Node #: 183, Diagonal Node #: 240, (240) 
+Element #: 139, Current Node #: 184, Diagonal Node #: 239, (239) 
+Element #: 139, Current Node #: 190, Diagonal Node #: 233, (233) 
+Element #: 139, Current Node #: 191, Diagonal Node #: 232, (232) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 191, (191) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 190, (190) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 184, (184) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 183, (183) 
+Element #: 140, Current Node #: 184, Diagonal Node #: 241, (241) 
+Element #: 140, Current Node #: 185, Diagonal Node #: 240, (240) 
+Element #: 140, Current Node #: 191, Diagonal Node #: 234, (234) 
+Element #: 140, Current Node #: 192, Diagonal Node #: 233, (233) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 192, (192) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 191, (191) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 185, (185) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 184, (184) 
+Element #: 141, Current Node #: 185, Diagonal Node #: 242, (242) 
+Element #: 141, Current Node #: 186, Diagonal Node #: 241, (241) 
+Element #: 141, Current Node #: 192, Diagonal Node #: 235, (235) 
+Element #: 141, Current Node #: 193, Diagonal Node #: 234, (234) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 193, (193) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 192, (192) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 186, (186) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 185, (185) 
+Element #: 142, Current Node #: 186, Diagonal Node #: 243, (243) 
+Element #: 142, Current Node #: 187, Diagonal Node #: 242, (242) 
+Element #: 142, Current Node #: 193, Diagonal Node #: 236, (236) 
+Element #: 142, Current Node #: 194, Diagonal Node #: 235, (235) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 194, (194) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 193, (193) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 187, (187) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 186, (186) 
+Element #: 143, Current Node #: 187, Diagonal Node #: 244, (244) 
+Element #: 143, Current Node #: 188, Diagonal Node #: 243, (243) 
+Element #: 143, Current Node #: 194, Diagonal Node #: 237, (237) 
+Element #: 143, Current Node #: 195, Diagonal Node #: 236, (236) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 195, (195) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 194, (194) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 188, (188) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 187, (187) 
+Element #: 144, Current Node #: 196, Diagonal Node #: 253, (253) 
+Element #: 144, Current Node #: 197, Diagonal Node #: 252, (252) 
+Element #: 144, Current Node #: 203, Diagonal Node #: 246, (246) 
+Element #: 144, Current Node #: 204, Diagonal Node #: 245, (245) 
+Element #: 144, Current Node #: 245, Diagonal Node #: 204, (204) 
+Element #: 144, Current Node #: 246, Diagonal Node #: 203, (203) 
+Element #: 144, Current Node #: 252, Diagonal Node #: 197, (197) 
+Element #: 144, Current Node #: 253, Diagonal Node #: 196, (196) 
+Element #: 145, Current Node #: 197, Diagonal Node #: 254, (254) 
+Element #: 145, Current Node #: 198, Diagonal Node #: 253, (253) 
+Element #: 145, Current Node #: 204, Diagonal Node #: 247, (247) 
+Element #: 145, Current Node #: 205, Diagonal Node #: 246, (246) 
+Element #: 145, Current Node #: 246, Diagonal Node #: 205, (205) 
+Element #: 145, Current Node #: 247, Diagonal Node #: 204, (204) 
+Element #: 145, Current Node #: 253, Diagonal Node #: 198, (198) 
+Element #: 145, Current Node #: 254, Diagonal Node #: 197, (197) 
+Element #: 146, Current Node #: 198, Diagonal Node #: 255, (255) 
+Element #: 146, Current Node #: 199, Diagonal Node #: 254, (254) 
+Element #: 146, Current Node #: 205, Diagonal Node #: 248, (248) 
+Element #: 146, Current Node #: 206, Diagonal Node #: 247, (247) 
+Element #: 146, Current Node #: 247, Diagonal Node #: 206, (206) 
+Element #: 146, Current Node #: 248, Diagonal Node #: 205, (205) 
+Element #: 146, Current Node #: 254, Diagonal Node #: 199, (199) 
+Element #: 146, Current Node #: 255, Diagonal Node #: 198, (198) 
+Element #: 147, Current Node #: 199, Diagonal Node #: 256, (256) 
+Element #: 147, Current Node #: 200, Diagonal Node #: 255, (255) 
+Element #: 147, Current Node #: 206, Diagonal Node #: 249, (249) 
+Element #: 147, Current Node #: 207, Diagonal Node #: 248, (248) 
+Element #: 147, Current Node #: 248, Diagonal Node #: 207, (207) 
+Element #: 147, Current Node #: 249, Diagonal Node #: 206, (206) 
+Element #: 147, Current Node #: 255, Diagonal Node #: 200, (200) 
+Element #: 147, Current Node #: 256, Diagonal Node #: 199, (199) 
+Element #: 148, Current Node #: 200, Diagonal Node #: 257, (257) 
+Element #: 148, Current Node #: 201, Diagonal Node #: 256, (256) 
+Element #: 148, Current Node #: 207, Diagonal Node #: 250, (250) 
+Element #: 148, Current Node #: 208, Diagonal Node #: 249, (249) 
+Element #: 148, Current Node #: 249, Diagonal Node #: 208, (208) 
+Element #: 148, Current Node #: 250, Diagonal Node #: 207, (207) 
+Element #: 148, Current Node #: 256, Diagonal Node #: 201, (201) 
+Element #: 148, Current Node #: 257, Diagonal Node #: 200, (200) 
+Element #: 149, Current Node #: 201, Diagonal Node #: 258, (258) 
+Element #: 149, Current Node #: 202, Diagonal Node #: 257, (257) 
+Element #: 149, Current Node #: 208, Diagonal Node #: 251, (251) 
+Element #: 149, Current Node #: 209, Diagonal Node #: 250, (250) 
+Element #: 149, Current Node #: 250, Diagonal Node #: 209, (209) 
+Element #: 149, Current Node #: 251, Diagonal Node #: 208, (208) 
+Element #: 149, Current Node #: 257, Diagonal Node #: 202, (202) 
+Element #: 149, Current Node #: 258, Diagonal Node #: 201, (201) 
+Element #: 150, Current Node #: 203, Diagonal Node #: 260, (260) 
+Element #: 150, Current Node #: 204, Diagonal Node #: 259, (259) 
+Element #: 150, Current Node #: 210, Diagonal Node #: 253, (253) 
+Element #: 150, Current Node #: 211, Diagonal Node #: 252, (252) 
+Element #: 150, Current Node #: 252, Diagonal Node #: 211, (211) 
+Element #: 150, Current Node #: 253, Diagonal Node #: 210, (210) 
+Element #: 150, Current Node #: 259, Diagonal Node #: 204, (204) 
+Element #: 150, Current Node #: 260, Diagonal Node #: 203, (203) 
+Element #: 151, Current Node #: 204, Diagonal Node #: 261, (261) 
+Element #: 151, Current Node #: 205, Diagonal Node #: 260, (260) 
+Element #: 151, Current Node #: 211, Diagonal Node #: 254, (254) 
+Element #: 151, Current Node #: 212, Diagonal Node #: 253, (253) 
+Element #: 151, Current Node #: 253, Diagonal Node #: 212, (212) 
+Element #: 151, Current Node #: 254, Diagonal Node #: 211, (211) 
+Element #: 151, Current Node #: 260, Diagonal Node #: 205, (205) 
+Element #: 151, Current Node #: 261, Diagonal Node #: 204, (204) 
+Element #: 152, Current Node #: 205, Diagonal Node #: 262, (262) 
+Element #: 152, Current Node #: 206, Diagonal Node #: 261, (261) 
+Element #: 152, Current Node #: 212, Diagonal Node #: 255, (255) 
+Element #: 152, Current Node #: 213, Diagonal Node #: 254, (254) 
+Element #: 152, Current Node #: 254, Diagonal Node #: 213, (213) 
+Element #: 152, Current Node #: 255, Diagonal Node #: 212, (212) 
+Element #: 152, Current Node #: 261, Diagonal Node #: 206, (206) 
+Element #: 152, Current Node #: 262, Diagonal Node #: 205, (205) 
+Element #: 153, Current Node #: 206, Diagonal Node #: 263, (263) 
+Element #: 153, Current Node #: 207, Diagonal Node #: 262, (262) 
+Element #: 153, Current Node #: 213, Diagonal Node #: 256, (256) 
+Element #: 153, Current Node #: 214, Diagonal Node #: 255, (255) 
+Element #: 153, Current Node #: 255, Diagonal Node #: 214, (214) 
+Element #: 153, Current Node #: 256, Diagonal Node #: 213, (213) 
+Element #: 153, Current Node #: 262, Diagonal Node #: 207, (207) 
+Element #: 153, Current Node #: 263, Diagonal Node #: 206, (206) 
+Element #: 154, Current Node #: 207, Diagonal Node #: 264, (264) 
+Element #: 154, Current Node #: 208, Diagonal Node #: 263, (263) 
+Element #: 154, Current Node #: 214, Diagonal Node #: 257, (257) 
+Element #: 154, Current Node #: 215, Diagonal Node #: 256, (256) 
+Element #: 154, Current Node #: 256, Diagonal Node #: 215, (215) 
+Element #: 154, Current Node #: 257, Diagonal Node #: 214, (214) 
+Element #: 154, Current Node #: 263, Diagonal Node #: 208, (208) 
+Element #: 154, Current Node #: 264, Diagonal Node #: 207, (207) 
+Element #: 155, Current Node #: 208, Diagonal Node #: 265, (265) 
+Element #: 155, Current Node #: 209, Diagonal Node #: 264, (264) 
+Element #: 155, Current Node #: 215, Diagonal Node #: 258, (258) 
+Element #: 155, Current Node #: 216, Diagonal Node #: 257, (257) 
+Element #: 155, Current Node #: 257, Diagonal Node #: 216, (216) 
+Element #: 155, Current Node #: 258, Diagonal Node #: 215, (215) 
+Element #: 155, Current Node #: 264, Diagonal Node #: 209, (209) 
+Element #: 155, Current Node #: 265, Diagonal Node #: 208, (208) 
+Element #: 156, Current Node #: 210, Diagonal Node #: 267, (267) 
+Element #: 156, Current Node #: 211, Diagonal Node #: 266, (266) 
+Element #: 156, Current Node #: 217, Diagonal Node #: 260, (260) 
+Element #: 156, Current Node #: 218, Diagonal Node #: 259, (259) 
+Element #: 156, Current Node #: 259, Diagonal Node #: 218, (218) 
+Element #: 156, Current Node #: 260, Diagonal Node #: 217, (217) 
+Element #: 156, Current Node #: 266, Diagonal Node #: 211, (211) 
+Element #: 156, Current Node #: 267, Diagonal Node #: 210, (210) 
+Element #: 157, Current Node #: 211, Diagonal Node #: 268, (268) 
+Element #: 157, Current Node #: 212, Diagonal Node #: 267, (267) 
+Element #: 157, Current Node #: 218, Diagonal Node #: 261, (261) 
+Element #: 157, Current Node #: 219, Diagonal Node #: 260, (260) 
+Element #: 157, Current Node #: 260, Diagonal Node #: 219, (219) 
+Element #: 157, Current Node #: 261, Diagonal Node #: 218, (218) 
+Element #: 157, Current Node #: 267, Diagonal Node #: 212, (212) 
+Element #: 157, Current Node #: 268, Diagonal Node #: 211, (211) 
+Element #: 158, Current Node #: 212, Diagonal Node #: 269, (269) 
+Element #: 158, Current Node #: 213, Diagonal Node #: 268, (268) 
+Element #: 158, Current Node #: 219, Diagonal Node #: 262, (262) 
+Element #: 158, Current Node #: 220, Diagonal Node #: 261, (261) 
+Element #: 158, Current Node #: 261, Diagonal Node #: 220, (220) 
+Element #: 158, Current Node #: 262, Diagonal Node #: 219, (219) 
+Element #: 158, Current Node #: 268, Diagonal Node #: 213, (213) 
+Element #: 158, Current Node #: 269, Diagonal Node #: 212, (212) 
+Element #: 159, Current Node #: 213, Diagonal Node #: 270, (270) 
+Element #: 159, Current Node #: 214, Diagonal Node #: 269, (269) 
+Element #: 159, Current Node #: 220, Diagonal Node #: 263, (263) 
+Element #: 159, Current Node #: 221, Diagonal Node #: 262, (262) 
+Element #: 159, Current Node #: 262, Diagonal Node #: 221, (221) 
+Element #: 159, Current Node #: 263, Diagonal Node #: 220, (220) 
+Element #: 159, Current Node #: 269, Diagonal Node #: 214, (214) 
+Element #: 159, Current Node #: 270, Diagonal Node #: 213, (213) 
+Element #: 160, Current Node #: 214, Diagonal Node #: 271, (271) 
+Element #: 160, Current Node #: 215, Diagonal Node #: 270, (270) 
+Element #: 160, Current Node #: 221, Diagonal Node #: 264, (264) 
+Element #: 160, Current Node #: 222, Diagonal Node #: 263, (263) 
+Element #: 160, Current Node #: 263, Diagonal Node #: 222, (222) 
+Element #: 160, Current Node #: 264, Diagonal Node #: 221, (221) 
+Element #: 160, Current Node #: 270, Diagonal Node #: 215, (215) 
+Element #: 160, Current Node #: 271, Diagonal Node #: 214, (214) 
+Element #: 161, Current Node #: 215, Diagonal Node #: 272, (272) 
+Element #: 161, Current Node #: 216, Diagonal Node #: 271, (271) 
+Element #: 161, Current Node #: 222, Diagonal Node #: 265, (265) 
+Element #: 161, Current Node #: 223, Diagonal Node #: 264, (264) 
+Element #: 161, Current Node #: 264, Diagonal Node #: 223, (223) 
+Element #: 161, Current Node #: 265, Diagonal Node #: 222, (222) 
+Element #: 161, Current Node #: 271, Diagonal Node #: 216, (216) 
+Element #: 161, Current Node #: 272, Diagonal Node #: 215, (215) 
+Element #: 162, Current Node #: 217, Diagonal Node #: 274, (274) 
+Element #: 162, Current Node #: 218, Diagonal Node #: 273, (273) 
+Element #: 162, Current Node #: 224, Diagonal Node #: 267, (267) 
+Element #: 162, Current Node #: 225, Diagonal Node #: 266, (266) 
+Element #: 162, Current Node #: 266, Diagonal Node #: 225, (225) 
+Element #: 162, Current Node #: 267, Diagonal Node #: 224, (224) 
+Element #: 162, Current Node #: 273, Diagonal Node #: 218, (218) 
+Element #: 162, Current Node #: 274, Diagonal Node #: 217, (217) 
+Element #: 163, Current Node #: 218, Diagonal Node #: 275, (275) 
+Element #: 163, Current Node #: 219, Diagonal Node #: 274, (274) 
+Element #: 163, Current Node #: 225, Diagonal Node #: 268, (268) 
+Element #: 163, Current Node #: 226, Diagonal Node #: 267, (267) 
+Element #: 163, Current Node #: 267, Diagonal Node #: 226, (226) 
+Element #: 163, Current Node #: 268, Diagonal Node #: 225, (225) 
+Element #: 163, Current Node #: 274, Diagonal Node #: 219, (219) 
+Element #: 163, Current Node #: 275, Diagonal Node #: 218, (218) 
+Element #: 164, Current Node #: 219, Diagonal Node #: 276, (276) 
+Element #: 164, Current Node #: 220, Diagonal Node #: 275, (275) 
+Element #: 164, Current Node #: 226, Diagonal Node #: 269, (269) 
+Element #: 164, Current Node #: 227, Diagonal Node #: 268, (268) 
+Element #: 164, Current Node #: 268, Diagonal Node #: 227, (227) 
+Element #: 164, Current Node #: 269, Diagonal Node #: 226, (226) 
+Element #: 164, Current Node #: 275, Diagonal Node #: 220, (220) 
+Element #: 164, Current Node #: 276, Diagonal Node #: 219, (219) 
+Element #: 165, Current Node #: 220, Diagonal Node #: 277, (277) 
+Element #: 165, Current Node #: 221, Diagonal Node #: 276, (276) 
+Element #: 165, Current Node #: 227, Diagonal Node #: 270, (270) 
+Element #: 165, Current Node #: 228, Diagonal Node #: 269, (269) 
+Element #: 165, Current Node #: 269, Diagonal Node #: 228, (228) 
+Element #: 165, Current Node #: 270, Diagonal Node #: 227, (227) 
+Element #: 165, Current Node #: 276, Diagonal Node #: 221, (221) 
+Element #: 165, Current Node #: 277, Diagonal Node #: 220, (220) 
+Element #: 166, Current Node #: 221, Diagonal Node #: 278, (278) 
+Element #: 166, Current Node #: 222, Diagonal Node #: 277, (277) 
+Element #: 166, Current Node #: 228, Diagonal Node #: 271, (271) 
+Element #: 166, Current Node #: 229, Diagonal Node #: 270, (270) 
+Element #: 166, Current Node #: 270, Diagonal Node #: 229, (229) 
+Element #: 166, Current Node #: 271, Diagonal Node #: 228, (228) 
+Element #: 166, Current Node #: 277, Diagonal Node #: 222, (222) 
+Element #: 166, Current Node #: 278, Diagonal Node #: 221, (221) 
+Element #: 167, Current Node #: 222, Diagonal Node #: 279, (279) 
+Element #: 167, Current Node #: 223, Diagonal Node #: 278, (278) 
+Element #: 167, Current Node #: 229, Diagonal Node #: 272, (272) 
+Element #: 167, Current Node #: 230, Diagonal Node #: 271, (271) 
+Element #: 167, Current Node #: 271, Diagonal Node #: 230, (230) 
+Element #: 167, Current Node #: 272, Diagonal Node #: 229, (229) 
+Element #: 167, Current Node #: 278, Diagonal Node #: 223, (223) 
+Element #: 167, Current Node #: 279, Diagonal Node #: 222, (222) 
+Element #: 168, Current Node #: 224, Diagonal Node #: 281, (281) 
+Element #: 168, Current Node #: 225, Diagonal Node #: 280, (280) 
+Element #: 168, Current Node #: 231, Diagonal Node #: 274, (274) 
+Element #: 168, Current Node #: 232, Diagonal Node #: 273, (273) 
+Element #: 168, Current Node #: 273, Diagonal Node #: 232, (232) 
+Element #: 168, Current Node #: 274, Diagonal Node #: 231, (231) 
+Element #: 168, Current Node #: 280, Diagonal Node #: 225, (225) 
+Element #: 168, Current Node #: 281, Diagonal Node #: 224, (224) 
+Element #: 169, Current Node #: 225, Diagonal Node #: 282, (282) 
+Element #: 169, Current Node #: 226, Diagonal Node #: 281, (281) 
+Element #: 169, Current Node #: 232, Diagonal Node #: 275, (275) 
+Element #: 169, Current Node #: 233, Diagonal Node #: 274, (274) 
+Element #: 169, Current Node #: 274, Diagonal Node #: 233, (233) 
+Element #: 169, Current Node #: 275, Diagonal Node #: 232, (232) 
+Element #: 169, Current Node #: 281, Diagonal Node #: 226, (226) 
+Element #: 169, Current Node #: 282, Diagonal Node #: 225, (225) 
+Element #: 170, Current Node #: 226, Diagonal Node #: 283, (283) 
+Element #: 170, Current Node #: 227, Diagonal Node #: 282, (282) 
+Element #: 170, Current Node #: 233, Diagonal Node #: 276, (276) 
+Element #: 170, Current Node #: 234, Diagonal Node #: 275, (275) 
+Element #: 170, Current Node #: 275, Diagonal Node #: 234, (234) 
+Element #: 170, Current Node #: 276, Diagonal Node #: 233, (233) 
+Element #: 170, Current Node #: 282, Diagonal Node #: 227, (227) 
+Element #: 170, Current Node #: 283, Diagonal Node #: 226, (226) 
+Element #: 171, Current Node #: 227, Diagonal Node #: 284, (284) 
+Element #: 171, Current Node #: 228, Diagonal Node #: 283, (283) 
+Element #: 171, Current Node #: 234, Diagonal Node #: 277, (277) 
+Element #: 171, Current Node #: 235, Diagonal Node #: 276, (276) 
+Element #: 171, Current Node #: 276, Diagonal Node #: 235, (235) 
+Element #: 171, Current Node #: 277, Diagonal Node #: 234, (234) 
+Element #: 171, Current Node #: 283, Diagonal Node #: 228, (228) 
+Element #: 171, Current Node #: 284, Diagonal Node #: 227, (227) 
+Element #: 172, Current Node #: 228, Diagonal Node #: 285, (285) 
+Element #: 172, Current Node #: 229, Diagonal Node #: 284, (284) 
+Element #: 172, Current Node #: 235, Diagonal Node #: 278, (278) 
+Element #: 172, Current Node #: 236, Diagonal Node #: 277, (277) 
+Element #: 172, Current Node #: 277, Diagonal Node #: 236, (236) 
+Element #: 172, Current Node #: 278, Diagonal Node #: 235, (235) 
+Element #: 172, Current Node #: 284, Diagonal Node #: 229, (229) 
+Element #: 172, Current Node #: 285, Diagonal Node #: 228, (228) 
+Element #: 173, Current Node #: 229, Diagonal Node #: 286, (286) 
+Element #: 173, Current Node #: 230, Diagonal Node #: 285, (285) 
+Element #: 173, Current Node #: 236, Diagonal Node #: 279, (279) 
+Element #: 173, Current Node #: 237, Diagonal Node #: 278, (278) 
+Element #: 173, Current Node #: 278, Diagonal Node #: 237, (237) 
+Element #: 173, Current Node #: 279, Diagonal Node #: 236, (236) 
+Element #: 173, Current Node #: 285, Diagonal Node #: 230, (230) 
+Element #: 173, Current Node #: 286, Diagonal Node #: 229, (229) 
+Element #: 174, Current Node #: 231, Diagonal Node #: 288, (288) 
+Element #: 174, Current Node #: 232, Diagonal Node #: 287, (287) 
+Element #: 174, Current Node #: 238, Diagonal Node #: 281, (281) 
+Element #: 174, Current Node #: 239, Diagonal Node #: 280, (280) 
+Element #: 174, Current Node #: 280, Diagonal Node #: 239, (239) 
+Element #: 174, Current Node #: 281, Diagonal Node #: 238, (238) 
+Element #: 174, Current Node #: 287, Diagonal Node #: 232, (232) 
+Element #: 174, Current Node #: 288, Diagonal Node #: 231, (231) 
+Element #: 175, Current Node #: 232, Diagonal Node #: 289, (289) 
+Element #: 175, Current Node #: 233, Diagonal Node #: 288, (288) 
+Element #: 175, Current Node #: 239, Diagonal Node #: 282, (282) 
+Element #: 175, Current Node #: 240, Diagonal Node #: 281, (281) 
+Element #: 175, Current Node #: 281, Diagonal Node #: 240, (240) 
+Element #: 175, Current Node #: 282, Diagonal Node #: 239, (239) 
+Element #: 175, Current Node #: 288, Diagonal Node #: 233, (233) 
+Element #: 175, Current Node #: 289, Diagonal Node #: 232, (232) 
+Element #: 176, Current Node #: 233, Diagonal Node #: 290, (290) 
+Element #: 176, Current Node #: 234, Diagonal Node #: 289, (289) 
+Element #: 176, Current Node #: 240, Diagonal Node #: 283, (283) 
+Element #: 176, Current Node #: 241, Diagonal Node #: 282, (282) 
+Element #: 176, Current Node #: 282, Diagonal Node #: 241, (241) 
+Element #: 176, Current Node #: 283, Diagonal Node #: 240, (240) 
+Element #: 176, Current Node #: 289, Diagonal Node #: 234, (234) 
+Element #: 176, Current Node #: 290, Diagonal Node #: 233, (233) 
+Element #: 177, Current Node #: 234, Diagonal Node #: 291, (291) 
+Element #: 177, Current Node #: 235, Diagonal Node #: 290, (290) 
+Element #: 177, Current Node #: 241, Diagonal Node #: 284, (284) 
+Element #: 177, Current Node #: 242, Diagonal Node #: 283, (283) 
+Element #: 177, Current Node #: 283, Diagonal Node #: 242, (242) 
+Element #: 177, Current Node #: 284, Diagonal Node #: 241, (241) 
+Element #: 177, Current Node #: 290, Diagonal Node #: 235, (235) 
+Element #: 177, Current Node #: 291, Diagonal Node #: 234, (234) 
+Element #: 178, Current Node #: 235, Diagonal Node #: 292, (292) 
+Element #: 178, Current Node #: 236, Diagonal Node #: 291, (291) 
+Element #: 178, Current Node #: 242, Diagonal Node #: 285, (285) 
+Element #: 178, Current Node #: 243, Diagonal Node #: 284, (284) 
+Element #: 178, Current Node #: 284, Diagonal Node #: 243, (243) 
+Element #: 178, Current Node #: 285, Diagonal Node #: 242, (242) 
+Element #: 178, Current Node #: 291, Diagonal Node #: 236, (236) 
+Element #: 178, Current Node #: 292, Diagonal Node #: 235, (235) 
+Element #: 179, Current Node #: 236, Diagonal Node #: 293, (293) 
+Element #: 179, Current Node #: 237, Diagonal Node #: 292, (292) 
+Element #: 179, Current Node #: 243, Diagonal Node #: 286, (286) 
+Element #: 179, Current Node #: 244, Diagonal Node #: 285, (285) 
+Element #: 179, Current Node #: 285, Diagonal Node #: 244, (244) 
+Element #: 179, Current Node #: 286, Diagonal Node #: 243, (243) 
+Element #: 179, Current Node #: 292, Diagonal Node #: 237, (237) 
+Element #: 179, Current Node #: 293, Diagonal Node #: 236, (236) 
+Element #: 180, Current Node #: 245, Diagonal Node #: 302, (302) 
+Element #: 180, Current Node #: 246, Diagonal Node #: 301, (301) 
+Element #: 180, Current Node #: 252, Diagonal Node #: 295, (295) 
+Element #: 180, Current Node #: 253, Diagonal Node #: 294, (294) 
+Element #: 180, Current Node #: 294, Diagonal Node #: 253, (253) 
+Element #: 180, Current Node #: 295, Diagonal Node #: 252, (252) 
+Element #: 180, Current Node #: 301, Diagonal Node #: 246, (246) 
+Element #: 180, Current Node #: 302, Diagonal Node #: 245, (245) 
+Element #: 181, Current Node #: 246, Diagonal Node #: 303, (303) 
+Element #: 181, Current Node #: 247, Diagonal Node #: 302, (302) 
+Element #: 181, Current Node #: 253, Diagonal Node #: 296, (296) 
+Element #: 181, Current Node #: 254, Diagonal Node #: 295, (295) 
+Element #: 181, Current Node #: 295, Diagonal Node #: 254, (254) 
+Element #: 181, Current Node #: 296, Diagonal Node #: 253, (253) 
+Element #: 181, Current Node #: 302, Diagonal Node #: 247, (247) 
+Element #: 181, Current Node #: 303, Diagonal Node #: 246, (246) 
+Element #: 182, Current Node #: 247, Diagonal Node #: 304, (304) 
+Element #: 182, Current Node #: 248, Diagonal Node #: 303, (303) 
+Element #: 182, Current Node #: 254, Diagonal Node #: 297, (297) 
+Element #: 182, Current Node #: 255, Diagonal Node #: 296, (296) 
+Element #: 182, Current Node #: 296, Diagonal Node #: 255, (255) 
+Element #: 182, Current Node #: 297, Diagonal Node #: 254, (254) 
+Element #: 182, Current Node #: 303, Diagonal Node #: 248, (248) 
+Element #: 182, Current Node #: 304, Diagonal Node #: 247, (247) 
+Element #: 183, Current Node #: 248, Diagonal Node #: 305, (305) 
+Element #: 183, Current Node #: 249, Diagonal Node #: 304, (304) 
+Element #: 183, Current Node #: 255, Diagonal Node #: 298, (298) 
+Element #: 183, Current Node #: 256, Diagonal Node #: 297, (297) 
+Element #: 183, Current Node #: 297, Diagonal Node #: 256, (256) 
+Element #: 183, Current Node #: 298, Diagonal Node #: 255, (255) 
+Element #: 183, Current Node #: 304, Diagonal Node #: 249, (249) 
+Element #: 183, Current Node #: 305, Diagonal Node #: 248, (248) 
+Element #: 184, Current Node #: 249, Diagonal Node #: 306, (306) 
+Element #: 184, Current Node #: 250, Diagonal Node #: 305, (305) 
+Element #: 184, Current Node #: 256, Diagonal Node #: 299, (299) 
+Element #: 184, Current Node #: 257, Diagonal Node #: 298, (298) 
+Element #: 184, Current Node #: 298, Diagonal Node #: 257, (257) 
+Element #: 184, Current Node #: 299, Diagonal Node #: 256, (256) 
+Element #: 184, Current Node #: 305, Diagonal Node #: 250, (250) 
+Element #: 184, Current Node #: 306, Diagonal Node #: 249, (249) 
+Element #: 185, Current Node #: 250, Diagonal Node #: 307, (307) 
+Element #: 185, Current Node #: 251, Diagonal Node #: 306, (306) 
+Element #: 185, Current Node #: 257, Diagonal Node #: 300, (300) 
+Element #: 185, Current Node #: 258, Diagonal Node #: 299, (299) 
+Element #: 185, Current Node #: 299, Diagonal Node #: 258, (258) 
+Element #: 185, Current Node #: 300, Diagonal Node #: 257, (257) 
+Element #: 185, Current Node #: 306, Diagonal Node #: 251, (251) 
+Element #: 185, Current Node #: 307, Diagonal Node #: 250, (250) 
+Element #: 186, Current Node #: 252, Diagonal Node #: 309, (309) 
+Element #: 186, Current Node #: 253, Diagonal Node #: 308, (308) 
+Element #: 186, Current Node #: 259, Diagonal Node #: 302, (302) 
+Element #: 186, Current Node #: 260, Diagonal Node #: 301, (301) 
+Element #: 186, Current Node #: 301, Diagonal Node #: 260, (260) 
+Element #: 186, Current Node #: 302, Diagonal Node #: 259, (259) 
+Element #: 186, Current Node #: 308, Diagonal Node #: 253, (253) 
+Element #: 186, Current Node #: 309, Diagonal Node #: 252, (252) 
+Element #: 187, Current Node #: 253, Diagonal Node #: 310, (310) 
+Element #: 187, Current Node #: 254, Diagonal Node #: 309, (309) 
+Element #: 187, Current Node #: 260, Diagonal Node #: 303, (303) 
+Element #: 187, Current Node #: 261, Diagonal Node #: 302, (302) 
+Element #: 187, Current Node #: 302, Diagonal Node #: 261, (261) 
+Element #: 187, Current Node #: 303, Diagonal Node #: 260, (260) 
+Element #: 187, Current Node #: 309, Diagonal Node #: 254, (254) 
+Element #: 187, Current Node #: 310, Diagonal Node #: 253, (253) 
+Element #: 188, Current Node #: 254, Diagonal Node #: 311, (311) 
+Element #: 188, Current Node #: 255, Diagonal Node #: 310, (310) 
+Element #: 188, Current Node #: 261, Diagonal Node #: 304, (304) 
+Element #: 188, Current Node #: 262, Diagonal Node #: 303, (303) 
+Element #: 188, Current Node #: 303, Diagonal Node #: 262, (262) 
+Element #: 188, Current Node #: 304, Diagonal Node #: 261, (261) 
+Element #: 188, Current Node #: 310, Diagonal Node #: 255, (255) 
+Element #: 188, Current Node #: 311, Diagonal Node #: 254, (254) 
+Element #: 189, Current Node #: 255, Diagonal Node #: 312, (312) 
+Element #: 189, Current Node #: 256, Diagonal Node #: 311, (311) 
+Element #: 189, Current Node #: 262, Diagonal Node #: 305, (305) 
+Element #: 189, Current Node #: 263, Diagonal Node #: 304, (304) 
+Element #: 189, Current Node #: 304, Diagonal Node #: 263, (263) 
+Element #: 189, Current Node #: 305, Diagonal Node #: 262, (262) 
+Element #: 189, Current Node #: 311, Diagonal Node #: 256, (256) 
+Element #: 189, Current Node #: 312, Diagonal Node #: 255, (255) 
+Element #: 190, Current Node #: 256, Diagonal Node #: 313, (313) 
+Element #: 190, Current Node #: 257, Diagonal Node #: 312, (312) 
+Element #: 190, Current Node #: 263, Diagonal Node #: 306, (306) 
+Element #: 190, Current Node #: 264, Diagonal Node #: 305, (305) 
+Element #: 190, Current Node #: 305, Diagonal Node #: 264, (264) 
+Element #: 190, Current Node #: 306, Diagonal Node #: 263, (263) 
+Element #: 190, Current Node #: 312, Diagonal Node #: 257, (257) 
+Element #: 190, Current Node #: 313, Diagonal Node #: 256, (256) 
+Element #: 191, Current Node #: 257, Diagonal Node #: 314, (314) 
+Element #: 191, Current Node #: 258, Diagonal Node #: 313, (313) 
+Element #: 191, Current Node #: 264, Diagonal Node #: 307, (307) 
+Element #: 191, Current Node #: 265, Diagonal Node #: 306, (306) 
+Element #: 191, Current Node #: 306, Diagonal Node #: 265, (265) 
+Element #: 191, Current Node #: 307, Diagonal Node #: 264, (264) 
+Element #: 191, Current Node #: 313, Diagonal Node #: 258, (258) 
+Element #: 191, Current Node #: 314, Diagonal Node #: 257, (257) 
+Element #: 192, Current Node #: 259, Diagonal Node #: 316, (316) 
+Element #: 192, Current Node #: 260, Diagonal Node #: 315, (315) 
+Element #: 192, Current Node #: 266, Diagonal Node #: 309, (309) 
+Element #: 192, Current Node #: 267, Diagonal Node #: 308, (308) 
+Element #: 192, Current Node #: 308, Diagonal Node #: 267, (267) 
+Element #: 192, Current Node #: 309, Diagonal Node #: 266, (266) 
+Element #: 192, Current Node #: 315, Diagonal Node #: 260, (260) 
+Element #: 192, Current Node #: 316, Diagonal Node #: 259, (259) 
+Element #: 193, Current Node #: 260, Diagonal Node #: 317, (317) 
+Element #: 193, Current Node #: 261, Diagonal Node #: 316, (316) 
+Element #: 193, Current Node #: 267, Diagonal Node #: 310, (310) 
+Element #: 193, Current Node #: 268, Diagonal Node #: 309, (309) 
+Element #: 193, Current Node #: 309, Diagonal Node #: 268, (268) 
+Element #: 193, Current Node #: 310, Diagonal Node #: 267, (267) 
+Element #: 193, Current Node #: 316, Diagonal Node #: 261, (261) 
+Element #: 193, Current Node #: 317, Diagonal Node #: 260, (260) 
+Element #: 194, Current Node #: 261, Diagonal Node #: 318, (318) 
+Element #: 194, Current Node #: 262, Diagonal Node #: 317, (317) 
+Element #: 194, Current Node #: 268, Diagonal Node #: 311, (311) 
+Element #: 194, Current Node #: 269, Diagonal Node #: 310, (310) 
+Element #: 194, Current Node #: 310, Diagonal Node #: 269, (269) 
+Element #: 194, Current Node #: 311, Diagonal Node #: 268, (268) 
+Element #: 194, Current Node #: 317, Diagonal Node #: 262, (262) 
+Element #: 194, Current Node #: 318, Diagonal Node #: 261, (261) 
+Element #: 195, Current Node #: 262, Diagonal Node #: 319, (319) 
+Element #: 195, Current Node #: 263, Diagonal Node #: 318, (318) 
+Element #: 195, Current Node #: 269, Diagonal Node #: 312, (312) 
+Element #: 195, Current Node #: 270, Diagonal Node #: 311, (311) 
+Element #: 195, Current Node #: 311, Diagonal Node #: 270, (270) 
+Element #: 195, Current Node #: 312, Diagonal Node #: 269, (269) 
+Element #: 195, Current Node #: 318, Diagonal Node #: 263, (263) 
+Element #: 195, Current Node #: 319, Diagonal Node #: 262, (262) 
+Element #: 196, Current Node #: 263, Diagonal Node #: 320, (320) 
+Element #: 196, Current Node #: 264, Diagonal Node #: 319, (319) 
+Element #: 196, Current Node #: 270, Diagonal Node #: 313, (313) 
+Element #: 196, Current Node #: 271, Diagonal Node #: 312, (312) 
+Element #: 196, Current Node #: 312, Diagonal Node #: 271, (271) 
+Element #: 196, Current Node #: 313, Diagonal Node #: 270, (270) 
+Element #: 196, Current Node #: 319, Diagonal Node #: 264, (264) 
+Element #: 196, Current Node #: 320, Diagonal Node #: 263, (263) 
+Element #: 197, Current Node #: 264, Diagonal Node #: 321, (321) 
+Element #: 197, Current Node #: 265, Diagonal Node #: 320, (320) 
+Element #: 197, Current Node #: 271, Diagonal Node #: 314, (314) 
+Element #: 197, Current Node #: 272, Diagonal Node #: 313, (313) 
+Element #: 197, Current Node #: 313, Diagonal Node #: 272, (272) 
+Element #: 197, Current Node #: 314, Diagonal Node #: 271, (271) 
+Element #: 197, Current Node #: 320, Diagonal Node #: 265, (265) 
+Element #: 197, Current Node #: 321, Diagonal Node #: 264, (264) 
+Element #: 198, Current Node #: 266, Diagonal Node #: 323, (323) 
+Element #: 198, Current Node #: 267, Diagonal Node #: 322, (322) 
+Element #: 198, Current Node #: 273, Diagonal Node #: 316, (316) 
+Element #: 198, Current Node #: 274, Diagonal Node #: 315, (315) 
+Element #: 198, Current Node #: 315, Diagonal Node #: 274, (274) 
+Element #: 198, Current Node #: 316, Diagonal Node #: 273, (273) 
+Element #: 198, Current Node #: 322, Diagonal Node #: 267, (267) 
+Element #: 198, Current Node #: 323, Diagonal Node #: 266, (266) 
+Element #: 199, Current Node #: 267, Diagonal Node #: 324, (324) 
+Element #: 199, Current Node #: 268, Diagonal Node #: 323, (323) 
+Element #: 199, Current Node #: 274, Diagonal Node #: 317, (317) 
+Element #: 199, Current Node #: 275, Diagonal Node #: 316, (316) 
+Element #: 199, Current Node #: 316, Diagonal Node #: 275, (275) 
+Element #: 199, Current Node #: 317, Diagonal Node #: 274, (274) 
+Element #: 199, Current Node #: 323, Diagonal Node #: 268, (268) 
+Element #: 199, Current Node #: 324, Diagonal Node #: 267, (267) 
+Element #: 200, Current Node #: 268, Diagonal Node #: 325, (325) 
+Element #: 200, Current Node #: 269, Diagonal Node #: 324, (324) 
+Element #: 200, Current Node #: 275, Diagonal Node #: 318, (318) 
+Element #: 200, Current Node #: 276, Diagonal Node #: 317, (317) 
+Element #: 200, Current Node #: 317, Diagonal Node #: 276, (276) 
+Element #: 200, Current Node #: 318, Diagonal Node #: 275, (275) 
+Element #: 200, Current Node #: 324, Diagonal Node #: 269, (269) 
+Element #: 200, Current Node #: 325, Diagonal Node #: 268, (268) 
+Element #: 201, Current Node #: 269, Diagonal Node #: 326, (326) 
+Element #: 201, Current Node #: 270, Diagonal Node #: 325, (325) 
+Element #: 201, Current Node #: 276, Diagonal Node #: 319, (319) 
+Element #: 201, Current Node #: 277, Diagonal Node #: 318, (318) 
+Element #: 201, Current Node #: 318, Diagonal Node #: 277, (277) 
+Element #: 201, Current Node #: 319, Diagonal Node #: 276, (276) 
+Element #: 201, Current Node #: 325, Diagonal Node #: 270, (270) 
+Element #: 201, Current Node #: 326, Diagonal Node #: 269, (269) 
+Element #: 202, Current Node #: 270, Diagonal Node #: 327, (327) 
+Element #: 202, Current Node #: 271, Diagonal Node #: 326, (326) 
+Element #: 202, Current Node #: 277, Diagonal Node #: 320, (320) 
+Element #: 202, Current Node #: 278, Diagonal Node #: 319, (319) 
+Element #: 202, Current Node #: 319, Diagonal Node #: 278, (278) 
+Element #: 202, Current Node #: 320, Diagonal Node #: 277, (277) 
+Element #: 202, Current Node #: 326, Diagonal Node #: 271, (271) 
+Element #: 202, Current Node #: 327, Diagonal Node #: 270, (270) 
+Element #: 203, Current Node #: 271, Diagonal Node #: 328, (328) 
+Element #: 203, Current Node #: 272, Diagonal Node #: 327, (327) 
+Element #: 203, Current Node #: 278, Diagonal Node #: 321, (321) 
+Element #: 203, Current Node #: 279, Diagonal Node #: 320, (320) 
+Element #: 203, Current Node #: 320, Diagonal Node #: 279, (279) 
+Element #: 203, Current Node #: 321, Diagonal Node #: 278, (278) 
+Element #: 203, Current Node #: 327, Diagonal Node #: 272, (272) 
+Element #: 203, Current Node #: 328, Diagonal Node #: 271, (271) 
+Element #: 204, Current Node #: 273, Diagonal Node #: 330, (330) 
+Element #: 204, Current Node #: 274, Diagonal Node #: 329, (329) 
+Element #: 204, Current Node #: 280, Diagonal Node #: 323, (323) 
+Element #: 204, Current Node #: 281, Diagonal Node #: 322, (322) 
+Element #: 204, Current Node #: 322, Diagonal Node #: 281, (281) 
+Element #: 204, Current Node #: 323, Diagonal Node #: 280, (280) 
+Element #: 204, Current Node #: 329, Diagonal Node #: 274, (274) 
+Element #: 204, Current Node #: 330, Diagonal Node #: 273, (273) 
+Element #: 205, Current Node #: 274, Diagonal Node #: 331, (331) 
+Element #: 205, Current Node #: 275, Diagonal Node #: 330, (330) 
+Element #: 205, Current Node #: 281, Diagonal Node #: 324, (324) 
+Element #: 205, Current Node #: 282, Diagonal Node #: 323, (323) 
+Element #: 205, Current Node #: 323, Diagonal Node #: 282, (282) 
+Element #: 205, Current Node #: 324, Diagonal Node #: 281, (281) 
+Element #: 205, Current Node #: 330, Diagonal Node #: 275, (275) 
+Element #: 205, Current Node #: 331, Diagonal Node #: 274, (274) 
+Element #: 206, Current Node #: 275, Diagonal Node #: 332, (332) 
+Element #: 206, Current Node #: 276, Diagonal Node #: 331, (331) 
+Element #: 206, Current Node #: 282, Diagonal Node #: 325, (325) 
+Element #: 206, Current Node #: 283, Diagonal Node #: 324, (324) 
+Element #: 206, Current Node #: 324, Diagonal Node #: 283, (283) 
+Element #: 206, Current Node #: 325, Diagonal Node #: 282, (282) 
+Element #: 206, Current Node #: 331, Diagonal Node #: 276, (276) 
+Element #: 206, Current Node #: 332, Diagonal Node #: 275, (275) 
+Element #: 207, Current Node #: 276, Diagonal Node #: 333, (333) 
+Element #: 207, Current Node #: 277, Diagonal Node #: 332, (332) 
+Element #: 207, Current Node #: 283, Diagonal Node #: 326, (326) 
+Element #: 207, Current Node #: 284, Diagonal Node #: 325, (325) 
+Element #: 207, Current Node #: 325, Diagonal Node #: 284, (284) 
+Element #: 207, Current Node #: 326, Diagonal Node #: 283, (283) 
+Element #: 207, Current Node #: 332, Diagonal Node #: 277, (277) 
+Element #: 207, Current Node #: 333, Diagonal Node #: 276, (276) 
+Element #: 208, Current Node #: 277, Diagonal Node #: 334, (334) 
+Element #: 208, Current Node #: 278, Diagonal Node #: 333, (333) 
+Element #: 208, Current Node #: 284, Diagonal Node #: 327, (327) 
+Element #: 208, Current Node #: 285, Diagonal Node #: 326, (326) 
+Element #: 208, Current Node #: 326, Diagonal Node #: 285, (285) 
+Element #: 208, Current Node #: 327, Diagonal Node #: 284, (284) 
+Element #: 208, Current Node #: 333, Diagonal Node #: 278, (278) 
+Element #: 208, Current Node #: 334, Diagonal Node #: 277, (277) 
+Element #: 209, Current Node #: 278, Diagonal Node #: 335, (335) 
+Element #: 209, Current Node #: 279, Diagonal Node #: 334, (334) 
+Element #: 209, Current Node #: 285, Diagonal Node #: 328, (328) 
+Element #: 209, Current Node #: 286, Diagonal Node #: 327, (327) 
+Element #: 209, Current Node #: 327, Diagonal Node #: 286, (286) 
+Element #: 209, Current Node #: 328, Diagonal Node #: 285, (285) 
+Element #: 209, Current Node #: 334, Diagonal Node #: 279, (279) 
+Element #: 209, Current Node #: 335, Diagonal Node #: 278, (278) 
+Element #: 210, Current Node #: 280, Diagonal Node #: 337, (337) 
+Element #: 210, Current Node #: 281, Diagonal Node #: 336, (336) 
+Element #: 210, Current Node #: 287, Diagonal Node #: 330, (330) 
+Element #: 210, Current Node #: 288, Diagonal Node #: 329, (329) 
+Element #: 210, Current Node #: 329, Diagonal Node #: 288, (288) 
+Element #: 210, Current Node #: 330, Diagonal Node #: 287, (287) 
+Element #: 210, Current Node #: 336, Diagonal Node #: 281, (281) 
+Element #: 210, Current Node #: 337, Diagonal Node #: 280, (280) 
+Element #: 211, Current Node #: 281, Diagonal Node #: 338, (338) 
+Element #: 211, Current Node #: 282, Diagonal Node #: 337, (337) 
+Element #: 211, Current Node #: 288, Diagonal Node #: 331, (331) 
+Element #: 211, Current Node #: 289, Diagonal Node #: 330, (330) 
+Element #: 211, Current Node #: 330, Diagonal Node #: 289, (289) 
+Element #: 211, Current Node #: 331, Diagonal Node #: 288, (288) 
+Element #: 211, Current Node #: 337, Diagonal Node #: 282, (282) 
+Element #: 211, Current Node #: 338, Diagonal Node #: 281, (281) 
+Element #: 212, Current Node #: 282, Diagonal Node #: 339, (339) 
+Element #: 212, Current Node #: 283, Diagonal Node #: 338, (338) 
+Element #: 212, Current Node #: 289, Diagonal Node #: 332, (332) 
+Element #: 212, Current Node #: 290, Diagonal Node #: 331, (331) 
+Element #: 212, Current Node #: 331, Diagonal Node #: 290, (290) 
+Element #: 212, Current Node #: 332, Diagonal Node #: 289, (289) 
+Element #: 212, Current Node #: 338, Diagonal Node #: 283, (283) 
+Element #: 212, Current Node #: 339, Diagonal Node #: 282, (282) 
+Element #: 213, Current Node #: 283, Diagonal Node #: 340, (340) 
+Element #: 213, Current Node #: 284, Diagonal Node #: 339, (339) 
+Element #: 213, Current Node #: 290, Diagonal Node #: 333, (333) 
+Element #: 213, Current Node #: 291, Diagonal Node #: 332, (332) 
+Element #: 213, Current Node #: 332, Diagonal Node #: 291, (291) 
+Element #: 213, Current Node #: 333, Diagonal Node #: 290, (290) 
+Element #: 213, Current Node #: 339, Diagonal Node #: 284, (284) 
+Element #: 213, Current Node #: 340, Diagonal Node #: 283, (283) 
+Element #: 214, Current Node #: 284, Diagonal Node #: 341, (341) 
+Element #: 214, Current Node #: 285, Diagonal Node #: 340, (340) 
+Element #: 214, Current Node #: 291, Diagonal Node #: 334, (334) 
+Element #: 214, Current Node #: 292, Diagonal Node #: 333, (333) 
+Element #: 214, Current Node #: 333, Diagonal Node #: 292, (292) 
+Element #: 214, Current Node #: 334, Diagonal Node #: 291, (291) 
+Element #: 214, Current Node #: 340, Diagonal Node #: 285, (285) 
+Element #: 214, Current Node #: 341, Diagonal Node #: 284, (284) 
+Element #: 215, Current Node #: 285, Diagonal Node #: 342, (342) 
+Element #: 215, Current Node #: 286, Diagonal Node #: 341, (341) 
+Element #: 215, Current Node #: 292, Diagonal Node #: 335, (335) 
+Element #: 215, Current Node #: 293, Diagonal Node #: 334, (334) 
+Element #: 215, Current Node #: 334, Diagonal Node #: 293, (293) 
+Element #: 215, Current Node #: 335, Diagonal Node #: 292, (292) 
+Element #: 215, Current Node #: 341, Diagonal Node #: 286, (286) 
+Element #: 215, Current Node #: 342, Diagonal Node #: 285, (285) 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testRegularMeshUtils" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1153 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Element #: 0, Current Node #: 0, Diagonal Node #: 33, (57) 
+Element #: 0, Current Node #: 1, Diagonal Node #: 32, (56) 
+Element #: 0, Current Node #: 4, Diagonal Node #: 29, (50) 
+Element #: 0, Current Node #: 5, Diagonal Node #: 28, (49) 
+Element #: 0, Current Node #: 28, Diagonal Node #: 5, (8) 
+Element #: 0, Current Node #: 29, Diagonal Node #: 4, (7) 
+Element #: 0, Current Node #: 32, Diagonal Node #: 1, (1) 
+Element #: 0, Current Node #: 33, Diagonal Node #: 0, (0) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 34, (58) 
+Element #: 1, Current Node #: 2, Diagonal Node #: 33, (57) 
+Element #: 1, Current Node #: 5, Diagonal Node #: 30, (51) 
+Element #: 1, Current Node #: 6, Diagonal Node #: 29, (50) 
+Element #: 1, Current Node #: 29, Diagonal Node #: 6, (9) 
+Element #: 1, Current Node #: 30, Diagonal Node #: 5, (8) 
+Element #: 1, Current Node #: 33, Diagonal Node #: 2, (2) 
+Element #: 1, Current Node #: 34, Diagonal Node #: 1, (1) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 35, (59) 
+Element #: 2, Current Node #: 3, Diagonal Node #: 34, (58) 
+Element #: 2, Current Node #: 6, Diagonal Node #: 31, (52) 
+Element #: 2, Current Node #: 7, Diagonal Node #: 30, (51) 
+Element #: 2, Current Node #: 30, Diagonal Node #: 7, (10) 
+Element #: 2, Current Node #: 31, Diagonal Node #: 6, (9) 
+Element #: 2, Current Node #: 34, Diagonal Node #: 3, (3) 
+Element #: 2, Current Node #: 35, Diagonal Node #: 2, (2) 
+Element #: 3, Current Node #: 4, Diagonal Node #: 37, (64) 
+Element #: 3, Current Node #: 5, Diagonal Node #: 36, (63) 
+Element #: 3, Current Node #: 8, Diagonal Node #: 33, (57) 
+Element #: 3, Current Node #: 9, Diagonal Node #: 32, (56) 
+Element #: 3, Current Node #: 32, Diagonal Node #: 9, (15) 
+Element #: 3, Current Node #: 33, Diagonal Node #: 8, (14) 
+Element #: 3, Current Node #: 36, Diagonal Node #: 5, (8) 
+Element #: 3, Current Node #: 37, Diagonal Node #: 4, (7) 
+Element #: 4, Current Node #: 5, Diagonal Node #: 38, (65) 
+Element #: 4, Current Node #: 6, Diagonal Node #: 37, (64) 
+Element #: 4, Current Node #: 9, Diagonal Node #: 34, (58) 
+Element #: 4, Current Node #: 10, Diagonal Node #: 33, (57) 
+Element #: 4, Current Node #: 33, Diagonal Node #: 10, (16) 
+Element #: 4, Current Node #: 34, Diagonal Node #: 9, (15) 
+Element #: 4, Current Node #: 37, Diagonal Node #: 6, (9) 
+Element #: 4, Current Node #: 38, Diagonal Node #: 5, (8) 
+Element #: 5, Current Node #: 6, Diagonal Node #: 39, (66) 
+Element #: 5, Current Node #: 7, Diagonal Node #: 38, (65) 
+Element #: 5, Current Node #: 10, Diagonal Node #: 35, (59) 
+Element #: 5, Current Node #: 11, Diagonal Node #: 34, (58) 
+Element #: 5, Current Node #: 34, Diagonal Node #: 11, (17) 
+Element #: 5, Current Node #: 35, Diagonal Node #: 10, (16) 
+Element #: 5, Current Node #: 38, Diagonal Node #: 7, (10) 
+Element #: 5, Current Node #: 39, Diagonal Node #: 6, (9) 
+Element #: 6, Current Node #: 8, Diagonal Node #: 41, (71) 
+Element #: 6, Current Node #: 9, Diagonal Node #: 40, (70) 
+Element #: 6, Current Node #: 12, Diagonal Node #: 37, (64) 
+Element #: 6, Current Node #: 13, Diagonal Node #: 36, (63) 
+Element #: 6, Current Node #: 36, Diagonal Node #: 13, (22) 
+Element #: 6, Current Node #: 37, Diagonal Node #: 12, (21) 
+Element #: 6, Current Node #: 40, Diagonal Node #: 9, (15) 
+Element #: 6, Current Node #: 41, Diagonal Node #: 8, (14) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 42, (72) 
+Element #: 7, Current Node #: 10, Diagonal Node #: 41, (71) 
+Element #: 7, Current Node #: 13, Diagonal Node #: 38, (65) 
+Element #: 7, Current Node #: 14, Diagonal Node #: 37, (64) 
+Element #: 7, Current Node #: 37, Diagonal Node #: 14, (23) 
+Element #: 7, Current Node #: 38, Diagonal Node #: 13, (22) 
+Element #: 7, Current Node #: 41, Diagonal Node #: 10, (16) 
+Element #: 7, Current Node #: 42, Diagonal Node #: 9, (15) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 43, (73) 
+Element #: 8, Current Node #: 11, Diagonal Node #: 42, (72) 
+Element #: 8, Current Node #: 14, Diagonal Node #: 39, (66) 
+Element #: 8, Current Node #: 15, Diagonal Node #: 38, (65) 
+Element #: 8, Current Node #: 38, Diagonal Node #: 15, (24) 
+Element #: 8, Current Node #: 39, Diagonal Node #: 14, (23) 
+Element #: 8, Current Node #: 42, Diagonal Node #: 11, (17) 
+Element #: 8, Current Node #: 43, Diagonal Node #: 10, (16) 
+Element #: 9, Current Node #: 12, Diagonal Node #: 45, (78) 
+Element #: 9, Current Node #: 13, Diagonal Node #: 44, (77) 
+Element #: 9, Current Node #: 16, Diagonal Node #: 41, (71) 
+Element #: 9, Current Node #: 17, Diagonal Node #: 40, (70) 
+Element #: 9, Current Node #: 40, Diagonal Node #: 17, (29) 
+Element #: 9, Current Node #: 41, Diagonal Node #: 16, (28) 
+Element #: 9, Current Node #: 44, Diagonal Node #: 13, (22) 
+Element #: 9, Current Node #: 45, Diagonal Node #: 12, (21) 
+Element #: 10, Current Node #: 13, Diagonal Node #: 46, (79) 
+Element #: 10, Current Node #: 14, Diagonal Node #: 45, (78) 
+Element #: 10, Current Node #: 17, Diagonal Node #: 42, (72) 
+Element #: 10, Current Node #: 18, Diagonal Node #: 41, (71) 
+Element #: 10, Current Node #: 41, Diagonal Node #: 18, (30) 
+Element #: 10, Current Node #: 42, Diagonal Node #: 17, (29) 
+Element #: 10, Current Node #: 45, Diagonal Node #: 14, (23) 
+Element #: 10, Current Node #: 46, Diagonal Node #: 13, (22) 
+Element #: 11, Current Node #: 14, Diagonal Node #: 47, (80) 
+Element #: 11, Current Node #: 15, Diagonal Node #: 46, (79) 
+Element #: 11, Current Node #: 18, Diagonal Node #: 43, (73) 
+Element #: 11, Current Node #: 19, Diagonal Node #: 42, (72) 
+Element #: 11, Current Node #: 42, Diagonal Node #: 19, (31) 
+Element #: 11, Current Node #: 43, Diagonal Node #: 18, (30) 
+Element #: 11, Current Node #: 46, Diagonal Node #: 15, (24) 
+Element #: 11, Current Node #: 47, Diagonal Node #: 14, (23) 
+Element #: 12, Current Node #: 16, Diagonal Node #: 49, (85) 
+Element #: 12, Current Node #: 17, Diagonal Node #: 48, (84) 
+Element #: 12, Current Node #: 20, Diagonal Node #: 45, (78) 
+Element #: 12, Current Node #: 21, Diagonal Node #: 44, (77) 
+Element #: 12, Current Node #: 44, Diagonal Node #: 21, (36) 
+Element #: 12, Current Node #: 45, Diagonal Node #: 20, (35) 
+Element #: 12, Current Node #: 48, Diagonal Node #: 17, (29) 
+Element #: 12, Current Node #: 49, Diagonal Node #: 16, (28) 
+Element #: 13, Current Node #: 17, Diagonal Node #: 50, (86) 
+Element #: 13, Current Node #: 18, Diagonal Node #: 49, (85) 
+Element #: 13, Current Node #: 21, Diagonal Node #: 46, (79) 
+Element #: 13, Current Node #: 22, Diagonal Node #: 45, (78) 
+Element #: 13, Current Node #: 45, Diagonal Node #: 22, (37) 
+Element #: 13, Current Node #: 46, Diagonal Node #: 21, (36) 
+Element #: 13, Current Node #: 49, Diagonal Node #: 18, (30) 
+Element #: 13, Current Node #: 50, Diagonal Node #: 17, (29) 
+Element #: 14, Current Node #: 18, Diagonal Node #: 51, (87) 
+Element #: 14, Current Node #: 19, Diagonal Node #: 50, (86) 
+Element #: 14, Current Node #: 22, Diagonal Node #: 47, (80) 
+Element #: 14, Current Node #: 23, Diagonal Node #: 46, (79) 
+Element #: 14, Current Node #: 46, Diagonal Node #: 23, (38) 
+Element #: 14, Current Node #: 47, Diagonal Node #: 22, (37) 
+Element #: 14, Current Node #: 50, Diagonal Node #: 19, (31) 
+Element #: 14, Current Node #: 51, Diagonal Node #: 18, (30) 
+Element #: 15, Current Node #: 20, Diagonal Node #: 53, (92) 
+Element #: 15, Current Node #: 21, Diagonal Node #: 52, (91) 
+Element #: 15, Current Node #: 24, Diagonal Node #: 49, (85) 
+Element #: 15, Current Node #: 25, Diagonal Node #: 48, (84) 
+Element #: 15, Current Node #: 48, Diagonal Node #: 25, (43) 
+Element #: 15, Current Node #: 49, Diagonal Node #: 24, (42) 
+Element #: 15, Current Node #: 52, Diagonal Node #: 21, (36) 
+Element #: 15, Current Node #: 53, Diagonal Node #: 20, (35) 
+Element #: 16, Current Node #: 21, Diagonal Node #: 54, (93) 
+Element #: 16, Current Node #: 22, Diagonal Node #: 53, (92) 
+Element #: 16, Current Node #: 25, Diagonal Node #: 50, (86) 
+Element #: 16, Current Node #: 26, Diagonal Node #: 49, (85) 
+Element #: 16, Current Node #: 49, Diagonal Node #: 26, (44) 
+Element #: 16, Current Node #: 50, Diagonal Node #: 25, (43) 
+Element #: 16, Current Node #: 53, Diagonal Node #: 22, (37) 
+Element #: 16, Current Node #: 54, Diagonal Node #: 21, (36) 
+Element #: 17, Current Node #: 22, Diagonal Node #: 55, (94) 
+Element #: 17, Current Node #: 23, Diagonal Node #: 54, (93) 
+Element #: 17, Current Node #: 26, Diagonal Node #: 51, (87) 
+Element #: 17, Current Node #: 27, Diagonal Node #: 50, (86) 
+Element #: 17, Current Node #: 50, Diagonal Node #: 27, (45) 
+Element #: 17, Current Node #: 51, Diagonal Node #: 26, (44) 
+Element #: 17, Current Node #: 54, Diagonal Node #: 23, (38) 
+Element #: 17, Current Node #: 55, Diagonal Node #: 22, (37) 
+Element #: 18, Current Node #: 28, Diagonal Node #: 61, (106) 
+Element #: 18, Current Node #: 29, Diagonal Node #: 60, (105) 
+Element #: 18, Current Node #: 32, Diagonal Node #: 57, (99) 
+Element #: 18, Current Node #: 33, Diagonal Node #: 56, (98) 
+Element #: 18, Current Node #: 56, Diagonal Node #: 33, (57) 
+Element #: 18, Current Node #: 57, Diagonal Node #: 32, (56) 
+Element #: 18, Current Node #: 60, Diagonal Node #: 29, (50) 
+Element #: 18, Current Node #: 61, Diagonal Node #: 28, (49) 
+Element #: 19, Current Node #: 29, Diagonal Node #: 62, (107) 
+Element #: 19, Current Node #: 30, Diagonal Node #: 61, (106) 
+Element #: 19, Current Node #: 33, Diagonal Node #: 58, (100) 
+Element #: 19, Current Node #: 34, Diagonal Node #: 57, (99) 
+Element #: 19, Current Node #: 57, Diagonal Node #: 34, (58) 
+Element #: 19, Current Node #: 58, Diagonal Node #: 33, (57) 
+Element #: 19, Current Node #: 61, Diagonal Node #: 30, (51) 
+Element #: 19, Current Node #: 62, Diagonal Node #: 29, (50) 
+Element #: 20, Current Node #: 30, Diagonal Node #: 63, (108) 
+Element #: 20, Current Node #: 31, Diagonal Node #: 62, (107) 
+Element #: 20, Current Node #: 34, Diagonal Node #: 59, (101) 
+Element #: 20, Current Node #: 35, Diagonal Node #: 58, (100) 
+Element #: 20, Current Node #: 58, Diagonal Node #: 35, (59) 
+Element #: 20, Current Node #: 59, Diagonal Node #: 34, (58) 
+Element #: 20, Current Node #: 62, Diagonal Node #: 31, (52) 
+Element #: 20, Current Node #: 63, Diagonal Node #: 30, (51) 
+Element #: 21, Current Node #: 32, Diagonal Node #: 65, (113) 
+Element #: 21, Current Node #: 33, Diagonal Node #: 64, (112) 
+Element #: 21, Current Node #: 36, Diagonal Node #: 61, (106) 
+Element #: 21, Current Node #: 37, Diagonal Node #: 60, (105) 
+Element #: 21, Current Node #: 60, Diagonal Node #: 37, (64) 
+Element #: 21, Current Node #: 61, Diagonal Node #: 36, (63) 
+Element #: 21, Current Node #: 64, Diagonal Node #: 33, (57) 
+Element #: 21, Current Node #: 65, Diagonal Node #: 32, (56) 
+Element #: 22, Current Node #: 33, Diagonal Node #: 66, (114) 
+Element #: 22, Current Node #: 34, Diagonal Node #: 65, (113) 
+Element #: 22, Current Node #: 37, Diagonal Node #: 62, (107) 
+Element #: 22, Current Node #: 38, Diagonal Node #: 61, (106) 
+Element #: 22, Current Node #: 61, Diagonal Node #: 38, (65) 
+Element #: 22, Current Node #: 62, Diagonal Node #: 37, (64) 
+Element #: 22, Current Node #: 65, Diagonal Node #: 34, (58) 
+Element #: 22, Current Node #: 66, Diagonal Node #: 33, (57) 
+Element #: 23, Current Node #: 34, Diagonal Node #: 67, (115) 
+Element #: 23, Current Node #: 35, Diagonal Node #: 66, (114) 
+Element #: 23, Current Node #: 38, Diagonal Node #: 63, (108) 
+Element #: 23, Current Node #: 39, Diagonal Node #: 62, (107) 
+Element #: 23, Current Node #: 62, Diagonal Node #: 39, (66) 
+Element #: 23, Current Node #: 63, Diagonal Node #: 38, (65) 
+Element #: 23, Current Node #: 66, Diagonal Node #: 35, (59) 
+Element #: 23, Current Node #: 67, Diagonal Node #: 34, (58) 
+Element #: 24, Current Node #: 36, Diagonal Node #: 69, (120) 
+Element #: 24, Current Node #: 37, Diagonal Node #: 68, (119) 
+Element #: 24, Current Node #: 40, Diagonal Node #: 65, (113) 
+Element #: 24, Current Node #: 41, Diagonal Node #: 64, (112) 
+Element #: 24, Current Node #: 64, Diagonal Node #: 41, (71) 
+Element #: 24, Current Node #: 65, Diagonal Node #: 40, (70) 
+Element #: 24, Current Node #: 68, Diagonal Node #: 37, (64) 
+Element #: 24, Current Node #: 69, Diagonal Node #: 36, (63) 
+Element #: 25, Current Node #: 37, Diagonal Node #: 70, (121) 
+Element #: 25, Current Node #: 38, Diagonal Node #: 69, (120) 
+Element #: 25, Current Node #: 41, Diagonal Node #: 66, (114) 
+Element #: 25, Current Node #: 42, Diagonal Node #: 65, (113) 
+Element #: 25, Current Node #: 65, Diagonal Node #: 42, (72) 
+Element #: 25, Current Node #: 66, Diagonal Node #: 41, (71) 
+Element #: 25, Current Node #: 69, Diagonal Node #: 38, (65) 
+Element #: 25, Current Node #: 70, Diagonal Node #: 37, (64) 
+Element #: 26, Current Node #: 38, Diagonal Node #: 71, (122) 
+Element #: 26, Current Node #: 39, Diagonal Node #: 70, (121) 
+Element #: 26, Current Node #: 42, Diagonal Node #: 67, (115) 
+Element #: 26, Current Node #: 43, Diagonal Node #: 66, (114) 
+Element #: 26, Current Node #: 66, Diagonal Node #: 43, (73) 
+Element #: 26, Current Node #: 67, Diagonal Node #: 42, (72) 
+Element #: 26, Current Node #: 70, Diagonal Node #: 39, (66) 
+Element #: 26, Current Node #: 71, Diagonal Node #: 38, (65) 
+Element #: 27, Current Node #: 40, Diagonal Node #: 73, (127) 
+Element #: 27, Current Node #: 41, Diagonal Node #: 72, (126) 
+Element #: 27, Current Node #: 44, Diagonal Node #: 69, (120) 
+Element #: 27, Current Node #: 45, Diagonal Node #: 68, (119) 
+Element #: 27, Current Node #: 68, Diagonal Node #: 45, (78) 
+Element #: 27, Current Node #: 69, Diagonal Node #: 44, (77) 
+Element #: 27, Current Node #: 72, Diagonal Node #: 41, (71) 
+Element #: 27, Current Node #: 73, Diagonal Node #: 40, (70) 
+Element #: 28, Current Node #: 41, Diagonal Node #: 74, (128) 
+Element #: 28, Current Node #: 42, Diagonal Node #: 73, (127) 
+Element #: 28, Current Node #: 45, Diagonal Node #: 70, (121) 
+Element #: 28, Current Node #: 46, Diagonal Node #: 69, (120) 
+Element #: 28, Current Node #: 69, Diagonal Node #: 46, (79) 
+Element #: 28, Current Node #: 70, Diagonal Node #: 45, (78) 
+Element #: 28, Current Node #: 73, Diagonal Node #: 42, (72) 
+Element #: 28, Current Node #: 74, Diagonal Node #: 41, (71) 
+Element #: 29, Current Node #: 42, Diagonal Node #: 75, (129) 
+Element #: 29, Current Node #: 43, Diagonal Node #: 74, (128) 
+Element #: 29, Current Node #: 46, Diagonal Node #: 71, (122) 
+Element #: 29, Current Node #: 47, Diagonal Node #: 70, (121) 
+Element #: 29, Current Node #: 70, Diagonal Node #: 47, (80) 
+Element #: 29, Current Node #: 71, Diagonal Node #: 46, (79) 
+Element #: 29, Current Node #: 74, Diagonal Node #: 43, (73) 
+Element #: 29, Current Node #: 75, Diagonal Node #: 42, (72) 
+Element #: 30, Current Node #: 44, Diagonal Node #: 77, (134) 
+Element #: 30, Current Node #: 45, Diagonal Node #: 76, (133) 
+Element #: 30, Current Node #: 48, Diagonal Node #: 73, (127) 
+Element #: 30, Current Node #: 49, Diagonal Node #: 72, (126) 
+Element #: 30, Current Node #: 72, Diagonal Node #: 49, (85) 
+Element #: 30, Current Node #: 73, Diagonal Node #: 48, (84) 
+Element #: 30, Current Node #: 76, Diagonal Node #: 45, (78) 
+Element #: 30, Current Node #: 77, Diagonal Node #: 44, (77) 
+Element #: 31, Current Node #: 45, Diagonal Node #: 78, (135) 
+Element #: 31, Current Node #: 46, Diagonal Node #: 77, (134) 
+Element #: 31, Current Node #: 49, Diagonal Node #: 74, (128) 
+Element #: 31, Current Node #: 50, Diagonal Node #: 73, (127) 
+Element #: 31, Current Node #: 73, Diagonal Node #: 50, (86) 
+Element #: 31, Current Node #: 74, Diagonal Node #: 49, (85) 
+Element #: 31, Current Node #: 77, Diagonal Node #: 46, (79) 
+Element #: 31, Current Node #: 78, Diagonal Node #: 45, (78) 
+Element #: 32, Current Node #: 46, Diagonal Node #: 79, (136) 
+Element #: 32, Current Node #: 47, Diagonal Node #: 78, (135) 
+Element #: 32, Current Node #: 50, Diagonal Node #: 75, (129) 
+Element #: 32, Current Node #: 51, Diagonal Node #: 74, (128) 
+Element #: 32, Current Node #: 74, Diagonal Node #: 51, (87) 
+Element #: 32, Current Node #: 75, Diagonal Node #: 50, (86) 
+Element #: 32, Current Node #: 78, Diagonal Node #: 47, (80) 
+Element #: 32, Current Node #: 79, Diagonal Node #: 46, (79) 
+Element #: 33, Current Node #: 48, Diagonal Node #: 81, (141) 
+Element #: 33, Current Node #: 49, Diagonal Node #: 80, (140) 
+Element #: 33, Current Node #: 52, Diagonal Node #: 77, (134) 
+Element #: 33, Current Node #: 53, Diagonal Node #: 76, (133) 
+Element #: 33, Current Node #: 76, Diagonal Node #: 53, (92) 
+Element #: 33, Current Node #: 77, Diagonal Node #: 52, (91) 
+Element #: 33, Current Node #: 80, Diagonal Node #: 49, (85) 
+Element #: 33, Current Node #: 81, Diagonal Node #: 48, (84) 
+Element #: 34, Current Node #: 49, Diagonal Node #: 82, (142) 
+Element #: 34, Current Node #: 50, Diagonal Node #: 81, (141) 
+Element #: 34, Current Node #: 53, Diagonal Node #: 78, (135) 
+Element #: 34, Current Node #: 54, Diagonal Node #: 77, (134) 
+Element #: 34, Current Node #: 77, Diagonal Node #: 54, (93) 
+Element #: 34, Current Node #: 78, Diagonal Node #: 53, (92) 
+Element #: 34, Current Node #: 81, Diagonal Node #: 50, (86) 
+Element #: 34, Current Node #: 82, Diagonal Node #: 49, (85) 
+Element #: 35, Current Node #: 50, Diagonal Node #: 83, (143) 
+Element #: 35, Current Node #: 51, Diagonal Node #: 82, (142) 
+Element #: 35, Current Node #: 54, Diagonal Node #: 79, (136) 
+Element #: 35, Current Node #: 55, Diagonal Node #: 78, (135) 
+Element #: 35, Current Node #: 78, Diagonal Node #: 55, (94) 
+Element #: 35, Current Node #: 79, Diagonal Node #: 54, (93) 
+Element #: 35, Current Node #: 82, Diagonal Node #: 51, (87) 
+Element #: 35, Current Node #: 83, Diagonal Node #: 50, (86) 
+Element #: 36, Current Node #: 56, Diagonal Node #: 89, (155) 
+Element #: 36, Current Node #: 57, Diagonal Node #: 88, (154) 
+Element #: 36, Current Node #: 60, Diagonal Node #: 85, (148) 
+Element #: 36, Current Node #: 61, Diagonal Node #: 84, (147) 
+Element #: 36, Current Node #: 84, Diagonal Node #: 61, (106) 
+Element #: 36, Current Node #: 85, Diagonal Node #: 60, (105) 
+Element #: 36, Current Node #: 88, Diagonal Node #: 57, (99) 
+Element #: 36, Current Node #: 89, Diagonal Node #: 56, (98) 
+Element #: 37, Current Node #: 57, Diagonal Node #: 90, (156) 
+Element #: 37, Current Node #: 58, Diagonal Node #: 89, (155) 
+Element #: 37, Current Node #: 61, Diagonal Node #: 86, (149) 
+Element #: 37, Current Node #: 62, Diagonal Node #: 85, (148) 
+Element #: 37, Current Node #: 85, Diagonal Node #: 62, (107) 
+Element #: 37, Current Node #: 86, Diagonal Node #: 61, (106) 
+Element #: 37, Current Node #: 89, Diagonal Node #: 58, (100) 
+Element #: 37, Current Node #: 90, Diagonal Node #: 57, (99) 
+Element #: 38, Current Node #: 58, Diagonal Node #: 91, (157) 
+Element #: 38, Current Node #: 59, Diagonal Node #: 90, (156) 
+Element #: 38, Current Node #: 62, Diagonal Node #: 87, (150) 
+Element #: 38, Current Node #: 63, Diagonal Node #: 86, (149) 
+Element #: 38, Current Node #: 86, Diagonal Node #: 63, (108) 
+Element #: 38, Current Node #: 87, Diagonal Node #: 62, (107) 
+Element #: 38, Current Node #: 90, Diagonal Node #: 59, (101) 
+Element #: 38, Current Node #: 91, Diagonal Node #: 58, (100) 
+Element #: 39, Current Node #: 60, Diagonal Node #: 93, (162) 
+Element #: 39, Current Node #: 61, Diagonal Node #: 92, (161) 
+Element #: 39, Current Node #: 64, Diagonal Node #: 89, (155) 
+Element #: 39, Current Node #: 65, Diagonal Node #: 88, (154) 
+Element #: 39, Current Node #: 88, Diagonal Node #: 65, (113) 
+Element #: 39, Current Node #: 89, Diagonal Node #: 64, (112) 
+Element #: 39, Current Node #: 92, Diagonal Node #: 61, (106) 
+Element #: 39, Current Node #: 93, Diagonal Node #: 60, (105) 
+Element #: 40, Current Node #: 61, Diagonal Node #: 94, (163) 
+Element #: 40, Current Node #: 62, Diagonal Node #: 93, (162) 
+Element #: 40, Current Node #: 65, Diagonal Node #: 90, (156) 
+Element #: 40, Current Node #: 66, Diagonal Node #: 89, (155) 
+Element #: 40, Current Node #: 89, Diagonal Node #: 66, (114) 
+Element #: 40, Current Node #: 90, Diagonal Node #: 65, (113) 
+Element #: 40, Current Node #: 93, Diagonal Node #: 62, (107) 
+Element #: 40, Current Node #: 94, Diagonal Node #: 61, (106) 
+Element #: 41, Current Node #: 62, Diagonal Node #: 95, (164) 
+Element #: 41, Current Node #: 63, Diagonal Node #: 94, (163) 
+Element #: 41, Current Node #: 66, Diagonal Node #: 91, (157) 
+Element #: 41, Current Node #: 67, Diagonal Node #: 90, (156) 
+Element #: 41, Current Node #: 90, Diagonal Node #: 67, (115) 
+Element #: 41, Current Node #: 91, Diagonal Node #: 66, (114) 
+Element #: 41, Current Node #: 94, Diagonal Node #: 63, (108) 
+Element #: 41, Current Node #: 95, Diagonal Node #: 62, (107) 
+Element #: 42, Current Node #: 64, Diagonal Node #: 97, (169) 
+Element #: 42, Current Node #: 65, Diagonal Node #: 96, (168) 
+Element #: 42, Current Node #: 68, Diagonal Node #: 93, (162) 
+Element #: 42, Current Node #: 69, Diagonal Node #: 92, (161) 
+Element #: 42, Current Node #: 92, Diagonal Node #: 69, (120) 
+Element #: 42, Current Node #: 93, Diagonal Node #: 68, (119) 
+Element #: 42, Current Node #: 96, Diagonal Node #: 65, (113) 
+Element #: 42, Current Node #: 97, Diagonal Node #: 64, (112) 
+Element #: 43, Current Node #: 65, Diagonal Node #: 98, (170) 
+Element #: 43, Current Node #: 66, Diagonal Node #: 97, (169) 
+Element #: 43, Current Node #: 69, Diagonal Node #: 94, (163) 
+Element #: 43, Current Node #: 70, Diagonal Node #: 93, (162) 
+Element #: 43, Current Node #: 93, Diagonal Node #: 70, (121) 
+Element #: 43, Current Node #: 94, Diagonal Node #: 69, (120) 
+Element #: 43, Current Node #: 97, Diagonal Node #: 66, (114) 
+Element #: 43, Current Node #: 98, Diagonal Node #: 65, (113) 
+Element #: 44, Current Node #: 66, Diagonal Node #: 99, (171) 
+Element #: 44, Current Node #: 67, Diagonal Node #: 98, (170) 
+Element #: 44, Current Node #: 70, Diagonal Node #: 95, (164) 
+Element #: 44, Current Node #: 71, Diagonal Node #: 94, (163) 
+Element #: 44, Current Node #: 94, Diagonal Node #: 71, (122) 
+Element #: 44, Current Node #: 95, Diagonal Node #: 70, (121) 
+Element #: 44, Current Node #: 98, Diagonal Node #: 67, (115) 
+Element #: 44, Current Node #: 99, Diagonal Node #: 66, (114) 
+Element #: 45, Current Node #: 68, Diagonal Node #: 101, (176) 
+Element #: 45, Current Node #: 69, Diagonal Node #: 100, (175) 
+Element #: 45, Current Node #: 72, Diagonal Node #: 97, (169) 
+Element #: 45, Current Node #: 73, Diagonal Node #: 96, (168) 
+Element #: 45, Current Node #: 96, Diagonal Node #: 73, (127) 
+Element #: 45, Current Node #: 97, Diagonal Node #: 72, (126) 
+Element #: 45, Current Node #: 100, Diagonal Node #: 69, (120) 
+Element #: 45, Current Node #: 101, Diagonal Node #: 68, (119) 
+Element #: 46, Current Node #: 69, Diagonal Node #: 102, (177) 
+Element #: 46, Current Node #: 70, Diagonal Node #: 101, (176) 
+Element #: 46, Current Node #: 73, Diagonal Node #: 98, (170) 
+Element #: 46, Current Node #: 74, Diagonal Node #: 97, (169) 
+Element #: 46, Current Node #: 97, Diagonal Node #: 74, (128) 
+Element #: 46, Current Node #: 98, Diagonal Node #: 73, (127) 
+Element #: 46, Current Node #: 101, Diagonal Node #: 70, (121) 
+Element #: 46, Current Node #: 102, Diagonal Node #: 69, (120) 
+Element #: 47, Current Node #: 70, Diagonal Node #: 103, (178) 
+Element #: 47, Current Node #: 71, Diagonal Node #: 102, (177) 
+Element #: 47, Current Node #: 74, Diagonal Node #: 99, (171) 
+Element #: 47, Current Node #: 75, Diagonal Node #: 98, (170) 
+Element #: 47, Current Node #: 98, Diagonal Node #: 75, (129) 
+Element #: 47, Current Node #: 99, Diagonal Node #: 74, (128) 
+Element #: 47, Current Node #: 102, Diagonal Node #: 71, (122) 
+Element #: 47, Current Node #: 103, Diagonal Node #: 70, (121) 
+Element #: 48, Current Node #: 72, Diagonal Node #: 105, (183) 
+Element #: 48, Current Node #: 73, Diagonal Node #: 104, (182) 
+Element #: 48, Current Node #: 76, Diagonal Node #: 101, (176) 
+Element #: 48, Current Node #: 77, Diagonal Node #: 100, (175) 
+Element #: 48, Current Node #: 100, Diagonal Node #: 77, (134) 
+Element #: 48, Current Node #: 101, Diagonal Node #: 76, (133) 
+Element #: 48, Current Node #: 104, Diagonal Node #: 73, (127) 
+Element #: 48, Current Node #: 105, Diagonal Node #: 72, (126) 
+Element #: 49, Current Node #: 73, Diagonal Node #: 106, (184) 
+Element #: 49, Current Node #: 74, Diagonal Node #: 105, (183) 
+Element #: 49, Current Node #: 77, Diagonal Node #: 102, (177) 
+Element #: 49, Current Node #: 78, Diagonal Node #: 101, (176) 
+Element #: 49, Current Node #: 101, Diagonal Node #: 78, (135) 
+Element #: 49, Current Node #: 102, Diagonal Node #: 77, (134) 
+Element #: 49, Current Node #: 105, Diagonal Node #: 74, (128) 
+Element #: 49, Current Node #: 106, Diagonal Node #: 73, (127) 
+Element #: 50, Current Node #: 74, Diagonal Node #: 107, (185) 
+Element #: 50, Current Node #: 75, Diagonal Node #: 106, (184) 
+Element #: 50, Current Node #: 78, Diagonal Node #: 103, (178) 
+Element #: 50, Current Node #: 79, Diagonal Node #: 102, (177) 
+Element #: 50, Current Node #: 102, Diagonal Node #: 79, (136) 
+Element #: 50, Current Node #: 103, Diagonal Node #: 78, (135) 
+Element #: 50, Current Node #: 106, Diagonal Node #: 75, (129) 
+Element #: 50, Current Node #: 107, Diagonal Node #: 74, (128) 
+Element #: 51, Current Node #: 76, Diagonal Node #: 109, (190) 
+Element #: 51, Current Node #: 77, Diagonal Node #: 108, (189) 
+Element #: 51, Current Node #: 80, Diagonal Node #: 105, (183) 
+Element #: 51, Current Node #: 81, Diagonal Node #: 104, (182) 
+Element #: 51, Current Node #: 104, Diagonal Node #: 81, (141) 
+Element #: 51, Current Node #: 105, Diagonal Node #: 80, (140) 
+Element #: 51, Current Node #: 108, Diagonal Node #: 77, (134) 
+Element #: 51, Current Node #: 109, Diagonal Node #: 76, (133) 
+Element #: 52, Current Node #: 77, Diagonal Node #: 110, (191) 
+Element #: 52, Current Node #: 78, Diagonal Node #: 109, (190) 
+Element #: 52, Current Node #: 81, Diagonal Node #: 106, (184) 
+Element #: 52, Current Node #: 82, Diagonal Node #: 105, (183) 
+Element #: 52, Current Node #: 105, Diagonal Node #: 82, (142) 
+Element #: 52, Current Node #: 106, Diagonal Node #: 81, (141) 
+Element #: 52, Current Node #: 109, Diagonal Node #: 78, (135) 
+Element #: 52, Current Node #: 110, Diagonal Node #: 77, (134) 
+Element #: 53, Current Node #: 78, Diagonal Node #: 111, (192) 
+Element #: 53, Current Node #: 79, Diagonal Node #: 110, (191) 
+Element #: 53, Current Node #: 82, Diagonal Node #: 107, (185) 
+Element #: 53, Current Node #: 83, Diagonal Node #: 106, (184) 
+Element #: 53, Current Node #: 106, Diagonal Node #: 83, (143) 
+Element #: 53, Current Node #: 107, Diagonal Node #: 82, (142) 
+Element #: 53, Current Node #: 110, Diagonal Node #: 79, (136) 
+Element #: 53, Current Node #: 111, Diagonal Node #: 78, (135) 
+Element #: 54, Current Node #: 84, Diagonal Node #: 117, (204) 
+Element #: 54, Current Node #: 85, Diagonal Node #: 116, (203) 
+Element #: 54, Current Node #: 88, Diagonal Node #: 113, (197) 
+Element #: 54, Current Node #: 89, Diagonal Node #: 112, (196) 
+Element #: 54, Current Node #: 112, Diagonal Node #: 89, (155) 
+Element #: 54, Current Node #: 113, Diagonal Node #: 88, (154) 
+Element #: 54, Current Node #: 116, Diagonal Node #: 85, (148) 
+Element #: 54, Current Node #: 117, Diagonal Node #: 84, (147) 
+Element #: 55, Current Node #: 85, Diagonal Node #: 118, (205) 
+Element #: 55, Current Node #: 86, Diagonal Node #: 117, (204) 
+Element #: 55, Current Node #: 89, Diagonal Node #: 114, (198) 
+Element #: 55, Current Node #: 90, Diagonal Node #: 113, (197) 
+Element #: 55, Current Node #: 113, Diagonal Node #: 90, (156) 
+Element #: 55, Current Node #: 114, Diagonal Node #: 89, (155) 
+Element #: 55, Current Node #: 117, Diagonal Node #: 86, (149) 
+Element #: 55, Current Node #: 118, Diagonal Node #: 85, (148) 
+Element #: 56, Current Node #: 86, Diagonal Node #: 119, (206) 
+Element #: 56, Current Node #: 87, Diagonal Node #: 118, (205) 
+Element #: 56, Current Node #: 90, Diagonal Node #: 115, (199) 
+Element #: 56, Current Node #: 91, Diagonal Node #: 114, (198) 
+Element #: 56, Current Node #: 114, Diagonal Node #: 91, (157) 
+Element #: 56, Current Node #: 115, Diagonal Node #: 90, (156) 
+Element #: 56, Current Node #: 118, Diagonal Node #: 87, (150) 
+Element #: 56, Current Node #: 119, Diagonal Node #: 86, (149) 
+Element #: 57, Current Node #: 88, Diagonal Node #: 121, (211) 
+Element #: 57, Current Node #: 89, Diagonal Node #: 120, (210) 
+Element #: 57, Current Node #: 92, Diagonal Node #: 117, (204) 
+Element #: 57, Current Node #: 93, Diagonal Node #: 116, (203) 
+Element #: 57, Current Node #: 116, Diagonal Node #: 93, (162) 
+Element #: 57, Current Node #: 117, Diagonal Node #: 92, (161) 
+Element #: 57, Current Node #: 120, Diagonal Node #: 89, (155) 
+Element #: 57, Current Node #: 121, Diagonal Node #: 88, (154) 
+Element #: 58, Current Node #: 89, Diagonal Node #: 122, (212) 
+Element #: 58, Current Node #: 90, Diagonal Node #: 121, (211) 
+Element #: 58, Current Node #: 93, Diagonal Node #: 118, (205) 
+Element #: 58, Current Node #: 94, Diagonal Node #: 117, (204) 
+Element #: 58, Current Node #: 117, Diagonal Node #: 94, (163) 
+Element #: 58, Current Node #: 118, Diagonal Node #: 93, (162) 
+Element #: 58, Current Node #: 121, Diagonal Node #: 90, (156) 
+Element #: 58, Current Node #: 122, Diagonal Node #: 89, (155) 
+Element #: 59, Current Node #: 90, Diagonal Node #: 123, (213) 
+Element #: 59, Current Node #: 91, Diagonal Node #: 122, (212) 
+Element #: 59, Current Node #: 94, Diagonal Node #: 119, (206) 
+Element #: 59, Current Node #: 95, Diagonal Node #: 118, (205) 
+Element #: 59, Current Node #: 118, Diagonal Node #: 95, (164) 
+Element #: 59, Current Node #: 119, Diagonal Node #: 94, (163) 
+Element #: 59, Current Node #: 122, Diagonal Node #: 91, (157) 
+Element #: 59, Current Node #: 123, Diagonal Node #: 90, (156) 
+Element #: 60, Current Node #: 92, Diagonal Node #: 125, (218) 
+Element #: 60, Current Node #: 93, Diagonal Node #: 124, (217) 
+Element #: 60, Current Node #: 96, Diagonal Node #: 121, (211) 
+Element #: 60, Current Node #: 97, Diagonal Node #: 120, (210) 
+Element #: 60, Current Node #: 120, Diagonal Node #: 97, (169) 
+Element #: 60, Current Node #: 121, Diagonal Node #: 96, (168) 
+Element #: 60, Current Node #: 124, Diagonal Node #: 93, (162) 
+Element #: 60, Current Node #: 125, Diagonal Node #: 92, (161) 
+Element #: 61, Current Node #: 93, Diagonal Node #: 126, (219) 
+Element #: 61, Current Node #: 94, Diagonal Node #: 125, (218) 
+Element #: 61, Current Node #: 97, Diagonal Node #: 122, (212) 
+Element #: 61, Current Node #: 98, Diagonal Node #: 121, (211) 
+Element #: 61, Current Node #: 121, Diagonal Node #: 98, (170) 
+Element #: 61, Current Node #: 122, Diagonal Node #: 97, (169) 
+Element #: 61, Current Node #: 125, Diagonal Node #: 94, (163) 
+Element #: 61, Current Node #: 126, Diagonal Node #: 93, (162) 
+Element #: 62, Current Node #: 94, Diagonal Node #: 127, (220) 
+Element #: 62, Current Node #: 95, Diagonal Node #: 126, (219) 
+Element #: 62, Current Node #: 98, Diagonal Node #: 123, (213) 
+Element #: 62, Current Node #: 99, Diagonal Node #: 122, (212) 
+Element #: 62, Current Node #: 122, Diagonal Node #: 99, (171) 
+Element #: 62, Current Node #: 123, Diagonal Node #: 98, (170) 
+Element #: 62, Current Node #: 126, Diagonal Node #: 95, (164) 
+Element #: 62, Current Node #: 127, Diagonal Node #: 94, (163) 
+Element #: 63, Current Node #: 96, Diagonal Node #: 129, (225) 
+Element #: 63, Current Node #: 97, Diagonal Node #: 128, (224) 
+Element #: 63, Current Node #: 100, Diagonal Node #: 125, (218) 
+Element #: 63, Current Node #: 101, Diagonal Node #: 124, (217) 
+Element #: 63, Current Node #: 124, Diagonal Node #: 101, (176) 
+Element #: 63, Current Node #: 125, Diagonal Node #: 100, (175) 
+Element #: 63, Current Node #: 128, Diagonal Node #: 97, (169) 
+Element #: 63, Current Node #: 129, Diagonal Node #: 96, (168) 
+Element #: 64, Current Node #: 97, Diagonal Node #: 130, (226) 
+Element #: 64, Current Node #: 98, Diagonal Node #: 129, (225) 
+Element #: 64, Current Node #: 101, Diagonal Node #: 126, (219) 
+Element #: 64, Current Node #: 102, Diagonal Node #: 125, (218) 
+Element #: 64, Current Node #: 125, Diagonal Node #: 102, (177) 
+Element #: 64, Current Node #: 126, Diagonal Node #: 101, (176) 
+Element #: 64, Current Node #: 129, Diagonal Node #: 98, (170) 
+Element #: 64, Current Node #: 130, Diagonal Node #: 97, (169) 
+Element #: 65, Current Node #: 98, Diagonal Node #: 131, (227) 
+Element #: 65, Current Node #: 99, Diagonal Node #: 130, (226) 
+Element #: 65, Current Node #: 102, Diagonal Node #: 127, (220) 
+Element #: 65, Current Node #: 103, Diagonal Node #: 126, (219) 
+Element #: 65, Current Node #: 126, Diagonal Node #: 103, (178) 
+Element #: 65, Current Node #: 127, Diagonal Node #: 102, (177) 
+Element #: 65, Current Node #: 130, Diagonal Node #: 99, (171) 
+Element #: 65, Current Node #: 131, Diagonal Node #: 98, (170) 
+Element #: 66, Current Node #: 100, Diagonal Node #: 133, (232) 
+Element #: 66, Current Node #: 101, Diagonal Node #: 132, (231) 
+Element #: 66, Current Node #: 104, Diagonal Node #: 129, (225) 
+Element #: 66, Current Node #: 105, Diagonal Node #: 128, (224) 
+Element #: 66, Current Node #: 128, Diagonal Node #: 105, (183) 
+Element #: 66, Current Node #: 129, Diagonal Node #: 104, (182) 
+Element #: 66, Current Node #: 132, Diagonal Node #: 101, (176) 
+Element #: 66, Current Node #: 133, Diagonal Node #: 100, (175) 
+Element #: 67, Current Node #: 101, Diagonal Node #: 134, (233) 
+Element #: 67, Current Node #: 102, Diagonal Node #: 133, (232) 
+Element #: 67, Current Node #: 105, Diagonal Node #: 130, (226) 
+Element #: 67, Current Node #: 106, Diagonal Node #: 129, (225) 
+Element #: 67, Current Node #: 129, Diagonal Node #: 106, (184) 
+Element #: 67, Current Node #: 130, Diagonal Node #: 105, (183) 
+Element #: 67, Current Node #: 133, Diagonal Node #: 102, (177) 
+Element #: 67, Current Node #: 134, Diagonal Node #: 101, (176) 
+Element #: 68, Current Node #: 102, Diagonal Node #: 135, (234) 
+Element #: 68, Current Node #: 103, Diagonal Node #: 134, (233) 
+Element #: 68, Current Node #: 106, Diagonal Node #: 131, (227) 
+Element #: 68, Current Node #: 107, Diagonal Node #: 130, (226) 
+Element #: 68, Current Node #: 130, Diagonal Node #: 107, (185) 
+Element #: 68, Current Node #: 131, Diagonal Node #: 106, (184) 
+Element #: 68, Current Node #: 134, Diagonal Node #: 103, (178) 
+Element #: 68, Current Node #: 135, Diagonal Node #: 102, (177) 
+Element #: 69, Current Node #: 104, Diagonal Node #: 137, (239) 
+Element #: 69, Current Node #: 105, Diagonal Node #: 136, (238) 
+Element #: 69, Current Node #: 108, Diagonal Node #: 133, (232) 
+Element #: 69, Current Node #: 109, Diagonal Node #: 132, (231) 
+Element #: 69, Current Node #: 132, Diagonal Node #: 109, (190) 
+Element #: 69, Current Node #: 133, Diagonal Node #: 108, (189) 
+Element #: 69, Current Node #: 136, Diagonal Node #: 105, (183) 
+Element #: 69, Current Node #: 137, Diagonal Node #: 104, (182) 
+Element #: 70, Current Node #: 105, Diagonal Node #: 138, (240) 
+Element #: 70, Current Node #: 106, Diagonal Node #: 137, (239) 
+Element #: 70, Current Node #: 109, Diagonal Node #: 134, (233) 
+Element #: 70, Current Node #: 110, Diagonal Node #: 133, (232) 
+Element #: 70, Current Node #: 133, Diagonal Node #: 110, (191) 
+Element #: 70, Current Node #: 134, Diagonal Node #: 109, (190) 
+Element #: 70, Current Node #: 137, Diagonal Node #: 106, (184) 
+Element #: 70, Current Node #: 138, Diagonal Node #: 105, (183) 
+Element #: 71, Current Node #: 106, Diagonal Node #: 139, (241) 
+Element #: 71, Current Node #: 107, Diagonal Node #: 138, (240) 
+Element #: 71, Current Node #: 110, Diagonal Node #: 135, (234) 
+Element #: 71, Current Node #: 111, Diagonal Node #: 134, (233) 
+Element #: 71, Current Node #: 134, Diagonal Node #: 111, (192) 
+Element #: 71, Current Node #: 135, Diagonal Node #: 110, (191) 
+Element #: 71, Current Node #: 138, Diagonal Node #: 107, (185) 
+Element #: 71, Current Node #: 139, Diagonal Node #: 106, (184) 
+Element #: 72, Current Node #: 112, Diagonal Node #: 145, (253) 
+Element #: 72, Current Node #: 113, Diagonal Node #: 144, (252) 
+Element #: 72, Current Node #: 116, Diagonal Node #: 141, (246) 
+Element #: 72, Current Node #: 117, Diagonal Node #: 140, (245) 
+Element #: 72, Current Node #: 140, Diagonal Node #: 117, (204) 
+Element #: 72, Current Node #: 141, Diagonal Node #: 116, (203) 
+Element #: 72, Current Node #: 144, Diagonal Node #: 113, (197) 
+Element #: 72, Current Node #: 145, Diagonal Node #: 112, (196) 
+Element #: 73, Current Node #: 113, Diagonal Node #: 146, (254) 
+Element #: 73, Current Node #: 114, Diagonal Node #: 145, (253) 
+Element #: 73, Current Node #: 117, Diagonal Node #: 142, (247) 
+Element #: 73, Current Node #: 118, Diagonal Node #: 141, (246) 
+Element #: 73, Current Node #: 141, Diagonal Node #: 118, (205) 
+Element #: 73, Current Node #: 142, Diagonal Node #: 117, (204) 
+Element #: 73, Current Node #: 145, Diagonal Node #: 114, (198) 
+Element #: 73, Current Node #: 146, Diagonal Node #: 113, (197) 
+Element #: 74, Current Node #: 114, Diagonal Node #: 147, (255) 
+Element #: 74, Current Node #: 115, Diagonal Node #: 146, (254) 
+Element #: 74, Current Node #: 118, Diagonal Node #: 143, (248) 
+Element #: 74, Current Node #: 119, Diagonal Node #: 142, (247) 
+Element #: 74, Current Node #: 142, Diagonal Node #: 119, (206) 
+Element #: 74, Current Node #: 143, Diagonal Node #: 118, (205) 
+Element #: 74, Current Node #: 146, Diagonal Node #: 115, (199) 
+Element #: 74, Current Node #: 147, Diagonal Node #: 114, (198) 
+Element #: 75, Current Node #: 116, Diagonal Node #: 149, (260) 
+Element #: 75, Current Node #: 117, Diagonal Node #: 148, (259) 
+Element #: 75, Current Node #: 120, Diagonal Node #: 145, (253) 
+Element #: 75, Current Node #: 121, Diagonal Node #: 144, (252) 
+Element #: 75, Current Node #: 144, Diagonal Node #: 121, (211) 
+Element #: 75, Current Node #: 145, Diagonal Node #: 120, (210) 
+Element #: 75, Current Node #: 148, Diagonal Node #: 117, (204) 
+Element #: 75, Current Node #: 149, Diagonal Node #: 116, (203) 
+Element #: 76, Current Node #: 117, Diagonal Node #: 150, (261) 
+Element #: 76, Current Node #: 118, Diagonal Node #: 149, (260) 
+Element #: 76, Current Node #: 121, Diagonal Node #: 146, (254) 
+Element #: 76, Current Node #: 122, Diagonal Node #: 145, (253) 
+Element #: 76, Current Node #: 145, Diagonal Node #: 122, (212) 
+Element #: 76, Current Node #: 146, Diagonal Node #: 121, (211) 
+Element #: 76, Current Node #: 149, Diagonal Node #: 118, (205) 
+Element #: 76, Current Node #: 150, Diagonal Node #: 117, (204) 
+Element #: 77, Current Node #: 118, Diagonal Node #: 151, (262) 
+Element #: 77, Current Node #: 119, Diagonal Node #: 150, (261) 
+Element #: 77, Current Node #: 122, Diagonal Node #: 147, (255) 
+Element #: 77, Current Node #: 123, Diagonal Node #: 146, (254) 
+Element #: 77, Current Node #: 146, Diagonal Node #: 123, (213) 
+Element #: 77, Current Node #: 147, Diagonal Node #: 122, (212) 
+Element #: 77, Current Node #: 150, Diagonal Node #: 119, (206) 
+Element #: 77, Current Node #: 151, Diagonal Node #: 118, (205) 
+Element #: 78, Current Node #: 120, Diagonal Node #: 153, (267) 
+Element #: 78, Current Node #: 121, Diagonal Node #: 152, (266) 
+Element #: 78, Current Node #: 124, Diagonal Node #: 149, (260) 
+Element #: 78, Current Node #: 125, Diagonal Node #: 148, (259) 
+Element #: 78, Current Node #: 148, Diagonal Node #: 125, (218) 
+Element #: 78, Current Node #: 149, Diagonal Node #: 124, (217) 
+Element #: 78, Current Node #: 152, Diagonal Node #: 121, (211) 
+Element #: 78, Current Node #: 153, Diagonal Node #: 120, (210) 
+Element #: 79, Current Node #: 121, Diagonal Node #: 154, (268) 
+Element #: 79, Current Node #: 122, Diagonal Node #: 153, (267) 
+Element #: 79, Current Node #: 125, Diagonal Node #: 150, (261) 
+Element #: 79, Current Node #: 126, Diagonal Node #: 149, (260) 
+Element #: 79, Current Node #: 149, Diagonal Node #: 126, (219) 
+Element #: 79, Current Node #: 150, Diagonal Node #: 125, (218) 
+Element #: 79, Current Node #: 153, Diagonal Node #: 122, (212) 
+Element #: 79, Current Node #: 154, Diagonal Node #: 121, (211) 
+Element #: 80, Current Node #: 122, Diagonal Node #: 155, (269) 
+Element #: 80, Current Node #: 123, Diagonal Node #: 154, (268) 
+Element #: 80, Current Node #: 126, Diagonal Node #: 151, (262) 
+Element #: 80, Current Node #: 127, Diagonal Node #: 150, (261) 
+Element #: 80, Current Node #: 150, Diagonal Node #: 127, (220) 
+Element #: 80, Current Node #: 151, Diagonal Node #: 126, (219) 
+Element #: 80, Current Node #: 154, Diagonal Node #: 123, (213) 
+Element #: 80, Current Node #: 155, Diagonal Node #: 122, (212) 
+Element #: 81, Current Node #: 124, Diagonal Node #: 157, (274) 
+Element #: 81, Current Node #: 125, Diagonal Node #: 156, (273) 
+Element #: 81, Current Node #: 128, Diagonal Node #: 153, (267) 
+Element #: 81, Current Node #: 129, Diagonal Node #: 152, (266) 
+Element #: 81, Current Node #: 152, Diagonal Node #: 129, (225) 
+Element #: 81, Current Node #: 153, Diagonal Node #: 128, (224) 
+Element #: 81, Current Node #: 156, Diagonal Node #: 125, (218) 
+Element #: 81, Current Node #: 157, Diagonal Node #: 124, (217) 
+Element #: 82, Current Node #: 125, Diagonal Node #: 158, (275) 
+Element #: 82, Current Node #: 126, Diagonal Node #: 157, (274) 
+Element #: 82, Current Node #: 129, Diagonal Node #: 154, (268) 
+Element #: 82, Current Node #: 130, Diagonal Node #: 153, (267) 
+Element #: 82, Current Node #: 153, Diagonal Node #: 130, (226) 
+Element #: 82, Current Node #: 154, Diagonal Node #: 129, (225) 
+Element #: 82, Current Node #: 157, Diagonal Node #: 126, (219) 
+Element #: 82, Current Node #: 158, Diagonal Node #: 125, (218) 
+Element #: 83, Current Node #: 126, Diagonal Node #: 159, (276) 
+Element #: 83, Current Node #: 127, Diagonal Node #: 158, (275) 
+Element #: 83, Current Node #: 130, Diagonal Node #: 155, (269) 
+Element #: 83, Current Node #: 131, Diagonal Node #: 154, (268) 
+Element #: 83, Current Node #: 154, Diagonal Node #: 131, (227) 
+Element #: 83, Current Node #: 155, Diagonal Node #: 130, (226) 
+Element #: 83, Current Node #: 158, Diagonal Node #: 127, (220) 
+Element #: 83, Current Node #: 159, Diagonal Node #: 126, (219) 
+Element #: 84, Current Node #: 128, Diagonal Node #: 161, (281) 
+Element #: 84, Current Node #: 129, Diagonal Node #: 160, (280) 
+Element #: 84, Current Node #: 132, Diagonal Node #: 157, (274) 
+Element #: 84, Current Node #: 133, Diagonal Node #: 156, (273) 
+Element #: 84, Current Node #: 156, Diagonal Node #: 133, (232) 
+Element #: 84, Current Node #: 157, Diagonal Node #: 132, (231) 
+Element #: 84, Current Node #: 160, Diagonal Node #: 129, (225) 
+Element #: 84, Current Node #: 161, Diagonal Node #: 128, (224) 
+Element #: 85, Current Node #: 129, Diagonal Node #: 162, (282) 
+Element #: 85, Current Node #: 130, Diagonal Node #: 161, (281) 
+Element #: 85, Current Node #: 133, Diagonal Node #: 158, (275) 
+Element #: 85, Current Node #: 134, Diagonal Node #: 157, (274) 
+Element #: 85, Current Node #: 157, Diagonal Node #: 134, (233) 
+Element #: 85, Current Node #: 158, Diagonal Node #: 133, (232) 
+Element #: 85, Current Node #: 161, Diagonal Node #: 130, (226) 
+Element #: 85, Current Node #: 162, Diagonal Node #: 129, (225) 
+Element #: 86, Current Node #: 130, Diagonal Node #: 163, (283) 
+Element #: 86, Current Node #: 131, Diagonal Node #: 162, (282) 
+Element #: 86, Current Node #: 134, Diagonal Node #: 159, (276) 
+Element #: 86, Current Node #: 135, Diagonal Node #: 158, (275) 
+Element #: 86, Current Node #: 158, Diagonal Node #: 135, (234) 
+Element #: 86, Current Node #: 159, Diagonal Node #: 134, (233) 
+Element #: 86, Current Node #: 162, Diagonal Node #: 131, (227) 
+Element #: 86, Current Node #: 163, Diagonal Node #: 130, (226) 
+Element #: 87, Current Node #: 132, Diagonal Node #: 165, (288) 
+Element #: 87, Current Node #: 133, Diagonal Node #: 164, (287) 
+Element #: 87, Current Node #: 136, Diagonal Node #: 161, (281) 
+Element #: 87, Current Node #: 137, Diagonal Node #: 160, (280) 
+Element #: 87, Current Node #: 160, Diagonal Node #: 137, (239) 
+Element #: 87, Current Node #: 161, Diagonal Node #: 136, (238) 
+Element #: 87, Current Node #: 164, Diagonal Node #: 133, (232) 
+Element #: 87, Current Node #: 165, Diagonal Node #: 132, (231) 
+Element #: 88, Current Node #: 133, Diagonal Node #: 166, (289) 
+Element #: 88, Current Node #: 134, Diagonal Node #: 165, (288) 
+Element #: 88, Current Node #: 137, Diagonal Node #: 162, (282) 
+Element #: 88, Current Node #: 138, Diagonal Node #: 161, (281) 
+Element #: 88, Current Node #: 161, Diagonal Node #: 138, (240) 
+Element #: 88, Current Node #: 162, Diagonal Node #: 137, (239) 
+Element #: 88, Current Node #: 165, Diagonal Node #: 134, (233) 
+Element #: 88, Current Node #: 166, Diagonal Node #: 133, (232) 
+Element #: 89, Current Node #: 134, Diagonal Node #: 167, (290) 
+Element #: 89, Current Node #: 135, Diagonal Node #: 166, (289) 
+Element #: 89, Current Node #: 138, Diagonal Node #: 163, (283) 
+Element #: 89, Current Node #: 139, Diagonal Node #: 162, (282) 
+Element #: 89, Current Node #: 162, Diagonal Node #: 139, (241) 
+Element #: 89, Current Node #: 163, Diagonal Node #: 138, (240) 
+Element #: 89, Current Node #: 166, Diagonal Node #: 135, (234) 
+Element #: 89, Current Node #: 167, Diagonal Node #: 134, (233) 
+Element #: 90, Current Node #: 140, Diagonal Node #: 173, (302) 
+Element #: 90, Current Node #: 141, Diagonal Node #: 172, (301) 
+Element #: 90, Current Node #: 144, Diagonal Node #: 169, (295) 
+Element #: 90, Current Node #: 145, Diagonal Node #: 168, (294) 
+Element #: 90, Current Node #: 168, Diagonal Node #: 145, (253) 
+Element #: 90, Current Node #: 169, Diagonal Node #: 144, (252) 
+Element #: 90, Current Node #: 172, Diagonal Node #: 141, (246) 
+Element #: 90, Current Node #: 173, Diagonal Node #: 140, (245) 
+Element #: 91, Current Node #: 141, Diagonal Node #: 174, (303) 
+Element #: 91, Current Node #: 142, Diagonal Node #: 173, (302) 
+Element #: 91, Current Node #: 145, Diagonal Node #: 170, (296) 
+Element #: 91, Current Node #: 146, Diagonal Node #: 169, (295) 
+Element #: 91, Current Node #: 169, Diagonal Node #: 146, (254) 
+Element #: 91, Current Node #: 170, Diagonal Node #: 145, (253) 
+Element #: 91, Current Node #: 173, Diagonal Node #: 142, (247) 
+Element #: 91, Current Node #: 174, Diagonal Node #: 141, (246) 
+Element #: 92, Current Node #: 142, Diagonal Node #: 175, (304) 
+Element #: 92, Current Node #: 143, Diagonal Node #: 174, (303) 
+Element #: 92, Current Node #: 146, Diagonal Node #: 171, (297) 
+Element #: 92, Current Node #: 147, Diagonal Node #: 170, (296) 
+Element #: 92, Current Node #: 170, Diagonal Node #: 147, (255) 
+Element #: 92, Current Node #: 171, Diagonal Node #: 146, (254) 
+Element #: 92, Current Node #: 174, Diagonal Node #: 143, (248) 
+Element #: 92, Current Node #: 175, Diagonal Node #: 142, (247) 
+Element #: 93, Current Node #: 144, Diagonal Node #: 177, (309) 
+Element #: 93, Current Node #: 145, Diagonal Node #: 176, (308) 
+Element #: 93, Current Node #: 148, Diagonal Node #: 173, (302) 
+Element #: 93, Current Node #: 149, Diagonal Node #: 172, (301) 
+Element #: 93, Current Node #: 172, Diagonal Node #: 149, (260) 
+Element #: 93, Current Node #: 173, Diagonal Node #: 148, (259) 
+Element #: 93, Current Node #: 176, Diagonal Node #: 145, (253) 
+Element #: 93, Current Node #: 177, Diagonal Node #: 144, (252) 
+Element #: 94, Current Node #: 145, Diagonal Node #: 178, (310) 
+Element #: 94, Current Node #: 146, Diagonal Node #: 177, (309) 
+Element #: 94, Current Node #: 149, Diagonal Node #: 174, (303) 
+Element #: 94, Current Node #: 150, Diagonal Node #: 173, (302) 
+Element #: 94, Current Node #: 173, Diagonal Node #: 150, (261) 
+Element #: 94, Current Node #: 174, Diagonal Node #: 149, (260) 
+Element #: 94, Current Node #: 177, Diagonal Node #: 146, (254) 
+Element #: 94, Current Node #: 178, Diagonal Node #: 145, (253) 
+Element #: 95, Current Node #: 146, Diagonal Node #: 179, (311) 
+Element #: 95, Current Node #: 147, Diagonal Node #: 178, (310) 
+Element #: 95, Current Node #: 150, Diagonal Node #: 175, (304) 
+Element #: 95, Current Node #: 151, Diagonal Node #: 174, (303) 
+Element #: 95, Current Node #: 174, Diagonal Node #: 151, (262) 
+Element #: 95, Current Node #: 175, Diagonal Node #: 150, (261) 
+Element #: 95, Current Node #: 178, Diagonal Node #: 147, (255) 
+Element #: 95, Current Node #: 179, Diagonal Node #: 146, (254) 
+Element #: 96, Current Node #: 148, Diagonal Node #: 181, (316) 
+Element #: 96, Current Node #: 149, Diagonal Node #: 180, (315) 
+Element #: 96, Current Node #: 152, Diagonal Node #: 177, (309) 
+Element #: 96, Current Node #: 153, Diagonal Node #: 176, (308) 
+Element #: 96, Current Node #: 176, Diagonal Node #: 153, (267) 
+Element #: 96, Current Node #: 177, Diagonal Node #: 152, (266) 
+Element #: 96, Current Node #: 180, Diagonal Node #: 149, (260) 
+Element #: 96, Current Node #: 181, Diagonal Node #: 148, (259) 
+Element #: 97, Current Node #: 149, Diagonal Node #: 182, (317) 
+Element #: 97, Current Node #: 150, Diagonal Node #: 181, (316) 
+Element #: 97, Current Node #: 153, Diagonal Node #: 178, (310) 
+Element #: 97, Current Node #: 154, Diagonal Node #: 177, (309) 
+Element #: 97, Current Node #: 177, Diagonal Node #: 154, (268) 
+Element #: 97, Current Node #: 178, Diagonal Node #: 153, (267) 
+Element #: 97, Current Node #: 181, Diagonal Node #: 150, (261) 
+Element #: 97, Current Node #: 182, Diagonal Node #: 149, (260) 
+Element #: 98, Current Node #: 150, Diagonal Node #: 183, (318) 
+Element #: 98, Current Node #: 151, Diagonal Node #: 182, (317) 
+Element #: 98, Current Node #: 154, Diagonal Node #: 179, (311) 
+Element #: 98, Current Node #: 155, Diagonal Node #: 178, (310) 
+Element #: 98, Current Node #: 178, Diagonal Node #: 155, (269) 
+Element #: 98, Current Node #: 179, Diagonal Node #: 154, (268) 
+Element #: 98, Current Node #: 182, Diagonal Node #: 151, (262) 
+Element #: 98, Current Node #: 183, Diagonal Node #: 150, (261) 
+Element #: 99, Current Node #: 152, Diagonal Node #: 185, (323) 
+Element #: 99, Current Node #: 153, Diagonal Node #: 184, (322) 
+Element #: 99, Current Node #: 156, Diagonal Node #: 181, (316) 
+Element #: 99, Current Node #: 157, Diagonal Node #: 180, (315) 
+Element #: 99, Current Node #: 180, Diagonal Node #: 157, (274) 
+Element #: 99, Current Node #: 181, Diagonal Node #: 156, (273) 
+Element #: 99, Current Node #: 184, Diagonal Node #: 153, (267) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 152, (266) 
+Element #: 100, Current Node #: 153, Diagonal Node #: 186, (324) 
+Element #: 100, Current Node #: 154, Diagonal Node #: 185, (323) 
+Element #: 100, Current Node #: 157, Diagonal Node #: 182, (317) 
+Element #: 100, Current Node #: 158, Diagonal Node #: 181, (316) 
+Element #: 100, Current Node #: 181, Diagonal Node #: 158, (275) 
+Element #: 100, Current Node #: 182, Diagonal Node #: 157, (274) 
+Element #: 100, Current Node #: 185, Diagonal Node #: 154, (268) 
+Element #: 100, Current Node #: 186, Diagonal Node #: 153, (267) 
+Element #: 101, Current Node #: 154, Diagonal Node #: 187, (325) 
+Element #: 101, Current Node #: 155, Diagonal Node #: 186, (324) 
+Element #: 101, Current Node #: 158, Diagonal Node #: 183, (318) 
+Element #: 101, Current Node #: 159, Diagonal Node #: 182, (317) 
+Element #: 101, Current Node #: 182, Diagonal Node #: 159, (276) 
+Element #: 101, Current Node #: 183, Diagonal Node #: 158, (275) 
+Element #: 101, Current Node #: 186, Diagonal Node #: 155, (269) 
+Element #: 101, Current Node #: 187, Diagonal Node #: 154, (268) 
+Element #: 102, Current Node #: 156, Diagonal Node #: 189, (330) 
+Element #: 102, Current Node #: 157, Diagonal Node #: 188, (329) 
+Element #: 102, Current Node #: 160, Diagonal Node #: 185, (323) 
+Element #: 102, Current Node #: 161, Diagonal Node #: 184, (322) 
+Element #: 102, Current Node #: 184, Diagonal Node #: 161, (281) 
+Element #: 102, Current Node #: 185, Diagonal Node #: 160, (280) 
+Element #: 102, Current Node #: 188, Diagonal Node #: 157, (274) 
+Element #: 102, Current Node #: 189, Diagonal Node #: 156, (273) 
+Element #: 103, Current Node #: 157, Diagonal Node #: 190, (331) 
+Element #: 103, Current Node #: 158, Diagonal Node #: 189, (330) 
+Element #: 103, Current Node #: 161, Diagonal Node #: 186, (324) 
+Element #: 103, Current Node #: 162, Diagonal Node #: 185, (323) 
+Element #: 103, Current Node #: 185, Diagonal Node #: 162, (282) 
+Element #: 103, Current Node #: 186, Diagonal Node #: 161, (281) 
+Element #: 103, Current Node #: 189, Diagonal Node #: 158, (275) 
+Element #: 103, Current Node #: 190, Diagonal Node #: 157, (274) 
+Element #: 104, Current Node #: 158, Diagonal Node #: 191, (332) 
+Element #: 104, Current Node #: 159, Diagonal Node #: 190, (331) 
+Element #: 104, Current Node #: 162, Diagonal Node #: 187, (325) 
+Element #: 104, Current Node #: 163, Diagonal Node #: 186, (324) 
+Element #: 104, Current Node #: 186, Diagonal Node #: 163, (283) 
+Element #: 104, Current Node #: 187, Diagonal Node #: 162, (282) 
+Element #: 104, Current Node #: 190, Diagonal Node #: 159, (276) 
+Element #: 104, Current Node #: 191, Diagonal Node #: 158, (275) 
+Element #: 105, Current Node #: 160, Diagonal Node #: 193, (337) 
+Element #: 105, Current Node #: 161, Diagonal Node #: 192, (336) 
+Element #: 105, Current Node #: 164, Diagonal Node #: 189, (330) 
+Element #: 105, Current Node #: 165, Diagonal Node #: 188, (329) 
+Element #: 105, Current Node #: 188, Diagonal Node #: 165, (288) 
+Element #: 105, Current Node #: 189, Diagonal Node #: 164, (287) 
+Element #: 105, Current Node #: 192, Diagonal Node #: 161, (281) 
+Element #: 105, Current Node #: 193, Diagonal Node #: 160, (280) 
+Element #: 106, Current Node #: 161, Diagonal Node #: 194, (338) 
+Element #: 106, Current Node #: 162, Diagonal Node #: 193, (337) 
+Element #: 106, Current Node #: 165, Diagonal Node #: 190, (331) 
+Element #: 106, Current Node #: 166, Diagonal Node #: 189, (330) 
+Element #: 106, Current Node #: 189, Diagonal Node #: 166, (289) 
+Element #: 106, Current Node #: 190, Diagonal Node #: 165, (288) 
+Element #: 106, Current Node #: 193, Diagonal Node #: 162, (282) 
+Element #: 106, Current Node #: 194, Diagonal Node #: 161, (281) 
+Element #: 107, Current Node #: 162, Diagonal Node #: 195, (339) 
+Element #: 107, Current Node #: 163, Diagonal Node #: 194, (338) 
+Element #: 107, Current Node #: 166, Diagonal Node #: 191, (332) 
+Element #: 107, Current Node #: 167, Diagonal Node #: 190, (331) 
+Element #: 107, Current Node #: 190, Diagonal Node #: 167, (290) 
+Element #: 107, Current Node #: 191, Diagonal Node #: 166, (289) 
+Element #: 107, Current Node #: 194, Diagonal Node #: 163, (283) 
+Element #: 107, Current Node #: 195, Diagonal Node #: 162, (282) 
+Element #: 108, Current Node #: 3, Diagonal Node #: 204, (60) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 35, (59) 
+Element #: 108, Current Node #: 7, Diagonal Node #: 203, (53) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 31, (52) 
+Element #: 108, Current Node #: 31, Diagonal Node #: 197, (11) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 7, (10) 
+Element #: 108, Current Node #: 35, Diagonal Node #: 196, (4) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 3, (3) 
+Element #: 109, Current Node #: 7, Diagonal Node #: 205, (67) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 39, (66) 
+Element #: 109, Current Node #: 11, Diagonal Node #: 204, (60) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 35, (59) 
+Element #: 109, Current Node #: 35, Diagonal Node #: 198, (18) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 11, (17) 
+Element #: 109, Current Node #: 39, Diagonal Node #: 197, (11) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 7, (10) 
+Element #: 110, Current Node #: 11, Diagonal Node #: 206, (74) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 43, (73) 
+Element #: 110, Current Node #: 15, Diagonal Node #: 205, (67) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 39, (66) 
+Element #: 110, Current Node #: 39, Diagonal Node #: 199, (25) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 15, (24) 
+Element #: 110, Current Node #: 43, Diagonal Node #: 198, (18) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 11, (17) 
+Element #: 111, Current Node #: 15, Diagonal Node #: 207, (81) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 47, (80) 
+Element #: 111, Current Node #: 19, Diagonal Node #: 206, (74) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 43, (73) 
+Element #: 111, Current Node #: 43, Diagonal Node #: 200, (32) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 19, (31) 
+Element #: 111, Current Node #: 47, Diagonal Node #: 199, (25) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 15, (24) 
+Element #: 112, Current Node #: 19, Diagonal Node #: 208, (88) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 51, (87) 
+Element #: 112, Current Node #: 23, Diagonal Node #: 207, (81) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 47, (80) 
+Element #: 112, Current Node #: 47, Diagonal Node #: 201, (39) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 23, (38) 
+Element #: 112, Current Node #: 51, Diagonal Node #: 200, (32) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 19, (31) 
+Element #: 113, Current Node #: 23, Diagonal Node #: 209, (95) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 55, (94) 
+Element #: 113, Current Node #: 27, Diagonal Node #: 208, (88) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 51, (87) 
+Element #: 113, Current Node #: 51, Diagonal Node #: 202, (46) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 27, (45) 
+Element #: 113, Current Node #: 55, Diagonal Node #: 201, (39) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 23, (38) 
+Element #: 114, Current Node #: 31, Diagonal Node #: 211, (109) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 63, (108) 
+Element #: 114, Current Node #: 35, Diagonal Node #: 210, (102) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 59, (101) 
+Element #: 114, Current Node #: 59, Diagonal Node #: 204, (60) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 35, (59) 
+Element #: 114, Current Node #: 63, Diagonal Node #: 203, (53) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 31, (52) 
+Element #: 115, Current Node #: 35, Diagonal Node #: 212, (116) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 67, (115) 
+Element #: 115, Current Node #: 39, Diagonal Node #: 211, (109) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 63, (108) 
+Element #: 115, Current Node #: 63, Diagonal Node #: 205, (67) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 39, (66) 
+Element #: 115, Current Node #: 67, Diagonal Node #: 204, (60) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 35, (59) 
+Element #: 116, Current Node #: 39, Diagonal Node #: 213, (123) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 71, (122) 
+Element #: 116, Current Node #: 43, Diagonal Node #: 212, (116) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 67, (115) 
+Element #: 116, Current Node #: 67, Diagonal Node #: 206, (74) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 43, (73) 
+Element #: 116, Current Node #: 71, Diagonal Node #: 205, (67) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 39, (66) 
+Element #: 117, Current Node #: 43, Diagonal Node #: 214, (130) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 75, (129) 
+Element #: 117, Current Node #: 47, Diagonal Node #: 213, (123) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 71, (122) 
+Element #: 117, Current Node #: 71, Diagonal Node #: 207, (81) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 47, (80) 
+Element #: 117, Current Node #: 75, Diagonal Node #: 206, (74) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 43, (73) 
+Element #: 118, Current Node #: 47, Diagonal Node #: 215, (137) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 79, (136) 
+Element #: 118, Current Node #: 51, Diagonal Node #: 214, (130) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 75, (129) 
+Element #: 118, Current Node #: 75, Diagonal Node #: 208, (88) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 51, (87) 
+Element #: 118, Current Node #: 79, Diagonal Node #: 207, (81) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 47, (80) 
+Element #: 119, Current Node #: 51, Diagonal Node #: 216, (144) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 83, (143) 
+Element #: 119, Current Node #: 55, Diagonal Node #: 215, (137) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 79, (136) 
+Element #: 119, Current Node #: 79, Diagonal Node #: 209, (95) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 55, (94) 
+Element #: 119, Current Node #: 83, Diagonal Node #: 208, (88) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 51, (87) 
+Element #: 120, Current Node #: 59, Diagonal Node #: 218, (158) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 91, (157) 
+Element #: 120, Current Node #: 63, Diagonal Node #: 217, (151) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 87, (150) 
+Element #: 120, Current Node #: 87, Diagonal Node #: 211, (109) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 63, (108) 
+Element #: 120, Current Node #: 91, Diagonal Node #: 210, (102) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 59, (101) 
+Element #: 121, Current Node #: 63, Diagonal Node #: 219, (165) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 95, (164) 
+Element #: 121, Current Node #: 67, Diagonal Node #: 218, (158) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 91, (157) 
+Element #: 121, Current Node #: 91, Diagonal Node #: 212, (116) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 67, (115) 
+Element #: 121, Current Node #: 95, Diagonal Node #: 211, (109) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 63, (108) 
+Element #: 122, Current Node #: 67, Diagonal Node #: 220, (172) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 99, (171) 
+Element #: 122, Current Node #: 71, Diagonal Node #: 219, (165) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 95, (164) 
+Element #: 122, Current Node #: 95, Diagonal Node #: 213, (123) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 71, (122) 
+Element #: 122, Current Node #: 99, Diagonal Node #: 212, (116) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 67, (115) 
+Element #: 123, Current Node #: 71, Diagonal Node #: 221, (179) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 103, (178) 
+Element #: 123, Current Node #: 75, Diagonal Node #: 220, (172) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 99, (171) 
+Element #: 123, Current Node #: 99, Diagonal Node #: 214, (130) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 75, (129) 
+Element #: 123, Current Node #: 103, Diagonal Node #: 213, (123) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 71, (122) 
+Element #: 124, Current Node #: 75, Diagonal Node #: 222, (186) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 107, (185) 
+Element #: 124, Current Node #: 79, Diagonal Node #: 221, (179) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 103, (178) 
+Element #: 124, Current Node #: 103, Diagonal Node #: 215, (137) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 79, (136) 
+Element #: 124, Current Node #: 107, Diagonal Node #: 214, (130) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 75, (129) 
+Element #: 125, Current Node #: 79, Diagonal Node #: 223, (193) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 111, (192) 
+Element #: 125, Current Node #: 83, Diagonal Node #: 222, (186) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 107, (185) 
+Element #: 125, Current Node #: 107, Diagonal Node #: 216, (144) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 83, (143) 
+Element #: 125, Current Node #: 111, Diagonal Node #: 215, (137) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 79, (136) 
+Element #: 126, Current Node #: 87, Diagonal Node #: 225, (207) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 119, (206) 
+Element #: 126, Current Node #: 91, Diagonal Node #: 224, (200) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 115, (199) 
+Element #: 126, Current Node #: 115, Diagonal Node #: 218, (158) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 91, (157) 
+Element #: 126, Current Node #: 119, Diagonal Node #: 217, (151) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 87, (150) 
+Element #: 127, Current Node #: 91, Diagonal Node #: 226, (214) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 123, (213) 
+Element #: 127, Current Node #: 95, Diagonal Node #: 225, (207) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 119, (206) 
+Element #: 127, Current Node #: 119, Diagonal Node #: 219, (165) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 95, (164) 
+Element #: 127, Current Node #: 123, Diagonal Node #: 218, (158) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 91, (157) 
+Element #: 128, Current Node #: 95, Diagonal Node #: 227, (221) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 127, (220) 
+Element #: 128, Current Node #: 99, Diagonal Node #: 226, (214) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 123, (213) 
+Element #: 128, Current Node #: 123, Diagonal Node #: 220, (172) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 99, (171) 
+Element #: 128, Current Node #: 127, Diagonal Node #: 219, (165) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 95, (164) 
+Element #: 129, Current Node #: 99, Diagonal Node #: 228, (228) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 131, (227) 
+Element #: 129, Current Node #: 103, Diagonal Node #: 227, (221) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 127, (220) 
+Element #: 129, Current Node #: 127, Diagonal Node #: 221, (179) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 103, (178) 
+Element #: 129, Current Node #: 131, Diagonal Node #: 220, (172) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 99, (171) 
+Element #: 130, Current Node #: 103, Diagonal Node #: 229, (235) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 135, (234) 
+Element #: 130, Current Node #: 107, Diagonal Node #: 228, (228) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 131, (227) 
+Element #: 130, Current Node #: 131, Diagonal Node #: 222, (186) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 107, (185) 
+Element #: 130, Current Node #: 135, Diagonal Node #: 221, (179) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 103, (178) 
+Element #: 131, Current Node #: 107, Diagonal Node #: 230, (242) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 139, (241) 
+Element #: 131, Current Node #: 111, Diagonal Node #: 229, (235) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 135, (234) 
+Element #: 131, Current Node #: 135, Diagonal Node #: 223, (193) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 111, (192) 
+Element #: 131, Current Node #: 139, Diagonal Node #: 222, (186) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 107, (185) 
+Element #: 132, Current Node #: 115, Diagonal Node #: 232, (256) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 147, (255) 
+Element #: 132, Current Node #: 119, Diagonal Node #: 231, (249) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 143, (248) 
+Element #: 132, Current Node #: 143, Diagonal Node #: 225, (207) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 119, (206) 
+Element #: 132, Current Node #: 147, Diagonal Node #: 224, (200) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 115, (199) 
+Element #: 133, Current Node #: 119, Diagonal Node #: 233, (263) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 151, (262) 
+Element #: 133, Current Node #: 123, Diagonal Node #: 232, (256) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 147, (255) 
+Element #: 133, Current Node #: 147, Diagonal Node #: 226, (214) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 123, (213) 
+Element #: 133, Current Node #: 151, Diagonal Node #: 225, (207) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 119, (206) 
+Element #: 134, Current Node #: 123, Diagonal Node #: 234, (270) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 155, (269) 
+Element #: 134, Current Node #: 127, Diagonal Node #: 233, (263) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 151, (262) 
+Element #: 134, Current Node #: 151, Diagonal Node #: 227, (221) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 127, (220) 
+Element #: 134, Current Node #: 155, Diagonal Node #: 226, (214) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 123, (213) 
+Element #: 135, Current Node #: 127, Diagonal Node #: 235, (277) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 159, (276) 
+Element #: 135, Current Node #: 131, Diagonal Node #: 234, (270) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 155, (269) 
+Element #: 135, Current Node #: 155, Diagonal Node #: 228, (228) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 131, (227) 
+Element #: 135, Current Node #: 159, Diagonal Node #: 227, (221) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 127, (220) 
+Element #: 136, Current Node #: 131, Diagonal Node #: 236, (284) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 163, (283) 
+Element #: 136, Current Node #: 135, Diagonal Node #: 235, (277) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 159, (276) 
+Element #: 136, Current Node #: 159, Diagonal Node #: 229, (235) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 135, (234) 
+Element #: 136, Current Node #: 163, Diagonal Node #: 228, (228) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 131, (227) 
+Element #: 137, Current Node #: 135, Diagonal Node #: 237, (291) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 167, (290) 
+Element #: 137, Current Node #: 139, Diagonal Node #: 236, (284) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 163, (283) 
+Element #: 137, Current Node #: 163, Diagonal Node #: 230, (242) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 139, (241) 
+Element #: 137, Current Node #: 167, Diagonal Node #: 229, (235) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 135, (234) 
+Element #: 138, Current Node #: 143, Diagonal Node #: 239, (305) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 175, (304) 
+Element #: 138, Current Node #: 147, Diagonal Node #: 238, (298) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 171, (297) 
+Element #: 138, Current Node #: 171, Diagonal Node #: 232, (256) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 147, (255) 
+Element #: 138, Current Node #: 175, Diagonal Node #: 231, (249) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 143, (248) 
+Element #: 139, Current Node #: 147, Diagonal Node #: 240, (312) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 179, (311) 
+Element #: 139, Current Node #: 151, Diagonal Node #: 239, (305) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 175, (304) 
+Element #: 139, Current Node #: 175, Diagonal Node #: 233, (263) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 151, (262) 
+Element #: 139, Current Node #: 179, Diagonal Node #: 232, (256) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 147, (255) 
+Element #: 140, Current Node #: 151, Diagonal Node #: 241, (319) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 183, (318) 
+Element #: 140, Current Node #: 155, Diagonal Node #: 240, (312) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 179, (311) 
+Element #: 140, Current Node #: 179, Diagonal Node #: 234, (270) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 155, (269) 
+Element #: 140, Current Node #: 183, Diagonal Node #: 233, (263) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 151, (262) 
+Element #: 141, Current Node #: 155, Diagonal Node #: 242, (326) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 187, (325) 
+Element #: 141, Current Node #: 159, Diagonal Node #: 241, (319) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 183, (318) 
+Element #: 141, Current Node #: 183, Diagonal Node #: 235, (277) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 159, (276) 
+Element #: 141, Current Node #: 187, Diagonal Node #: 234, (270) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 155, (269) 
+Element #: 142, Current Node #: 159, Diagonal Node #: 243, (333) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 191, (332) 
+Element #: 142, Current Node #: 163, Diagonal Node #: 242, (326) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 187, (325) 
+Element #: 142, Current Node #: 187, Diagonal Node #: 236, (284) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 163, (283) 
+Element #: 142, Current Node #: 191, Diagonal Node #: 235, (277) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 159, (276) 
+Element #: 143, Current Node #: 163, Diagonal Node #: 244, (340) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 195, (339) 
+Element #: 143, Current Node #: 167, Diagonal Node #: 243, (333) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 191, (332) 
+Element #: 143, Current Node #: 191, Diagonal Node #: 237, (291) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 167, (290) 
+Element #: 143, Current Node #: 195, Diagonal Node #: 236, (284) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 163, (283) 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testRegularMeshUtils  " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1153 @@
+StGermain Framework revision 3900. Copyright (C) 2003-2005 VPAC.
+Element #: 0, Current Node #: 147, Diagonal Node #: 24, (60) 
+Element #: 0, Current Node #: 0, Diagonal Node #: 155, (59) 
+Element #: 0, Current Node #: 148, Diagonal Node #: 21, (53) 
+Element #: 0, Current Node #: 3, Diagonal Node #: 154, (52) 
+Element #: 0, Current Node #: 154, Diagonal Node #: 3, (11) 
+Element #: 0, Current Node #: 21, Diagonal Node #: 148, (10) 
+Element #: 0, Current Node #: 155, Diagonal Node #: 0, (4) 
+Element #: 0, Current Node #: 24, Diagonal Node #: 147, (3) 
+Element #: 1, Current Node #: 0, Diagonal Node #: 25, (61) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 24, (60) 
+Element #: 1, Current Node #: 3, Diagonal Node #: 22, (54) 
+Element #: 1, Current Node #: 4, Diagonal Node #: 21, (53) 
+Element #: 1, Current Node #: 21, Diagonal Node #: 4, (12) 
+Element #: 1, Current Node #: 22, Diagonal Node #: 3, (11) 
+Element #: 1, Current Node #: 24, Diagonal Node #: 1, (5) 
+Element #: 1, Current Node #: 25, Diagonal Node #: 0, (4) 
+Element #: 2, Current Node #: 1, Diagonal Node #: 26, (62) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 25, (61) 
+Element #: 2, Current Node #: 4, Diagonal Node #: 23, (55) 
+Element #: 2, Current Node #: 5, Diagonal Node #: 22, (54) 
+Element #: 2, Current Node #: 22, Diagonal Node #: 5, (13) 
+Element #: 2, Current Node #: 23, Diagonal Node #: 4, (12) 
+Element #: 2, Current Node #: 25, Diagonal Node #: 2, (6) 
+Element #: 2, Current Node #: 26, Diagonal Node #: 1, (5) 
+Element #: 3, Current Node #: 148, Diagonal Node #: 27, (67) 
+Element #: 3, Current Node #: 3, Diagonal Node #: 156, (66) 
+Element #: 3, Current Node #: 149, Diagonal Node #: 24, (60) 
+Element #: 3, Current Node #: 6, Diagonal Node #: 155, (59) 
+Element #: 3, Current Node #: 155, Diagonal Node #: 6, (18) 
+Element #: 3, Current Node #: 24, Diagonal Node #: 149, (17) 
+Element #: 3, Current Node #: 156, Diagonal Node #: 3, (11) 
+Element #: 3, Current Node #: 27, Diagonal Node #: 148, (10) 
+Element #: 4, Current Node #: 3, Diagonal Node #: 28, (68) 
+Element #: 4, Current Node #: 4, Diagonal Node #: 27, (67) 
+Element #: 4, Current Node #: 6, Diagonal Node #: 25, (61) 
+Element #: 4, Current Node #: 7, Diagonal Node #: 24, (60) 
+Element #: 4, Current Node #: 24, Diagonal Node #: 7, (19) 
+Element #: 4, Current Node #: 25, Diagonal Node #: 6, (18) 
+Element #: 4, Current Node #: 27, Diagonal Node #: 4, (12) 
+Element #: 4, Current Node #: 28, Diagonal Node #: 3, (11) 
+Element #: 5, Current Node #: 4, Diagonal Node #: 29, (69) 
+Element #: 5, Current Node #: 5, Diagonal Node #: 28, (68) 
+Element #: 5, Current Node #: 7, Diagonal Node #: 26, (62) 
+Element #: 5, Current Node #: 8, Diagonal Node #: 25, (61) 
+Element #: 5, Current Node #: 25, Diagonal Node #: 8, (20) 
+Element #: 5, Current Node #: 26, Diagonal Node #: 7, (19) 
+Element #: 5, Current Node #: 28, Diagonal Node #: 5, (13) 
+Element #: 5, Current Node #: 29, Diagonal Node #: 4, (12) 
+Element #: 6, Current Node #: 149, Diagonal Node #: 30, (74) 
+Element #: 6, Current Node #: 6, Diagonal Node #: 157, (73) 
+Element #: 6, Current Node #: 150, Diagonal Node #: 27, (67) 
+Element #: 6, Current Node #: 9, Diagonal Node #: 156, (66) 
+Element #: 6, Current Node #: 156, Diagonal Node #: 9, (25) 
+Element #: 6, Current Node #: 27, Diagonal Node #: 150, (24) 
+Element #: 6, Current Node #: 157, Diagonal Node #: 6, (18) 
+Element #: 6, Current Node #: 30, Diagonal Node #: 149, (17) 
+Element #: 7, Current Node #: 6, Diagonal Node #: 31, (75) 
+Element #: 7, Current Node #: 7, Diagonal Node #: 30, (74) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 28, (68) 
+Element #: 7, Current Node #: 10, Diagonal Node #: 27, (67) 
+Element #: 7, Current Node #: 27, Diagonal Node #: 10, (26) 
+Element #: 7, Current Node #: 28, Diagonal Node #: 9, (25) 
+Element #: 7, Current Node #: 30, Diagonal Node #: 7, (19) 
+Element #: 7, Current Node #: 31, Diagonal Node #: 6, (18) 
+Element #: 8, Current Node #: 7, Diagonal Node #: 32, (76) 
+Element #: 8, Current Node #: 8, Diagonal Node #: 31, (75) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 29, (69) 
+Element #: 8, Current Node #: 11, Diagonal Node #: 28, (68) 
+Element #: 8, Current Node #: 28, Diagonal Node #: 11, (27) 
+Element #: 8, Current Node #: 29, Diagonal Node #: 10, (26) 
+Element #: 8, Current Node #: 31, Diagonal Node #: 8, (20) 
+Element #: 8, Current Node #: 32, Diagonal Node #: 7, (19) 
+Element #: 9, Current Node #: 150, Diagonal Node #: 33, (81) 
+Element #: 9, Current Node #: 9, Diagonal Node #: 158, (80) 
+Element #: 9, Current Node #: 151, Diagonal Node #: 30, (74) 
+Element #: 9, Current Node #: 12, Diagonal Node #: 157, (73) 
+Element #: 9, Current Node #: 157, Diagonal Node #: 12, (32) 
+Element #: 9, Current Node #: 30, Diagonal Node #: 151, (31) 
+Element #: 9, Current Node #: 158, Diagonal Node #: 9, (25) 
+Element #: 9, Current Node #: 33, Diagonal Node #: 150, (24) 
+Element #: 10, Current Node #: 9, Diagonal Node #: 34, (82) 
+Element #: 10, Current Node #: 10, Diagonal Node #: 33, (81) 
+Element #: 10, Current Node #: 12, Diagonal Node #: 31, (75) 
+Element #: 10, Current Node #: 13, Diagonal Node #: 30, (74) 
+Element #: 10, Current Node #: 30, Diagonal Node #: 13, (33) 
+Element #: 10, Current Node #: 31, Diagonal Node #: 12, (32) 
+Element #: 10, Current Node #: 33, Diagonal Node #: 10, (26) 
+Element #: 10, Current Node #: 34, Diagonal Node #: 9, (25) 
+Element #: 11, Current Node #: 10, Diagonal Node #: 35, (83) 
+Element #: 11, Current Node #: 11, Diagonal Node #: 34, (82) 
+Element #: 11, Current Node #: 13, Diagonal Node #: 32, (76) 
+Element #: 11, Current Node #: 14, Diagonal Node #: 31, (75) 
+Element #: 11, Current Node #: 31, Diagonal Node #: 14, (34) 
+Element #: 11, Current Node #: 32, Diagonal Node #: 13, (33) 
+Element #: 11, Current Node #: 34, Diagonal Node #: 11, (27) 
+Element #: 11, Current Node #: 35, Diagonal Node #: 10, (26) 
+Element #: 12, Current Node #: 151, Diagonal Node #: 36, (88) 
+Element #: 12, Current Node #: 12, Diagonal Node #: 159, (87) 
+Element #: 12, Current Node #: 152, Diagonal Node #: 33, (81) 
+Element #: 12, Current Node #: 15, Diagonal Node #: 158, (80) 
+Element #: 12, Current Node #: 158, Diagonal Node #: 15, (39) 
+Element #: 12, Current Node #: 33, Diagonal Node #: 152, (38) 
+Element #: 12, Current Node #: 159, Diagonal Node #: 12, (32) 
+Element #: 12, Current Node #: 36, Diagonal Node #: 151, (31) 
+Element #: 13, Current Node #: 12, Diagonal Node #: 37, (89) 
+Element #: 13, Current Node #: 13, Diagonal Node #: 36, (88) 
+Element #: 13, Current Node #: 15, Diagonal Node #: 34, (82) 
+Element #: 13, Current Node #: 16, Diagonal Node #: 33, (81) 
+Element #: 13, Current Node #: 33, Diagonal Node #: 16, (40) 
+Element #: 13, Current Node #: 34, Diagonal Node #: 15, (39) 
+Element #: 13, Current Node #: 36, Diagonal Node #: 13, (33) 
+Element #: 13, Current Node #: 37, Diagonal Node #: 12, (32) 
+Element #: 14, Current Node #: 13, Diagonal Node #: 38, (90) 
+Element #: 14, Current Node #: 14, Diagonal Node #: 37, (89) 
+Element #: 14, Current Node #: 16, Diagonal Node #: 35, (83) 
+Element #: 14, Current Node #: 17, Diagonal Node #: 34, (82) 
+Element #: 14, Current Node #: 34, Diagonal Node #: 17, (41) 
+Element #: 14, Current Node #: 35, Diagonal Node #: 16, (40) 
+Element #: 14, Current Node #: 37, Diagonal Node #: 14, (34) 
+Element #: 14, Current Node #: 38, Diagonal Node #: 13, (33) 
+Element #: 15, Current Node #: 152, Diagonal Node #: 39, (95) 
+Element #: 15, Current Node #: 15, Diagonal Node #: 160, (94) 
+Element #: 15, Current Node #: 153, Diagonal Node #: 36, (88) 
+Element #: 15, Current Node #: 18, Diagonal Node #: 159, (87) 
+Element #: 15, Current Node #: 159, Diagonal Node #: 18, (46) 
+Element #: 15, Current Node #: 36, Diagonal Node #: 153, (45) 
+Element #: 15, Current Node #: 160, Diagonal Node #: 15, (39) 
+Element #: 15, Current Node #: 39, Diagonal Node #: 152, (38) 
+Element #: 16, Current Node #: 15, Diagonal Node #: 40, (96) 
+Element #: 16, Current Node #: 16, Diagonal Node #: 39, (95) 
+Element #: 16, Current Node #: 18, Diagonal Node #: 37, (89) 
+Element #: 16, Current Node #: 19, Diagonal Node #: 36, (88) 
+Element #: 16, Current Node #: 36, Diagonal Node #: 19, (47) 
+Element #: 16, Current Node #: 37, Diagonal Node #: 18, (46) 
+Element #: 16, Current Node #: 39, Diagonal Node #: 16, (40) 
+Element #: 16, Current Node #: 40, Diagonal Node #: 15, (39) 
+Element #: 17, Current Node #: 16, Diagonal Node #: 41, (97) 
+Element #: 17, Current Node #: 17, Diagonal Node #: 40, (96) 
+Element #: 17, Current Node #: 19, Diagonal Node #: 38, (90) 
+Element #: 17, Current Node #: 20, Diagonal Node #: 37, (89) 
+Element #: 17, Current Node #: 37, Diagonal Node #: 20, (48) 
+Element #: 17, Current Node #: 38, Diagonal Node #: 19, (47) 
+Element #: 17, Current Node #: 40, Diagonal Node #: 17, (41) 
+Element #: 17, Current Node #: 41, Diagonal Node #: 16, (40) 
+Element #: 18, Current Node #: 154, Diagonal Node #: 45, (109) 
+Element #: 18, Current Node #: 21, Diagonal Node #: 162, (108) 
+Element #: 18, Current Node #: 155, Diagonal Node #: 42, (102) 
+Element #: 18, Current Node #: 24, Diagonal Node #: 161, (101) 
+Element #: 18, Current Node #: 161, Diagonal Node #: 24, (60) 
+Element #: 18, Current Node #: 42, Diagonal Node #: 155, (59) 
+Element #: 18, Current Node #: 162, Diagonal Node #: 21, (53) 
+Element #: 18, Current Node #: 45, Diagonal Node #: 154, (52) 
+Element #: 19, Current Node #: 21, Diagonal Node #: 46, (110) 
+Element #: 19, Current Node #: 22, Diagonal Node #: 45, (109) 
+Element #: 19, Current Node #: 24, Diagonal Node #: 43, (103) 
+Element #: 19, Current Node #: 25, Diagonal Node #: 42, (102) 
+Element #: 19, Current Node #: 42, Diagonal Node #: 25, (61) 
+Element #: 19, Current Node #: 43, Diagonal Node #: 24, (60) 
+Element #: 19, Current Node #: 45, Diagonal Node #: 22, (54) 
+Element #: 19, Current Node #: 46, Diagonal Node #: 21, (53) 
+Element #: 20, Current Node #: 22, Diagonal Node #: 47, (111) 
+Element #: 20, Current Node #: 23, Diagonal Node #: 46, (110) 
+Element #: 20, Current Node #: 25, Diagonal Node #: 44, (104) 
+Element #: 20, Current Node #: 26, Diagonal Node #: 43, (103) 
+Element #: 20, Current Node #: 43, Diagonal Node #: 26, (62) 
+Element #: 20, Current Node #: 44, Diagonal Node #: 25, (61) 
+Element #: 20, Current Node #: 46, Diagonal Node #: 23, (55) 
+Element #: 20, Current Node #: 47, Diagonal Node #: 22, (54) 
+Element #: 21, Current Node #: 155, Diagonal Node #: 48, (116) 
+Element #: 21, Current Node #: 24, Diagonal Node #: 163, (115) 
+Element #: 21, Current Node #: 156, Diagonal Node #: 45, (109) 
+Element #: 21, Current Node #: 27, Diagonal Node #: 162, (108) 
+Element #: 21, Current Node #: 162, Diagonal Node #: 27, (67) 
+Element #: 21, Current Node #: 45, Diagonal Node #: 156, (66) 
+Element #: 21, Current Node #: 163, Diagonal Node #: 24, (60) 
+Element #: 21, Current Node #: 48, Diagonal Node #: 155, (59) 
+Element #: 22, Current Node #: 24, Diagonal Node #: 49, (117) 
+Element #: 22, Current Node #: 25, Diagonal Node #: 48, (116) 
+Element #: 22, Current Node #: 27, Diagonal Node #: 46, (110) 
+Element #: 22, Current Node #: 28, Diagonal Node #: 45, (109) 
+Element #: 22, Current Node #: 45, Diagonal Node #: 28, (68) 
+Element #: 22, Current Node #: 46, Diagonal Node #: 27, (67) 
+Element #: 22, Current Node #: 48, Diagonal Node #: 25, (61) 
+Element #: 22, Current Node #: 49, Diagonal Node #: 24, (60) 
+Element #: 23, Current Node #: 25, Diagonal Node #: 50, (118) 
+Element #: 23, Current Node #: 26, Diagonal Node #: 49, (117) 
+Element #: 23, Current Node #: 28, Diagonal Node #: 47, (111) 
+Element #: 23, Current Node #: 29, Diagonal Node #: 46, (110) 
+Element #: 23, Current Node #: 46, Diagonal Node #: 29, (69) 
+Element #: 23, Current Node #: 47, Diagonal Node #: 28, (68) 
+Element #: 23, Current Node #: 49, Diagonal Node #: 26, (62) 
+Element #: 23, Current Node #: 50, Diagonal Node #: 25, (61) 
+Element #: 24, Current Node #: 156, Diagonal Node #: 51, (123) 
+Element #: 24, Current Node #: 27, Diagonal Node #: 164, (122) 
+Element #: 24, Current Node #: 157, Diagonal Node #: 48, (116) 
+Element #: 24, Current Node #: 30, Diagonal Node #: 163, (115) 
+Element #: 24, Current Node #: 163, Diagonal Node #: 30, (74) 
+Element #: 24, Current Node #: 48, Diagonal Node #: 157, (73) 
+Element #: 24, Current Node #: 164, Diagonal Node #: 27, (67) 
+Element #: 24, Current Node #: 51, Diagonal Node #: 156, (66) 
+Element #: 25, Current Node #: 27, Diagonal Node #: 52, (124) 
+Element #: 25, Current Node #: 28, Diagonal Node #: 51, (123) 
+Element #: 25, Current Node #: 30, Diagonal Node #: 49, (117) 
+Element #: 25, Current Node #: 31, Diagonal Node #: 48, (116) 
+Element #: 25, Current Node #: 48, Diagonal Node #: 31, (75) 
+Element #: 25, Current Node #: 49, Diagonal Node #: 30, (74) 
+Element #: 25, Current Node #: 51, Diagonal Node #: 28, (68) 
+Element #: 25, Current Node #: 52, Diagonal Node #: 27, (67) 
+Element #: 26, Current Node #: 28, Diagonal Node #: 53, (125) 
+Element #: 26, Current Node #: 29, Diagonal Node #: 52, (124) 
+Element #: 26, Current Node #: 31, Diagonal Node #: 50, (118) 
+Element #: 26, Current Node #: 32, Diagonal Node #: 49, (117) 
+Element #: 26, Current Node #: 49, Diagonal Node #: 32, (76) 
+Element #: 26, Current Node #: 50, Diagonal Node #: 31, (75) 
+Element #: 26, Current Node #: 52, Diagonal Node #: 29, (69) 
+Element #: 26, Current Node #: 53, Diagonal Node #: 28, (68) 
+Element #: 27, Current Node #: 157, Diagonal Node #: 54, (130) 
+Element #: 27, Current Node #: 30, Diagonal Node #: 165, (129) 
+Element #: 27, Current Node #: 158, Diagonal Node #: 51, (123) 
+Element #: 27, Current Node #: 33, Diagonal Node #: 164, (122) 
+Element #: 27, Current Node #: 164, Diagonal Node #: 33, (81) 
+Element #: 27, Current Node #: 51, Diagonal Node #: 158, (80) 
+Element #: 27, Current Node #: 165, Diagonal Node #: 30, (74) 
+Element #: 27, Current Node #: 54, Diagonal Node #: 157, (73) 
+Element #: 28, Current Node #: 30, Diagonal Node #: 55, (131) 
+Element #: 28, Current Node #: 31, Diagonal Node #: 54, (130) 
+Element #: 28, Current Node #: 33, Diagonal Node #: 52, (124) 
+Element #: 28, Current Node #: 34, Diagonal Node #: 51, (123) 
+Element #: 28, Current Node #: 51, Diagonal Node #: 34, (82) 
+Element #: 28, Current Node #: 52, Diagonal Node #: 33, (81) 
+Element #: 28, Current Node #: 54, Diagonal Node #: 31, (75) 
+Element #: 28, Current Node #: 55, Diagonal Node #: 30, (74) 
+Element #: 29, Current Node #: 31, Diagonal Node #: 56, (132) 
+Element #: 29, Current Node #: 32, Diagonal Node #: 55, (131) 
+Element #: 29, Current Node #: 34, Diagonal Node #: 53, (125) 
+Element #: 29, Current Node #: 35, Diagonal Node #: 52, (124) 
+Element #: 29, Current Node #: 52, Diagonal Node #: 35, (83) 
+Element #: 29, Current Node #: 53, Diagonal Node #: 34, (82) 
+Element #: 29, Current Node #: 55, Diagonal Node #: 32, (76) 
+Element #: 29, Current Node #: 56, Diagonal Node #: 31, (75) 
+Element #: 30, Current Node #: 158, Diagonal Node #: 57, (137) 
+Element #: 30, Current Node #: 33, Diagonal Node #: 166, (136) 
+Element #: 30, Current Node #: 159, Diagonal Node #: 54, (130) 
+Element #: 30, Current Node #: 36, Diagonal Node #: 165, (129) 
+Element #: 30, Current Node #: 165, Diagonal Node #: 36, (88) 
+Element #: 30, Current Node #: 54, Diagonal Node #: 159, (87) 
+Element #: 30, Current Node #: 166, Diagonal Node #: 33, (81) 
+Element #: 30, Current Node #: 57, Diagonal Node #: 158, (80) 
+Element #: 31, Current Node #: 33, Diagonal Node #: 58, (138) 
+Element #: 31, Current Node #: 34, Diagonal Node #: 57, (137) 
+Element #: 31, Current Node #: 36, Diagonal Node #: 55, (131) 
+Element #: 31, Current Node #: 37, Diagonal Node #: 54, (130) 
+Element #: 31, Current Node #: 54, Diagonal Node #: 37, (89) 
+Element #: 31, Current Node #: 55, Diagonal Node #: 36, (88) 
+Element #: 31, Current Node #: 57, Diagonal Node #: 34, (82) 
+Element #: 31, Current Node #: 58, Diagonal Node #: 33, (81) 
+Element #: 32, Current Node #: 34, Diagonal Node #: 59, (139) 
+Element #: 32, Current Node #: 35, Diagonal Node #: 58, (138) 
+Element #: 32, Current Node #: 37, Diagonal Node #: 56, (132) 
+Element #: 32, Current Node #: 38, Diagonal Node #: 55, (131) 
+Element #: 32, Current Node #: 55, Diagonal Node #: 38, (90) 
+Element #: 32, Current Node #: 56, Diagonal Node #: 37, (89) 
+Element #: 32, Current Node #: 58, Diagonal Node #: 35, (83) 
+Element #: 32, Current Node #: 59, Diagonal Node #: 34, (82) 
+Element #: 33, Current Node #: 159, Diagonal Node #: 60, (144) 
+Element #: 33, Current Node #: 36, Diagonal Node #: 167, (143) 
+Element #: 33, Current Node #: 160, Diagonal Node #: 57, (137) 
+Element #: 33, Current Node #: 39, Diagonal Node #: 166, (136) 
+Element #: 33, Current Node #: 166, Diagonal Node #: 39, (95) 
+Element #: 33, Current Node #: 57, Diagonal Node #: 160, (94) 
+Element #: 33, Current Node #: 167, Diagonal Node #: 36, (88) 
+Element #: 33, Current Node #: 60, Diagonal Node #: 159, (87) 
+Element #: 34, Current Node #: 36, Diagonal Node #: 61, (145) 
+Element #: 34, Current Node #: 37, Diagonal Node #: 60, (144) 
+Element #: 34, Current Node #: 39, Diagonal Node #: 58, (138) 
+Element #: 34, Current Node #: 40, Diagonal Node #: 57, (137) 
+Element #: 34, Current Node #: 57, Diagonal Node #: 40, (96) 
+Element #: 34, Current Node #: 58, Diagonal Node #: 39, (95) 
+Element #: 34, Current Node #: 60, Diagonal Node #: 37, (89) 
+Element #: 34, Current Node #: 61, Diagonal Node #: 36, (88) 
+Element #: 35, Current Node #: 37, Diagonal Node #: 62, (146) 
+Element #: 35, Current Node #: 38, Diagonal Node #: 61, (145) 
+Element #: 35, Current Node #: 40, Diagonal Node #: 59, (139) 
+Element #: 35, Current Node #: 41, Diagonal Node #: 58, (138) 
+Element #: 35, Current Node #: 58, Diagonal Node #: 41, (97) 
+Element #: 35, Current Node #: 59, Diagonal Node #: 40, (96) 
+Element #: 35, Current Node #: 61, Diagonal Node #: 38, (90) 
+Element #: 35, Current Node #: 62, Diagonal Node #: 37, (89) 
+Element #: 36, Current Node #: 161, Diagonal Node #: 66, (158) 
+Element #: 36, Current Node #: 42, Diagonal Node #: 169, (157) 
+Element #: 36, Current Node #: 162, Diagonal Node #: 63, (151) 
+Element #: 36, Current Node #: 45, Diagonal Node #: 168, (150) 
+Element #: 36, Current Node #: 168, Diagonal Node #: 45, (109) 
+Element #: 36, Current Node #: 63, Diagonal Node #: 162, (108) 
+Element #: 36, Current Node #: 169, Diagonal Node #: 42, (102) 
+Element #: 36, Current Node #: 66, Diagonal Node #: 161, (101) 
+Element #: 37, Current Node #: 42, Diagonal Node #: 67, (159) 
+Element #: 37, Current Node #: 43, Diagonal Node #: 66, (158) 
+Element #: 37, Current Node #: 45, Diagonal Node #: 64, (152) 
+Element #: 37, Current Node #: 46, Diagonal Node #: 63, (151) 
+Element #: 37, Current Node #: 63, Diagonal Node #: 46, (110) 
+Element #: 37, Current Node #: 64, Diagonal Node #: 45, (109) 
+Element #: 37, Current Node #: 66, Diagonal Node #: 43, (103) 
+Element #: 37, Current Node #: 67, Diagonal Node #: 42, (102) 
+Element #: 38, Current Node #: 43, Diagonal Node #: 68, (160) 
+Element #: 38, Current Node #: 44, Diagonal Node #: 67, (159) 
+Element #: 38, Current Node #: 46, Diagonal Node #: 65, (153) 
+Element #: 38, Current Node #: 47, Diagonal Node #: 64, (152) 
+Element #: 38, Current Node #: 64, Diagonal Node #: 47, (111) 
+Element #: 38, Current Node #: 65, Diagonal Node #: 46, (110) 
+Element #: 38, Current Node #: 67, Diagonal Node #: 44, (104) 
+Element #: 38, Current Node #: 68, Diagonal Node #: 43, (103) 
+Element #: 39, Current Node #: 162, Diagonal Node #: 69, (165) 
+Element #: 39, Current Node #: 45, Diagonal Node #: 170, (164) 
+Element #: 39, Current Node #: 163, Diagonal Node #: 66, (158) 
+Element #: 39, Current Node #: 48, Diagonal Node #: 169, (157) 
+Element #: 39, Current Node #: 169, Diagonal Node #: 48, (116) 
+Element #: 39, Current Node #: 66, Diagonal Node #: 163, (115) 
+Element #: 39, Current Node #: 170, Diagonal Node #: 45, (109) 
+Element #: 39, Current Node #: 69, Diagonal Node #: 162, (108) 
+Element #: 40, Current Node #: 45, Diagonal Node #: 70, (166) 
+Element #: 40, Current Node #: 46, Diagonal Node #: 69, (165) 
+Element #: 40, Current Node #: 48, Diagonal Node #: 67, (159) 
+Element #: 40, Current Node #: 49, Diagonal Node #: 66, (158) 
+Element #: 40, Current Node #: 66, Diagonal Node #: 49, (117) 
+Element #: 40, Current Node #: 67, Diagonal Node #: 48, (116) 
+Element #: 40, Current Node #: 69, Diagonal Node #: 46, (110) 
+Element #: 40, Current Node #: 70, Diagonal Node #: 45, (109) 
+Element #: 41, Current Node #: 46, Diagonal Node #: 71, (167) 
+Element #: 41, Current Node #: 47, Diagonal Node #: 70, (166) 
+Element #: 41, Current Node #: 49, Diagonal Node #: 68, (160) 
+Element #: 41, Current Node #: 50, Diagonal Node #: 67, (159) 
+Element #: 41, Current Node #: 67, Diagonal Node #: 50, (118) 
+Element #: 41, Current Node #: 68, Diagonal Node #: 49, (117) 
+Element #: 41, Current Node #: 70, Diagonal Node #: 47, (111) 
+Element #: 41, Current Node #: 71, Diagonal Node #: 46, (110) 
+Element #: 42, Current Node #: 163, Diagonal Node #: 72, (172) 
+Element #: 42, Current Node #: 48, Diagonal Node #: 171, (171) 
+Element #: 42, Current Node #: 164, Diagonal Node #: 69, (165) 
+Element #: 42, Current Node #: 51, Diagonal Node #: 170, (164) 
+Element #: 42, Current Node #: 170, Diagonal Node #: 51, (123) 
+Element #: 42, Current Node #: 69, Diagonal Node #: 164, (122) 
+Element #: 42, Current Node #: 171, Diagonal Node #: 48, (116) 
+Element #: 42, Current Node #: 72, Diagonal Node #: 163, (115) 
+Element #: 43, Current Node #: 48, Diagonal Node #: 73, (173) 
+Element #: 43, Current Node #: 49, Diagonal Node #: 72, (172) 
+Element #: 43, Current Node #: 51, Diagonal Node #: 70, (166) 
+Element #: 43, Current Node #: 52, Diagonal Node #: 69, (165) 
+Element #: 43, Current Node #: 69, Diagonal Node #: 52, (124) 
+Element #: 43, Current Node #: 70, Diagonal Node #: 51, (123) 
+Element #: 43, Current Node #: 72, Diagonal Node #: 49, (117) 
+Element #: 43, Current Node #: 73, Diagonal Node #: 48, (116) 
+Element #: 44, Current Node #: 49, Diagonal Node #: 74, (174) 
+Element #: 44, Current Node #: 50, Diagonal Node #: 73, (173) 
+Element #: 44, Current Node #: 52, Diagonal Node #: 71, (167) 
+Element #: 44, Current Node #: 53, Diagonal Node #: 70, (166) 
+Element #: 44, Current Node #: 70, Diagonal Node #: 53, (125) 
+Element #: 44, Current Node #: 71, Diagonal Node #: 52, (124) 
+Element #: 44, Current Node #: 73, Diagonal Node #: 50, (118) 
+Element #: 44, Current Node #: 74, Diagonal Node #: 49, (117) 
+Element #: 45, Current Node #: 164, Diagonal Node #: 75, (179) 
+Element #: 45, Current Node #: 51, Diagonal Node #: 172, (178) 
+Element #: 45, Current Node #: 165, Diagonal Node #: 72, (172) 
+Element #: 45, Current Node #: 54, Diagonal Node #: 171, (171) 
+Element #: 45, Current Node #: 171, Diagonal Node #: 54, (130) 
+Element #: 45, Current Node #: 72, Diagonal Node #: 165, (129) 
+Element #: 45, Current Node #: 172, Diagonal Node #: 51, (123) 
+Element #: 45, Current Node #: 75, Diagonal Node #: 164, (122) 
+Element #: 46, Current Node #: 51, Diagonal Node #: 76, (180) 
+Element #: 46, Current Node #: 52, Diagonal Node #: 75, (179) 
+Element #: 46, Current Node #: 54, Diagonal Node #: 73, (173) 
+Element #: 46, Current Node #: 55, Diagonal Node #: 72, (172) 
+Element #: 46, Current Node #: 72, Diagonal Node #: 55, (131) 
+Element #: 46, Current Node #: 73, Diagonal Node #: 54, (130) 
+Element #: 46, Current Node #: 75, Diagonal Node #: 52, (124) 
+Element #: 46, Current Node #: 76, Diagonal Node #: 51, (123) 
+Element #: 47, Current Node #: 52, Diagonal Node #: 77, (181) 
+Element #: 47, Current Node #: 53, Diagonal Node #: 76, (180) 
+Element #: 47, Current Node #: 55, Diagonal Node #: 74, (174) 
+Element #: 47, Current Node #: 56, Diagonal Node #: 73, (173) 
+Element #: 47, Current Node #: 73, Diagonal Node #: 56, (132) 
+Element #: 47, Current Node #: 74, Diagonal Node #: 55, (131) 
+Element #: 47, Current Node #: 76, Diagonal Node #: 53, (125) 
+Element #: 47, Current Node #: 77, Diagonal Node #: 52, (124) 
+Element #: 48, Current Node #: 165, Diagonal Node #: 78, (186) 
+Element #: 48, Current Node #: 54, Diagonal Node #: 173, (185) 
+Element #: 48, Current Node #: 166, Diagonal Node #: 75, (179) 
+Element #: 48, Current Node #: 57, Diagonal Node #: 172, (178) 
+Element #: 48, Current Node #: 172, Diagonal Node #: 57, (137) 
+Element #: 48, Current Node #: 75, Diagonal Node #: 166, (136) 
+Element #: 48, Current Node #: 173, Diagonal Node #: 54, (130) 
+Element #: 48, Current Node #: 78, Diagonal Node #: 165, (129) 
+Element #: 49, Current Node #: 54, Diagonal Node #: 79, (187) 
+Element #: 49, Current Node #: 55, Diagonal Node #: 78, (186) 
+Element #: 49, Current Node #: 57, Diagonal Node #: 76, (180) 
+Element #: 49, Current Node #: 58, Diagonal Node #: 75, (179) 
+Element #: 49, Current Node #: 75, Diagonal Node #: 58, (138) 
+Element #: 49, Current Node #: 76, Diagonal Node #: 57, (137) 
+Element #: 49, Current Node #: 78, Diagonal Node #: 55, (131) 
+Element #: 49, Current Node #: 79, Diagonal Node #: 54, (130) 
+Element #: 50, Current Node #: 55, Diagonal Node #: 80, (188) 
+Element #: 50, Current Node #: 56, Diagonal Node #: 79, (187) 
+Element #: 50, Current Node #: 58, Diagonal Node #: 77, (181) 
+Element #: 50, Current Node #: 59, Diagonal Node #: 76, (180) 
+Element #: 50, Current Node #: 76, Diagonal Node #: 59, (139) 
+Element #: 50, Current Node #: 77, Diagonal Node #: 58, (138) 
+Element #: 50, Current Node #: 79, Diagonal Node #: 56, (132) 
+Element #: 50, Current Node #: 80, Diagonal Node #: 55, (131) 
+Element #: 51, Current Node #: 166, Diagonal Node #: 81, (193) 
+Element #: 51, Current Node #: 57, Diagonal Node #: 174, (192) 
+Element #: 51, Current Node #: 167, Diagonal Node #: 78, (186) 
+Element #: 51, Current Node #: 60, Diagonal Node #: 173, (185) 
+Element #: 51, Current Node #: 173, Diagonal Node #: 60, (144) 
+Element #: 51, Current Node #: 78, Diagonal Node #: 167, (143) 
+Element #: 51, Current Node #: 174, Diagonal Node #: 57, (137) 
+Element #: 51, Current Node #: 81, Diagonal Node #: 166, (136) 
+Element #: 52, Current Node #: 57, Diagonal Node #: 82, (194) 
+Element #: 52, Current Node #: 58, Diagonal Node #: 81, (193) 
+Element #: 52, Current Node #: 60, Diagonal Node #: 79, (187) 
+Element #: 52, Current Node #: 61, Diagonal Node #: 78, (186) 
+Element #: 52, Current Node #: 78, Diagonal Node #: 61, (145) 
+Element #: 52, Current Node #: 79, Diagonal Node #: 60, (144) 
+Element #: 52, Current Node #: 81, Diagonal Node #: 58, (138) 
+Element #: 52, Current Node #: 82, Diagonal Node #: 57, (137) 
+Element #: 53, Current Node #: 58, Diagonal Node #: 83, (195) 
+Element #: 53, Current Node #: 59, Diagonal Node #: 82, (194) 
+Element #: 53, Current Node #: 61, Diagonal Node #: 80, (188) 
+Element #: 53, Current Node #: 62, Diagonal Node #: 79, (187) 
+Element #: 53, Current Node #: 79, Diagonal Node #: 62, (146) 
+Element #: 53, Current Node #: 80, Diagonal Node #: 61, (145) 
+Element #: 53, Current Node #: 82, Diagonal Node #: 59, (139) 
+Element #: 53, Current Node #: 83, Diagonal Node #: 58, (138) 
+Element #: 54, Current Node #: 168, Diagonal Node #: 87, (207) 
+Element #: 54, Current Node #: 63, Diagonal Node #: 176, (206) 
+Element #: 54, Current Node #: 169, Diagonal Node #: 84, (200) 
+Element #: 54, Current Node #: 66, Diagonal Node #: 175, (199) 
+Element #: 54, Current Node #: 175, Diagonal Node #: 66, (158) 
+Element #: 54, Current Node #: 84, Diagonal Node #: 169, (157) 
+Element #: 54, Current Node #: 176, Diagonal Node #: 63, (151) 
+Element #: 54, Current Node #: 87, Diagonal Node #: 168, (150) 
+Element #: 55, Current Node #: 63, Diagonal Node #: 88, (208) 
+Element #: 55, Current Node #: 64, Diagonal Node #: 87, (207) 
+Element #: 55, Current Node #: 66, Diagonal Node #: 85, (201) 
+Element #: 55, Current Node #: 67, Diagonal Node #: 84, (200) 
+Element #: 55, Current Node #: 84, Diagonal Node #: 67, (159) 
+Element #: 55, Current Node #: 85, Diagonal Node #: 66, (158) 
+Element #: 55, Current Node #: 87, Diagonal Node #: 64, (152) 
+Element #: 55, Current Node #: 88, Diagonal Node #: 63, (151) 
+Element #: 56, Current Node #: 64, Diagonal Node #: 89, (209) 
+Element #: 56, Current Node #: 65, Diagonal Node #: 88, (208) 
+Element #: 56, Current Node #: 67, Diagonal Node #: 86, (202) 
+Element #: 56, Current Node #: 68, Diagonal Node #: 85, (201) 
+Element #: 56, Current Node #: 85, Diagonal Node #: 68, (160) 
+Element #: 56, Current Node #: 86, Diagonal Node #: 67, (159) 
+Element #: 56, Current Node #: 88, Diagonal Node #: 65, (153) 
+Element #: 56, Current Node #: 89, Diagonal Node #: 64, (152) 
+Element #: 57, Current Node #: 169, Diagonal Node #: 90, (214) 
+Element #: 57, Current Node #: 66, Diagonal Node #: 177, (213) 
+Element #: 57, Current Node #: 170, Diagonal Node #: 87, (207) 
+Element #: 57, Current Node #: 69, Diagonal Node #: 176, (206) 
+Element #: 57, Current Node #: 176, Diagonal Node #: 69, (165) 
+Element #: 57, Current Node #: 87, Diagonal Node #: 170, (164) 
+Element #: 57, Current Node #: 177, Diagonal Node #: 66, (158) 
+Element #: 57, Current Node #: 90, Diagonal Node #: 169, (157) 
+Element #: 58, Current Node #: 66, Diagonal Node #: 91, (215) 
+Element #: 58, Current Node #: 67, Diagonal Node #: 90, (214) 
+Element #: 58, Current Node #: 69, Diagonal Node #: 88, (208) 
+Element #: 58, Current Node #: 70, Diagonal Node #: 87, (207) 
+Element #: 58, Current Node #: 87, Diagonal Node #: 70, (166) 
+Element #: 58, Current Node #: 88, Diagonal Node #: 69, (165) 
+Element #: 58, Current Node #: 90, Diagonal Node #: 67, (159) 
+Element #: 58, Current Node #: 91, Diagonal Node #: 66, (158) 
+Element #: 59, Current Node #: 67, Diagonal Node #: 92, (216) 
+Element #: 59, Current Node #: 68, Diagonal Node #: 91, (215) 
+Element #: 59, Current Node #: 70, Diagonal Node #: 89, (209) 
+Element #: 59, Current Node #: 71, Diagonal Node #: 88, (208) 
+Element #: 59, Current Node #: 88, Diagonal Node #: 71, (167) 
+Element #: 59, Current Node #: 89, Diagonal Node #: 70, (166) 
+Element #: 59, Current Node #: 91, Diagonal Node #: 68, (160) 
+Element #: 59, Current Node #: 92, Diagonal Node #: 67, (159) 
+Element #: 60, Current Node #: 170, Diagonal Node #: 93, (221) 
+Element #: 60, Current Node #: 69, Diagonal Node #: 178, (220) 
+Element #: 60, Current Node #: 171, Diagonal Node #: 90, (214) 
+Element #: 60, Current Node #: 72, Diagonal Node #: 177, (213) 
+Element #: 60, Current Node #: 177, Diagonal Node #: 72, (172) 
+Element #: 60, Current Node #: 90, Diagonal Node #: 171, (171) 
+Element #: 60, Current Node #: 178, Diagonal Node #: 69, (165) 
+Element #: 60, Current Node #: 93, Diagonal Node #: 170, (164) 
+Element #: 61, Current Node #: 69, Diagonal Node #: 94, (222) 
+Element #: 61, Current Node #: 70, Diagonal Node #: 93, (221) 
+Element #: 61, Current Node #: 72, Diagonal Node #: 91, (215) 
+Element #: 61, Current Node #: 73, Diagonal Node #: 90, (214) 
+Element #: 61, Current Node #: 90, Diagonal Node #: 73, (173) 
+Element #: 61, Current Node #: 91, Diagonal Node #: 72, (172) 
+Element #: 61, Current Node #: 93, Diagonal Node #: 70, (166) 
+Element #: 61, Current Node #: 94, Diagonal Node #: 69, (165) 
+Element #: 62, Current Node #: 70, Diagonal Node #: 95, (223) 
+Element #: 62, Current Node #: 71, Diagonal Node #: 94, (222) 
+Element #: 62, Current Node #: 73, Diagonal Node #: 92, (216) 
+Element #: 62, Current Node #: 74, Diagonal Node #: 91, (215) 
+Element #: 62, Current Node #: 91, Diagonal Node #: 74, (174) 
+Element #: 62, Current Node #: 92, Diagonal Node #: 73, (173) 
+Element #: 62, Current Node #: 94, Diagonal Node #: 71, (167) 
+Element #: 62, Current Node #: 95, Diagonal Node #: 70, (166) 
+Element #: 63, Current Node #: 171, Diagonal Node #: 96, (228) 
+Element #: 63, Current Node #: 72, Diagonal Node #: 179, (227) 
+Element #: 63, Current Node #: 172, Diagonal Node #: 93, (221) 
+Element #: 63, Current Node #: 75, Diagonal Node #: 178, (220) 
+Element #: 63, Current Node #: 178, Diagonal Node #: 75, (179) 
+Element #: 63, Current Node #: 93, Diagonal Node #: 172, (178) 
+Element #: 63, Current Node #: 179, Diagonal Node #: 72, (172) 
+Element #: 63, Current Node #: 96, Diagonal Node #: 171, (171) 
+Element #: 64, Current Node #: 72, Diagonal Node #: 97, (229) 
+Element #: 64, Current Node #: 73, Diagonal Node #: 96, (228) 
+Element #: 64, Current Node #: 75, Diagonal Node #: 94, (222) 
+Element #: 64, Current Node #: 76, Diagonal Node #: 93, (221) 
+Element #: 64, Current Node #: 93, Diagonal Node #: 76, (180) 
+Element #: 64, Current Node #: 94, Diagonal Node #: 75, (179) 
+Element #: 64, Current Node #: 96, Diagonal Node #: 73, (173) 
+Element #: 64, Current Node #: 97, Diagonal Node #: 72, (172) 
+Element #: 65, Current Node #: 73, Diagonal Node #: 98, (230) 
+Element #: 65, Current Node #: 74, Diagonal Node #: 97, (229) 
+Element #: 65, Current Node #: 76, Diagonal Node #: 95, (223) 
+Element #: 65, Current Node #: 77, Diagonal Node #: 94, (222) 
+Element #: 65, Current Node #: 94, Diagonal Node #: 77, (181) 
+Element #: 65, Current Node #: 95, Diagonal Node #: 76, (180) 
+Element #: 65, Current Node #: 97, Diagonal Node #: 74, (174) 
+Element #: 65, Current Node #: 98, Diagonal Node #: 73, (173) 
+Element #: 66, Current Node #: 172, Diagonal Node #: 99, (235) 
+Element #: 66, Current Node #: 75, Diagonal Node #: 180, (234) 
+Element #: 66, Current Node #: 173, Diagonal Node #: 96, (228) 
+Element #: 66, Current Node #: 78, Diagonal Node #: 179, (227) 
+Element #: 66, Current Node #: 179, Diagonal Node #: 78, (186) 
+Element #: 66, Current Node #: 96, Diagonal Node #: 173, (185) 
+Element #: 66, Current Node #: 180, Diagonal Node #: 75, (179) 
+Element #: 66, Current Node #: 99, Diagonal Node #: 172, (178) 
+Element #: 67, Current Node #: 75, Diagonal Node #: 100, (236) 
+Element #: 67, Current Node #: 76, Diagonal Node #: 99, (235) 
+Element #: 67, Current Node #: 78, Diagonal Node #: 97, (229) 
+Element #: 67, Current Node #: 79, Diagonal Node #: 96, (228) 
+Element #: 67, Current Node #: 96, Diagonal Node #: 79, (187) 
+Element #: 67, Current Node #: 97, Diagonal Node #: 78, (186) 
+Element #: 67, Current Node #: 99, Diagonal Node #: 76, (180) 
+Element #: 67, Current Node #: 100, Diagonal Node #: 75, (179) 
+Element #: 68, Current Node #: 76, Diagonal Node #: 101, (237) 
+Element #: 68, Current Node #: 77, Diagonal Node #: 100, (236) 
+Element #: 68, Current Node #: 79, Diagonal Node #: 98, (230) 
+Element #: 68, Current Node #: 80, Diagonal Node #: 97, (229) 
+Element #: 68, Current Node #: 97, Diagonal Node #: 80, (188) 
+Element #: 68, Current Node #: 98, Diagonal Node #: 79, (187) 
+Element #: 68, Current Node #: 100, Diagonal Node #: 77, (181) 
+Element #: 68, Current Node #: 101, Diagonal Node #: 76, (180) 
+Element #: 69, Current Node #: 173, Diagonal Node #: 102, (242) 
+Element #: 69, Current Node #: 78, Diagonal Node #: 181, (241) 
+Element #: 69, Current Node #: 174, Diagonal Node #: 99, (235) 
+Element #: 69, Current Node #: 81, Diagonal Node #: 180, (234) 
+Element #: 69, Current Node #: 180, Diagonal Node #: 81, (193) 
+Element #: 69, Current Node #: 99, Diagonal Node #: 174, (192) 
+Element #: 69, Current Node #: 181, Diagonal Node #: 78, (186) 
+Element #: 69, Current Node #: 102, Diagonal Node #: 173, (185) 
+Element #: 70, Current Node #: 78, Diagonal Node #: 103, (243) 
+Element #: 70, Current Node #: 79, Diagonal Node #: 102, (242) 
+Element #: 70, Current Node #: 81, Diagonal Node #: 100, (236) 
+Element #: 70, Current Node #: 82, Diagonal Node #: 99, (235) 
+Element #: 70, Current Node #: 99, Diagonal Node #: 82, (194) 
+Element #: 70, Current Node #: 100, Diagonal Node #: 81, (193) 
+Element #: 70, Current Node #: 102, Diagonal Node #: 79, (187) 
+Element #: 70, Current Node #: 103, Diagonal Node #: 78, (186) 
+Element #: 71, Current Node #: 79, Diagonal Node #: 104, (244) 
+Element #: 71, Current Node #: 80, Diagonal Node #: 103, (243) 
+Element #: 71, Current Node #: 82, Diagonal Node #: 101, (237) 
+Element #: 71, Current Node #: 83, Diagonal Node #: 100, (236) 
+Element #: 71, Current Node #: 100, Diagonal Node #: 83, (195) 
+Element #: 71, Current Node #: 101, Diagonal Node #: 82, (194) 
+Element #: 71, Current Node #: 103, Diagonal Node #: 80, (188) 
+Element #: 71, Current Node #: 104, Diagonal Node #: 79, (187) 
+Element #: 72, Current Node #: 175, Diagonal Node #: 108, (256) 
+Element #: 72, Current Node #: 84, Diagonal Node #: 183, (255) 
+Element #: 72, Current Node #: 176, Diagonal Node #: 105, (249) 
+Element #: 72, Current Node #: 87, Diagonal Node #: 182, (248) 
+Element #: 72, Current Node #: 182, Diagonal Node #: 87, (207) 
+Element #: 72, Current Node #: 105, Diagonal Node #: 176, (206) 
+Element #: 72, Current Node #: 183, Diagonal Node #: 84, (200) 
+Element #: 72, Current Node #: 108, Diagonal Node #: 175, (199) 
+Element #: 73, Current Node #: 84, Diagonal Node #: 109, (257) 
+Element #: 73, Current Node #: 85, Diagonal Node #: 108, (256) 
+Element #: 73, Current Node #: 87, Diagonal Node #: 106, (250) 
+Element #: 73, Current Node #: 88, Diagonal Node #: 105, (249) 
+Element #: 73, Current Node #: 105, Diagonal Node #: 88, (208) 
+Element #: 73, Current Node #: 106, Diagonal Node #: 87, (207) 
+Element #: 73, Current Node #: 108, Diagonal Node #: 85, (201) 
+Element #: 73, Current Node #: 109, Diagonal Node #: 84, (200) 
+Element #: 74, Current Node #: 85, Diagonal Node #: 110, (258) 
+Element #: 74, Current Node #: 86, Diagonal Node #: 109, (257) 
+Element #: 74, Current Node #: 88, Diagonal Node #: 107, (251) 
+Element #: 74, Current Node #: 89, Diagonal Node #: 106, (250) 
+Element #: 74, Current Node #: 106, Diagonal Node #: 89, (209) 
+Element #: 74, Current Node #: 107, Diagonal Node #: 88, (208) 
+Element #: 74, Current Node #: 109, Diagonal Node #: 86, (202) 
+Element #: 74, Current Node #: 110, Diagonal Node #: 85, (201) 
+Element #: 75, Current Node #: 176, Diagonal Node #: 111, (263) 
+Element #: 75, Current Node #: 87, Diagonal Node #: 184, (262) 
+Element #: 75, Current Node #: 177, Diagonal Node #: 108, (256) 
+Element #: 75, Current Node #: 90, Diagonal Node #: 183, (255) 
+Element #: 75, Current Node #: 183, Diagonal Node #: 90, (214) 
+Element #: 75, Current Node #: 108, Diagonal Node #: 177, (213) 
+Element #: 75, Current Node #: 184, Diagonal Node #: 87, (207) 
+Element #: 75, Current Node #: 111, Diagonal Node #: 176, (206) 
+Element #: 76, Current Node #: 87, Diagonal Node #: 112, (264) 
+Element #: 76, Current Node #: 88, Diagonal Node #: 111, (263) 
+Element #: 76, Current Node #: 90, Diagonal Node #: 109, (257) 
+Element #: 76, Current Node #: 91, Diagonal Node #: 108, (256) 
+Element #: 76, Current Node #: 108, Diagonal Node #: 91, (215) 
+Element #: 76, Current Node #: 109, Diagonal Node #: 90, (214) 
+Element #: 76, Current Node #: 111, Diagonal Node #: 88, (208) 
+Element #: 76, Current Node #: 112, Diagonal Node #: 87, (207) 
+Element #: 77, Current Node #: 88, Diagonal Node #: 113, (265) 
+Element #: 77, Current Node #: 89, Diagonal Node #: 112, (264) 
+Element #: 77, Current Node #: 91, Diagonal Node #: 110, (258) 
+Element #: 77, Current Node #: 92, Diagonal Node #: 109, (257) 
+Element #: 77, Current Node #: 109, Diagonal Node #: 92, (216) 
+Element #: 77, Current Node #: 110, Diagonal Node #: 91, (215) 
+Element #: 77, Current Node #: 112, Diagonal Node #: 89, (209) 
+Element #: 77, Current Node #: 113, Diagonal Node #: 88, (208) 
+Element #: 78, Current Node #: 177, Diagonal Node #: 114, (270) 
+Element #: 78, Current Node #: 90, Diagonal Node #: 185, (269) 
+Element #: 78, Current Node #: 178, Diagonal Node #: 111, (263) 
+Element #: 78, Current Node #: 93, Diagonal Node #: 184, (262) 
+Element #: 78, Current Node #: 184, Diagonal Node #: 93, (221) 
+Element #: 78, Current Node #: 111, Diagonal Node #: 178, (220) 
+Element #: 78, Current Node #: 185, Diagonal Node #: 90, (214) 
+Element #: 78, Current Node #: 114, Diagonal Node #: 177, (213) 
+Element #: 79, Current Node #: 90, Diagonal Node #: 115, (271) 
+Element #: 79, Current Node #: 91, Diagonal Node #: 114, (270) 
+Element #: 79, Current Node #: 93, Diagonal Node #: 112, (264) 
+Element #: 79, Current Node #: 94, Diagonal Node #: 111, (263) 
+Element #: 79, Current Node #: 111, Diagonal Node #: 94, (222) 
+Element #: 79, Current Node #: 112, Diagonal Node #: 93, (221) 
+Element #: 79, Current Node #: 114, Diagonal Node #: 91, (215) 
+Element #: 79, Current Node #: 115, Diagonal Node #: 90, (214) 
+Element #: 80, Current Node #: 91, Diagonal Node #: 116, (272) 
+Element #: 80, Current Node #: 92, Diagonal Node #: 115, (271) 
+Element #: 80, Current Node #: 94, Diagonal Node #: 113, (265) 
+Element #: 80, Current Node #: 95, Diagonal Node #: 112, (264) 
+Element #: 80, Current Node #: 112, Diagonal Node #: 95, (223) 
+Element #: 80, Current Node #: 113, Diagonal Node #: 94, (222) 
+Element #: 80, Current Node #: 115, Diagonal Node #: 92, (216) 
+Element #: 80, Current Node #: 116, Diagonal Node #: 91, (215) 
+Element #: 81, Current Node #: 178, Diagonal Node #: 117, (277) 
+Element #: 81, Current Node #: 93, Diagonal Node #: 186, (276) 
+Element #: 81, Current Node #: 179, Diagonal Node #: 114, (270) 
+Element #: 81, Current Node #: 96, Diagonal Node #: 185, (269) 
+Element #: 81, Current Node #: 185, Diagonal Node #: 96, (228) 
+Element #: 81, Current Node #: 114, Diagonal Node #: 179, (227) 
+Element #: 81, Current Node #: 186, Diagonal Node #: 93, (221) 
+Element #: 81, Current Node #: 117, Diagonal Node #: 178, (220) 
+Element #: 82, Current Node #: 93, Diagonal Node #: 118, (278) 
+Element #: 82, Current Node #: 94, Diagonal Node #: 117, (277) 
+Element #: 82, Current Node #: 96, Diagonal Node #: 115, (271) 
+Element #: 82, Current Node #: 97, Diagonal Node #: 114, (270) 
+Element #: 82, Current Node #: 114, Diagonal Node #: 97, (229) 
+Element #: 82, Current Node #: 115, Diagonal Node #: 96, (228) 
+Element #: 82, Current Node #: 117, Diagonal Node #: 94, (222) 
+Element #: 82, Current Node #: 118, Diagonal Node #: 93, (221) 
+Element #: 83, Current Node #: 94, Diagonal Node #: 119, (279) 
+Element #: 83, Current Node #: 95, Diagonal Node #: 118, (278) 
+Element #: 83, Current Node #: 97, Diagonal Node #: 116, (272) 
+Element #: 83, Current Node #: 98, Diagonal Node #: 115, (271) 
+Element #: 83, Current Node #: 115, Diagonal Node #: 98, (230) 
+Element #: 83, Current Node #: 116, Diagonal Node #: 97, (229) 
+Element #: 83, Current Node #: 118, Diagonal Node #: 95, (223) 
+Element #: 83, Current Node #: 119, Diagonal Node #: 94, (222) 
+Element #: 84, Current Node #: 179, Diagonal Node #: 120, (284) 
+Element #: 84, Current Node #: 96, Diagonal Node #: 187, (283) 
+Element #: 84, Current Node #: 180, Diagonal Node #: 117, (277) 
+Element #: 84, Current Node #: 99, Diagonal Node #: 186, (276) 
+Element #: 84, Current Node #: 186, Diagonal Node #: 99, (235) 
+Element #: 84, Current Node #: 117, Diagonal Node #: 180, (234) 
+Element #: 84, Current Node #: 187, Diagonal Node #: 96, (228) 
+Element #: 84, Current Node #: 120, Diagonal Node #: 179, (227) 
+Element #: 85, Current Node #: 96, Diagonal Node #: 121, (285) 
+Element #: 85, Current Node #: 97, Diagonal Node #: 120, (284) 
+Element #: 85, Current Node #: 99, Diagonal Node #: 118, (278) 
+Element #: 85, Current Node #: 100, Diagonal Node #: 117, (277) 
+Element #: 85, Current Node #: 117, Diagonal Node #: 100, (236) 
+Element #: 85, Current Node #: 118, Diagonal Node #: 99, (235) 
+Element #: 85, Current Node #: 120, Diagonal Node #: 97, (229) 
+Element #: 85, Current Node #: 121, Diagonal Node #: 96, (228) 
+Element #: 86, Current Node #: 97, Diagonal Node #: 122, (286) 
+Element #: 86, Current Node #: 98, Diagonal Node #: 121, (285) 
+Element #: 86, Current Node #: 100, Diagonal Node #: 119, (279) 
+Element #: 86, Current Node #: 101, Diagonal Node #: 118, (278) 
+Element #: 86, Current Node #: 118, Diagonal Node #: 101, (237) 
+Element #: 86, Current Node #: 119, Diagonal Node #: 100, (236) 
+Element #: 86, Current Node #: 121, Diagonal Node #: 98, (230) 
+Element #: 86, Current Node #: 122, Diagonal Node #: 97, (229) 
+Element #: 87, Current Node #: 180, Diagonal Node #: 123, (291) 
+Element #: 87, Current Node #: 99, Diagonal Node #: 188, (290) 
+Element #: 87, Current Node #: 181, Diagonal Node #: 120, (284) 
+Element #: 87, Current Node #: 102, Diagonal Node #: 187, (283) 
+Element #: 87, Current Node #: 187, Diagonal Node #: 102, (242) 
+Element #: 87, Current Node #: 120, Diagonal Node #: 181, (241) 
+Element #: 87, Current Node #: 188, Diagonal Node #: 99, (235) 
+Element #: 87, Current Node #: 123, Diagonal Node #: 180, (234) 
+Element #: 88, Current Node #: 99, Diagonal Node #: 124, (292) 
+Element #: 88, Current Node #: 100, Diagonal Node #: 123, (291) 
+Element #: 88, Current Node #: 102, Diagonal Node #: 121, (285) 
+Element #: 88, Current Node #: 103, Diagonal Node #: 120, (284) 
+Element #: 88, Current Node #: 120, Diagonal Node #: 103, (243) 
+Element #: 88, Current Node #: 121, Diagonal Node #: 102, (242) 
+Element #: 88, Current Node #: 123, Diagonal Node #: 100, (236) 
+Element #: 88, Current Node #: 124, Diagonal Node #: 99, (235) 
+Element #: 89, Current Node #: 100, Diagonal Node #: 125, (293) 
+Element #: 89, Current Node #: 101, Diagonal Node #: 124, (292) 
+Element #: 89, Current Node #: 103, Diagonal Node #: 122, (286) 
+Element #: 89, Current Node #: 104, Diagonal Node #: 121, (285) 
+Element #: 89, Current Node #: 121, Diagonal Node #: 104, (244) 
+Element #: 89, Current Node #: 122, Diagonal Node #: 103, (243) 
+Element #: 89, Current Node #: 124, Diagonal Node #: 101, (237) 
+Element #: 89, Current Node #: 125, Diagonal Node #: 100, (236) 
+Element #: 90, Current Node #: 182, Diagonal Node #: 129, (305) 
+Element #: 90, Current Node #: 105, Diagonal Node #: 190, (304) 
+Element #: 90, Current Node #: 183, Diagonal Node #: 126, (298) 
+Element #: 90, Current Node #: 108, Diagonal Node #: 189, (297) 
+Element #: 90, Current Node #: 189, Diagonal Node #: 108, (256) 
+Element #: 90, Current Node #: 126, Diagonal Node #: 183, (255) 
+Element #: 90, Current Node #: 190, Diagonal Node #: 105, (249) 
+Element #: 90, Current Node #: 129, Diagonal Node #: 182, (248) 
+Element #: 91, Current Node #: 105, Diagonal Node #: 130, (306) 
+Element #: 91, Current Node #: 106, Diagonal Node #: 129, (305) 
+Element #: 91, Current Node #: 108, Diagonal Node #: 127, (299) 
+Element #: 91, Current Node #: 109, Diagonal Node #: 126, (298) 
+Element #: 91, Current Node #: 126, Diagonal Node #: 109, (257) 
+Element #: 91, Current Node #: 127, Diagonal Node #: 108, (256) 
+Element #: 91, Current Node #: 129, Diagonal Node #: 106, (250) 
+Element #: 91, Current Node #: 130, Diagonal Node #: 105, (249) 
+Element #: 92, Current Node #: 106, Diagonal Node #: 131, (307) 
+Element #: 92, Current Node #: 107, Diagonal Node #: 130, (306) 
+Element #: 92, Current Node #: 109, Diagonal Node #: 128, (300) 
+Element #: 92, Current Node #: 110, Diagonal Node #: 127, (299) 
+Element #: 92, Current Node #: 127, Diagonal Node #: 110, (258) 
+Element #: 92, Current Node #: 128, Diagonal Node #: 109, (257) 
+Element #: 92, Current Node #: 130, Diagonal Node #: 107, (251) 
+Element #: 92, Current Node #: 131, Diagonal Node #: 106, (250) 
+Element #: 93, Current Node #: 183, Diagonal Node #: 132, (312) 
+Element #: 93, Current Node #: 108, Diagonal Node #: 191, (311) 
+Element #: 93, Current Node #: 184, Diagonal Node #: 129, (305) 
+Element #: 93, Current Node #: 111, Diagonal Node #: 190, (304) 
+Element #: 93, Current Node #: 190, Diagonal Node #: 111, (263) 
+Element #: 93, Current Node #: 129, Diagonal Node #: 184, (262) 
+Element #: 93, Current Node #: 191, Diagonal Node #: 108, (256) 
+Element #: 93, Current Node #: 132, Diagonal Node #: 183, (255) 
+Element #: 94, Current Node #: 108, Diagonal Node #: 133, (313) 
+Element #: 94, Current Node #: 109, Diagonal Node #: 132, (312) 
+Element #: 94, Current Node #: 111, Diagonal Node #: 130, (306) 
+Element #: 94, Current Node #: 112, Diagonal Node #: 129, (305) 
+Element #: 94, Current Node #: 129, Diagonal Node #: 112, (264) 
+Element #: 94, Current Node #: 130, Diagonal Node #: 111, (263) 
+Element #: 94, Current Node #: 132, Diagonal Node #: 109, (257) 
+Element #: 94, Current Node #: 133, Diagonal Node #: 108, (256) 
+Element #: 95, Current Node #: 109, Diagonal Node #: 134, (314) 
+Element #: 95, Current Node #: 110, Diagonal Node #: 133, (313) 
+Element #: 95, Current Node #: 112, Diagonal Node #: 131, (307) 
+Element #: 95, Current Node #: 113, Diagonal Node #: 130, (306) 
+Element #: 95, Current Node #: 130, Diagonal Node #: 113, (265) 
+Element #: 95, Current Node #: 131, Diagonal Node #: 112, (264) 
+Element #: 95, Current Node #: 133, Diagonal Node #: 110, (258) 
+Element #: 95, Current Node #: 134, Diagonal Node #: 109, (257) 
+Element #: 96, Current Node #: 184, Diagonal Node #: 135, (319) 
+Element #: 96, Current Node #: 111, Diagonal Node #: 192, (318) 
+Element #: 96, Current Node #: 185, Diagonal Node #: 132, (312) 
+Element #: 96, Current Node #: 114, Diagonal Node #: 191, (311) 
+Element #: 96, Current Node #: 191, Diagonal Node #: 114, (270) 
+Element #: 96, Current Node #: 132, Diagonal Node #: 185, (269) 
+Element #: 96, Current Node #: 192, Diagonal Node #: 111, (263) 
+Element #: 96, Current Node #: 135, Diagonal Node #: 184, (262) 
+Element #: 97, Current Node #: 111, Diagonal Node #: 136, (320) 
+Element #: 97, Current Node #: 112, Diagonal Node #: 135, (319) 
+Element #: 97, Current Node #: 114, Diagonal Node #: 133, (313) 
+Element #: 97, Current Node #: 115, Diagonal Node #: 132, (312) 
+Element #: 97, Current Node #: 132, Diagonal Node #: 115, (271) 
+Element #: 97, Current Node #: 133, Diagonal Node #: 114, (270) 
+Element #: 97, Current Node #: 135, Diagonal Node #: 112, (264) 
+Element #: 97, Current Node #: 136, Diagonal Node #: 111, (263) 
+Element #: 98, Current Node #: 112, Diagonal Node #: 137, (321) 
+Element #: 98, Current Node #: 113, Diagonal Node #: 136, (320) 
+Element #: 98, Current Node #: 115, Diagonal Node #: 134, (314) 
+Element #: 98, Current Node #: 116, Diagonal Node #: 133, (313) 
+Element #: 98, Current Node #: 133, Diagonal Node #: 116, (272) 
+Element #: 98, Current Node #: 134, Diagonal Node #: 115, (271) 
+Element #: 98, Current Node #: 136, Diagonal Node #: 113, (265) 
+Element #: 98, Current Node #: 137, Diagonal Node #: 112, (264) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 138, (326) 
+Element #: 99, Current Node #: 114, Diagonal Node #: 193, (325) 
+Element #: 99, Current Node #: 186, Diagonal Node #: 135, (319) 
+Element #: 99, Current Node #: 117, Diagonal Node #: 192, (318) 
+Element #: 99, Current Node #: 192, Diagonal Node #: 117, (277) 
+Element #: 99, Current Node #: 135, Diagonal Node #: 186, (276) 
+Element #: 99, Current Node #: 193, Diagonal Node #: 114, (270) 
+Element #: 99, Current Node #: 138, Diagonal Node #: 185, (269) 
+Element #: 100, Current Node #: 114, Diagonal Node #: 139, (327) 
+Element #: 100, Current Node #: 115, Diagonal Node #: 138, (326) 
+Element #: 100, Current Node #: 117, Diagonal Node #: 136, (320) 
+Element #: 100, Current Node #: 118, Diagonal Node #: 135, (319) 
+Element #: 100, Current Node #: 135, Diagonal Node #: 118, (278) 
+Element #: 100, Current Node #: 136, Diagonal Node #: 117, (277) 
+Element #: 100, Current Node #: 138, Diagonal Node #: 115, (271) 
+Element #: 100, Current Node #: 139, Diagonal Node #: 114, (270) 
+Element #: 101, Current Node #: 115, Diagonal Node #: 140, (328) 
+Element #: 101, Current Node #: 116, Diagonal Node #: 139, (327) 
+Element #: 101, Current Node #: 118, Diagonal Node #: 137, (321) 
+Element #: 101, Current Node #: 119, Diagonal Node #: 136, (320) 
+Element #: 101, Current Node #: 136, Diagonal Node #: 119, (279) 
+Element #: 101, Current Node #: 137, Diagonal Node #: 118, (278) 
+Element #: 101, Current Node #: 139, Diagonal Node #: 116, (272) 
+Element #: 101, Current Node #: 140, Diagonal Node #: 115, (271) 
+Element #: 102, Current Node #: 186, Diagonal Node #: 141, (333) 
+Element #: 102, Current Node #: 117, Diagonal Node #: 194, (332) 
+Element #: 102, Current Node #: 187, Diagonal Node #: 138, (326) 
+Element #: 102, Current Node #: 120, Diagonal Node #: 193, (325) 
+Element #: 102, Current Node #: 193, Diagonal Node #: 120, (284) 
+Element #: 102, Current Node #: 138, Diagonal Node #: 187, (283) 
+Element #: 102, Current Node #: 194, Diagonal Node #: 117, (277) 
+Element #: 102, Current Node #: 141, Diagonal Node #: 186, (276) 
+Element #: 103, Current Node #: 117, Diagonal Node #: 142, (334) 
+Element #: 103, Current Node #: 118, Diagonal Node #: 141, (333) 
+Element #: 103, Current Node #: 120, Diagonal Node #: 139, (327) 
+Element #: 103, Current Node #: 121, Diagonal Node #: 138, (326) 
+Element #: 103, Current Node #: 138, Diagonal Node #: 121, (285) 
+Element #: 103, Current Node #: 139, Diagonal Node #: 120, (284) 
+Element #: 103, Current Node #: 141, Diagonal Node #: 118, (278) 
+Element #: 103, Current Node #: 142, Diagonal Node #: 117, (277) 
+Element #: 104, Current Node #: 118, Diagonal Node #: 143, (335) 
+Element #: 104, Current Node #: 119, Diagonal Node #: 142, (334) 
+Element #: 104, Current Node #: 121, Diagonal Node #: 140, (328) 
+Element #: 104, Current Node #: 122, Diagonal Node #: 139, (327) 
+Element #: 104, Current Node #: 139, Diagonal Node #: 122, (286) 
+Element #: 104, Current Node #: 140, Diagonal Node #: 121, (285) 
+Element #: 104, Current Node #: 142, Diagonal Node #: 119, (279) 
+Element #: 104, Current Node #: 143, Diagonal Node #: 118, (278) 
+Element #: 105, Current Node #: 187, Diagonal Node #: 144, (340) 
+Element #: 105, Current Node #: 120, Diagonal Node #: 195, (339) 
+Element #: 105, Current Node #: 188, Diagonal Node #: 141, (333) 
+Element #: 105, Current Node #: 123, Diagonal Node #: 194, (332) 
+Element #: 105, Current Node #: 194, Diagonal Node #: 123, (291) 
+Element #: 105, Current Node #: 141, Diagonal Node #: 188, (290) 
+Element #: 105, Current Node #: 195, Diagonal Node #: 120, (284) 
+Element #: 105, Current Node #: 144, Diagonal Node #: 187, (283) 
+Element #: 106, Current Node #: 120, Diagonal Node #: 145, (341) 
+Element #: 106, Current Node #: 121, Diagonal Node #: 144, (340) 
+Element #: 106, Current Node #: 123, Diagonal Node #: 142, (334) 
+Element #: 106, Current Node #: 124, Diagonal Node #: 141, (333) 
+Element #: 106, Current Node #: 141, Diagonal Node #: 124, (292) 
+Element #: 106, Current Node #: 142, Diagonal Node #: 123, (291) 
+Element #: 106, Current Node #: 144, Diagonal Node #: 121, (285) 
+Element #: 106, Current Node #: 145, Diagonal Node #: 120, (284) 
+Element #: 107, Current Node #: 121, Diagonal Node #: 146, (342) 
+Element #: 107, Current Node #: 122, Diagonal Node #: 145, (341) 
+Element #: 107, Current Node #: 124, Diagonal Node #: 143, (335) 
+Element #: 107, Current Node #: 125, Diagonal Node #: 142, (334) 
+Element #: 107, Current Node #: 142, Diagonal Node #: 125, (293) 
+Element #: 107, Current Node #: 143, Diagonal Node #: 124, (292) 
+Element #: 107, Current Node #: 145, Diagonal Node #: 122, (286) 
+Element #: 107, Current Node #: 146, Diagonal Node #: 121, (285) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 155, (59) 
+Element #: 108, Current Node #: 147, Diagonal Node #: 204, (58) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 154, (52) 
+Element #: 108, Current Node #: 148, Diagonal Node #: 203, (51) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 148, (10) 
+Element #: 108, Current Node #: 154, Diagonal Node #: 197, (9) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 147, (3) 
+Element #: 108, Current Node #: 155, Diagonal Node #: 196, (2) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 156, (66) 
+Element #: 109, Current Node #: 148, Diagonal Node #: 205, (65) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 155, (59) 
+Element #: 109, Current Node #: 149, Diagonal Node #: 204, (58) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 149, (17) 
+Element #: 109, Current Node #: 155, Diagonal Node #: 198, (16) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 148, (10) 
+Element #: 109, Current Node #: 156, Diagonal Node #: 197, (9) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 157, (73) 
+Element #: 110, Current Node #: 149, Diagonal Node #: 206, (72) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 156, (66) 
+Element #: 110, Current Node #: 150, Diagonal Node #: 205, (65) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 150, (24) 
+Element #: 110, Current Node #: 156, Diagonal Node #: 199, (23) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 149, (17) 
+Element #: 110, Current Node #: 157, Diagonal Node #: 198, (16) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 158, (80) 
+Element #: 111, Current Node #: 150, Diagonal Node #: 207, (79) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 157, (73) 
+Element #: 111, Current Node #: 151, Diagonal Node #: 206, (72) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 151, (31) 
+Element #: 111, Current Node #: 157, Diagonal Node #: 200, (30) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 150, (24) 
+Element #: 111, Current Node #: 158, Diagonal Node #: 199, (23) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 159, (87) 
+Element #: 112, Current Node #: 151, Diagonal Node #: 208, (86) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 158, (80) 
+Element #: 112, Current Node #: 152, Diagonal Node #: 207, (79) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 152, (38) 
+Element #: 112, Current Node #: 158, Diagonal Node #: 201, (37) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 151, (31) 
+Element #: 112, Current Node #: 159, Diagonal Node #: 200, (30) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 160, (94) 
+Element #: 113, Current Node #: 152, Diagonal Node #: 209, (93) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 159, (87) 
+Element #: 113, Current Node #: 153, Diagonal Node #: 208, (86) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 153, (45) 
+Element #: 113, Current Node #: 159, Diagonal Node #: 202, (44) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 152, (38) 
+Element #: 113, Current Node #: 160, Diagonal Node #: 201, (37) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 162, (108) 
+Element #: 114, Current Node #: 154, Diagonal Node #: 211, (107) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 161, (101) 
+Element #: 114, Current Node #: 155, Diagonal Node #: 210, (100) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 155, (59) 
+Element #: 114, Current Node #: 161, Diagonal Node #: 204, (58) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 154, (52) 
+Element #: 114, Current Node #: 162, Diagonal Node #: 203, (51) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 163, (115) 
+Element #: 115, Current Node #: 155, Diagonal Node #: 212, (114) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 162, (108) 
+Element #: 115, Current Node #: 156, Diagonal Node #: 211, (107) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 156, (66) 
+Element #: 115, Current Node #: 162, Diagonal Node #: 205, (65) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 155, (59) 
+Element #: 115, Current Node #: 163, Diagonal Node #: 204, (58) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 164, (122) 
+Element #: 116, Current Node #: 156, Diagonal Node #: 213, (121) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 163, (115) 
+Element #: 116, Current Node #: 157, Diagonal Node #: 212, (114) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 157, (73) 
+Element #: 116, Current Node #: 163, Diagonal Node #: 206, (72) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 156, (66) 
+Element #: 116, Current Node #: 164, Diagonal Node #: 205, (65) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 165, (129) 
+Element #: 117, Current Node #: 157, Diagonal Node #: 214, (128) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 164, (122) 
+Element #: 117, Current Node #: 158, Diagonal Node #: 213, (121) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 158, (80) 
+Element #: 117, Current Node #: 164, Diagonal Node #: 207, (79) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 157, (73) 
+Element #: 117, Current Node #: 165, Diagonal Node #: 206, (72) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 166, (136) 
+Element #: 118, Current Node #: 158, Diagonal Node #: 215, (135) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 165, (129) 
+Element #: 118, Current Node #: 159, Diagonal Node #: 214, (128) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 159, (87) 
+Element #: 118, Current Node #: 165, Diagonal Node #: 208, (86) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 158, (80) 
+Element #: 118, Current Node #: 166, Diagonal Node #: 207, (79) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 167, (143) 
+Element #: 119, Current Node #: 159, Diagonal Node #: 216, (142) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 166, (136) 
+Element #: 119, Current Node #: 160, Diagonal Node #: 215, (135) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 160, (94) 
+Element #: 119, Current Node #: 166, Diagonal Node #: 209, (93) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 159, (87) 
+Element #: 119, Current Node #: 167, Diagonal Node #: 208, (86) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 169, (157) 
+Element #: 120, Current Node #: 161, Diagonal Node #: 218, (156) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 168, (150) 
+Element #: 120, Current Node #: 162, Diagonal Node #: 217, (149) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 162, (108) 
+Element #: 120, Current Node #: 168, Diagonal Node #: 211, (107) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 161, (101) 
+Element #: 120, Current Node #: 169, Diagonal Node #: 210, (100) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 170, (164) 
+Element #: 121, Current Node #: 162, Diagonal Node #: 219, (163) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 169, (157) 
+Element #: 121, Current Node #: 163, Diagonal Node #: 218, (156) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 163, (115) 
+Element #: 121, Current Node #: 169, Diagonal Node #: 212, (114) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 162, (108) 
+Element #: 121, Current Node #: 170, Diagonal Node #: 211, (107) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 171, (171) 
+Element #: 122, Current Node #: 163, Diagonal Node #: 220, (170) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 170, (164) 
+Element #: 122, Current Node #: 164, Diagonal Node #: 219, (163) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 164, (122) 
+Element #: 122, Current Node #: 170, Diagonal Node #: 213, (121) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 163, (115) 
+Element #: 122, Current Node #: 171, Diagonal Node #: 212, (114) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 172, (178) 
+Element #: 123, Current Node #: 164, Diagonal Node #: 221, (177) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 171, (171) 
+Element #: 123, Current Node #: 165, Diagonal Node #: 220, (170) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 165, (129) 
+Element #: 123, Current Node #: 171, Diagonal Node #: 214, (128) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 164, (122) 
+Element #: 123, Current Node #: 172, Diagonal Node #: 213, (121) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 173, (185) 
+Element #: 124, Current Node #: 165, Diagonal Node #: 222, (184) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 172, (178) 
+Element #: 124, Current Node #: 166, Diagonal Node #: 221, (177) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 166, (136) 
+Element #: 124, Current Node #: 172, Diagonal Node #: 215, (135) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 165, (129) 
+Element #: 124, Current Node #: 173, Diagonal Node #: 214, (128) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 174, (192) 
+Element #: 125, Current Node #: 166, Diagonal Node #: 223, (191) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 173, (185) 
+Element #: 125, Current Node #: 167, Diagonal Node #: 222, (184) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 167, (143) 
+Element #: 125, Current Node #: 173, Diagonal Node #: 216, (142) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 166, (136) 
+Element #: 125, Current Node #: 174, Diagonal Node #: 215, (135) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 176, (206) 
+Element #: 126, Current Node #: 168, Diagonal Node #: 225, (205) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 175, (199) 
+Element #: 126, Current Node #: 169, Diagonal Node #: 224, (198) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 169, (157) 
+Element #: 126, Current Node #: 175, Diagonal Node #: 218, (156) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 168, (150) 
+Element #: 126, Current Node #: 176, Diagonal Node #: 217, (149) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 177, (213) 
+Element #: 127, Current Node #: 169, Diagonal Node #: 226, (212) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 176, (206) 
+Element #: 127, Current Node #: 170, Diagonal Node #: 225, (205) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 170, (164) 
+Element #: 127, Current Node #: 176, Diagonal Node #: 219, (163) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 169, (157) 
+Element #: 127, Current Node #: 177, Diagonal Node #: 218, (156) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 178, (220) 
+Element #: 128, Current Node #: 170, Diagonal Node #: 227, (219) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 177, (213) 
+Element #: 128, Current Node #: 171, Diagonal Node #: 226, (212) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 171, (171) 
+Element #: 128, Current Node #: 177, Diagonal Node #: 220, (170) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 170, (164) 
+Element #: 128, Current Node #: 178, Diagonal Node #: 219, (163) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 179, (227) 
+Element #: 129, Current Node #: 171, Diagonal Node #: 228, (226) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 178, (220) 
+Element #: 129, Current Node #: 172, Diagonal Node #: 227, (219) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 172, (178) 
+Element #: 129, Current Node #: 178, Diagonal Node #: 221, (177) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 171, (171) 
+Element #: 129, Current Node #: 179, Diagonal Node #: 220, (170) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 180, (234) 
+Element #: 130, Current Node #: 172, Diagonal Node #: 229, (233) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 179, (227) 
+Element #: 130, Current Node #: 173, Diagonal Node #: 228, (226) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 173, (185) 
+Element #: 130, Current Node #: 179, Diagonal Node #: 222, (184) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 172, (178) 
+Element #: 130, Current Node #: 180, Diagonal Node #: 221, (177) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 181, (241) 
+Element #: 131, Current Node #: 173, Diagonal Node #: 230, (240) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 180, (234) 
+Element #: 131, Current Node #: 174, Diagonal Node #: 229, (233) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 174, (192) 
+Element #: 131, Current Node #: 180, Diagonal Node #: 223, (191) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 173, (185) 
+Element #: 131, Current Node #: 181, Diagonal Node #: 222, (184) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 183, (255) 
+Element #: 132, Current Node #: 175, Diagonal Node #: 232, (254) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 182, (248) 
+Element #: 132, Current Node #: 176, Diagonal Node #: 231, (247) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 176, (206) 
+Element #: 132, Current Node #: 182, Diagonal Node #: 225, (205) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 175, (199) 
+Element #: 132, Current Node #: 183, Diagonal Node #: 224, (198) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 184, (262) 
+Element #: 133, Current Node #: 176, Diagonal Node #: 233, (261) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 183, (255) 
+Element #: 133, Current Node #: 177, Diagonal Node #: 232, (254) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 177, (213) 
+Element #: 133, Current Node #: 183, Diagonal Node #: 226, (212) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 176, (206) 
+Element #: 133, Current Node #: 184, Diagonal Node #: 225, (205) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 185, (269) 
+Element #: 134, Current Node #: 177, Diagonal Node #: 234, (268) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 184, (262) 
+Element #: 134, Current Node #: 178, Diagonal Node #: 233, (261) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 178, (220) 
+Element #: 134, Current Node #: 184, Diagonal Node #: 227, (219) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 177, (213) 
+Element #: 134, Current Node #: 185, Diagonal Node #: 226, (212) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 186, (276) 
+Element #: 135, Current Node #: 178, Diagonal Node #: 235, (275) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 185, (269) 
+Element #: 135, Current Node #: 179, Diagonal Node #: 234, (268) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 179, (227) 
+Element #: 135, Current Node #: 185, Diagonal Node #: 228, (226) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 178, (220) 
+Element #: 135, Current Node #: 186, Diagonal Node #: 227, (219) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 187, (283) 
+Element #: 136, Current Node #: 179, Diagonal Node #: 236, (282) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 186, (276) 
+Element #: 136, Current Node #: 180, Diagonal Node #: 235, (275) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 180, (234) 
+Element #: 136, Current Node #: 186, Diagonal Node #: 229, (233) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 179, (227) 
+Element #: 136, Current Node #: 187, Diagonal Node #: 228, (226) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 188, (290) 
+Element #: 137, Current Node #: 180, Diagonal Node #: 237, (289) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 187, (283) 
+Element #: 137, Current Node #: 181, Diagonal Node #: 236, (282) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 181, (241) 
+Element #: 137, Current Node #: 187, Diagonal Node #: 230, (240) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 180, (234) 
+Element #: 137, Current Node #: 188, Diagonal Node #: 229, (233) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 190, (304) 
+Element #: 138, Current Node #: 182, Diagonal Node #: 239, (303) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 189, (297) 
+Element #: 138, Current Node #: 183, Diagonal Node #: 238, (296) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 183, (255) 
+Element #: 138, Current Node #: 189, Diagonal Node #: 232, (254) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 182, (248) 
+Element #: 138, Current Node #: 190, Diagonal Node #: 231, (247) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 191, (311) 
+Element #: 139, Current Node #: 183, Diagonal Node #: 240, (310) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 190, (304) 
+Element #: 139, Current Node #: 184, Diagonal Node #: 239, (303) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 184, (262) 
+Element #: 139, Current Node #: 190, Diagonal Node #: 233, (261) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 183, (255) 
+Element #: 139, Current Node #: 191, Diagonal Node #: 232, (254) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 192, (318) 
+Element #: 140, Current Node #: 184, Diagonal Node #: 241, (317) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 191, (311) 
+Element #: 140, Current Node #: 185, Diagonal Node #: 240, (310) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 185, (269) 
+Element #: 140, Current Node #: 191, Diagonal Node #: 234, (268) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 184, (262) 
+Element #: 140, Current Node #: 192, Diagonal Node #: 233, (261) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 193, (325) 
+Element #: 141, Current Node #: 185, Diagonal Node #: 242, (324) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 192, (318) 
+Element #: 141, Current Node #: 186, Diagonal Node #: 241, (317) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 186, (276) 
+Element #: 141, Current Node #: 192, Diagonal Node #: 235, (275) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 185, (269) 
+Element #: 141, Current Node #: 193, Diagonal Node #: 234, (268) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 194, (332) 
+Element #: 142, Current Node #: 186, Diagonal Node #: 243, (331) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 193, (325) 
+Element #: 142, Current Node #: 187, Diagonal Node #: 242, (324) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 187, (283) 
+Element #: 142, Current Node #: 193, Diagonal Node #: 236, (282) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 186, (276) 
+Element #: 142, Current Node #: 194, Diagonal Node #: 235, (275) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 195, (339) 
+Element #: 143, Current Node #: 187, Diagonal Node #: 244, (338) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 194, (332) 
+Element #: 143, Current Node #: 188, Diagonal Node #: 243, (331) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 188, (290) 
+Element #: 143, Current Node #: 194, Diagonal Node #: 237, (289) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 187, (283) 
+Element #: 143, Current Node #: 195, Diagonal Node #: 236, (282) 
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testRegularMeshUtils  " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularMeshUtils.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularMeshUtils.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,163 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testRegularMeshUtils.c 4184 2007-09-25 07:54:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct _Node
+{
+	double temp;
+};
+
+struct _Element
+{
+	double temp;
+};
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {0, 1, 1};
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				procCount;
+	int				procToWatch;
+	ExtensionManager_Register*	extensionMgr_Register;
+	Stream*				stream;
+
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {6, 6, 6};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	stream = Journal_Register (Info_Type, "myStream");
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	
+	if (rank == procToWatch)
+	{
+		unsigned		currElementNodesCount=0;	
+		unsigned*         	currElementNodes = NULL;
+		unsigned          	element_dI = 0;
+		unsigned             	refNode_eI = 0;
+		unsigned		node_Diagonal = 0;
+		unsigned		node_Diagonal_gI = 0;
+		IArray*			inc;
+		
+		/* only use this while setting up the test
+		   Print(mesh, stream);
+				
+		   Some tests involving RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex() */
+		inc = IArray_New();
+		
+		for (element_dI=0; element_dI < Mesh_GetDomainSize( mesh, nDims ); element_dI++) {
+			Mesh_GetIncidence( mesh, nDims, element_dI, MT_VERTEX, inc );
+			currElementNodesCount = IArray_GetSize( inc );
+			currElementNodes = IArray_GetPtr( inc );
+			
+			for (refNode_eI = 0; refNode_eI < currElementNodesCount; refNode_eI++ ) {
+				
+				node_Diagonal = RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex(mesh, element_dI, 
+					currElementNodes[refNode_eI]) ;
+				node_Diagonal_gI = Mesh_DomainToGlobal( mesh, MT_VERTEX, node_Diagonal );
+				/*print message stating: Element #, curr node #, diag opp node #*/
+				printf("Element #: %d, Current Node #: %d, Diagonal Node #: %d, (%d) \n",
+					element_dI, currElementNodes[refNode_eI], node_Diagonal, node_Diagonal_gI);
+				
+			}
+		}
+
+		NewClass_Delete( inc );
+	}
+	
+	Stg_Class_Delete(mesh);
+	
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testRegularRemesher.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testRegularRemesher.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,187 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 
+** 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testRegularRemesher.c 3952 2007-01-09 06:24:06Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include "StGermain/Base/Foundation/TestBegin.h"
+
+
+Mesh* buildMesh() {
+   CartesianGenerator* gen;
+   int nRanks;
+   unsigned sizes[3];
+   double minCrd[3];
+   double maxCrd[3];
+   Mesh* mesh;
+
+   insist( MPI_Comm_size( MPI_COMM_WORLD, &nRanks ), == MPI_SUCCESS );
+   sizes[0] = sizes[1] = sizes[2] = 2 * nRanks;
+   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
+   maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nRanks;
+
+   gen = CartesianGenerator_New( "" );
+   MeshGenerator_SetDimSize( gen, 3 );
+   CartesianGenerator_SetShadowDepth( gen, 1 );
+   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
+   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );
+
+   mesh = Mesh_New( "" );
+   CartesianGenerator_Generate( gen, mesh );
+   FreeObject( gen );
+   Stg_Component_Build( mesh, NULL, False );
+   Stg_Component_Initialise( mesh, NULL, False );
+
+   return mesh;
+}
+
+
+void testSetup( int* argc, char** argv[] ) {
+   StGermain_Init( argc, argv );
+   StgDomainMesh_Init( argc, argv );
+   StgDomainUtils_Init( argc, argv );
+}
+
+void testTeardown() {
+   StgDomainUtils_Finalise();
+   StgDomainMesh_Finalise();
+   StGermain_Finalise();
+}
+
+TestBegin( Construct ) {
+   RegularRemesher* remesh;
+
+   TestNoAssert( remesh = RegularRemesher_New() );
+   TestTrue( remesh );
+
+  done:
+   NewClass_Delete( remesh );
+}
+TestEnd
+
+TestBegin( Build ) {
+   RegularRemesher* remesh;
+   Mesh* mesh;
+
+   mesh = buildMesh();
+   remesh = RegularRemesher_New();
+   NewRemesher_SetMesh( remesh, mesh );
+   RegularRemesher_Build( remesh );
+
+   RegularRemesher_SetRemeshState( remesh, 0, True );
+   RegularRemesher_SetRemeshState( remesh, 1, True );
+   RegularRemesher_SetRemeshState( remesh, 2, True );
+   RegularRemesher_Build( remesh );
+
+   RegularRemesher_SetStaticWall( remesh, 0, 0, True );
+   RegularRemesher_SetStaticWall( remesh, 0, 1, True );
+   RegularRemesher_SetStaticWall( remesh, 2, 0, True );
+   RegularRemesher_SetStaticWall( remesh, 2, 1, True );
+   RegularRemesher_Build( remesh );
+
+  done:
+   NewClass_Delete( remesh );
+   FreeObject( mesh );
+}
+TestEnd
+
+TestBegin( Remesh ) {
+   RegularRemesher* remesh;
+   Mesh* mesh;
+   Grid* vGrid;
+   int nVerts;
+   double** oldVerts;
+   int ind, inds[3];
+   int v_i, d_i;
+
+   mesh = buildMesh();
+   remesh = RegularRemesher_New();
+   NewRemesher_SetMesh( remesh, mesh );
+
+   RegularRemesher_SetRemeshState( remesh, 0, True );
+   RegularRemesher_SetRemeshState( remesh, 1, True );
+   RegularRemesher_SetRemeshState( remesh, 2, True );
+   RegularRemesher_SetStaticWall( remesh, 0, 0, True );
+   RegularRemesher_SetStaticWall( remesh, 0, 1, True );
+   RegularRemesher_SetStaticWall( remesh, 2, 0, True );
+   RegularRemesher_SetStaticWall( remesh, 2, 1, True );
+   RegularRemesher_Build( remesh );
+
+   nVerts = Mesh_GetDomainSize( mesh, 0 );
+   oldVerts = MemArray2D( double, nVerts, 3, "testRegularRemesher" );
+
+   memcpy( oldVerts[0], mesh->verts[0], nVerts * 3 * sizeof(double) );
+   RegularRemesher_Remesh( remesh );
+   for( v_i = 0; v_i < nVerts * 3; v_i++ ) {
+      if( !Num_Approx( oldVerts[0][v_i], mesh->verts[0][v_i] ) )
+	 break;
+   }
+   TestTrue( v_i == nVerts * 3 );
+
+   vGrid = *Mesh_GetExtension( mesh, Grid**, "vertexGrid" );
+   for( v_i = 0; v_i < nVerts; v_i++ ) {
+      ind = Mesh_DomainToGlobal( mesh, 0, v_i );
+      Grid_Lift( vGrid, ind, (unsigned*)inds );
+      for( d_i = 0; d_i < 3; d_i++ ) {
+	 if( inds[d_i] == 0 || inds[d_i] == vGrid->sizes[d_i] - 1 )
+	    continue;
+	 mesh->verts[v_i][d_i] = -1.0;
+      }
+   }
+   RegularRemesher_Remesh( remesh );
+   for( v_i = 0; v_i < nVerts * 3; v_i++ ) {
+      if( !Num_Approx( oldVerts[0][v_i], mesh->verts[0][v_i] ) )
+	 break;
+   }
+   TestTrue( v_i == nVerts * 3 );
+
+  done:
+   NewClass_Delete( remesh );
+   FreeObject( mesh );
+   MemFree( oldVerts );
+}
+TestEnd
+
+
+#define nTests 3
+TestSuite_Test tests[nTests] = {{"construct", testConstruct}, 
+				{"build", testBuild}, 
+				{"remesh", testRemesh}};
+
+
+#include "StGermain/Base/Foundation/TestEnd.h"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testSemiRegDeform.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testSemiRegDeform.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,212 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testSemiRegDeform.c 3124 2005-07-25 04:52:06Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <StGermain/StGermain.h>
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+
+#include "StgDomain/Utils/types.h"
+#include "StgDomain/Utils/SemiRegDeform.h"
+
+
+struct _Node {
+	double tmp;
+};
+
+struct _Element {
+	double tmp;
+};
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Build( mesh, NULL, False );
+	Initialise( mesh, NULL, False );
+
+	KillObject( mesh->generator );
+
+	return mesh;
+}
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			commWorld;
+	int				rank;
+	int				nProcs;
+	int				procToWatch;
+	ExtensionManager_Register*	extensionMgr_Register;
+	Stream*				stream;
+	SemiRegDeform*			srd;
+
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {4, 4, 4};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	Grid*		vertGrid;
+
+	/*
+	** Initialise MPI, StGermain Base, get world info.
+	*/
+
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &commWorld );
+	MPI_Comm_size( commWorld, &nProcs );
+	MPI_Comm_rank( commWorld, &rank );
+
+	StGermain_Init( &argc, &argv );
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	MPI_Barrier( commWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register( Info_Type, "myStream" );
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+
+	/*
+	** Create the mesh.
+	*/
+
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	vertGrid = *(Grid**)ExtensionManager_Get( mesh->info, mesh, 
+						  ExtensionManager_GetHandle( mesh->info, "vertexGrid" ) );
+
+	/*
+	** Create the deformation.
+	*/
+
+	{
+		IJK		ijk;
+		unsigned	lower, upper;
+
+		srd = SemiRegDeform_New( "SemiRegDeform" );
+		SemiRegDeform_SetMesh( srd, mesh );
+
+		/* Set up strips to remesh in the y direction. */
+		for( ijk[2] = 0; ijk[2] < meshSize[2]; ijk[2]++ ) {
+			for( ijk[0] = 0; ijk[0] < meshSize[0]; ijk[0]++ ) {
+				ijk[1] = 0;
+				lower = Grid_Project( vertGrid, ijk );
+
+				ijk[1] = meshSize[1] - 1;
+				upper = Grid_Project( vertGrid, ijk );
+
+				SemiRegDeform_AddStrip( srd, lower, upper );
+			}
+		}
+
+		/* Build and initialise. */
+		Build( srd, 0, False );
+		Initialise( srd, 0, False );
+
+		/* Execute the deformation. */
+		SemiRegDeform_Deform( srd );
+
+		/* Check the deformation. */
+		if (rank == procToWatch) {
+		}
+
+		/* Kill it. */
+		Stg_Class_Delete( srd );
+	}
+
+	{
+		IJK		ijk;
+		unsigned	lower, upper;
+
+		srd = SemiRegDeform_New( "SemiRegDeform" );
+		SemiRegDeform_SetMesh( srd, mesh );
+
+		/* Set up strips to remesh in the y direction. */
+		for( ijk[2] = 0; ijk[2] < meshSize[2]; ijk[2]++ ) {
+			for( ijk[0] = 0; ijk[0] < meshSize[0]; ijk[0]++ ) {
+				ijk[1] = 0;
+				lower = Grid_Project( vertGrid, ijk );
+				ijk[1] = meshSize[1] - 2;
+				upper = Grid_Project( vertGrid, ijk );
+				SemiRegDeform_AddStrip( srd, lower, upper );
+
+				lower = upper;
+				ijk[1] = meshSize[1] - 1;
+				upper = Grid_Project( vertGrid, ijk );
+				SemiRegDeform_AddStrip( srd, lower, upper );
+			}
+		}
+
+		/* Build and initialise. */
+		Build( srd, 0, False );
+		Initialise( srd, 0, False );
+
+		/* Check the deformation. */
+		if (rank == procToWatch) {
+		}
+
+		/* Kill it. */
+		Stg_Class_Delete( srd );
+	}
+
+
+	/*
+	** Cleanup.
+	*/
+	
+	Stg_Class_Delete( mesh );
+
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	StGermain_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return EXIT_SUCCESS;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testSobolGenerator.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testSobolGenerator.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTestStdLocations "testSobolGenerator  " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testSobolGenerator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testSobolGenerator.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testSobolGenerator.c 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+int main(int argc, char *argv[]) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         procCount;
+	Stream*                     stream;
+	SobolGenerator*             sobolGenerator;
+	Index                       index;
+	Index                       sobol_I;
+	int                         bit_I;
+	char                        name[50];
+	double                      result;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	Stream_RedirectFile_WithPrependedPath( stream, "output", "RightmostBit.dat" );
+	Journal_Printf( stream, " *********************** Testing _SobolGenerator_FindRightmostZeroBit *******************\n" );
+	for ( index = 0 ; index < 30 ; index++ ) {
+		for ( bit_I = sizeof( Index ) * 4 - 1 ; bit_I >= 0 ; bit_I-- )
+			Journal_Printf( stream, "%u", index & 1 << bit_I ? 1 : 0 );
+		Journal_Printf( stream, " number %u: %u\n", index, _SobolGenerator_FindRightmostZeroBit( index ) );
+	}
+	
+	/* constructor  */
+	for ( sobol_I = 0 ; sobol_I < 6 ; sobol_I++ ) {
+		sprintf( name, "testGenerator%u", sobol_I );
+		Stream_RedirectFile_WithPrependedPath( stream, "output", name );
+		sobolGenerator = SobolGenerator_NewFromTable( name );
+
+		Stg_Class_Print( sobolGenerator, stream );
+
+		Journal_Printf( stream," ****************** Testing SobolGenerator_GetDirectionalNumber ***************\n" );
+		for ( index = 0 ; index < 30 ; index++ ) 
+			SobolGenerator_GetDirectionalNumber( sobolGenerator, index );
+		
+		Stg_Class_Print( sobolGenerator, stream );
+
+		/* Checking up to 200000 numbers - this number is arbitary - 
+		 * it's only limited because we don't want file size to be huge
+		 * This number is intentionally over 25535 = 2^16 - 1 because there was a time when numbers repeated after this */
+		for ( index = 0 ; index < 200000 ; index++ ) {
+			result = SobolGenerator_GetNextNumber(sobolGenerator);
+
+			assert( fabs( result - SobolGenerator_GetNumberByIndex(sobolGenerator, index)) < 1e-8 );
+
+			/* Only dump subset of data - this output criterion is completely arbitary */
+			if ( index % 773 == 3 )
+				Journal_Printf( stream, "%.4g\n", result );
+		}
+
+		Stg_Class_Delete( sobolGenerator );
+	}
+
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegration.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegration.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,334 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student Monash University, VPAC. (davidm at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Tests that the FeVariable class works correctly.
+** Comments:
+**	Tests all requirements of the FieldVariable interface, such as max & min values, interpolation etc,
+**	plus any FE-specific additions made at the field Variable level.
+**
+** $Id: testTimeIntegration.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+double GetDt( void* context ) {
+	return 0.1;
+}
+
+Bool ConstantTimeDeriv( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	timeDeriv[0] = 2.0 * array_I;
+	timeDeriv[1] = -1.0 * array_I;
+
+	return True;
+}
+Bool ConstantTimeDeriv2( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	timeDeriv[0] = -0.5 * array_I;
+	timeDeriv[1] = 3.0 * array_I;
+	
+	return True;
+}
+Bool LinearTimeDeriv( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	double time = TimeIntegratee_GetTime( timeIntegratee );
+
+	timeDeriv[0] = 2.0 * array_I * time;
+	timeDeriv[1] = -1.0 * array_I * time;
+	
+	return True;
+}
+Bool LinearTimeDeriv2( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	double time = TimeIntegratee_GetTime( timeIntegratee );
+
+	timeDeriv[0] = -0.5 * array_I * time;
+	timeDeriv[1] = 3.0 * array_I * time;
+	
+	return True;
+}
+Bool CubicTimeDeriv( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	double time = TimeIntegratee_GetTime( timeIntegratee );
+
+	timeDeriv[0] = 2.0 * array_I * ( time * time * time - time*time );
+	timeDeriv[1] = -1.0 * array_I * ( time * time * time - time*time );
+	
+	return True;
+}
+Bool CubicTimeDeriv2( void* timeIntegratee, Index array_I, double* timeDeriv ) {
+	double time = TimeIntegratee_GetTime( timeIntegratee );
+
+	timeDeriv[0] = -0.5 * array_I * ( time * time * time - time*time );
+	timeDeriv[1] = 3.0 * array_I * ( time * time * time - time*time );
+	
+	return True;
+}
+
+TimeIntegratee_CalculateTimeDerivFunction* GetFunctionPtr( Name derivName ) {
+	if ( strcasecmp( derivName, "Linear" ) == 0 )
+		return LinearTimeDeriv;
+	else if ( strcasecmp( derivName, "Linear2" ) == 0 )
+		return LinearTimeDeriv2;
+	else if ( strcasecmp( derivName, "Cubic" ) == 0 )
+		return CubicTimeDeriv;
+	else if ( strcasecmp( derivName, "Cubic2" ) == 0 )
+		return CubicTimeDeriv2;
+	else if ( strcasecmp( derivName, "Constant" ) == 0 )
+		return ConstantTimeDeriv;
+	else if ( strcasecmp( derivName, "Constant2" ) == 0 )
+		return ConstantTimeDeriv2;
+	else
+		Journal_Firewall( 0 , Journal_Register( Error_Type, CURR_MODULE_NAME ),
+				"Don't understand DerivName '%s'\n", derivName  );
+
+	return NULL;
+}
+
+void TestContextType( void* timeIntegratee, Stg_Class* data ) {
+	Stream* stream = Journal_Register (Info_Type, "myStream");
+
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	assert( data->type == DomainContext_Type ); 
+}
+void TestVariableType( void* timeIntegratee, Stg_Class* data ) {
+	Stream* stream = Journal_Register (Info_Type, "myStream");
+
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	assert( data->type == Variable_Type ); 
+}
+	
+int main( int argc, char* argv[] ) {
+	MPI_Comm                   CommWorld;
+	int                        rank;
+	int                        numProcessors;
+	int                        procToWatch;
+	XML_IO_Handler*            ioHandler;
+	Dictionary*                dictionary;
+	TimeIntegrator*            timeIntegrator;
+	TimeIntegratee*            timeIntegratee;
+	TimeIntegratee*            timeIntegrateeList[2];
+	DomainContext*     context;
+	Variable*                  variable;
+	Variable*                  variableList[2];
+	double*                    array;
+	double*                    array2;
+	Index                      size0              = 11;
+	Index                      size1              = 7;
+	Index                      array_I;
+	Index                      timestep           = 0;
+	Index                      maxTimesteps       = 10;
+	Stream*                    stream;
+	Bool                       simultaneous;
+	unsigned                   order;
+	double                     error              = 0.0;
+	Name                       derivName;
+	double                     tolerance          = 0.001;
+	Index                      integratee_I;
+	Index                      integrateeCount    = 2;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+
+	/* Create Context */
+	ioHandler = XML_IO_Handler_New();
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+	context = _DomainContext_New( 
+			sizeof(DomainContext), 
+			DomainContext_Type, 
+			_DomainContext_Delete, 
+			_DomainContext_Print,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			"discretisationContext",
+			True,
+			NULL,
+			0,0,
+			CommWorld, dictionary );
+	ContextEP_Append( context, AbstractContext_EP_Dt, GetDt );
+
+	printf ("!!! info %d\n", Stream_IsEnable( Journal_Register( Info_Type, "TimeIntegrator" ) ) );
+
+	/* Create Stuff */
+	order           = Dictionary_GetUnsignedInt_WithDefault( dictionary, "order", 1 );
+	simultaneous    = Dictionary_GetBool_WithDefault( dictionary, "simultaneous", False );
+	variableList[0] = Variable_NewVector( "testVariable",  Variable_DataType_Double, 2, &size0, NULL, (void**)&array, NULL );
+	variableList[1] = Variable_NewVector( "testVariable2", Variable_DataType_Double, 2, &size1, NULL, (void**)&array2, NULL );
+	timeIntegrator  = TimeIntegrator_New( "testTimeIntegrator", order, simultaneous, NULL, NULL );
+	timeIntegrateeList[0] = TimeIntegratee_New( "testTimeIntegratee0", timeIntegrator, variableList[0],
+		0, NULL, True );
+	timeIntegrateeList[1] = TimeIntegratee_New( "testTimeIntegratee1", timeIntegrator, variableList[1],
+		0, NULL, True );
+
+	derivName = Dictionary_GetString( dictionary, "DerivName0" );
+	timeIntegrateeList[0]->_calculateTimeDeriv = GetFunctionPtr( derivName );
+	Journal_Printf( stream, "DerivName0 - %s\n", derivName );
+	derivName = Dictionary_GetString( dictionary, "DerivName1" );
+	timeIntegrateeList[1]->_calculateTimeDeriv = GetFunctionPtr( derivName );
+	Journal_Printf( stream, "DerivName1 - %s\n", derivName );
+
+	/* Print Stuff to file */
+	Journal_PrintValue( stream, order );
+	Journal_PrintBool( stream, simultaneous );
+
+	/* Add stuff to EPs */
+	TimeIntegrator_AppendSetupEP( timeIntegrator, "start1", TestContextType, CURR_MODULE_NAME, context );
+	TimeIntegrator_AppendFinishEP( timeIntegrator, "finish1", TestVariableType, CURR_MODULE_NAME, variableList[0] );
+	TimeIntegrator_PrependSetupEP( timeIntegrator, "start0", TestVariableType, CURR_MODULE_NAME, variableList[0] );
+	TimeIntegrator_PrependFinishEP( timeIntegrator, "finish0", TestContextType, CURR_MODULE_NAME, context );
+
+	/* Build */
+	Stg_Component_Build( variableList[0], context, False );
+	Stg_Component_Build( variableList[1], context, False );
+	Stg_Component_Build( timeIntegrator, context, False );
+	Stg_Component_Build( timeIntegrateeList[0], context, False );
+	Stg_Component_Build( timeIntegrateeList[1], context, False );
+	array = Memory_Alloc_Array( double, 2 * size0, "name" );
+	array2 = Memory_Alloc_Array( double, 2 * size1, "name" );
+	
+	/* Initialise */
+	memset( array, 0, sizeof(double) * 2 * size0 );
+	memset( array2, 0, sizeof(double) * 2 * size1 );
+	Stg_Component_Initialise( timeIntegrator, context, False );
+	Stg_Component_Initialise( variableList[0], context, False );
+	Stg_Component_Initialise( variableList[1], context, False );
+	Stg_Component_Initialise( timeIntegrateeList[0], context, False );
+	Stg_Component_Initialise( timeIntegrateeList[1], context, False );
+
+	for ( timestep = 0.0 ; timestep < maxTimesteps ; timestep ++ ) {
+		Journal_Printf( stream, "Step %u - Time = %.3g\n", timestep, context->currentTime );
+
+		Stg_Component_Execute( timeIntegrator, context, True );
+		context->currentTime += AbstractContext_Dt( context );
+
+		for ( integratee_I = 0 ; integratee_I < integrateeCount ; integratee_I++ ) {
+			timeIntegratee = timeIntegrateeList[ integratee_I ];
+			variable       = variableList[ integratee_I ];
+			for ( array_I = 0 ; array_I < variable->arraySize ; array_I++ ) {
+				if ( timeIntegratee->_calculateTimeDeriv == ConstantTimeDeriv ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) - 2.0 * array_I * context->currentTime );
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) + array_I * context->currentTime );
+				}
+				else if ( timeIntegratee->_calculateTimeDeriv == ConstantTimeDeriv2 ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) + 0.5 * array_I * context->currentTime );
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) - 3 * array_I * context->currentTime );
+				}
+				else if ( timeIntegratee->_calculateTimeDeriv == LinearTimeDeriv ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) - 
+							array_I * context->currentTime * context->currentTime );
+
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) +
+							0.5 * array_I * context->currentTime * context->currentTime );
+				}
+				else if ( timeIntegratee->_calculateTimeDeriv == LinearTimeDeriv2 ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) + 
+							0.25 * array_I * context->currentTime * context->currentTime );
+
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) -
+							1.5 * array_I * context->currentTime * context->currentTime );
+				}				
+				else if ( timeIntegratee->_calculateTimeDeriv == CubicTimeDeriv ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) - 
+							2.0 * array_I * ( 0.25 * pow( context->currentTime, 4.0 ) - pow( context->currentTime, 3.0)/3.0));
+
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) +
+							array_I * ( 0.25 * pow( context->currentTime, 4.0 ) - pow( context->currentTime, 3.0 )/3.0));
+				}
+				else if ( timeIntegratee->_calculateTimeDeriv == CubicTimeDeriv2 ) {
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 0 ) + 
+							0.5 * array_I * ( 0.25 * pow( context->currentTime, 4.0 ) - pow( context->currentTime, 3.0)/3.0));
+
+					error += fabs( Variable_GetValueAtDouble( variable, array_I, 1 ) -
+							3.0 * array_I * ( 0.25 * pow( context->currentTime, 4.0 ) - pow( context->currentTime, 3.0 )/3.0));
+				}				
+				else 
+					Journal_Firewall( 0 , Journal_Register( Error_Type, CURR_MODULE_NAME ),
+							"Don't understand _calculateTimeDeriv = %p\n", timeIntegratee->_calculateTimeDeriv );
+			}
+		}
+	}
+	
+	if ( error < tolerance ) 
+		Journal_Printf( stream, "Passed\n" );
+	else
+		Journal_Printf( stream, "Failed - Error = %lf\n", error );
+	
+	/* Destroy stuff */
+	Memory_Free( array );
+	Stg_Class_Delete( variable );
+	Stg_Class_Delete( timeIntegrator );
+	Stg_Class_Delete( timeIntegrateeList[0] );
+	Stg_Class_Delete( timeIntegrateeList[1] );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationEuler.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationEuler.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+StGermain Framework revision 0. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+!!! info 1
+DerivName0 - Constant
+DerivName1 - Constant2
+order = 1
+simultaneous = False
+Step 0 - Time = 0
+Time Integration
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Time Integration - 0.000148773 (secs)
+Step 1 - Time = 0.1
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 2 - Time = 0.2
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 3 - Time = 0.3
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 4 - Time = 0.4
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 5 - Time = 0.5
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 6 - Time = 0.6
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 7 - Time = 0.7
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 8 - Time = 0.8
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 9 - Time = 0.9
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee0 -    0.0000 (secs)
+	1st order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Passed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationEuler.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationEuler.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTimeIntegration --DerivName0=Constant --DerivName1=Constant2 --order=1" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationRK2.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationRK2.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+StGermain Framework revision 0. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+!!! info 1
+DerivName0 - Linear
+DerivName1 - Linear2
+order = 2
+simultaneous = False
+Step 0 - Time = 0
+Time Integration
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Time Integration - 0.000174046 (secs)
+Step 1 - Time = 0.1
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 2 - Time = 0.2
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 3 - Time = 0.3
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 4 - Time = 0.4
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 5 - Time = 0.5
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 6 - Time = 0.6
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 7 - Time = 0.7
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 8 - Time = 0.8
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 9 - Time = 0.9
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee0 -    0.0000 (secs)
+	2nd order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Passed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationRK2.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationRK2.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTimeIntegration --DerivName0=Linear --DerivName1=Linear2 --order=2" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationRK4.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationRK4.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,120 @@
+StGermain Framework revision 0. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+!!! info 1
+DerivName0 - Cubic
+DerivName1 - Cubic2
+order = 4
+simultaneous = False
+Step 0 - Time = 0
+Time Integration
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Time Integration - 0.000187159 (secs)
+Step 1 - Time = 0.1
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 2 - Time = 0.2
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 3 - Time = 0.3
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 4 - Time = 0.4
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 5 - Time = 0.5
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 6 - Time = 0.6
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 7 - Time = 0.7
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 8 - Time = 0.8
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Step 9 - Time = 0.9
+In func TestVariableType
+	       EP:                              start0 -    0.0000 (secs)
+In func TestContextType
+	       EP:                              start1 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee0 -    0.0000 (secs)
+	4th order:                 testTimeIntegratee1 -    0.0000 (secs)
+In func TestContextType
+	       EP:                             finish0 -    0.0000 (secs)
+In func TestVariableType
+	       EP:                             finish1 -    0.0000 (secs)
+Passed
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testTimeIntegrationRK4.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testTimeIntegrationRK4.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testTimeIntegration --DerivName0=Cubic --DerivName1=Cubic2 --order=4" "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1483 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x8069430
+		_entryTbl[0]:
+			varName (ptr): 0x8067e10
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8067c88
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x80681f8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069600
+	indexCount: 16
+	indexTbl (ptr): 0x806e0f8
+		indexTbl[0]: 48
+		indexTbl[1]: 49
+		indexTbl[2]: 50
+		indexTbl[3]: 51
+		indexTbl[4]: 52
+		indexTbl[5]: 53
+		indexTbl[6]: 54
+		indexTbl[7]: 55
+		indexTbl[8]: 56
+		indexTbl[9]: 57
+		indexTbl[10]: 58
+		indexTbl[11]: 59
+		indexTbl[12]: 60
+		indexTbl[13]: 61
+		indexTbl[14]: 62
+		indexTbl[15]: 63
+	vcVarCountTbl (ptr): 0x8069640
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x8069690
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068518
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x8068208
+		_entryTbl[0]:
+			varName (ptr): 0x805efb8
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806d9e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069600
+	indexCount: 16
+	indexTbl (ptr): 0x8069640
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+	vcVarCountTbl (ptr): 0x80685b8
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 1
+		vcVarCountTbl[9]: 1
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+		vcVarCountTbl[12]: 1
+		vcVarCountTbl[13]: 1
+		vcVarCountTbl[14]: 1
+		vcVarCountTbl[15]: 1
+	vcTbl (ptr): 0x80699e8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[12][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[13][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[14][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[15][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x8068ca8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806d9e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x8069600
+		_entryTbl[0]:
+			varName (ptr): 0x8066510
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x80669c0
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066b90
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069430
+	indexCount: 16
+	indexTbl (ptr): 0x8069640
+		indexTbl[0]: 0
+		indexTbl[1]: 4
+		indexTbl[2]: 8
+		indexTbl[3]: 12
+		indexTbl[4]: 16
+		indexTbl[5]: 20
+		indexTbl[6]: 24
+		indexTbl[7]: 28
+		indexTbl[8]: 32
+		indexTbl[9]: 36
+		indexTbl[10]: 40
+		indexTbl[11]: 44
+		indexTbl[12]: 48
+		indexTbl[13]: 52
+		indexTbl[14]: 56
+		indexTbl[15]: 60
+	vcVarCountTbl (ptr): 0x80685b8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x8069ad0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068518
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00
+var[5]: 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 
+001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 
+002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x8069430
+		_entryTbl[0]:
+			varName (ptr): 0x8067ed0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067158
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x8067328
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069600
+	indexCount: 16
+	indexTbl (ptr): 0x8069640
+		indexTbl[0]: 3
+		indexTbl[1]: 7
+		indexTbl[2]: 11
+		indexTbl[3]: 15
+		indexTbl[4]: 19
+		indexTbl[5]: 23
+		indexTbl[6]: 27
+		indexTbl[7]: 31
+		indexTbl[8]: 35
+		indexTbl[9]: 39
+		indexTbl[10]: 43
+		indexTbl[11]: 47
+		indexTbl[12]: 51
+		indexTbl[13]: 55
+		indexTbl[14]: 59
+		indexTbl[15]: 63
+	vcVarCountTbl (ptr): 0x80685b8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x8069ca0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068518
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00
+var[4]: 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00
+var[5]: 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00, 0.00, 0.00, 0.00, 30.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 
+XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 
+XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x8068208
+		_entryTbl[0]:
+			varName (ptr): 0x805f420
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x8069640
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069600
+	indexCount: 16
+	indexTbl (ptr): 0x80685b8
+		indexTbl[0]: 12
+		indexTbl[1]: 13
+		indexTbl[2]: 14
+		indexTbl[3]: 15
+		indexTbl[4]: 28
+		indexTbl[5]: 29
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+		indexTbl[8]: 44
+		indexTbl[9]: 45
+		indexTbl[10]: 46
+		indexTbl[11]: 47
+		indexTbl[12]: 60
+		indexTbl[13]: 61
+		indexTbl[14]: 62
+		indexTbl[15]: 63
+	vcVarCountTbl (ptr): 0x806e188
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 1
+		vcVarCountTbl[9]: 1
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+		vcVarCountTbl[12]: 1
+		vcVarCountTbl[13]: 1
+		vcVarCountTbl[14]: 1
+		vcVarCountTbl[15]: 1
+	vcTbl (ptr): 0x8069e70
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[12][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[13][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[14][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[15][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x8068bc0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x8069640
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x8068798
+	dictionary (ptr): 0x805e4c0
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x8069600
+		_entryTbl[0]:
+			varName (ptr): 0x80680b8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ecc8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067f00
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8060eb0
+VariableCondition (ptr): 0x8068798
+Stg_Component (ptr): 0x8068798
+Stg_Object (ptr): 0x8068798
+	Stg_Class (ptr): 0x8068798
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f96fd3
+		_print (func ptr): 0xb7f97019
+		_copy (func ptr): 0xb7f975ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f962a4
+	_construct (func ptr): 0xb7f977df
+	_build (func ptr): 0xb7f9779d
+	_initialise (func ptr): 0xb7efade2
+	_execute (func ptr): 0xb7efaea6
+	_destroy (func ptr): 0xb7efaed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0xb7f9782e
+	_getVariableCount (func ptr): 0xb7f97bc4
+	_getVariableIndex (func ptr): 0xb7f97bdb
+	_getValueIndex (func ptr): 0xb7f97cb6
+	_getValueCount (func ptr): 0xb7f97cbe
+	_getValue (func ptr): 0xb7f97cd5
+	variable_Register (ptr): 0x806e1e8
+	conFunc_Register (ptr): 0x805b9c0
+	_set (ptr): 0x8069430
+	indexCount: 16
+	indexTbl (ptr): 0x80685b8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 16
+		indexTbl[5]: 17
+		indexTbl[6]: 18
+		indexTbl[7]: 19
+		indexTbl[8]: 32
+		indexTbl[9]: 33
+		indexTbl[10]: 34
+		indexTbl[11]: 35
+		indexTbl[12]: 48
+		indexTbl[13]: 49
+		indexTbl[14]: 50
+		indexTbl[15]: 51
+	vcVarCountTbl (ptr): 0x8068280
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x8069f40
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x8068518
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1179 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e260
+		_entryTbl[0]:
+			varName (ptr): 0x8067ee0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805eb30
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805eb90
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e348
+	indexCount: 12
+	indexTbl (ptr): 0x806e0d8
+		indexTbl[0]: 36
+		indexTbl[1]: 37
+		indexTbl[2]: 38
+		indexTbl[3]: 39
+		indexTbl[4]: 40
+		indexTbl[5]: 41
+		indexTbl[6]: 42
+		indexTbl[7]: 43
+		indexTbl[8]: 44
+		indexTbl[9]: 45
+		indexTbl[10]: 46
+		indexTbl[11]: 47
+	vcVarCountTbl (ptr): 0x806e170
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+	vcTbl (ptr): 0x806c540
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c6a0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 000 000 000 000 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 001 001 001 001 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 002 002 002 002 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x806dfa0
+		_entryTbl[0]:
+			varName (ptr): 0x805f088
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806c3b0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e170
+	indexCount: 12
+	indexTbl (ptr): 0x806e0d8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+	vcVarCountTbl (ptr): 0x806e348
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 1
+		vcVarCountTbl[9]: 1
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+	vcTbl (ptr): 0x806c840
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806c6d0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806c3b0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e348
+		_entryTbl[0]:
+			varName (ptr): 0x80665e0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x8066a90
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066c60
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e0d8
+	indexCount: 16
+	indexTbl (ptr): 0x8068688
+		indexTbl[0]: 0
+		indexTbl[1]: 3
+		indexTbl[2]: 6
+		indexTbl[3]: 9
+		indexTbl[4]: 12
+		indexTbl[5]: 15
+		indexTbl[6]: 18
+		indexTbl[7]: 21
+		indexTbl[8]: 24
+		indexTbl[9]: 27
+		indexTbl[10]: 30
+		indexTbl[11]: 33
+		indexTbl[12]: 36
+		indexTbl[13]: 39
+		indexTbl[14]: 42
+		indexTbl[15]: 45
+	vcVarCountTbl (ptr): 0x8068348
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x806c8f8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c6a0
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00
+var[5]: 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00, 20.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False 
+True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False 
+True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False True  False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 000 XXX XXX 
+001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 001 XXX XXX 
+002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 002 XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0d8
+		_entryTbl[0]:
+			varName (ptr): 0x8067fa0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067228
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x80673f8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e348
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c6a0
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x806dfa0
+		_entryTbl[0]:
+			varName (ptr): 0x8065d10
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806e038
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e348
+	indexCount: 12
+	indexTbl (ptr): 0x806e0d8
+		indexTbl[0]: 9
+		indexTbl[1]: 10
+		indexTbl[2]: 11
+		indexTbl[3]: 21
+		indexTbl[4]: 22
+		indexTbl[5]: 23
+		indexTbl[6]: 33
+		indexTbl[7]: 34
+		indexTbl[8]: 35
+		indexTbl[9]: 45
+		indexTbl[10]: 46
+		indexTbl[11]: 47
+	vcVarCountTbl (ptr): 0x806e170
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 1
+		vcVarCountTbl[9]: 1
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+	vcTbl (ptr): 0x806cac8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[8][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[9][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[10][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[11][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806c528
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806e038
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x806da70
+	dictionary (ptr): 0x805e578
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e170
+		_entryTbl[0]:
+			varName (ptr): 0x8068188
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x80681b0
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067fd0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061020
+VariableCondition (ptr): 0x806da70
+Stg_Component (ptr): 0x806da70
+Stg_Object (ptr): 0x806da70
+	Stg_Class (ptr): 0x806da70
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7fbffd3
+		_print (func ptr): 0xb7fc0019
+		_copy (func ptr): 0xb7fc05ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fbf2a4
+	_construct (func ptr): 0xb7fc07df
+	_build (func ptr): 0xb7fc079d
+	_initialise (func ptr): 0xb7f23de2
+	_execute (func ptr): 0xb7f23ea6
+	_destroy (func ptr): 0xb7f23ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0xb7fc082e
+	_getVariableCount (func ptr): 0xb7fc0bc4
+	_getVariableIndex (func ptr): 0xb7fc0bdb
+	_getValueIndex (func ptr): 0xb7fc0cb6
+	_getValueCount (func ptr): 0xb7fc0cbe
+	_getValue (func ptr): 0xb7fc0cd5
+	variable_Register (ptr): 0x806e2b0
+	conFunc_Register (ptr): 0x805ba18
+	_set (ptr): 0x806e0d8
+	indexCount: 12
+	indexTbl (ptr): 0x806e348
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 12
+		indexTbl[4]: 13
+		indexTbl[5]: 14
+		indexTbl[6]: 24
+		indexTbl[7]: 25
+		indexTbl[8]: 26
+		indexTbl[9]: 36
+		indexTbl[10]: 37
+		indexTbl[11]: 38
+	vcVarCountTbl (ptr): 0x806e260
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+	vcTbl (ptr): 0x806cb68
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c6a0
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False 
+True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False 
+True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False True  True  True  False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1051 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e300
+		_entryTbl[0]:
+			varName (ptr): 0x8067ee8
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805eb38
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805eb98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e0e0
+	indexCount: 8
+	indexTbl (ptr): 0x806c100
+		indexTbl[0]: 24
+		indexTbl[1]: 25
+		indexTbl[2]: 26
+		indexTbl[3]: 27
+		indexTbl[4]: 28
+		indexTbl[5]: 29
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x806c130
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x806c160
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c250
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False True  True  True  True  True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1c8
+		_entryTbl[0]:
+			varName (ptr): 0x805f090
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806bf60
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e0e0
+	indexCount: 8
+	indexTbl (ptr): 0x806c250
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+	vcVarCountTbl (ptr): 0x806c130
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x806c3d8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806c0d8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806bf60
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0e0
+		_entryTbl[0]:
+			varName (ptr): 0x80665e8
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x8066a98
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066c68
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e300
+	indexCount: 16
+	indexTbl (ptr): 0x8068690
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+		indexTbl[14]: 28
+		indexTbl[15]: 30
+	vcVarCountTbl (ptr): 0x8068350
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x806c460
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c130
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00
+var[5]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e300
+		_entryTbl[0]:
+			varName (ptr): 0x8067fa8
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067230
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x8067400
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e0e0
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c130
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1c8
+		_entryTbl[0]:
+			varName (ptr): 0x8065d18
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806dfa8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e0e0
+	indexCount: 8
+	indexTbl (ptr): 0x806c130
+		indexTbl[0]: 6
+		indexTbl[1]: 7
+		indexTbl[2]: 14
+		indexTbl[3]: 15
+		indexTbl[4]: 22
+		indexTbl[5]: 23
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x806c250
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x806c630
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x806c0d8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806dfa8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 000 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x806da78
+	dictionary (ptr): 0x805e580
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0e0
+		_entryTbl[0]:
+			varName (ptr): 0x8068190
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x80681b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067fd8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061028
+VariableCondition (ptr): 0x806da78
+Stg_Component (ptr): 0x806da78
+Stg_Object (ptr): 0x806da78
+	Stg_Class (ptr): 0x806da78
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7edefd3
+		_print (func ptr): 0xb7edf019
+		_copy (func ptr): 0xb7edf5ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ede2a4
+	_construct (func ptr): 0xb7edf7df
+	_build (func ptr): 0xb7edf79d
+	_initialise (func ptr): 0xb7e42de2
+	_execute (func ptr): 0xb7e42ea6
+	_destroy (func ptr): 0xb7e42ed6
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0xb7edf82e
+	_getVariableCount (func ptr): 0xb7edfbc4
+	_getVariableIndex (func ptr): 0xb7edfbdb
+	_getValueIndex (func ptr): 0xb7edfcb6
+	_getValueCount (func ptr): 0xb7edfcbe
+	_getValue (func ptr): 0xb7edfcd5
+	variable_Register (ptr): 0x806e2b8
+	conFunc_Register (ptr): 0x805ba20
+	_set (ptr): 0x806e300
+	indexCount: 8
+	indexTbl (ptr): 0x806c250
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 8
+		indexTbl[3]: 9
+		indexTbl[4]: 16
+		indexTbl[5]: 17
+		indexTbl[6]: 24
+		indexTbl[7]: 25
+	vcVarCountTbl (ptr): 0x806c130
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x806c6a0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x806c100
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False 
+True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False 
+True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False True  True  False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 000 000 XXX XXX XXX XXX XXX XXX 
+001 001 XXX XXX XXX XXX XXX XXX 001 001 XXX XXX XXX XXX XXX XXX 001 001 XXX XXX XXX XXX XXX XXX 001 001 XXX XXX XXX XXX XXX XXX 
+002 002 XXX XXX XXX XXX XXX XXX 002 002 XXX XXX XXX XXX XXX XXX 002 002 XXX XXX XXX XXX XXX XXX 002 002 XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.0of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.0of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.1of2.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.1of2.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1051 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3e7c
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x112c788
+		_entryTbl[0]:
+			varName (ptr): 0x111e938
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1124ca8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1124e58
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c7c8
+	indexCount: 8
+	indexTbl (ptr): 0x112c988
+		indexTbl[0]: 12
+		indexTbl[1]: 13
+		indexTbl[2]: 14
+		indexTbl[3]: 15
+		indexTbl[4]: 28
+		indexTbl[5]: 29
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112cb98
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112cbc8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112ccb8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3e8c
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x112cd08
+		_entryTbl[0]:
+			varName (ptr): 0x1125228
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112cb98
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c478
+	indexCount: 8
+	indexTbl (ptr): 0x112c4b8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 16
+		indexTbl[5]: 17
+		indexTbl[6]: 18
+		indexTbl[7]: 19
+	vcVarCountTbl (ptr): 0x112c4e8
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112ced8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112ccb8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112cb98
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3e98
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x112c478
+		_entryTbl[0]:
+			varName (ptr): 0x1126278
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x1126448
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x1126618
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c4b8
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112ccb8
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3ea4
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x112c478
+		_entryTbl[0]:
+			varName (ptr): 0x1126a08
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x1126bd8
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x1126da8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c4b8
+	indexCount: 16
+	indexTbl (ptr): 0x112c4f8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+	vcVarCountTbl (ptr): 0x112cf48
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x112cf98
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112ccb8
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3eb4
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x112cd08
+		_entryTbl[0]:
+			varName (ptr): 0x11256b8
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112cf48
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c478
+	indexCount: 8
+	indexTbl (ptr): 0x112c4b8
+		indexTbl[0]: 3
+		indexTbl[1]: 7
+		indexTbl[2]: 11
+		indexTbl[3]: 15
+		indexTbl[4]: 19
+		indexTbl[5]: 23
+		indexTbl[6]: 27
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112c4e8
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112d168
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112ccb8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112cf48
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x112c258
+	dictionary (ptr): 0x111df18
+	_dictionaryEntryName (ptr): 0x3ec0
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x112c478
+		_entryTbl[0]:
+			varName (ptr): 0x1125b48
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1125cf8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1125ea8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111eea8
+VariableCondition (ptr): 0x112c258
+Stg_Component (ptr): 0x112c258
+Stg_Object (ptr): 0x112c258
+	Stg_Class (ptr): 0x112c258
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112a378
+	conFunc_Register (ptr): 0x112a318
+	_set (ptr): 0x112c4b8
+	indexCount: 8
+	indexTbl (ptr): 0x112ccb8
+		indexTbl[0]: 0
+		indexTbl[1]: 4
+		indexTbl[2]: 8
+		indexTbl[3]: 12
+		indexTbl[4]: 16
+		indexTbl[5]: 20
+		indexTbl[6]: 24
+		indexTbl[7]: 28
+	vcVarCountTbl (ptr): 0x112c4f8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112d1d8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112c528
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 
+001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 
+002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.1of2.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.1of2.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.1of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.1of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,875 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e7c
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x112e5b8
+		_entryTbl[0]:
+			varName (ptr): 0x111f348
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x11256b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1125868
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e5f8
+	indexCount: 8
+	indexTbl (ptr): 0x112e7b8
+		indexTbl[0]: 12
+		indexTbl[1]: 13
+		indexTbl[2]: 14
+		indexTbl[3]: 15
+		indexTbl[4]: 28
+		indexTbl[5]: 29
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112e9c8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112e9f8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112eae8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e8c
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x112eb38
+		_entryTbl[0]:
+			varName (ptr): 0x1125c38
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112e9c8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e2a8
+	indexCount: 8
+	indexTbl (ptr): 0x112e2e8
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 16
+		indexTbl[5]: 17
+		indexTbl[6]: 18
+		indexTbl[7]: 19
+	vcVarCountTbl (ptr): 0x112e318
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112ed08
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112eae8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112e9c8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e98
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x112e2a8
+		_entryTbl[0]:
+			varName (ptr): 0x1126c88
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x1126e58
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x1127028
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e2e8
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112eae8
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3ea4
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x112e2a8
+		_entryTbl[0]:
+			varName (ptr): 0x1127418
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x11275e8
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x11277b8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e2e8
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112eae8
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3eb4
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x112eb38
+		_entryTbl[0]:
+			varName (ptr): 0x11260c8
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112e2a8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e2d8
+	indexCount: 8
+	indexTbl (ptr): 0x112e318
+		indexTbl[0]: 3
+		indexTbl[1]: 7
+		indexTbl[2]: 11
+		indexTbl[3]: 15
+		indexTbl[4]: 19
+		indexTbl[5]: 23
+		indexTbl[6]: 27
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112e348
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112ed78
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112eae8
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112e2a8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x112e088
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3ec0
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x112e348
+		_entryTbl[0]:
+			varName (ptr): 0x1126558
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1126708
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x11268b8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112e088
+Stg_Component (ptr): 0x112e088
+Stg_Object (ptr): 0x112e088
+	Stg_Class (ptr): 0x112e088
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112c1c8
+	conFunc_Register (ptr): 0x112c168
+	_set (ptr): 0x112e238
+	indexCount: 8
+	indexTbl (ptr): 0x112e278
+		indexTbl[0]: 0
+		indexTbl[1]: 4
+		indexTbl[2]: 8
+		indexTbl[3]: 12
+		indexTbl[4]: 16
+		indexTbl[5]: 20
+		indexTbl[6]: 24
+		indexTbl[7]: 28
+	vcVarCountTbl (ptr): 0x112eae8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112ee08
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112eef8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 
+001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 
+002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.1of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.1of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.2of3.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.2of3.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1051 @@
+StGermain Framework revision 3842. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e7c
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d708
+		_entryTbl[0]:
+			varName (ptr): 0x111f348
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x11256b8
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x1125868
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_FrontName-Construct
+	build function name: WallVC_FrontName-Build
+	initialise function name: WallVC_FrontName-Initialise
+	execute function name: WallVC_FrontName-Execute
+	destroy function name: WallVC_FrontName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d748
+	indexCount: 8
+	indexTbl (ptr): 0x112d908
+		indexTbl[0]: 12
+		indexTbl[1]: 13
+		indexTbl[2]: 14
+		indexTbl[3]: 15
+		indexTbl[4]: 28
+		indexTbl[5]: 29
+		indexTbl[6]: 30
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112db18
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112db48
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112dc38
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 2.00, 2.00, 2.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 3.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False True  True  True  True  
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 001 001 001 001 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 002 002 002 002 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Back
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e8c
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x112dc88
+		_entryTbl[0]:
+			varName (ptr): 0x1125c38
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112db18
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BackName-Construct
+	build function name: WallVC_BackName-Build
+	initialise function name: WallVC_BackName-Initialise
+	execute function name: WallVC_BackName-Execute
+	destroy function name: WallVC_BackName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d3f8
+	indexCount: 8
+	indexTbl (ptr): 0x112d438
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 16
+		indexTbl[5]: 17
+		indexTbl[6]: 18
+		indexTbl[7]: 19
+	vcVarCountTbl (ptr): 0x112d468
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112de58
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112dc38
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112db18
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  False False False False False False False False False False False False True  True  True  True  False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Left
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3e98
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d3f8
+		_entryTbl[0]:
+			varName (ptr): 0x1126c88
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x1126e58
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x1127028
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_LeftName-Construct
+	build function name: WallVC_LeftName-Build
+	initialise function name: WallVC_LeftName-Initialise
+	execute function name: WallVC_LeftName-Execute
+	destroy function name: WallVC_LeftName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d438
+	indexCount: 0
+	indexTbl (ptr): 0x0
+	vcVarCountTbl (ptr): 0x0
+	vcTbl (ptr): 0x0
+	valueCount: 3
+	valueTbl (ptr): 0x112dc38
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Right
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3ea4
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d3f8
+		_entryTbl[0]:
+			varName (ptr): 0x1127418
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x11275e8
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x11277b8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_RightName-Construct
+	build function name: WallVC_RightName-Build
+	initialise function name: WallVC_RightName-Initialise
+	execute function name: WallVC_RightName-Execute
+	destroy function name: WallVC_RightName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d438
+	indexCount: 16
+	indexTbl (ptr): 0x112d478
+		indexTbl[0]: 0
+		indexTbl[1]: 1
+		indexTbl[2]: 2
+		indexTbl[3]: 3
+		indexTbl[4]: 4
+		indexTbl[5]: 5
+		indexTbl[6]: 6
+		indexTbl[7]: 7
+		indexTbl[8]: 8
+		indexTbl[9]: 9
+		indexTbl[10]: 10
+		indexTbl[11]: 11
+		indexTbl[12]: 12
+		indexTbl[13]: 13
+		indexTbl[14]: 14
+		indexTbl[15]: 15
+	vcVarCountTbl (ptr): 0x112dec8
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+	vcTbl (ptr): 0x112df18
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[14][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[14][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[14][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[15][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[15][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[15][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112dc38
+		valueTbl[0]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+		valueTbl[2]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  True  False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3eb4
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x112dc88
+		_entryTbl[0]:
+			varName (ptr): 0x11260c8
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x112dec8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_TopName-Construct
+	build function name: WallVC_TopName-Build
+	initialise function name: WallVC_TopName-Initialise
+	execute function name: WallVC_TopName-Execute
+	destroy function name: WallVC_TopName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d3f8
+	indexCount: 8
+	indexTbl (ptr): 0x112d438
+		indexTbl[0]: 3
+		indexTbl[1]: 7
+		indexTbl[2]: 11
+		indexTbl[3]: 15
+		indexTbl[4]: 19
+		indexTbl[5]: 23
+		indexTbl[6]: 27
+		indexTbl[7]: 31
+	vcVarCountTbl (ptr): 0x112d468
+		vcVarCountTbl[0]: 1
+		vcVarCountTbl[1]: 1
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+	vcTbl (ptr): 0x112e0e8
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[1][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[2][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[3][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 0
+		vcTbl[7][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x112dc38
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x112dec8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 
+
+Testing for WallVC_Bottom
+WallVC (ptr): 0x112d1d8
+	dictionary (ptr): 0x111e928
+	_dictionaryEntryName (ptr): 0x3ec0
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x112d3f8
+		_entryTbl[0]:
+			varName (ptr): 0x1126558
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x1126708
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x11268b8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x111f8b8
+VariableCondition (ptr): 0x112d1d8
+Stg_Component (ptr): 0x112d1d8
+Stg_Object (ptr): 0x112d1d8
+	Stg_Class (ptr): 0x112d1d8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0x20a1f4
+		_print (func ptr): 0x20a250
+		_copy (func ptr): 0x20a87c
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x209278
+	_construct (func ptr): 0x20aac0
+	_build (func ptr): 0x20aa70
+	_initialise (func ptr): 0x56e31c
+	_execute (func ptr): 0x56e410
+	_destroy (func ptr): 0x56e454
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: WallVC_BottomName-Construct
+	build function name: WallVC_BottomName-Build
+	initialise function name: WallVC_BottomName-Initialise
+	execute function name: WallVC_BottomName-Execute
+	destroy function name: WallVC_BottomName-Destroy
+	_getSet (func ptr): 0x20ab40
+	_getVariableCount (func ptr): 0x20b3dc
+	_getVariableIndex (func ptr): 0x20b410
+	_getValueIndex (func ptr): 0x20b51c
+	_getValueCount (func ptr): 0x20b548
+	_getValue (func ptr): 0x20b578
+	variable_Register (ptr): 0x112b2f8
+	conFunc_Register (ptr): 0x112b298
+	_set (ptr): 0x112d438
+	indexCount: 8
+	indexTbl (ptr): 0x112dc38
+		indexTbl[0]: 0
+		indexTbl[1]: 4
+		indexTbl[2]: 8
+		indexTbl[3]: 12
+		indexTbl[4]: 16
+		indexTbl[5]: 20
+		indexTbl[6]: 24
+		indexTbl[7]: 28
+	vcVarCountTbl (ptr): 0x112d478
+		vcVarCountTbl[0]: 3
+		vcVarCountTbl[1]: 3
+		vcVarCountTbl[2]: 3
+		vcVarCountTbl[3]: 3
+		vcVarCountTbl[4]: 3
+		vcVarCountTbl[5]: 3
+		vcVarCountTbl[6]: 3
+		vcVarCountTbl[7]: 3
+	vcTbl (ptr): 0x112e158
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+	valueCount: 3
+	valueTbl (ptr): 0x112d4a8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_Double
+			asDouble: 3
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00
+var[4]: 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00
+var[6]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False True  False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 000 XXX XXX XXX 
+001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 001 XXX XXX XXX 
+002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 002 XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.2of3.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.2of3.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testWallVC " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 Utils/tests/testWallVC.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/tests/testWallVC.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,253 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testWallVC.c 4149 2007-06-29 06:59:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+void exponential(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 30.0;
+}
+
+
+Mesh* buildMesh( unsigned nDims, unsigned* size, 
+		     double* minCrds, double* maxCrds, 
+		     ExtensionManager_Register* emReg )
+{
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		maxDecomp[3] = {0, 1, 1};
+
+	gen = CartesianGenerator_New( "" );
+	gen->shadowDepth = 0;
+	CartesianGenerator_SetDimSize( gen, nDims );
+	CartesianGenerator_SetTopologyParams( gen, size, 0, NULL, maxDecomp );
+	CartesianGenerator_SetGeometryParams( gen, minCrds, maxCrds );
+
+	mesh = Mesh_New( "" );
+	Mesh_SetExtensionManagerRegister( mesh, emReg );
+	Mesh_SetGenerator( mesh, gen );
+
+	Stg_Component_Build( mesh, NULL, False );
+	Stg_Component_Initialise( mesh, NULL, False );
+
+	return mesh;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	unsigned	nDims = 3;
+	unsigned	meshSize[3] = {3, 3, 3};
+	double		minCrds[3] = {0.0, 0.0, 0.0};
+	double		maxCrds[3] = {1.0, 1.0, 1.0};
+	Mesh*		mesh;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	WallVC*				vc;
+	ConditionFunction*		quadCF;
+	ConditionFunction*		expCF;
+	ConditionFunction_Register*	conFunc_Register;
+
+	ExtensionManager_Register*		extensionMgr_Register;
+	
+	double*		array[7];
+	char*		vcKey[] = {"WallVC_Front", "WallVC_Back", "WallVC_Left", "WallVC_Right",
+				"WallVC_Top", "WallVC_Bottom"};
+	char*		vcKeyName[] = {"WallVC_FrontName", "WallVC_BackName", "WallVC_LeftName", "WallVC_RightName",
+				"WallVC_TopName", "WallVC_BottomName"};
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+
+	unsigned	nDomains;
+	
+	Index	i;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size(CommWorld, &procCount);
+	MPI_Comm_rank(CommWorld, &rank);
+	
+	StGermain_Init( &argc, &argv );
+	
+	StgDomainGeometry_Init( &argc, &argv );
+	StgDomainShape_Init( &argc, &argv );
+	StgDomainMesh_Init( &argc, &argv );
+	StgDomainUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	Journal_Enable_NamedStream( Info_Type, CartesianGenerator_Type, False );
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add(dictionary, "outputPath", Dictionary_Entry_Value_FromString("./output"));
+	IO_Handler_ReadAllFromFile(io_handler, "data/wallVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+
+	extensionMgr_Register = ExtensionManager_Register_New();	
+	
+	/* Create a mesh. */
+	mesh = buildMesh( nDims, meshSize, minCrds, maxCrds, extensionMgr_Register );
+	nDomains = Mesh_GetDomainSize( mesh, MT_VERTEX );
+	
+	/* Create CF stuff */
+	quadCF = ConditionFunction_New(quadratic, "quadratic");
+	expCF = ConditionFunction_New(exponential, "exponential");
+	conFunc_Register = ConditionFunction_Register_New();
+	ConditionFunction_Register_Add(conFunc_Register, quadCF);
+	ConditionFunction_Register_Add(conFunc_Register, expCF);
+	
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	
+	/* Create variables */
+	for (i = 0; i < 6; i++) {
+		array[i] = Memory_Alloc_Array( double, nDomains, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &nDomains, NULL, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, nDomains * 5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &nDomains, NULL, (void**)&array[6], 0 );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create WallVC */
+	for (i = 0; i < 6; i++)
+	{
+		Index	j, k;
+		
+		vc = WallVC_New( vcKeyName[i], vcKey[i], variable_Register, conFunc_Register, dictionary, mesh );
+		Stg_Component_Build( vc, 0, False );
+		
+		for (j = 0; j < 6; j++)
+			memset(array[j], 0, sizeof(double)* nDomains );
+		memset(array[6], 0, sizeof(double)* nDomains * 5);
+		VariableCondition_Apply(vc, NULL);
+	
+		if (rank == procToWatch)
+		{
+			printf("Testing for %s\n", vcKey[i]);
+			Stg_Class_Print(vc, stream);
+			printf("\n");
+			for (j = 0; j < 6; j++)
+			{
+				printf("\nvar[%u]: %.2lf", j, array[j][0]);
+				for (k = 1; k < nDomains; k++)
+					printf(", %.2lf", array[j][k]);
+			}
+			printf("\nvar[6]: %.2lf", array[6][0]);
+			for (j = 1; j < nDomains*5; j++)
+				printf(", %.2lf", array[6][j]);
+			printf("\n\n");
+			
+			for (j = 0; j < 7; j++)
+			{
+				for (k = 0; k < nDomains; k++)
+					printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+				printf("\n");
+			}
+			printf("\n");
+			
+			for (j = 0; j < 7; j++)
+			{
+				for (k = 0; k < nDomains; k++)
+				{
+					VariableCondition_ValueIndex	valIndex;
+					
+					valIndex = VariableCondition_GetValueIndex(vc, k, j);
+					if (valIndex != (unsigned)-1)
+						printf("%03u ", valIndex);
+					else
+						printf("XXX ");
+				}
+				printf("\n");
+			}
+			printf("\n");
+		}
+		
+		Stg_Class_Delete(vc);
+	}
+		
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(quadCF);
+	Stg_Class_Delete(expCF);
+	Stg_Class_Delete(dictionary);
+	FreeObject( mesh );
+	
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
diff -r 9f22ec4f42ee -r 5667007f4799 build-functions.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build-functions.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1 @@
+VMake/build-functions.sh
\ No newline at end of file
diff -r 9f22ec4f42ee -r 5667007f4799 configure.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,1 @@
+VMake/configure.sh
\ No newline at end of file
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/Toolbox/Toolbox.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/Toolbox/Toolbox.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,119 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+**	Melbourne, 3053, Australia.
+**
+** Primary Contributing Organisations:
+**	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+**	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+**	Monash Cluster Computing - http://www.mcc.monash.edu.au
+**	Computational Infrastructure for Geodynamics - http://www.geodynamics.org
+**
+** Contributors:
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+**	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+**	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+**	Kent Humphries, Software Engineer, VPAC. (kenth at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: StandardConditionFunctions.c 532 2006-04-04 00:21:59Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/StgDomain.h>
+#include "Toolbox.h"
+
+
+const Type StgDomain_Toolbox_Type = "StgDomain_Toolbox";
+
+void _StgDomain_Toolbox_Construct( void* component, Stg_ComponentFactory* cf, void* ptrToContext )  {
+	DomainContext*			context;
+	AbstractContext**		ptrToSelf;
+	AbstractContext*		curContext;
+ 
+	/* Get the existing context, as defined by StGermain, or an alternative toolbox. */
+	ptrToSelf = (AbstractContext**)ptrToContext;
+	curContext = (AbstractContext*)Stg_ComponentFactory_ConstructByName( cf, "context", AbstractContext, True, ptrToSelf ); 
+
+
+	/* Only need to initialise a new context, and copy all relevant registers over IF this is the first toolbox */
+        /* to be constructed. */
+        /* The first toolbox to be constructed is Guaranteed to have the 'largest' context. */
+        /*                       (ie is an inherited child of ALL other toolbox about to be loaded) */
+        if( curContext->type == AbstractContext_Type ) {
+		/* Create a new, empty FiniteElementContext. */
+		context = DomainContext_New( curContext->name, 0, 0, curContext->communicator, curContext->dictionary );
+		Memory_CountInc( context );
+
+                context->dictionary = curContext->dictionary;
+                /* Need to get the old CF from curContext, and use that in my new context. */
+                /* Now I CANNOT delete this curContext or I'll lose the CF. :( */
+                context->CF = curContext->CF;
+
+                /* Need to get the LCRegister componentList, and replace the existing (abstract) context */
+                /* with the newly created (PICellerator) context!!! */
+                Stg_ObjectList_Replace( 
+			context->CF->LCRegister->componentList,
+			((Stg_Component*) curContext)->name,
+			KEEP,
+			(Stg_Component*) context);
+
+                /* Recreate the registerRegister link in CF. */
+                context->CF->registerRegister = context->register_Register;
+        } /* close of if( prevContext->type == AbstractContext_Type) */
+	else { /* curContext was NOT an abstract context -> that is does NOT need to be replaced */
+		context = (DomainContext*)curContext;
+	}
+	
+	*ptrToSelf = (AbstractContext*)context;
+}
+
+
+void* _StgDomain_Toolbox_DefaultNew( Name name ) {
+	return Codelet_New(
+			StgDomain_Toolbox_Type,
+			_StgDomain_Toolbox_DefaultNew,
+			_StgDomain_Toolbox_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+}
+
+void StgDomain_Toolbox_Initialise( PluginsManager* pluginsManager, int* argc, char*** argv ) {
+	StgDomain_Init( argc, argv );
+}
+
+void StgDomain_Toolbox_Finalise( PluginsManager* pluginsManager ) {
+	StgDomain_Finalise();
+	
+	Journal_Printf( Journal_Register( Info_Type, StgDomain_Toolbox_Type ), "Finalised: StGermain Domain Toolbox.\n" );
+}
+
+Index StgDomain_Toolbox_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, StgDomain_Toolbox_Type, "0", _StgDomain_Toolbox_DefaultNew );
+}
+
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/Toolbox/Toolbox.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/Toolbox/Toolbox.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,66 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+**	Melbourne, 3053, Australia.
+**
+** Primary Contributing Organisations:
+**	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+**	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+**	Monash Cluster Computing - http://www.mcc.monash.edu.au
+**	Computational Infrastructure for Geodynamics - http://www.geodynamics.org
+**
+** Contributors:
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+**	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+**	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+** Role:
+**	Defines any header info, such as new structures, needed by this plugin
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StgDomain_Toolbox_h__
+#define __StgDomain_Toolbox_h__
+
+extern const Type StgDomain_Toolbox_Type;
+
+typedef struct {
+	__Codelet
+} StgDomain_Toolbox;
+
+void StgDomain_Toolbox_Initialise();
+
+Index StgDomain_Toolbox_Register( PluginsManager* pluginsManager );
+
+void StgDomain_Toolbox_Finalise();
+
+#endif	
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/Toolbox/Toolbox.meta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/Toolbox/Toolbox.meta	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<!-- Note: suffixing the name by "_Toolbox" is important here! -->
+<param name="Name">StgDomain_Toolbox</param>
+
+</StGermainData>
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/Toolbox/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/Toolbox/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,58 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+##	Melbourne, 3053, Australia.
+##
+## Primary Contributing Organisations:
+##	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+##	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+##	Monash Cluster Computing - http://www.mcc.monash.edu.au
+##	Computational Infrastructure for Geodynamics - http://www.geodynamics.org
+##
+## Contributors:
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+##	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+##	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 535 2006-04-11 13:07:34Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SHELL := $(shell which bash)
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+modName := $(shell basename `pwd` )
+modName := $(shell echo ${modName} | cut -c 1 | tr '[:lower:]' '[:upper:]' )$(shell echo ${modName} | cut -c 2- ) 
+
+mod = ${PROJECT}_${modName}
+includes = ${PROJECT}/${modName}
+
+SRCS = $(wildcard *.c)
+HDRS = $(wildcard *.h)
+
+packages = STGERMAIN MPI XML MATH DL 
+EXTERNAL_LIBS = -lStgDomain
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,50 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+##	Melbourne, 3053, Australia.
+##
+## Primary Contributing Organisations:
+##	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+##	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+##	Monash Cluster Computing - http://www.mcc.monash.edu.au
+##	Computational Infrastructure for Geodynamics - http://www.geodynamics.org
+##
+## Contributors:
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+##	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+##	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 934 2007-08-02 08:37:40Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+# Subdirectories
+subdirs := src tests Toolbox
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/Finalise.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/Finalise.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,54 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StgDomain_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	StgDomainSwarm_Finalise();
+	StgDomainUtils_Finalise();
+	StgDomainMesh_Finalise();
+	StgDomainShape_Finalise();
+	StgDomainGeometry_Finalise();
+	
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/Finalise.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/Finalise.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents any construct in the solver that represents state of physics that has a position in space.
+**	Should be base class to Nodes and Particles
+**
+** Assumptions:
+**	Performs all initialisation at the base level
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Finalise_h__
+#define __Domain_Finalise_h__
+	
+	Bool StgDomain_Finalise( void );
+	
+#endif /* __Domain_Finalise_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/Init.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/Init.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,62 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+#include <StgDomain/Geometry/Geometry.h>
+#include <StgDomain/Shape/Shape.h>
+#include <StgDomain/Mesh/Mesh.h>
+#include <StgDomain/Utils/Utils.h>
+#include <StgDomain/Swarm/Swarm.h>
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool StgDomain_Init( int* argc, char** argv[] ) {
+	int tmp;
+	
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	tmp = Stream_GetPrintingRank( Journal_Register( InfoStream_Type, "Context" ) );
+	Stream_SetPrintingRank( Journal_Register( InfoStream_Type, "Context" ), 0 );
+	Journal_Printf( /* DO NOT CHANGE OR REMOVE */
+		Journal_Register( InfoStream_Type, "Context" ), 
+		"StGermain Discretisation Library revision %s. Copyright (C) 2003-2005 VPAC.\n", VERSION );
+	Stream_Flush( Journal_Register( InfoStream_Type, "Context" ) );
+	Stream_SetPrintingRank( Journal_Register( InfoStream_Type, "Context" ), tmp );
+	
+	StgDomainGeometry_Init( argc, argv );
+	StgDomainShape_Init( argc, argv );
+	StgDomainMesh_Init( argc, argv );
+	StgDomainUtils_Init( argc, argv );
+	StgDomainSwarm_Init( argc, argv );
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/Init.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/Init.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,48 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Represents any construct in the solver that represents state of physics that has a position in space.
+**	Should be base class to Nodes and Particles
+**
+** Assumptions:
+**	Performs all initialisation at the base level
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_Init_h__
+#define __Domain_Init_h__
+	
+	Bool StgDomain_Init( int* argc, char** argv[] );
+	
+#endif /* __Domain_Init_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/StgDomain.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/StgDomain.h	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,54 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	External header file to libDomain.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Domain.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Domain_h__
+#define __Domain_h__
+	
+	#include "Geometry/Geometry.h"
+	#include "Shape/Shape.h"
+	#include "Mesh/Mesh.h"
+	#include "Utils/Utils.h"
+	#include "Swarm/Swarm.h"
+	
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Domain_h__ */
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/src/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/src/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,68 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3681 2006-07-17 00:57:30Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+lib = StgDomain
+libstatic = yes
+libdynamic = yes
+includes = StgDomain
+
+SRCS = \
+	Init.c \
+	Finalise.c
+	
+HDRS = \
+	Init.h \
+	Finalise.h \
+	StgDomain.h
+	
+PROJ_LIBS = 
+PROJ_OBJLISTS = \
+	StgDomainUtils \
+	StgDomainSwarm \
+	StgDomainMesh \
+	StgDomainShape \
+	StgDomainGeometry
+
+EXTERNAL_INCLUDES =
+EXTERNAL_LIBS = ${LAPACK_BLAS_LIBS}
+
+packages = STGERMAIN MPI XML MATH
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+	
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/tests/Makefile.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/tests/Makefile.def	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,38 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libDiscretisation
+
+def_srcs = \
+	testLibDiscretisation.c
+
+def_checks = \
+	testLibDiscretisation.0of1.sh
+
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/tests/makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/tests/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,62 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3982 2007-01-23 03:52:15Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Finds the Absolute path to the Project Root directory
+SHELL := /bin/bash
+	PROJ_ROOT := $(shell until test -r ./Makefile.system ; do cd .. ; done ; echo `pwd`)
+include ${PROJ_ROOT}/Makefile.system
+
+subdirs = 
+
+tests = lib${PROJECT}
+
+SRCS = testLibDiscretisation.c
+
+checks = testLibDiscretisation.0of1.sh
+
+PROJ_LIBS = 
+EXTERNAL_INCLUDES = -I${INC_DIR}/${PROJECT}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStgDomain ${RPATH_LFLAGS}
+
+packages = STGERMAIN MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+ifdef USE_OPTIONAL_MATH
+	# For full tensor math it needs some blas lapack functions only if available
+	packages := LAPACK_BLAS ${packages}
+        ifneq (Darwin,${SYSTEM})
+	       EXTERNAL_LIBS +=  -lg2c
+	endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/tests/testLibDiscretisation.0of1.expected
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/tests/testLibDiscretisation.0of1.expected	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,3 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/tests/testLibDiscretisation.0of1.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/tests/testLibDiscretisation.0of1.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testLibDiscretisation " "$0" "$@"
diff -r 9f22ec4f42ee -r 5667007f4799 libStgDomain/tests/testLibDiscretisation.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libStgDomain/tests/testLibDiscretisation.c	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,83 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibDomain.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgDomain/StgDomain.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			numProcessors;
+	int			procToWatch;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld );
+	MPI_Comm_size( CommWorld, &numProcessors );
+	MPI_Comm_rank( CommWorld, &rank );
+	/* Read input */
+
+	if( !StGermain_Init( &argc, &argv ) || !StgDomain_Init( &argc, &argv )) {
+		fprintf( stderr, "Error initialising StGermain, exiting.\n" );
+		exit( EXIT_FAILURE );
+	}
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	StgDomain_Finalise();
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+Bool LinearAlgebra_Init( int* argc, char** argv[] ) {
+	return True;
+}
+
+Bool LinearAlgebra_Finalise( void ) {
+	return True;
+}
diff -r 9f22ec4f42ee -r 5667007f4799 makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makefile	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,39 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+subdirs = Geometry Shape Mesh Utils Swarm libStgDomain
+
+include ${PROJ_ROOT}/Makefile.vmake
diff -r 9f22ec4f42ee -r 5667007f4799 project-config.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project-config.sh	Wed Oct 10 07:21:38 2007 +0000
@@ -0,0 +1,58 @@
+#!/bin/sh
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: project-config.sh 3959 2007-01-11 02:17:08Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+	emulate sh
+	NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+	set -o posix
+fi
+
+. './build-functions.sh'
+
+setValue PROJECT 'StgDomain'
+
+# Setup Makefile shortcuts
+. ./VMake/Config/makefile-shortcuts.sh
+
+# Do configurations
+# Note: StGermain needs to be before MPI and PETSc, due to the
+# "compatibility" stuff. -- PatrickSunter
+. ./VMake/Config/StGermain-config.sh
+
+. ./VMake/Config/compiler-config.sh
+. ./VMake/Config/math-config.sh
+. ./VMake/Config/xml-config.sh
+. ./VMake/Config/mpi-config.sh
+. ./VMake/Config/blaslapack-config.sh
+. ./VMake/Config/python-config.sh --optional
+
+dumpPkgConfigFile ${BLD_DIR}/lib/pkgconfig



More information about the CIG-COMMITS mailing list